Monday, August 30, 2021

V2EX - 技术

V2EX - 技术


如何正确配置 vscode Python

Posted: 30 Aug 2021 03:58 AM PDT

我在使用 vscode 过程中老是遇到无法导入自己写的包的情况,搜索后发现是设置 pythonpath 这个环境变量,但看来看去还是一头雾水,而且如果真是 pythonpath 这个环境变量在起作用,岂不是每开一个项目都需要配置一遍,想问问各位有没有一劳永逸的方法,谢谢各位

完全不想接触 前端的样式,有同样的 Java 开发么

Posted: 30 Aug 2021 03:57 AM PDT

最近的工作任务里面,又要写 Java 又要写前端( less,ts ( ps:而且还不会,边学边写)),直接把 Java 当成全沾 使用了,看到前端的那些学习样式文档就看不下去了,裂开。

如何终止一个正在进行的协程?

Posted: 30 Aug 2021 03:57 AM PDT

利用 context.WithCancel()来终止协程,但存在一个问题:cancel()执行后,必须等 for 循环执行完毕 goroutine 才退出。

for {   select {     case <-Ctx.Done():       return     default:       for i := 0; i < 100; i++ {         // 业务逻辑       }   } } 

需求为:cancel()后协程立马退出不再执行后面的循环。
目前我的解决方法:单独起一个协程用来监听退出信号,然后通过全局变量通知业务逻辑循环退出。

flag := false go func() {   for {     select {       case <-Ctx.Done():         flag = true         return   } }()  for i:=0; i < 100; i++ {   if flag {     return   }   // 业务逻辑 } 

请问最佳实践应该是如何退出?

手持 iphoneX, 2021 年 9 月该换什么手机?

Posted: 30 Aug 2021 03:55 AM PDT

日经贴。。。


iphoneX 一出来就买了。应该有 4 年左右吧。

现在的问题是 电池健康只有 78%,刷视频打游戏看直播 感觉耗电速度很快。app 装多了感觉有点卡。

想换个手机,想尝试下安卓,5~6k 范围的就行。 感觉现在 iphone 好贵。大屏幕+256G 都要上万块了。。有点心痛。。。

希望大家能推荐几款 安卓手机? 比我现在的 iPhone x 好就行。

Go 游戏后端微服务后端求推荐

Posted: 30 Aug 2021 03:51 AM PDT

游戏部分服务是有状态的,目前使用的是 go-micro V1 版本,但是只支持到 go1.14 。而 Go 已经更新到了 1.17 ,求游戏同行推荐靠谱的微服务框架。

如何将 list 的值传给函数的可变参数?

Posted: 30 Aug 2021 03:41 AM PDT

救命,肾结石找上我了!

Posted: 30 Aug 2021 03:38 AM PDT

上周四,腰开始隐隐作痛,本以为是腰肌劳损,敷热水袋忍忍过去了。周五晚上又开始疼,对象给我又弄了个热水袋。到凌晨疼得受不了了,起来走也不是,动也不是,哪个姿势都不对。那种感觉是由内而发的疼。4 点多走到早晨 7 点多,顶着黑眼圈,我对象带我去医院了。

是的,我肾结石了。现在悔得不行。老婆让喝水也不喝,每天熬夜敲代码,可乐饮料没有断,饿了就来个泡面。有些时间一加班就到凌晨。一坐就是几个小时,屁股痔疮不说,现在好了。肾结石。今早医生说不行就尽快安排手术,我咨询了下体外碎石。结果说我太胖做不了,而且石头本来就小,不需要碎了,只需要排出去,重点是我输尿管小,石头排得慢。在医院躺了 2 天了,石头才走了 2 厘米,医生说还有十厘米。更难过了。

又咨询了医生,医生说手术。需要插一根管子进去输尿管。我一听,有点害怕,想想还是算了。

说回来肾结石,百度一说,这个疼痛跟生孩子一样,我去,悔死了,真要命。感觉以为自己要挂了。

所以以后加班什么的以后都别叫我了,之前团队内部提过 40 小时工作制,领导觉得我们不想干了。现在长记性了,以后不敢这么玩了。躺在病床上的我敲下这一大串,v 友们,命只有一条,加班慎重,多喝水,多运动。

更搞笑的是请假,领导还要我带着电脑,去他妈的。==!我还是带了。

.net 那边有了 blazor, Java 这边会出类似的东西吗

Posted: 30 Aug 2021 03:33 AM PDT

可视化布局

Posted: 30 Aug 2021 03:09 AM PDT

前言

面向开发者,期望通过可视化生成界面布局的 Low Code 平台,帮助开发者快速生成布局(现在处于开发功能阶段)。

效果图

layout.png

layout2.png

特性

  • 支持键盘事件 [已支持]
    • [Ctrl + c] (复制选中))
    • [Ctrl + v] (粘贴)
    • [Ctrl + Backspace] (删除选中)
    • [Ctrl + z] (返回)
    • [Ctrl + z] (前进)
  • 支持多布局 [已支持]
  • 支持历史操作 [已支持]
  • 支持可视化样式 [开发中]
  • 支持导出代码 [开发中]
  • 支持组件 [未开始]
  • 支持 CSS 单位 (Rem, Vw) [未开始]
  • 支持布局历史存储 [未开始]
  • 支持前端框架标签 [未开始]

项目相关

实现原理

一个节点对应一个 AST 对象,通过操作 AST 对象的属性来触发页面的改变

layout3.png

代码文件

.github ----> github Action 配置 .vscode ----> vscode 配置 (prettier)   src   ---|            |            |          context    ---> 全局上下文          model      ---> 数据层          controller ---> 控制层          pages      ---> 视图          theme      ---> 主题配色 

代码架构

   数据层 ---- 更新 -----> 页面  ---------------> 全局 context ----> 刷新页面     ↑                     |    改变                   操作     |                     |     <————————— 控制 ——————— 

地址

在线地址

项目地址

结束语

期望能够在日常重复业务开发中,快速生成业务的界面结构,目前处于开发阶段,欢迎大家的加入

做了一个应该是全网最全的数据库 glossary 列表

Posted: 30 Aug 2021 03:01 AM PDT

数据库博大精深,其中的术语也是五花八门,前两天花时间做了一个数据库 glossary 的页面,目前收录了 80+的术语,应该是目前全网最全的,之后还会持续更新。

地址👉👉👉 https://bytebase.com/database-glossary

Glossary

前端,把 api 封装到一个文件夹到底有没有必要

Posted: 30 Aug 2021 02:58 AM PDT

最近在改一个 vue 项目,看了很多 api 接口封装的文章,似乎这是主流的处理方式?

于是尝试了一下发现了几个问题。

首先,管理是集中了,不过有点类似于 vuex 的思维方式。看过很多人不提倡把请求放在 vuex 里,而使用就近原则,不过本题的 api 接口封装,虽然只是把一些基本实例写好在导入到模板文件中,但是还是让人感觉到了 vuex 那个味。

其次,修改起来感觉没有独立方便,导入还有改名什么的有点麻烦了,感觉 api 端口修改频率都不如参数的修改高。尤其是需要改名的时候,忘记改一个地方的情况经常发生。

所以想问问,这种方案真的是主流的处理方式嘛?真的有必要嘛?

关于数据库批量多个表的查询

Posted: 30 Aug 2021 02:36 AM PDT

首先需要去一个表中查询动态表的表名,然后对查询到的表进行批量查询(大概十几个,每张表的数据量大概好几十万这样子),这些表没有关联关系,但是属性字段都一样,请问有比较好的的分页查询办法吗 SQL 或者代码层?(视图和存储过程方面,因为最终还不确定使用什么数据库,所以不太好使用)。

“微型业务”用啥数据库软件啊?

Posted: 30 Aug 2021 01:58 AM PDT

这里的"微型业务"大概就是一些访问量很低、仅面向很少数量的用户、跑在低配置机器上的一些用到数据库的网站或服务吧。主要面向于个人或者小团队内部、homelab 。 例如:跑在最便宜的那一档 VPS 的机器上(如:单核 CPU 512M 内存 10G 硬盘)的、树莓派 3 代那个级别的开发板、甚至 openwrt 软路由。

此前看了看 MySQL 、PostgresQL,空闲时占用的内存也挺高的。而 SQLite 似乎在处于鄙视链底端?这才想着来问问。

要求:SQL 数据库、开源。

高龄程序员再就业的问题

Posted: 30 Aug 2021 01:42 AM PDT

没在一线城市工作过,所以也没拿过高薪资,38 岁老程序员,技术栈比较老,主流框架会用但是经验不多,不过编程规范,程序健壮、开发经验肯定够(遇过的问题多啊),且带过项目做过管理,10 年的开发经验,4 年管理,目前一年税后 20K,房子*2 车子*2(三线)都不缺了,无贷款,家庭很稳定,不需要自己太操心,平时也都是出差在外,工作很稳定,就是无论编程还是管理都已干的很疲倦了,薪资也封顶了,创业缺少资源,就想去一线城市再打拼一下,找一下开发激情,随带着再多赚点钱,毕竟 20 多岁梦想就是去大城市(因为机缘最终还是转悠在二三线城市干外包),一待十几年就过去了。如果换工作(非外包)应聘个高级开发工程师给个 30K+是否还有机会?

有没有办法 hash 一个 object?

Posted: 30 Aug 2021 01:37 AM PDT

标题写简单了,实际目的是"识别"一个 object,例如一个函数,依据不同参数,获得不同的唯一识别
需求是写个 cache,但 @chahe 是内存的,程序结束就销毁了,我需要 pickle 到外部储存,下次运行时,依据该函数的不同参数读取

寻求一个思路

用 Node 轻松完成一个 TCC 分布式事务,保姆级教程

Posted: 30 Aug 2021 01:25 AM PDT

什么是 TCC,TCC 是 Try 、Confirm 、Cancel 三个词语的缩写,最早是由 Pat Helland 于 2007 年发表的一篇名为《 Life beyond Distributed Transactions:an Apostate's Opinion 》的论文提出。

TCC 组成

TCC 分为 3 个阶段

  • Try 阶段:尝试执行,完成所有业务检查(一致性), 预留必须业务资源(准隔离性)
  • Confirm 阶段:如果所有分支的 Try 都成功了,则走到 Confirm 阶段。Confirm 真正执行业务,不作任何业务检查,只使用 Try 阶段预留的业务资源
  • Cancel 阶段:如果所有分支的 Try 有一个失败了,则走到 Cancel 阶段。Cancel 释放 Try 阶段预留的业务资源。

TCC 分布式事务里,有 3 个角色,与经典的 XA 分布式事务一样:

  • AP/应用程序,发起全局事务,定义全局事务包含哪些事务分支
  • RM/资源管理器,负责分支事务各项资源的管理
  • TM/事务管理器,负责协调全局事务的正确执行,包括 Confirm,Cancel 的执行,并处理网络异常

如果我们要进行一个类似于银行跨行转账的业务,转出( TransOut )和转入( TransIn )分别在不同的微服务里,一个成功完成的 TCC 事务典型的时序图如下:

image.png

TCC 网络异常

TCC 在整个全局事务的过程中,可能发生各类网络异常情况,典型的是空回滚、幂等、悬挂,由于 TCC 的异常情况,和 SAGA 、可靠消息等事务模式有相近的地方,因此我们把所有异常的解决方案统统放在这篇文章《分布式事务最经典的七种解决方案》的子事务屏障环节进行讲解

TCC 实践

下面我们进行一个 TCC 事务的具体开发

目前可用于 TCC 的开源框架,主要为 Java 语言,其中以 seata 为代表。我们的例子采用 nodejs,使用的分布式事务框架为 dtm,它对分布式事务的支持非常优雅。下面来详细讲解 TCC 的组成

下面我们来编写具体的 Try/Confirm/Cancel 的处理函数

router.post('/api/TransOutTry', (ctx, next) => {   console.log("TransOutTry")   ctx.body = { result: "SUCCESS" } }).post('/api/TransOutConfirm', (ctx, next) => {   console.log("TransOutConfirm")   ctx.body = { result: "SUCCESS" } }).post('/api/TransOutCancel', (ctx, next) => {   console.log("TransOutCancel")   ctx.body = { result: "SUCCESS" } }).post('/api/TransInTry', (ctx, next) => {   console.log("TransInTry")   ctx.body = { result: "SUCCESS" } }).post('/api/TransInConfirm', (ctx, next) => {   console.log("TransInConfirm")   ctx.body = { result: "SUCCESS" } }).post('/api/TransInCancel', (ctx, next) => {   console.log("TransInCancel")   ctx.body = { result: "SUCCESS" } }) 

到此各个子事务的处理函数已经 OK 了,然后是开启 TCC 事务,进行分支调用

async function FireTcc() {   let dtm = "http://localhost:8080/api/dtmsvr" // dtm 服务地址   let svc = "http://localhost:4005/api" // 本地服务前缀   // 开启一个 tcc 事务,第二个参数里面,写全局事务的逻辑   await dtmcli.tccGlobalTransaction(dtm, async (t) => {     let req = { amount: 30 } // 子事务需要的负荷     console.log("calling trans out")     // 注册事务分支,并调用分支中的 Try     await t.callBranch(req, svc + "/TransOutTry", svc + "/TransOutConfirm", svc + "/TransOutCancel")     console.log("calling trans in")     // 注册事务分支,并调用分支中的 Try     await t.callBranch(req, svc + "/TransInTry", svc + "/TransInConfirm", svc + "/TransInCancel")   }) } 

至此,一个完整的 TCC 分布式事务编写完成。

如果您想要完整运行一个成功的示例,那么参考这个例子 yedf/dtmcli-node-sample,将它运行起来非常简单

# 部署启动 dtm # 需要 docker 版本 18 以上 git clone https://github.com/yedf/dtm cd dtm docker-compose up  # 另起一个命令行 git clone https://github.com/yedf/dtmcli-node-sample cd dtmcli-node-sample npm install node . 

TCC 的回滚

假如银行将金额准备转入用户 2 时,发现用户 2 的账户异常,返回失败,会怎么样?我们给出事务失败交互的时序图

image.png

这个跟成功的 TCC 差别就在于,当某个子事务返回失败后,后续就回滚全局事务,调用各个子事务的 Cancel 操作,保证全局事务全部回滚。

小结

在这篇文章里,我们介绍了 TCC 的理论知识,也通过一个例子,完整给出了编写一个 TCC 事务的过程,涵盖了正常成功完成,以及成功回滚的情况。相信读者通过这边文章,对 TCC 已经有了深入的理解。

关于分布式事务更多更全面的知识,请参考《分布式事务最经典的七种解决方案》

文中使用的例子节选自yedf/dtm,支持多种事务模式:TCC 、SAGA 、XA 、事务消息 跨语言支持,已支持 golang 、python 、Java 、PHP 、nodejs 等语言的客户端,参考各语言 SDK。提供子事务屏障功能,优雅解决幂等、悬挂、空补偿等问题。

阅读完此篇干货,欢迎大家访问https://github.com/yedf/dtm项目,给颗星星支持!

写过 Java jsp,写过 vue 这可以称为全栈工程师嘛

Posted: 30 Aug 2021 12:57 AM PDT

看到公司 hr 收集的简历里有个《会写 jsp 》
写过 jsp 时代的 javaer
现在最近几年的都是用 vue 写后台管理
面试的岗位是全栈
是他理解有什么问题还是我理解有什么问题嘛

Go 轻量级,高性能,低成本日志系统,适合小团队及个人项目

Posted: 30 Aug 2021 12:06 AM PDT

提到日志系统最先想到的就是 ELK 。但是对于小团队或者个人使用,它的成本是否太高昂了???

如果只是针对 Go 语言的项目,或许还有另外一种比较低成本的解决方案。

额外成本只有 Mongodb, 就能做到快捷的 日志收集 /查看 /报警 /统计

Qelog https://github.com/bbdshow/qelog

关于写入性能:

1.取决于 Mongodb 的批量写入上限

2.不同的模块是写入到不同的分片集合,所以在容量索引建立都有极大的优势

3.客户端实现的 异步,日志批量压缩写入,节约 IO

PS: 不严谨测试 单点( 4C/8G 本地 Mongodb )可做到 13W+/s 日志写入

对于集群部署,写入能力取决于背后集群配置了多少 Mongodb 节点。理论可一直横向扩展

关于读取性能

1.我们都知道 Mongodb 使用不当比较占用资源,特别是贪婪内存模型,导致吃了内存就不在下降了,通过存储使用优化,索引优化,查询限制优化,我们不必担心多用户查询导致 Mongodb 的内存上升。

2.因为时时写入,所以日志几乎没有读取延迟

关于管理后台:

1.部署 Admin 进程,就可直接使用。写入权限取决于是否创建模块名(内网没有过多的权限拦截)。

2.只有简单的登录权限,没有其他的权限限制,因为定位,所以没必要搞复杂的权限模型。

目前该项目已经有上百 TB 的写入数据了,稳定性是可以保证,即便日志服务异常挂掉,也不影响使用进程的运行状态,Client 端也会重新 Push 日志。

关于设计和功能和使用帮助请看 https://github.com/bbdshow/qelog 谢谢

如果您觉得对你的项目有帮助,可以收藏一下,在使用过程中有问题就可以提 Issue

极少发帖,有不足之处还请谅解

请教一个 vscode 打开 gradle 项目和 lombok 的问题

Posted: 30 Aug 2021 12:01 AM PDT

vscode 的 ssh remote 确实很好用。以前一直是在 idea 下工作,idea 装 lombok 插件,打开 annotation 支持,打开项目目录,自动识别 gradle 依赖。。。但是貌似直接用 vscode 打开识别不了,然后 vscode 装了 lombok 插件,也还是识别不了。。。不知道各位大神是怎么解决的。。。

关于 RTSP 协议, iptables 策略。有个奇怪的现象。

Posted: 29 Aug 2021 11:58 PM PDT

找的 iptv 源 ,rtsp 协议,端口 554 。

光猫 防火墙开高时,iptv 不能正常播放,比较了下 高和中的 iptables 策略区别。多了个

-A FWD_FIREWALL -i br+ ! -o br+ -j DROP



-A FWD_IPFLT -i br+ -p tcp -m tcp --dport 443 -j ACCEPT
-A FWD_IPFLT -i br+ -p tcp -m tcp --dport 80 -j ACCEPT
-A FWD_IPFLT -i br+ -p tcp -m tcp --dport 21 -j ACCEPT
-A FWD_IPFLT -i br+ -p udp -m udp --dport 53 -j ACCEPT
-A FWD_IPFLT -i br+ -p tcp -m tcp --dport 53 -j ACCEPT


直接在 forward 里 加 iptables 策略,用的I插到最前面。
iptables -I FORWARD -i br+ -p tcp --dport 554 -j ACCEPT
不通,
抓包看看,服务器有响应包。只与 554 端口通信。
很奇怪

再改  iptables -I FORWARD -i br+ -p tcp -j ACCEPT,放开所有来自 br 的 tcp 包。
可以了。

随便找一个 HTTP 协议的 服务器,端口 888,
用 iptables -I FORWARD -i br+ -p tcp --dport 888 -j ACCEPT
可以正常通信。

请问 RTSP 有什么特殊之处?

有没有人遇到这个问题... PHP array index 同时存在 int 和 string, 这个时候 0 == 任何字符串, 这是为什么?

Posted: 29 Aug 2021 11:53 PM PDT

已知解决: =====

例子

<?php $arr = [     'hello'  => 'world',     'world' => 'hello',     'what'  => 'the hell',     '0'        => 'zero in string key',     0         => 'zero in int key',     1         => 'one in int key', ];  var_dump($arr);  foreach($arr as $k => $v){     echo '-------------------'.PHP_EOL;     echo ($k=='hello'? '√': 'X').' | '.$k .'==hello'.PHP_EOL;     echo ($k=='world'? '√': 'X').' | '.$k .'==world'.PHP_EOL;     echo ($k=='what'? '√': 'X').' | '.$k .'==what'.PHP_EOL;     echo ($k=='0'? '√': 'X').' | '.$k .'==0'.PHP_EOL;     echo ($k=='1'? '√': 'X').' | '.$k .'==1'.PHP_EOL; } 

输出:

array(5) {   ["hello"]=>   string(5) "world"   ["world"]=>   string(5) "hello"   ["what"]=>   string(8) "the hell"   [0]=>   string(15) "zero in int key"   [1]=>   string(14) "one in int key" } ------------------- √ | hello==hello X | hello==world X | hello==what X | hello==0 X | hello==1 ------------------- X | world==hello √ | world==world X | world==what X | world==0 X | world==1 ------------------- X | what==hello X | what==world √ | what==what X | what==0 X | what==1 ------------------- √ | 0==hello √ | 0==world √ | 0==what √ | 0==0 X | 0==1 ------------------- X | 1==hello X | 1==world X | 1==what X | 1==0 √ | 1==1 

关于 Mi11 播放 B 站 60FPS 视频掉帧的问题

Posted: 29 Aug 2021 11:38 PM PDT

之前一直被 B 站的掉帧问题困扰,看 60fps 视频时不时就肉眼可见的掉帧。不知道除了小米,其他手机是不是也有这个问题?

现象

  • 播放 B 站任意 60FPS 的视频,帧数在 45 ~ 61 之间波动。
  • 播放 Youtube 视频则稳定在 59 ~ 61,甚至 2160P 也一样可以稳定在 60+-1

观测方式

打开 [开发者选项-功耗检测-Frame Rate Monitor Tools ] ,然后播放视频观察帧率波动。
尝试了自带的录屏,但是发现录屏出来的视频非常卡,播放的视频掉帧时,录屏就会卡,遂作罢。

版本

Mi11 12/256,MIUI 12.5.11.0,实际上这个掉帧的问题已经存在多个版本了。

解决方案

切换到 Bilibili 概念版,貌似没有了掉帧的问题

想在 mac 上写一个脚本,连上有线或 Wi-Fi 时自动执行某些命令

Posted: 29 Aug 2021 10:47 PM PDT

目前想的步骤如下:

  1. 获取网络变化状态
  2. 获取连接的网络标识
    • Wi-Fi (已有命令 /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I | awk '/ SSID:/ {print $2}'
    • 有线网络标识
  3. 当是相应的网络标识时,执行某些命令

步骤 1 和获取有线网络标识暂时没办法,求教大佬支招

求推荐壁纸软件~

Posted: 29 Aug 2021 08:27 PM PDT

我连了两台显示器,一台横屏,一台竖屏,想分别自适应展示不同的桌面壁纸并自动更换,可目前试用了几个壁纸软件,都只能默认设置主显示器的壁纸,另一台就自动剪裁填充了。。。看起来分辨率就降低了,并且两台显示器显示的图片都是一样的。。。求 v2er 们推荐一款可以自动换壁纸并分别为横屏和竖屏设置不同壁纸的软件~

联通 APP 隐私问题

Posted: 29 Aug 2021 02:01 PM PDT

COOKIE 中带手机号和身份证号
certNum xxxxxxxxxxxxxxxxxx
custId 130xxxxxxxx

要是手机丢了,访问 APP 可以直接知道卡号主人身份证

简体中文版 Google 香港似乎不再强制启用安全搜索

Posted: 29 Aug 2021 11:27 AM PDT

在我看来,计算机是一种流行文化。。。

Posted: 29 Aug 2021 11:21 AM PDT

在我看来,计算机是一种流行文化。流行文化只在乎认同感和参与感,活在当下,而从不关心合作,过去或者未来。我认为大部分为金钱而编写代码的人也是如此。他们不了解他们的文化来自哪里。
---Alan Kay,接受美国 Dr.Dobb 杂志采访( 2012 )


摘自:《数据密集型应用设计》

程序员,想学习 web 安全,从 owasp 入手怎么样?有有经验的大佬给点建议吗?

Posted: 29 Aug 2021 09:30 AM PDT

UC 浏览器播放视频隐藏控制条

Posted: 29 Aug 2021 09:29 AM PDT

视频播放希望像 gif 一样,隐藏时间放大这些功能! Uc 上就是不行!看了下 kvs-demo ,ph 站 视频的预览播放不会显示,但是技术太菜,看不太懂 有不有大佬会的啊

No comments:

Post a Comment