中途多语言适配

1. 前提说明 项目已经处于维护期 项目一开始并没有考虑多语言,所以很多地方都是写死的中文 现在要给这个项目添加多语言适配 2. 工具选择 https://www.npmjs.com/package/i18n https://www.npmjs.com/package/vue-i18n 3. 难点 项目很大,中文可能存在于各种文件中,例如html, vue, js, typescript等等, 人工查找不现实 所以首先第一步是要找出所有的中文语句 4. 让文本飞 安装ripgrep apt-get instal ripgrep 搜索所有包含中文的代码: rg -e '[\p{Han}]' > han.all.md 给所有包含中文的代码,按照文件名,和出现的次数排序: cat han.all.md | awk -F: '{print $1}' | uniq -c | sort -nr > stat.han.md 这一步主要是看看哪些文件包含的中文比较多 按照中文的语句,排序并统计出现的次数: cat han.all.md |rg -o -e '([\p{Han}]+)' | sort | uniq -c | sort -nr > word.han.md 经过上面4步,基本上可以定位出哪些代码中包含中文,中文的语句有哪些。

2022-07-12 22:54:55 · 1 min · Eddie Wang

0 A.D. 一款开发了21年还未release的游戏

1. 我为什么会知道0 A.D. 这款游戏? 最近切换到windows开发,用了scoop这个包管理工具来安装软件,随便逛逛的时候,发现scoop还可以用来安装游戏,然后我就在里面看了一下,然后排名第一的是一个名叫 0 A.D.的游戏,然后我就安装,并试玩了一下。 2. 0 A.D. 这个名字是啥意思? 基督教称耶稣诞生的那年为公元元年, A.D. 就是Anno Domini(A.D.)(拉丁)的缩写,对应的公元前就是而在耶稣诞生之前,称为B.C. Before Christ(B.C.). 我们现在的阳历,例如今年是2022年,这其实就是公元2022年。对应的公元元年,对中国来说,大致在西汉年间。 所以 0 A.D. 其实的意思就是一个不存在的元年。 “0 A.D.” is a time period that never actually existed: 3. 0 A.D. 是什么类型的游戏? 如果你玩过红警,0 A.D.的有点像红警。 官方的介绍0AD是一个基于历史的实时策略游戏。 如果你玩过部落冲突,0AD其实也有点类似部落冲突。 4. 0 A.D. 有什么特点? 跨平台, windows, mac, linux都可以玩 免费 历史悠久,项目开始于2001 还处于开发阶段 可玩性还不错 基于真实历史,所以玩游戏的时候,也是能够学点历史的。里面有是14个文明。 5. 有哪些玩法 单机和AI对战 在线组队玩 6. FAQ 如何设置中文界面 默认的游戏不带中文语言的,实际上它是有中文的语言包的,可以参考 参考 https://baike.baidu.com/item/%E5%85%AC%E5%85%83/17855

2022-07-12 19:32:28 · 1 min · Eddie Wang

请问nginx 能否根据 frag 片段 进行路径转发?

HTTP URL的格式复习 ://:@:/;?#frag scheme 协议, 常见的有http, https, file, ftp等 : 用户名和密码 host 主机或者IP port 端口号 path 路径 params 参数 用的比较少 query 查询参数 frag 片段,资源的一部分,浏览器不会把这部分发给服务端 关于frag片段 浏览器加载一个网页,网页可能有很多章节的内容,frag片段可以告诉浏览器,应该将某个特定的点显示在浏览器中。 例如 https://github.com/wangduanduan/jsplumb-chinese-tutorial/blob/master/api/anchors.js#L18 这里的#L8就是一个frag片段, 当浏览器打开这个页面的时,就会跳到对应的行 在网络面板,也可以看到,实际上浏览器发出的请求,也没有带有frag参数 Vue 在Vue中,默认的路由就是这种frag片段。 这种路由只对浏览器有效,并不会发送到服务端。 所以在一个单页应用中,服务端是无法根据URL知道用户访问的是什么页面的。 所以实际上nginx无法根据frag片段进行拦截。 nginx路径拦截 location [modifier] [URI] { ... ... } modifier = 完全匹配 ^~ 正则匹配,并且必须是以特定的URL开头 ~ 正则匹配,且大小写敏感 ~* 正则匹配,大小写不敏感 nginx路径匹配规则 首先使完全匹配,一旦匹配,则匹配结束,进行后续数据处理 完全匹配无法找到,则进行最长URL匹配,类似 ^~ 最长匹配找不到,则按照 ~或者~*的方式匹配 最后按照 / 的默认匹配

2022-07-09 17:13:13 · 1 min · Eddie Wang

windows 上的命令行体验

我已经有5年没有用过windows了,再次在windows上搞开发,发现了windows对于开发者来说,友好了不少。 首先是windows terminal, 这个终端做的还不错。 其次是一些常用的命令,比如说ssh, scp等,都已经默认附带了,不用再安装。 还有包管理工具scoop, 命令行提示工具 oh-my-posh, 以及powershell 7 加载一起,基本可以迁移80%左右的linux上的开发环境。 特别要说明一下scoop, 这个包管理工具,我安装了在linux上常用的一些软件。 包括有以下的软件,而且软件的版本都还蛮新的。 0ad 0.0.25b games 7zip 22.00 main curl 7.84.0_4 main curlie 1.6.9 main diff-so-fancy 1.4.3 main duf 0.8.1 main everything gawk 5.1.1 main git 2.37.0.windows.1 main git-aliases 0.3.5 extras git-chglog 0.15.1 main gzip 1.3.12 main hostctl 1.1.2 main hugo 0.101.0 main jq 1.6 main klogg 22.06.0.1289 extras make 4.3 main neofetch 7.1.0 main neovim 0.7.2 main netcat 1....

2022-07-09 12:43:14 · 1 min · Eddie Wang

powershell oh-my-posh 加载数据太慢

每次打开新的标签页,Powershell 都会输出下面的代码 Loading personal and system profiles took 3566ms. 时间不固定,有时1s到10s都可能有,时间不固定。 这个加载速度是非常慢的。 然后我打开一个非oh-my-posh的窗口,输入 oh-my-posh debug 看到其中几行日志: 2022/07/09 12:20:23 error: HTTPRequest Get "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v8.15.0/themes/default.omp.json": context deadline exceeded 2022/07/09 12:20:23 HTTPRequest duration: 5.0072715s, args: https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v8.15.0/themes/default.omp.json 2022/07/09 12:20:23 downloadConfig duration: 5.0072715s, args: https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v8.15.0/themes/default.omp.json 2022/07/09 12:20:23 resolveConfigPath duration: 5.0072715s, args: 2022/07/09 12:20:23 Init duration: 5.0072715s, args: 好家伙,原来每次启动,oh-my-posh还去github上下载了一个文件。 因为下载文件而拖慢了整个启动过程。 然后在github issue上倒找:https://github.com/JanDeDobbeleer/oh-my-posh/issues/2251 oh-my-posh init pwsh –config ~/default.omp.json 其中关键一点是启动oh-my-posh的时候,如果不用–config配置默认的文件,oh-my-posh就回去下载默认的配置文件。 所以问题就好解决了。 首先下载https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v8.15.0/themes/default.omp.json 这个文件,然后再保存到用户的家目录里面。 然后打开terminal, 输入: code $profile 前提是你的电脑上要装过vscode, 然后给默认的profile加上–config参数,试了一下,问题解决。 oh-my-posh init pwsh --config ~/default....

2022-07-09 12:31:09 · 1 min · Eddie Wang

windows11 安装 oh my posh

0. 前提条件 系统是windows11 已经安装过powershell 7 安装过vscode编辑器 默认情况下,所有命令均在powershell下执行的 1. 安装 oh my posh 1.2 方式1: 通过代理安装 假如你有socks代理,那么可以用winget安装 打开你的power shell 执行类似下面的命令,来配置代理 $env:all_proxy="socks5://127.0.0.1:1081" 如果没有socks代理,最好不要用winget安装,因为速度太慢。然后执行: winget install JanDeDobbeleer.OhMyPosh -s winget 1.2 方式2: 下载exe,手工安装 再oh-my-posh的release界面 https://github.com/JanDeDobbeleer/oh-my-posh/releases 可以看到很多版本的文件,windows选择install-amd64.exe, 下载完了之后手工点击执行来安装。 https://github.com/JanDeDobbeleer/oh-my-posh/releases/download/v8.13.1/install-amd64.exe 2. 配置 oh-my-posh 在powershell中执行下面的命令,vscode回打开对应的文件。 code $PROFILE 在文件中粘贴如下的内容: oh-my-posh init pwsh | Invoke-Expression 保存文件,然后再次打开windows termial, 输入下面的命令来reload profile . $PROFILE 然后你可以看到终端出现了提示符,有可能有点卡,第一次是有点慢的。但是很多符号可能是乱码,因为是没有配置相关的字体。 3. 字体配置 3.1 安装字体 下载文件 https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Meslo.zip 解压文件 打开设置,在个性化》字体中,将之前下载好的所有字体,拖动到下面的红框中,字体就会自动安装 3.2 windows termial字体配置 用vscode打开对windows termial的配置json文件,在profiles.default.font中配置如下字体 "font": { "face": "MesloLGM NF" } 配置之后,需要重启windows termial...

2022-07-08 13:30:15 · 1 min · Eddie Wang

关于我在闲鱼卖二手这件事

自从我换了新款的惠普战X之后,我的老搭档,2017款的macbook pro, 已经在沙发上躺了很久了。 我拍了拍它的脑袋,对它语重心长的说: 人不能闲着,闲着容易生病,笔记本也是如此。虽然你已经是5年前的mbp了, 但是廉颇老矣,尚能饭否? mbp面无表情,胡子邋遢,朝我瞥了一眼,像是嘲讽,又像是不满,一口气吸掉还剩一点的香烟,有气无力的说:我已经工作五年了,按照国家的法律规定,已经到了退休的年龄,是该享受享受了。 我

2022-07-07 21:34:28 · 1 min · Eddie Wang

最后一篇blog, 是时候说再见了

我最早用过有道,我觉得有道很烂。 后来我开始用印象笔记,我发现印象笔记更烂。不仅界面做的让人觉得侮辱眼睛,即使你开了会员也要看广告。 印象笔记会员被割了韭菜,充到了2026年,但是我最近一两年我基本没有用过印象笔记。 后来我遇到了文档blog界的new school, notion、语雀、飞书, 就完全抛弃了有道和印象笔记的old school。 做任何事情,都需要动机。 写公开博客也是如此。可能有以下原因 提升个人影响力 提高自己的表达能力 知识积累和分享 公开博客需要三方角力,平台方、内容生产者、内容消费者(读者)。 作为内容生产者,我们从选择一个平台是需要很多理由的。可能是UI界面的颜值,可能是一见钟情界面交互。 就像男女的相亲,首先要被外貌吸引,才能有下文。 然而除了那一见钟情的必然是短暂的,除此之外,我发现了另一个重要原因:迁移成本 我以前决定不用印象的时候,印象笔记上还有我将近一千多篇的笔记。虽说印象笔记有导出工具,但是只有当你用的时候,你才能体会导出工具是多坑爹。 假如你一天决定不用这个平台了,你想把所有你产出的内容都迁移出来,你要花费多少成本呢? 很多人都没有考虑过这件事情。 就像温水煮青蛙,只有感觉到烫的时候,青蛙才会准备跳走,但是青蛙还能跳出去吗? 可能他的腿都已经煮熟了吧? 从另外一个方面来说,作为内容生产者,我们要花时间,花精力来写文章,还要花金钱来买平台的会员,然而平台对内容生产者来说,有什么回报呢? 我们只不过是为他人做嫁衣罢了。就像旧时代的长工,只不过在一个大一点的地主家干活了吧。 再见了,语雀。 新的bolg地址: wdd.js.org 我以前没得选,我现在想选择做个自由人

2022-06-30 22:40:56 · 1 min · Eddie Wang

Tshark入门到精通

1. 使用摘要 一个命令的使用摘要非常重要,摘要里包含了这个工具最常用的用法。 要注意的是,如果要用过滤器,一定要放到最后。 tshark [ -i <capture interface>|- ] [ -f <capture filter> ] [ -2 ] [ -r <infile> ] [ -w <outfile>|- ] [ options ] [ <filter> ] tshark -G [ <report type> ] [ --elastic-mapping-filter <protocols> ] 2. 为什么要学习tshark? 一般情况下,我们可能会在服务端用tcpdump抓包,然后把包拿下来,用wireshark分析。那么我们为什么要学习tshark呢? 相比于wireshark, tshark有以下的优点 速度飞快:wireshark在加载包的时候,tshark可能已经给出了结果。 更稳定:wireshark在处理包的时候,常常容易崩溃 更适合做文本处理:tshark的输出是文本,这个文本很容易被awk, sort, uniq等等命令处理 但是我不建议上来就学习,更建议在熟悉wireshark之后,再去进一步学习tshark 3. 使用场景 3.1 基本场景 用wireshark最基本的场景的把pcap文件拖动到wireshark中,然后可能加入一些过滤条件。 tshark -r demo.pcap tshark -r demo.pcap -c 1 # 只读一个包就停止 输出的列分别为:序号,相对时间,绝对时间,源ip, 源端口,目标ip, 目标端口...

2022-06-30 00:00:00 · 1 min · Eddie Wang

Udp Checksum Offload

在服务端抓包,然后在wireshark上分析,发现wireshark提示:udp checksum字段有问题 checksum 0x… incrorect should be 0x.. (maybe caused by udp checksum offload) 以前我从未遇到过udp checksum的问题。所以这次是第一次遇到,所以需要学习一下。 首先udp checksum是什么? 我们看下udp的协议组成的字段,其中就有16位的校验和 校验和一般都是为了检验数据包在传输过程中是否出现变动的。 如果接受端收到的udp消息校验和错误,将会被悄悄的丢弃 udp校验和是一个端到端的校验和。端到端意味它不会在中间网络设备上校验。 校验和由发送方负责计算,接收端负责验证。目的是为了发现udp首部和和数据在发送端和接受端之间是否发生了变动 udp校验和是可选的功能,但是总是应该被默认启用。 如果发送方设置了udp校验和,则接受方必须验证 发送方负责计算?具体是谁负责计算 计算一般都是CPU的工作,但是有些网卡也是支持checksum offload的。 所谓offload, 是指本来可以由cpu计算的,改变由网卡硬件负责计算。 这样做有很多好处, 可以降低cpu的负载,提高系统的性能 网卡的硬件checksum, 效率更高 为什么只有发送方出现udp checksum 错误? 我在接受方和放松方都进行了抓包,一个比较特殊的特征是,只有发送方发现了udp checksum的错误,在接受方,同样的包,udp checksum的值却是正确的。 一句话的解释:tcpdump在接收方抓到的包,本身checksum字段还没有被计算,在后续的步骤,这个包才会被交给NIC, NIC来负责计算。 结论 maybe caused by udp checksum offload 这个报错并没有什么问题。 参考 ● 《tcp/ip 详解》 ● https://www.kernel.org/doc/html/latest/networking/checksum-offloads.html ● https://dominikrys.com/posts/disable-udp-checksum-validation/ ● https://sokratisg.net/2012/04/01/udp-tcp-checksum-errors-from-tcpdump-nic-hardware-offloading/

2022-06-30 00:00:00 · 1 min · Eddie Wang