Saturday, July 24, 2021

V2EX - 技术

V2EX - 技术


没忍住,把主力机的系统升到了 Win 11(附图)

Posted: 24 Jul 2021 04:36 AM PDT

前言

个人实测升级需要半个多小时,截至发帖时需要切换到 Dev 频道(即 Fast Ring )获取更新。

展示图

↑ 桌面及任务栏 (迫真 Macindows )

↑ 文件资源管理器(左边可以直接看到 WSL 文件系统的入口了,不用再敲 \\wsl$\Ubuntu 了)

↑ 系统版本

↑ 设置

↑ 开始菜单

↑ 任务管理器界面没有太大变化

↑ 右键菜单


其他的等以后有时间了再补充吧。

已知问题

这是我使用时遇到的一些问题 / 感觉不舒服的地方

  • UAC 弹窗翻译错误
  • 窗口的圆角有锯齿
  • 微信 / QQ / TIM 等腾讯系软件最小化没有动画效果
  • 动态磁贴没了
  • 仍然没有旗帜类表情

待补充...

后记

(话说像我这种只体验不反馈的人是不是就算在浪费微软服务器带宽啊

分享下这个月想到的手机号更换后也要换绑的重要 app 有哪些 也麻烦 V 友看看还有没有缺漏

Posted: 24 Jul 2021 04:07 AM PDT

要注销大学期间的手机号了


实现一个简易的接口预警系统有什么好方式

Posted: 24 Jul 2021 03:35 AM PDT

我是一个 web 方。硬件会每隔 30s 就发送一次心跳(curl ) GET 的方式到我 web 网站。 目前我想记录每个设备编号发送的心跳是否稳定,是否有时候长达两分钟也没有发送心跳。 或者请求我系统某些系统 api 出错了。 然后我 web 系统发出一个预警,有什么好的方式实现吗

用 vim 编辑 Git commit,展示 diff 信息

Posted: 24 Jul 2021 12:34 AM PDT

先把自己的 git editor 设为 vim

git config --global core.editor vim 

简单的方法:

git config --global commit.verbose true 

或者

git commit -v 

采用 verbose commit 方式,diff 信息都显示在下方,不方便查看,如果能显示在另外 split 就更好了,可以用 committia.vim 这个插件,安装插件以后,git commit 效果如下图所示:

Link: https://jdhao.github.io/2021/07/24/git_show_diff_when_commiting/

大概两年前号称不限速的曲奇云盘(quqi.com)还是倒了 速度上成功升级为百度云级别

Posted: 24 Jul 2021 12:34 AM PDT

宣传上每人 2T 去年还可以创建每个 250G 的群组空间
2020 年 存了 38G 的文件进去 想着放一年再回来看看
现在花了 5 小时 第一个 700M 文件重试了两次才下回来
速度最高 100KB/s 最低 0.2KB/s 飘忽不定
相比之下 年初也往阿里云放了一点文件 现在依然满速

win11 的 Edge 在 i7-11800H 上 Speedometer 2.0 跑到 195 了

Posted: 24 Jul 2021 12:17 AM PDT



机械革命 z3 air 3050 版本,Windows 22000.100 ,之前 Windows10 20h2 大概在 170 左右。

这两天在用 vue3+typescript 重构一个 vue2 项目,但是 props 的类型检查真的好弱...

Posted: 24 Jul 2021 12:12 AM PDT

说是重构,基本上算是重写了.不过由于用了 tailwindcss,还好都只是写了些静态页面.

今天正准备开始写逻辑,最后这 typescript 的支持程度,我真的是写不下去了.

今天准备赶紧切换到 react.

无意引战!!!

无意引战!!!

无意引战!!!

只是我没搞懂为什么 vue3 对 typescript 的支持这么差...

例如下面的写法,关于 props 类型检查,这种写法我看着真的蛋疼.

export default defineComponent({     props: {         message: {             type: Object as PropType<FlashInterface>,             required: true         }     },     setup(props) {             // Stuff         } });  

后来我又想了想,可能是因为.vue 模板的原因导致的,因为在<template>模板里面 this.$emit 都要被 vscode 红线报错.

所以,如果要愉快的使用 vue3,我觉得 vue3+js 可能才是最好的选择.

还有,我是业余前端,以上观点请轻喷.

idea maven 加入 dependency 后 external libraries 只出现自身,没有出现他的依赖

Posted: 23 Jul 2021 10:05 PM PDT

idea maven 加入一个 dependency 后 external libraries 只出现自身,没有出现他的依赖 。
请问 哪边还需要配置下让 external libraries 里面出现其他相关依赖? 这个 dependency 是我另外一个项目 maven install 到本地的。

go 语言, ftp 问题求助

Posted: 23 Jul 2021 07:00 PM PDT

我需要使用 go 语言封装一下 ftp 的上传下载功能,使用 https://github.com/jlaffaye/ftp 这个包,但是遇到了一个棘手的问题。

ftp 服务器使用的是 filezilla server,并且开启了"require TLS session resumption on data connection when using PROT P" 选项。

因此就出现了一个错误,450 TLS session of data connection has not resumed or the session does not match the control connection 。

如果将 filezilla server 的那个选项取消勾选就可以正常连接,但是同事说不能取消勾选,需要这个选项。而且即使这个选项开着,python 也是可以正常连接的,只是 go 语言不行。

哎,网上搜遍了也找不到解决这个问题的方法,v2 藏龙卧虎,发出来看看会不会有奇迹发生。

EmacsTalk 第五期:与 Emacs 高手陈斌闲聊 Emacs

Posted: 23 Jul 2021 06:00 PM PDT


本期节目请来了一位使用 Emacs 近十年的资深用户陈斌 ,他是著名文章《一年成为 Emacs 高手》的作者,同时也是一位拥有近二十年软件开发经验的前辈。

抵触 Emacs 近十年后,陈斌用一年时间就成为了 Emacs 高手,他是怎么做到的?是什么样的契机让他打开了 Emacs 这个潘多拉魔盒?

作为一个拥有众多插件的开源软件维护者,如何处理用户的不满?如何调节生活与维护的压力?陈斌给出了自己的答案。 此外,节目里还聊到了 Emacs 与 VSCode/Vim 等开发理念上的区别,学习这些软知识,非常有助于加深对 Emacs 的理解。近一个半小时的内容,"湿货"十足,不容错过!

本期人物

时间轴

  • 00:00:42 嘉宾自我介绍
  • 00:03:34 为什么会去写《一年成本 Emacs 高手》文章
  • 00:08:18 学习 Emacs 多久后,开始写《一年成本 Emacs 高手》文章
  • 00:10:16 Emacs 为什么不那么"开箱即用"
  • 00:12:54 嘉宾是如何探索出学习 Emacs 最佳实践的
  • 00:15:36 嘉宾列举的一些 Emacs 技巧
  • 00:21:30 Emacs 的开放性,与其他编辑器的区别,"乱" VS "自由"
  • 00:26:31 嘉宾学习 ELisp 的经历
  • 00:30:02 嘉宾对维护开源项目的态度
  • 00:39:35 嘉宾对新手的建议
  • 00:43:53 嘉宾现在的 Emacs 工作流
  • 00:54:11 Emacs 在 Windows 上为什么性能差
  • 01:01:58 Emacs 核心开发团队是怎么样的
  • 01:08:13 嘉宾对入行新人的建议
  • 01:13:20 推荐环节

Show Notes

  • 嘉宾介绍
    • 名字:陈斌
    • 19 年工作经验,最早桌面开发,现在以 web 开发为主
    • 知乎专栏:如何提高编程速度
  • 入坑经历
    • 2011 年开始接触 Emacs,当时大概 40 岁
    • 吃了半年苦头后,无意间发现了 Steve Purcell 的配置,才开始真正掌握其要领
  • Emacs 技巧分享
    • 在项目中查找文件 find-file-in-project
    • ELisp API 多,不同插件之间可以相互调用
  • Elisp 学习经历
    • 潜移默化,没有特意去学
  • 对待开源的态度
    • 佛系,软件一开始往往都是不完美的,逐渐去完善就好
  • 对新手学习 Emacs 的建议
  • 现在的工作流
  • Emacs 核心开发团队介绍
  • 对新入行新人的建议
    • 不要把眼光局限在一小块领域,可以学些人文 /艺术等来提高自己的品味
  • 嘉宾的分享
    • evil 可同时掌握 Emacs 与 Vim,而且还能彻底解决小指痛的问题
    • abo-abo 大神的 ivy + swiper + counsel 全家桶
    • vc-msg 显示当前行的 git 信息
    • evil-matchit 在成对的 tag 间进行跳转
  • 主播的分享
    • macOS 上的程序启动器 Raycast,类似与 Alfred,但是免费,且支持剪贴板📋管理
  • 片尾音乐:https://music.163.com/#/song?id=1380302523

Get in Touch

V 友们,绷不住了,分享下我们学校暑假请的培训机构老师写的珍贵代码,这就是占用我 20 天老师的代码水平,

Posted: 23 Jul 2021 12:16 PM PDT

V 友们,绷不住了,分享下我们学校暑假请的培训机构老师写的珍贵代码,这就是占用我 20 天老师的代码水平,
https://gitee.com/organizations/hainingtong/projects
,有兴趣的看一下,重点在这个 core 模块.

中国佳明开发者

Posted: 23 Jul 2021 10:11 AM PDT

聚焦中国区佳明开发问题,更多问题请前往 Garmin forums: https://forums.garmin.com/developer/connect-iq/f/discussion

安全区域该怎么理解?

Posted: 23 Jul 2021 08:54 AM PDT

处于非执行状态的线程,例如 BLOCKED 、SLEEP 状态,无法响应虚拟机的中断请求,不能执行到安全点挂起,所以引入了安全区域。

不过处于这种状态的线程本身就不会导致引用关系发生改变吧?这个安全区域就是线程挂起时给虚拟机发个通知,线程恢复时检查枚举根节点是否结束,这样理解对吗?

书里说安全区域是一段代码,执行这段代码时引用关系不会发生变化,搞得我有点转不过来弯,已经挂起的线程还怎么执行到安全区域?让线程挂起的代码段就是安全区域的意思吗?

Windows 11 Build 22000.100 发布了

Posted: 23 Jul 2021 05:31 AM PDT

  • 推出聊天功能,不是每个人都会马上看到。
  • 任务栏右下方的溢出菜单已经更新,更符合 Windows 11 的新视觉效果。(注意:更新到这个版本后,它可能看起来不对,在两个主题之间切换将纠正这个问题)。

  • 增加了直接从通知中心快速访问 Focus 辅助设置的功能。

  • 当一个应用程序的后台活动需要注意时,该应用程序会在任务栏上闪烁。在 Windows 11 中,我们对这一设计进行了更新,使其仍能吸引您的注意力,但采用了平静的处理方式,最大限度地减少了无端的分散注意力。闪烁最终会停止,你会看到一个略带红色的背景和应用程序图标下的红色小横杆。

  • 任务栏中的触摸键盘图标已被调整为与任务栏角落的其他图标的大小更加一致。
  • 点击任务栏日历顶部的小角按钮,任务栏日历弹出的部分将完全折叠,为你的通知提供更多空间。
  • 微软商店更新,我们使新的微软商店中的导航感到快速和有趣。当你选择一个你感兴趣的应用程序或电影时,你可能会注意到一些动画,帮助你跟踪你正在浏览的内容。试一试吧,我们希望你和我们一样喜欢它。

  • 修复了点击任务栏上的日期和时间按钮时导致 Explorer.exe 崩溃的问题。

HTTP3/QUIC 性能测试与配套组件

Posted: 22 Jul 2021 01:14 PM PDT

背景

最近一年很多关于 QUIC 的文章层出,但是发现一个问题,这些文章都是在介绍 QUIC 或 HTTP3 是怎样的一个东西,以及它的优点和机制,将它夸的近乎上天了。然而有心的人估计会亲手做一些测试,就会发现这个被捧上天的东西性能居然还不如 HTTP1.1,这是怎么回事呢?

最近我一直在做 QUIC 或者说 HTTP3 的相关工作,就一直在憋着写这样一篇文章,给和我当初有同样疑问的人一种变相的解答。

测试

测试很简单,分为两台机器,均在同一局域网内。服务器使用 Nginx 的 QUIC 分支版本,即 nginx-quic 。客户端使用 h2load (支持 HTTP3 版本的)做基准测试工具。在服务端使用 netem 模块对网络状况进行操控,模拟不同的网络环境。请求无请求体,响应体为 Nginx 默认 612 字节首页文件,那么简单来看下测试结果吧:

h2load 的参数如下:-t 10 -c 100 -n 1000 -m 100,即 10 线程、100 个连接、1000 个请求,每个连接可以同时处理 100 个请求。

HTTP 版本 延迟 丢包率 重复率 包损毁率 结果
HTTP1.1 - - - - 总耗时 406.49ms, 24601.15 req/s QPS,21.30MB/s 每秒传输
HTTP3 - - - - 总耗时 611.90ms, 16342.59 req/s QPS,12.98MB/s 每秒传输
HTTP1.1 100ms+-10 - - - 总耗时 1.90s, 5275.52 req/s QPS,4.57MB/s 每秒传输
HTTP3 100ms+-10 - - - 总耗时 3.65ms, 2740.22 req/s QPS,2.18MB/s 每秒传输
HTTP1.1 - 30% - - 总耗时 33.64s, 297.28 req/s QPS,263.60KB/s 每秒传输
HTTP3 - 30% - - 总耗时 19.82s, 504.45 req/s QPS,447.31KB/s 每秒传输
HTTP1.1 - - 70% - 总耗时 443.55ms, 23065.39 req/s QPS,19.97MB/s 每秒传输
HTTP3 - - 70% - 总耗时 419.98ms, 23810.43 req/s QPS,18.92MB/s 每秒传输
HTTP1.1 - - - 20% 总耗时 14.46s, 691.61 req/s QPS,613.27KB/s 每秒传输
HTTP3 - - - 20% 总耗时 4.12s, 2424.55 req/s QPS,1.93MB/s 每秒传输
HTTP1.1 100ms+-10 30% - - 总耗时 30.64s, 326.42req/s QPS,289.44KB/s 每秒传输
HTTP3 100ms+-10 30% - - 总耗时 17.16s, 582.89 req/s QPS,474.19KB/s 每秒传输
HTTP1.1 - 30% 70% - 总耗时 2.03s, 4914.90 req/s QPS,4.26MB/s 每秒传输
HTTP3 - 30% 70% - 总耗时 3.06s, 3264.89 req/s QPS,2.59MB/s 每秒传输
HTTP1.1 - 30% - 20% 慢到没结果...
HTTP3 - 30% - 20% 总耗时 15.09s, 662.75req/s QPS,539.16KB/s 每秒传输

在这份测试结果中我给出的都是典型值,当然我也对这些值都做过大小调整看结果。从这份结果我们可以看出如下结论:

  1. 单独提高延迟并不会出现 HTTP3 性能优于 HTTP1.1 的情况。
  2. 丢包率的增加会使得 HTTP3 对 HTTP1.1 的性能优势明显增加。
  3. 单独提升包重复率 HTTP3 对 HTTP1.1 的性能仅有微弱的优势。
  4. 单独提升包损毁率会明显提升 HTTP3 对 HTTP1.1 的性能优势。
  5. 延迟与其他因素同时出现不会对整体结果造成更大的影响。
  6. 包重复率与损毁率(或丢包率)是一组对立项,丢包或损毁导致可用包减少,但重复率又填补了这一损失,导致结果倾向 HTTP1.1 更优。

从上述结论中我们可以看到,并非任何时候 HTTP3 都优于 HTTP1.1,但对弱网高丢包率、包损的情况下,QUIC 或者说 HTTP3 的优势就非常明显了,这得益于其 FEC 机制和连接复用机制。然而生活中,弱网的环境其实非常多,例如地铁换站、电梯、部分楼宇内、以及一些网络覆盖不全面的城镇等等。因此 QUIC 更多的是一个对整体网络的兜底策略。

因此,如果使用 nginx-quic 的默认配置将所有的请求都升为 HTTP3 版本是不明智的,因为常规情况下 HTTP1.1 的性能优势是不可视而不见的。这也就引入了下一小节的组件。

组件

由上面的结论,我们发现并非对每一个请求都升级是一个明智之举,因此就有了这个 Nginx 模块对版本升级进行自动化控制——ngx_http_autoquic_module

这个模块会根据 TCP 的网络状况来决定是否需要将 HTTP 版本升至 HTTP3 版本。而根据 QUIC 的统计情况来判断是否需要降级至 HTTP1.1 版本。由于降级并不像升级那样平滑,因此对降级增加了开关,让使用者可以选择是否允许降级。

目前对于浏览器,可以很好地支持升降级。但对于众多客户端而言,升降级与否还要看客户端所使用的 HTTP 库的处理逻辑。

感谢阅读,期待诸位的评论。

No comments:

Post a Comment