Sunday, June 26, 2022

V2EX - 技术

V2EX - 技术


QQ 出现大规模盗号情况

Posted: 26 Jun 2022 06:19 PM PDT

26 日晚上 11 点左右,我的 QQ 便开始陆续收到好友私聊或者群聊发来的不明图片,直到凌晨 3 点左右这种情况还在持续。

有被盗号的同学说,他在空间看到别人分享的链接,点进去后,QQ 就开始向各种好友发送带有网址的不良图片。QQ 设备锁是打开的,没有在别的地方输过密码,QQ 也未提示异地登录。

有传闻说是学习通的密码泄漏造成了 QQ 被撞库,不知真实性如何。

QQ 空间里有 api 可以向好友发送分享信息。我的猜想可能是链接中有 CSRF ,或者是利用了某些 XSS 的漏洞,绕过了登录,自然设备锁也起不到效果。不知猜的对不对。

另外,这次盗号的规模还挺大的,但因为发生在深夜,很多人都睡着了,号主没察觉到,群主也没撤回消息。年级群的不雅图片还在,不知老师早晨看到会有何感想…

域名续费哪家比较便宜可靠

Posted: 26 Jun 2022 06:13 PM PDT

国内,国外的都有哪些比较便宜的域名续费?

国外域名有个潜在问题,就是无法备案?

Linux 高分屏缩放方案(分数缩放)

Posted: 26 Jun 2022 06:07 PM PDT

这几天安装了 Ubuntu22 ,笔记本屏幕分辨率是 2k 的,似乎 linux 对高分屏的适配不是很好。

如果默认 100% 缩放,界面和字体会太小看不清,但是 200%比例缩放又太大了。如果用启用分数缩放(fractional scaling),在 x11 下窗口拖动时会画面会撕裂。在 wayland 下没有这个问题,GTK 应用能适配分数缩放,画面锐利,但是像 QT 应用和 intellij 家的应用比如 pycharm ,显示效果会很模糊。

虽然可以通过添加环境变量让 QT 应用适配 wayland ,但是会出现一些其他问题,比如在应用里鼠标大小不一致,UI 界面不一致。electron 和 chrome 也可以添加启动参数,但是没有 x 下稳定,总是 crash 。

想问问各位有什么解决(替代)方案吗?

发现 Edge 开始比 Chrome 好用一些了

Posted: 26 Jun 2022 06:06 PM PDT

自 Chrome99 以来,开始间断地尝试使用 Edge ,到如今 103 完全切换到 Edge 。Chrome 的几次更新添加的诸如搜索标签页,显示侧边栏,分享此页功能,都十分难用或鸡肋,且不可关闭或隐藏,Edge 则正相反。且由于国内的网络环境,Chrome 上的标签页几乎无法与手机联动,翻译也时灵时不灵。

虽然现在 Edge 是基于 Chromium ,但是 UI 布局和图标尺寸比 Chrome 协调。Chrome 看上去像旧版 VS 编译出的程序,两个浏览器 UI 面积相同,但是 Chrome 的菜单和图标都显得更小。个人体验相同的功能,Edge 的更顺手。

Edge 不仅与 Chrome 共通插件,自带的沉浸式阅读器与页面朗读功能也比插件市场中的要强。能识别更多的网页,并转换成适合阅读的模式。个人感觉在 Chromium 的基础上,Edge 的交互比 Chrome 优化的更好。不知道大家是否也有同感。

现在开发安卓,是用 Kotlin,fluter, Java 还是 uniapp ?

Posted: 26 Jun 2022 06:05 PM PDT

如果重新写一个 app ,该选择哪个?

有经验的人聊聊。

请不要说喜欢哪个用哪个这种没有价值的话。毕竟都没用过。对比是为了选择。

怎么控制右手小指实现盲打

Posted: 26 Jun 2022 05:54 PM PDT

keybr.com 练习打字的时候,发现纯英文打字的时候盲打没问题,但是平时写代码时遇到特殊符号,感觉盲打比较困难,主要时感觉右手小指要控制的区域太多了, 右手小指要移动区域太大了。参照这张图

生成一些包含特殊符号字符串练习,感觉实现盲打很困难

你为什么做开源软件?

Posted: 26 Jun 2022 05:48 PM PDT

相信很多人都开源过自己的软件,不过每个人的开源初衷可能都不一样,有的人是为了学习,有的人为了自用,还有的是为了帮助身边的朋友们,那你做开源软件初衷是什么?

欢迎一起来聊聊。

有大佬在 web3.0 相关的公司工作吗 能分享下经历吗

Posted: 26 Jun 2022 05:39 PM PDT

纯小白,眼看 web3.0 火了这么久了,也有很多公司在招人,好奇有大佬在相关的公司工作吗,具体会做什么呢,web3.0 有什么实际的应用呢?

你们坐久了会不会肩痛?每次坐久了,两肩之间部分就刺痛,据说是肩胛骨问题。

Posted: 26 Jun 2022 02:54 PM PDT

你们坐久了会不会肩痛?每次电脑前坐久了,两肩之间部分就刺痛,据说是肩胛骨问题。

每次痛起来,我要把两肩使劲向后,才能减轻。

我怀疑是我椅子太矮了,桌面就比较高,两只手臂的高度也更高,就长期这么架着,可能也有点影响。

我如果做程序员的话吗,是不是要给自己配吧好的椅子呢,大家也可以推荐我一些。

如何看待封闭开发?

Posted: 26 Jun 2022 02:00 PM PDT

有几个同事下月中旬要封闭开发了

想问下大家,文件太多了,怎么分类比较好,用了什么工具

Posted: 26 Jun 2022 01:40 PM PDT

想问下大家,一个程序员自己的电脑,文件怎么分类好,文件太多了,包括工作上的文件、一些资源以及软件等,我知道大家都有自己的一套分类规则,在这里就想看下大家是怎么分类的,或者是大家用什么工具来分类比较好。

这是我的一套分好了类的文件夹目录,有多级,可以囊括我大部分文件,但总觉得不足。oyp.lanzoub.com/iTgIa06yfg4b

如何用高性价比组 raid 0?

Posted: 26 Jun 2022 12:41 PM PDT

想组个 4 盘的 raid0 当高速存储,数据安全性要求不高,日常手动备份,希望能够用高性价比高的折腾一番,目前了解到有几个方案:

1.买现成的阵列柜,海鲜市场二手的五六百一台

2.因为主板本身支持 raid ,但机箱硬盘仓位不足,需要换机箱

3.去海鲜市场买台二手服务器,自带阵列卡和硬盘仓

有没有折腾过 raid 的老哥现身说法一下,哪种方案比较推荐?

Bitwarden 有些页面无法填充,有什么解决办法?

Posted: 26 Jun 2022 12:00 PM PDT

在使用 git 时的一些尴尬场景里的修复方案

Posted: 26 Jun 2022 11:53 AM PDT

https://ohshitgit.com

还有一个简体中文的翻译版本:

https://ohshitgit.com/zh

自动驾驶汽车用的是什么操作系统?

Posted: 26 Jun 2022 10:54 AM PDT

Linux 是抢占式,应该不行的吧

据说应该用实时系统

那是否有某种类似于 Linux 的开源操作系统,成为业界标准

请高人指点一下

本人前端,突然对自动驾驶感兴趣,求指教

smtp 的邮件协议的安全性

Posted: 26 Jun 2022 10:39 AM PDT

就我这小白今年学会的几项技巧来说,smtp 似乎太不安全,比如说,这协议本身,通过 swaks 套件就可以仿造任何域名发出的邮件;关于密码、加密,hydra 可以无限爆破,没有被拦截的意思,是协议本身的问题无法再补漏洞进行安全设置吗?

VSCode 是否有任何插件可以让 Markdown 在右侧预览的时候可以支持 - [ ] / - [x] 这样的 To Do 语法?

Posted: 26 Jun 2022 10:35 AM PDT

怎么方便全局维护 token, , 有效期二个小时, 快过期的时候主动发请求更新

Posted: 26 Jun 2022 09:56 AM PDT

用什么方案能优雅的实现, 有很多份 token 需要维护, 用定时任务的话, 得设置成千上万个

求一个 windows 下好用的 word 软件

Posted: 26 Jun 2022 09:34 AM PDT

主要要求就适配了 win11 圆角就可 页面尽量好看点

iPhone 8p 太宽了,打了两三年的王者荣耀,竟然有点腱鞘炎的感觉

Posted: 26 Jun 2022 09:07 AM PDT

敲代码 6 7 年也没个腱鞘炎,竟然玩游戏玩出来了,我试了国产的安卓手机,都挺窄的,应该更适合这类游戏

[水一贴]很迷茫 or 怎么入行?

Posted: 26 Jun 2022 08:55 AM PDT

背景:lz 我年近 30 了,学历还是高中,早些年中学也是学霸数一数二那种,后来高三和学校出了点事离开学校休学自己准备的高考,最终三本的分数我志愿都不填也不复读,直接走上社会混了。

回想这几年挺失败的,到头来发现个人能力、资源没啥进步,从事销售业务,现如今经济都不好也挺难不像以前那么稳当的月收入了,特别今年自己有躺平的趋势,无论是大的经济环境还是公司内部提成政策的调整导致再怎么努力,同样的付出收益也小的可怜,现在其实很担心失业,虽然有 leader 给我话说要留也是留我下来。

房子、车子都没有,在老家的房子不缺,不过在这个一线城市房子是不敢想的了,当下我最迷茫的还是工作,以及假如失业了能做什么,真的没有头绪,就很期待一份稳定收入的、符合自己兴趣的工作,如果有机会,我也不想再做业务了。或许去开各种快车?(但苦于驾照去年刚拿还没满三年呢) 之所以混这个论坛,对技术的一些东西是有兴趣,但是不知道从哪里开始学习、发力,平日里工作生活中,需要的解决方案,自己找各种技术文档能够基本独立解决(如图的帖子这段时间的一些分享、求助),比如 FRP 、v2ray 、自己的博客、还有更多的倾向一些小聪明的工具(诸如 kali linux 上的)。现在没学历没技术,感觉生活好难啊,我这样的能够入行吗?

https://ibb.co/SK4Q2Wx

服务端流式渲染 iOS 中踩坑记

Posted: 26 Jun 2022 08:54 AM PDT

原文链接(查看演示视频更友好): https://github.com/xiaoxiaojx/blog/issues/37

近期 IOS 客户端反映 WebView 中打开 h5 页面存在明显的白屏时间, 于是打算把后端接口延时高(> 150ms )的 h5 项目由现在的 SSR 改成 html 请求达到 Node 时率先返回构建时生成的骨架屏 html 主体, 然后再异步请求后端接口数据, 获取到接口数据后再追加到 html 响应流中。这样 Node 能够 1ms 内响应实际内容让用户先看到页面框架, 通过内网并发聚合的接口数据也能让客户端直接复用这部分数据更快展示出最终屏。

按理来说 h5 不再受限于后端接口的响应时长, 能够第一时间渲染出骨架屏页面, 但是体验后白屏时间好像没怎么缩短? 最后反复删减代码测试发现了一个残酷的现实 👇

IOS WKWebView 不支持流式渲染(分块渲染), 安卓 WebView 与 PC Chrome 是支持的。

即表示 IOS 中会等待 html 请求彻底结束后才开始渲染, 如下是安卓与 IOS 中的效果演示视频,希望其他同学不要再踩坑 🤯

https://user-images.githubusercontent.com/23253540/174447134-25daa11b-0be8-4330-85b7-e464c14f6047.mp4

https://user-images.githubusercontent.com/23253540/174447157-8ccc2be4-52fe-4d67-a11d-d4701677aa5d.mp4


2022-06-20 更新,经过大佬提醒,IOS 中如果返回的 data 是普通文本文字,或返回的数据中包含普通文本文字,那只需要达到非空 200 字节即可以触发渲染,详细见 iOS 之深入解析 WKWebView 加载的生命周期与代理方法

https://user-images.githubusercontent.com/23253540/174550696-cb3b54df-6db1-4aff-8adb-b60258461b20.mp4

所以 IOS chrome 与 safari 也是支持流式渲染(分块渲染),App 中没有效果是有效内容没有达到 200 字节 (innerText)

h5 页面首屏文字等内容达到 200+ 字节还是较少的,设置为 display: none 来凑数的 div 不会被计数进去,相关代码实现见

// https://github.com/WebKit/webkit/blob/main/Source/WebCore/page/FrameView.h#L975  static const unsigned visualCharacterThreshold = 200; 
// https://github.com/WebKit/WebKit/blob/ed7fed17c5ac886890859f1fc8682dba06424616/Source/WebCore/page/FrameView.cpp#L4685  void FrameView::checkAndDispatchDidReachVisuallyNonEmptyState() { // ... // The first few hundred characters rarely contain the interesting content of the page.         if (m_visuallyNonEmptyCharacterCount > visualCharacterThreshold)             return true; }  void FrameView::incrementVisuallyNonEmptyCharacterCount(const String& inlineText) {     if (m_visuallyNonEmptyCharacterCount > visualCharacterThreshold && m_hasReachedSignificantRenderedTextThreshold)         return;      auto nonWhitespaceLength = [](auto& inlineText) {         auto length = inlineText.length();         for (unsigned i = 0; i < inlineText.length(); ++i) {             if (isNotHTMLSpace(inlineText[i]))                 continue;             --length;         }         return length;     };     m_visuallyNonEmptyCharacterCount += nonWhitespaceLength(inlineText);     ++m_textRendererCountForVisuallyNonEmptyCharacters; } 

2022-06-26 更新,最后给 body 标签插入了一个塞了 200 个空格字符的 div 来强制 WKWebView 进行刷新缓存实时渲染,经过一周多的测试,白屏时间明显减少甚至不见!

const IOS_200 = `<div style="height:0;width:0;">\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b</div>` 

把服务端渲染 SSR 改为现在的预渲染+接口聚合还有什么其他优势吗?

新的预渲染+接口聚合架构在公司 CDN 基建支持的情况下,不就是天然的 ⚡️ ESR (边缘流式渲染方案) 么 ~

Unexpected Keyboard,适合程序员的屏幕键盘

Posted: 26 Jun 2022 08:10 AM PDT

在 F-Droid 发现 Unexpected Keyboard ,用起来有点爽。特别是配合 Termux ,连快捷按钮都可以屏蔽了。然后果断卸载了曾经一直使用的 Hacker's Keyboard 。

其特点如下:

1 )利用按键的四个方向滑动,加上点击,实现一个按键最多 5 种输入,因此 33 个按键实现绝大部分的代码输入需求。另外,长按是实现连续输入。

2 )回归 Android 起始时代的 apk 大小。只有 162KB ,安装完占 388KB 。与现代 apk 相比,几乎不占空间。

3 )支持 Android 1.6 以上,可以说,所有 Android 系统可跑。我记得 HTC G1 是有 Android 1.6 版的官方系统。

缺点是不支持中文输入。

最后附上 F-Droid.org 的下载地址: https://f-droid.org/zh_Hans/packages/juloo.keyboard2/

MacOS 是否有类似 mobaXterm 下的跳转机(jump host)和多窗口执行(MultiExec)功能的终端?

Posted: 26 Jun 2022 07:15 AM PDT

看了一堆,也没找到合适的。

  • tabby 没有 MultiExec ,没有 jump host
  • Termius 有 jump host ,没有 MultiExec ,而且还容易断开
  • Royal TSX 没有 MultiExec ,jump host 的功能一直没调好
  • Rayon - SSH Server Toolbox 没有 jump host ,没有 MultiExec

如何像微信那样具有长效的后台消息通知

Posted: 26 Jun 2022 05:05 AM PDT

  • 我首先在 MainActivity 的 oncreate 里调用了 val intent =Intent(this,MyService::class.java) startForegroundService(intent) 启动了服务
  • 又在 MyService 里的 onStartCommand 中调用了以下函数
        val job = Job()         val mCoroutineScope = CoroutineScope(job)         val notification = NotificationCompat.Builder(service, "1")             .setContentTitle("test")             .setSmallIcon(R.drawable.ic_action_name)             .setAutoCancel(true)         startForeground(1,notification.setContentText("")             .build())         stopForeground(true) 

最后创建了一个协程,在协程中从服务器获取最新消息并通知 具体过程如下:

mCoroutineScope.launch{ while(true) { val content = 从网络中获取消息 val notfi = notification.setContentText(content)                         .setContentIntent(pending)                         .build() notificationManager.notify(id, notfi) } } 

我的问题是: 启动服务后,把 app 拉到了后台,当服务运行一会后,消息就不会再弹出,就需要再次进入 app 界面,消息又开始弹出,如此往复。并不能像微信那样拉到后台后,后台服务不会暂停,消息会及时的弹出。

个人博客 搜索博文

Posted: 26 Jun 2022 04:54 AM PDT

大家好, 我想弄一个人博客, 不过我比较关注的点就是一旦博文数量上去了, 那么搜索就成了一个自己使用很频繁的功能, 就算自己把博文都分好了类, 但是也逃不过搜索真香, 所以我想问问有啥免费且好用点的搜索工具可以集成到个人博客中?

就我目前知道的几个搜索方案:
1. 使用 github 的 issues;
2. 使用浏览器的搜索关键词功能, 不过得配合一个包含所有博文标题的导航页面;
3. 借助平台的搜索功能(博客园之类的);

感觉都差点意思, 还有其他方案吗?

新手请教一个 kubeam init 初始化错误问题

Posted: 26 Jun 2022 04:23 AM PDT

在腾讯云上执行

一直抛错

I0626 11:20:46.944977  213753 round_trippers.go:553] GET https://公网 IP:6443/healthz?timeout=10s  in 4 milliseconds I0626 11:20:46.944977  213753 round_trippers.go:553] GET https://公网 IP:6443/healthz?timeout=10s  in 4 milliseconds I0626 11:20:46.944977  213753 round_trippers.go:553] GET https://公网 IP:6443/healthz?timeout=10s  in 4 milliseconds I0626 11:20:46.944977  213753 round_trippers.go:553] GET https://公网 IP:6443/healthz?timeout=10s  in 4 milliseconds 

查看 kubelet 初始化日志,发现是无法找到 master 节点

[root@master docker]# journalctl -xeu kubelet Jun 26 11:23:45 master kubelet[213849]: E0626 11:23:45.843456  213849 kubelet.go:2424] "Error getting node" err="node \"master\" not found" Jun 26 11:23:45 master kubelet[213849]: E0626 11:23:45.939644  213849 event.go:276] Unable to write event: '&v1.Event{TypeMeta:v1.TypeMeta{Kind:"", API>Jun 26 11:23:45 master kubelet[213849]: E0626 11:23:45.943806  213849 kubelet.go:2424] "Error getting node" err="node \"master\" not found" Jun 26 11:23:46 master kubelet[213849]: E0626 11:23:46.044283  213849 kubelet.go:2424] "Error getting node" err="node \"master\" not found" Jun 26 11:23:46 master kubelet[213849]: E0626 11:23:46.145039  213849 kubelet.go:2424] "Error getting node" err="node \"master\" not found" Jun 26 11:23:46 master kubelet[213849]: E0626 11:23:46.245805  213849 kubelet.go:2424] "Error getting node" err="node \"master\" not found" Jun 26 11:23:46 master kubelet[213849]: E0626 11:23:46.335784  213849 controller.go:144] failed to ensure lease exists, will retry in 7s, error: Get "h>Jun 26 11:23:46 master kubelet[213849]: E0626 11:23:46.346915  213849 kubelet.go:2424] "Error getting node" err="node \"master\" not found" Jun 26 11:23:46 master kubelet[213849]: E0626 11:23:46.447024  213849 kubelet.go:2424] "Error getting node" err="node \"master\" not found" Jun 26 11:23:46 master kubelet[213849]: I0626 11:23:46.468192  213849 kubelet_node_status.go:70] "Attempting to register node" node="master" Jun 26 11:23:46 master kubelet[213849]: E0626 11:23:46.472694  213849 kubelet_node_status.go:92] "Unable to register node with API server" err="Post \">Jun 26 11:23:46 master kubelet[213849]: E0626 11:23:46.547873  213849 kubelet.go:2424] "Error getting node" err="node \"master\" not found" 

master 是我本机的 hostname, /etc/hosts 也改成 master 指向公网 IP 了。 请问下大家是出了什么问题?

找一个熟练使用 Python 合作的兼职伙伴

Posted: 26 Jun 2022 04:21 AM PDT

1 、伙伴可以远程、兼职合作; 2 、熟练使用 python 即可,熟练使用 docker 部署加分,有良好的计算机数据结构和常见算法基础更佳; 3 、兼职合作的内容主要是协助我完成一些具体的商业客户需求,比如一些数据分析实践案例的代码实现,比如一些网络数据的整理; 4 、除了商业项目,我还是一个企业大数据应用的咨询、培训师,在培训课程中也需要一些开发工作配合,这样可以帮我分担一部分准备的工作时间,可理解为助教的职能。 5 、希望你,沟通友好,有耐心,对报酬的期待公平合理。

符合以上条件,对兼职感兴趣的小伙伴可以发邮件给我: harry.meng@aliyun.com

自己使用,有没有必要从 esxi 转到 pve?

Posted: 26 Jun 2022 03:32 AM PDT

以前使用 esxi 做了三个从物理机迁移到虚拟平台的机器,大概运行了 2 到 3 年,突然 esxi 平台挂了,无法登录,console 也没有反应,原因不明但幸好数据无恙。后面就把虚拟机转成物理机用了一段时间,

现在想把虚拟机转到 pve 上,追求一个稳定运行和低耗能,初步看了下 pve 涉及的东西还是比 esxi 复杂,想请教一般家用,能够高效率低能耗运行几个从物理机转移过来的系统,都需要开启和设置哪些功能呢?硬件直通?除了 vmdk 格式导入 qve 之外,qve 是否有专门的 p2v 工具呢?或者还有哪些工具可以完成 p2v 的工作,然后哪里有设置这种从物理机到虚拟机的教程呢?

记 Swift async 替换 Combine 实现用户行为计时.

Posted: 26 Jun 2022 03:13 AM PDT

前言

全身心写几个月 swift 了, 第一次不依赖谷歌完全用自己的思路解决的一个小问题, 和大家分享一下, 希望大家能说些难听的话.🙇‍♀️

背景:

聊天软件几乎都有输入框, 配合键盘的唤出, 用于区分编辑状态, 十分符合人类直觉.

微信等聊天软件的通用逻辑是:

  1. 轻点唤醒键盘.
  2. 等键盘完全唤醒, 轻点(或下拉) 撤走键盘.

可是. 等待键盘的过程, 是一个动画, 用户只能看, 无法干预. 有那么半秒钟, 我的手机不听我的了, 自己玩了.

简单来说: "不够丝滑".

「推敲」是允许你这样做的:

https://user-images.githubusercontent.com/101876416/175808976-cd1a4760-609a-497c-afa9-c12c14b1a1f1.mov

解耦出来看这并不难, 但「推敲」的一个核心功能是精准记录单个话语的编辑时长, 如何在暴力驾驶中依然完成精确的编辑计时呢?

聚焦:

丝滑的极致是一切不更新到视图上的进程都不上主线程. 丝滑的代价是一切视图上的进程随时能被干预

最初的实现采用的 Combine 框架, 但我的嗅觉告诉我 Combine 迟早会被弃用, 借这个机会替换掉,只 import swiftUI 和 os.log.

看见了钉子, 选好锤子, 下面就是砸.

思路:

划拉一块内存, 登记为 actor, 叫计时工. 予左手右手各一把章. 用户唤起键盘时左手戳一下, 键盘时他右手戳一下, 用户提交话语的时候双手一拍, 返回总时长.

实现:

计时工入职培训:

**actor** TimingManager {      **private** **var** timeStack:[(Date,Date)] = []      **private** **var** aStart: Date?      **func** onFocus() {          aStart = Date()          logger.debug("onFocus()")      }      **func** endFocus() {          **if** **let** left = aStart {              timeStack.append((left,Date()))              aStart = **nil**              logger.debug("endFocus!")          }      }      **func** handClose() -> Int {          **guard** !timeStack.isEmpty **else** {**return** 0}          logger.debug("\(**self**.timeStack.debugDescription)")          **var** sec: Double = 0          **for** hand **in** timeStack {              sec += hand.1.timeIntervalSince(hand.0)          }          clearHand()          **return** Int(sec)      }      **func** clearHand() {          timeStack.removeAll()      }  } 

计时工的日常工作, 追踪键盘是否抬起.

.onChange(of: focuing) { focuing **in**                          **switch** focuing {                          **case** **true**:                                  Task {                                      **await** viewModel.timeAcotr.onFocus()                                      typerOffset = -340                                  }                          **case** **false**:                                  Task {                                      **await** viewModel.timeAcotr.endFocus()                                      typerOffset = 0                                  }                          }                      } 

计时工的汇报工作:

    **func** submitted() {              **if** aword.text == "" {                  Task { **await** timeAcotr.clearHand() }                      aword = Aword()              } **else** {                  Task {@MainActor **in**                      **await** timeAcotr.endFocus()                      aword.secondSpent += **await** timeAcotr.handClose()                      withAnimation {                          wordsPool.append(aword)                      }                      aword = Aword()                  }              }      } 

最后

我觉得作为一个产品「推敲」已经挺棒了的, 至少已经改善我生活了.

但我甚至不敢在这里 po 个链接.

😮‍💨

如何限制 go 代码引用模块的目录?

Posted: 26 Jun 2022 02:59 AM PDT

一个 mvc 结构的 go 语言项目,正常情况下应该是 controller 层调用 service ,service 调用 model



但是,总有一些屌毛,可能由于紧急情况,可能是懒,在偶尔周末加班等没人 CR 的时候,controller 层调其他 controller 里面的方法,controller 也在调 model 方法。偶尔还他妈 model 调 contrller 代码。刚开始可能就一两处这样写,但是后续的人改这种代码,也只能接着这样写。最终项目崩塌,成为真正的屎山。



很多年前,我在另外一家公司写 php 的时候,我记得当时项目是对代码引用做了限制,如果写出上面这样乱引用代码,提交的时候直接被拒。想请问一下 go 语言里面能否加这种配置呢?在哪加?知道的麻烦给个关键词吧

关于 vim 和 goland 的使用技巧问题

Posted: 26 Jun 2022 02:51 AM PDT

goland 能不能快捷键快速找到实现接口的类?
vim 有没有什么办法快速找到实现接口的类?

以前是开发 java 的, 没有折腾过 golang ,发现这玩意好多东西被阉割了, 很多跳转用不了,界面还没 vim 看起来舒服。

如何在只有项目文件夹的前提下判断该项目基于的 Node 版本和 Yarn 版本?(现在仅知道应该是基于 Yarn 的)

Posted: 26 Jun 2022 12:22 AM PDT

你们的 Linux 系统会使用 apt upgrade 或其它发行版同类命令批量更新软件包吗?

Posted: 25 Jun 2022 11:41 PM PDT

先说说我的情况,我是只有某个软件出现安全问题或新版本有非常吸引我的功能才会手动通过 apt install 更新,出于稳定性考虑从不使用 apt upgrade 批量更新软件。

[国外面试 react 前端程序员失败, 求提高 react 专业水平的方法]

Posted: 25 Jun 2022 11:38 PM PDT

各位大神, 小女应聘国外的 react 前端程序员失败, 求提高 react/js 专业水平的方法:

面试环节概述

面试分为 3 阶段: 初筛, 电话面试, 现场面试. 我失败在现场面试.

现场面试分为: 口答题, 演讲题, 上机题.

口答题: js/html/es6/react 的概念和各种技术问题.

演讲题包括: 展示自己的招牌项目, 讲解其中的技术, 优化, 及曾经遇到的的错误和困难. 详细说明我如何克服和解决错误和困难.

上机题包括: 1. 用 react/redux 做 form 系统等功能块 2. 给出几个代码片段, 补齐功能 3. 给出几个代码片段, 挑错或优化或用不同的新方法实现.

我的面试失败现象:

  1. 有几道涉及 js 的口答题没回答出来, 涉及到 JS 深层原理, 原型链等.

  2. 介绍自己的项目(B2B 电商网站)过于简单, 我还没有做过复杂的有多技术难点的项目.

  3. 上机编程熟练度不够, 经常卡壳.

面试失败原因:

  1. 我没有做过前端, 所有的前端知识都是我业余学的

  2. 我目前水平: 看完 B 站大多数 react 实战项目, 并已经理解但不熟练.

  3. 我拿不出专业的有多技术难点的 React 项目.

我的问题:

1. 我如何能找到专业的有多技术难点的项目? 付费亦可.

2. 有什么课程或培训或服务能解决我上述的面试失败问题? 付费亦可.

3. 有什么专业针对前端面试的书籍或网站或论坛或培训能提高我的面试能力? 付费亦可.

4. 如何系统地提高 react/js 专业水平?

谢谢各位大神!

兼容 tmux 的 trzsz ( trz / tsz ) 发布 1.1.0 版本,支持目录传输。

Posted: 25 Jun 2022 11:21 PM PDT

trzsz ( trz / tsz ) 是一个兼容 tmux 的文件传输工具,和 lrzsz ( rz / sz ) 类似,并且有进度条和支持目录传输。

trzsz 1.1.0 版本已测完并发布,支持目录传输。项目地址:https://github.com/trzsz/trzsz ( 感谢各位 Star 支持 )。

iTerm2 的触发器的配置由 [SR] 改成 [SRD] ,详见文档:https://trzsz.github.io/cn/iterm2 。最好按文档重新配置过。

mac 下 如果 vscode 有更新, 右键打开方式用重复多余的版本

Posted: 25 Jun 2022 10:20 PM PDT

rt 这个问题一直困扰我, 感觉微软家下的两个软件 edge 和 vscode 都会有这样的问题 软件更新后 右键打开方式会存在多个版本的选项 甚至重装系统也无法解决。只要软件更新就会出现一个多的选项 网上搜索的解决方法是 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain user;killall Finder;echo "Open With has been rebuilt, Finder will relaunch" 但是 只是当时去掉了 重启电脑后依然存在 有没有大佬告知下 到底如果处理 或者这是微软家的软件 feature ?

收到了一份来自 GitHub 官方的赞助,开心!

Posted: 25 Jun 2022 09:38 PM PDT

https://twitter.com/luinlee/status/1540475192526647296

早上醒来发现 GitHub 赞助了我 $550 ,虽然不多,但是还是很惊喜。

看 GitHub 的说明( https://github.blog/2022-06-24-thank-you-to-our-maintainers/ ),这次赞助是给到了 900 多个 GitHub 依赖项目的开发者。

请教各位 C++大佬,现在网络通信库满天飞,深入学习网络编程相关的内容是否还有必要?

Posted: 25 Jun 2022 09:24 PM PDT

一直对网络编程比较感兴趣,想深入学习,但是学好了,可能顶多做一个网络通信的中间件出来。

目前 C/C++通信库的轮子已经有很多了,像 libevent 、muduo 、asio 等等。在考虑是否还有必要深入学习这方面的知识。因为人的经历总是有限的。

所以想请教各位大佬:

  1. 如果学好了网络通信方向的知识,有哪些方面的工作可以从事?
  2. 如果不推荐网络通信方向的话,C++目前有哪些推荐的方向?

No comments:

Post a Comment