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" } ...

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

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

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

2022-06-30 22:40:56 · 1 分钟 · 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, 目标端口 3.2 按照表格输出 tshark -r demo.pcap -T tabs 3.3 按照指定的列输出 例如,抓的的sip的包,我们只想输出sip的user-agent字段。 ...

2022-06-30 00:00:00 · 1 分钟 · 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 分钟 · Eddie Wang

Wireshark 附带的19命令行程序

大多数时候我们都是图形界面的方式使用wireshak, 其实一般只要你安装了wireshark,同时也附带安装了一些命令行工具。 这些工具也可以极大的提高生产效率。 本文只是对工具的功能简介,可以使用命令 -h, 查看命令的具体使用文档。 1. editcap 编辑抓包文件 Editcap (Wireshark) 3.6.1 (v3.6.1-0-ga0a473c7c1ba) Edit and/or translate the format of capture files. 举例: 按照时间范围从input.pcap文件中拿出指定时间范围的包 editcap -A '2014-12-10 10:11:01' -B '2014-12-10 10:21:01' input.pcap output.pcap 2. androiddump 这个命令似乎可以用来对安卓系统进行抓包,没玩过安卓,不再多说。 Wireshark - androiddump v1.1.0 Usage: androiddump --extcap-interfaces [--adb-server-ip=<arg>] [--adb-server-tcp-port=<arg>] androiddump --extcap-interface=INTERFACE --extcap-dlts androiddump --extcap-interface=INTERFACE --extcap-config androiddump --extcap-interface=INTERFACE --fifo=PATH_FILENAME --capture 3. ciscodump 似乎是对思科的网络进行抓包的,没用过 Wireshark - ciscodump v1.0.0 Usage: ciscodump –extcap-interfaces ciscodump –extcap-interface=ciscodump –extcap-dlts ciscodump –extcap-interface=ciscodump –extcap-config ciscodump –extcap-interface=ciscodump –remote-host myhost –remote-port 22222 –remote-username myuser –remote-interface gigabit0/0 –fifo=FILENAME –capture ...

2022-06-30 00:00:00 · 3 分钟 · Eddie Wang

vfs_cache_pressure和min_free_kbytes对cache的影响

环境 kernal Linux 5.15.48-1-MANJARO #1 SMP PREEMPT Thu Jun 16 12:33:56 UTC 2022 x86_64 GNU/Linux docker 20.10.16 初始内存 total used free shared buff/cache available 内存: 30Gi 1.9Gi 19Gi 2.0Mi 9.6Gi 28Gi 交换: 0B 0B 0B 初始配置 sysctl -n vm.min_free_kbytes 67584 sysctl -n vm.vfs_cache_pressure 200 vfs_cache_pressure的对内存的影响 vfs_cache_pressure设置为200, 理论系统倾向于回收内存

2022-06-29 06:57:56 · 1 分钟 · Eddie Wang

manjaro 安装 packettracer

# 将会下载packettracer到当前目录下 yay -G packettracer cd packettracer # Download PacketTracer_731_amd64.deb to this folder makepkg sudo pacman -U packettracer-7.3.1-2-x86_64.pkg.tar.xz 注意,如果下载的packetraacer包不是PacketTracer_731_amd64.deb, 则需要修改PKGBUILD文件中的, souce对应的文件名。 例如我下载的packettracer是Cisco_Packet_Tracer_811_Ubuntu_64bit_cf200f5851.deb source=('local://Cisco_Packet_Tracer_811_Ubuntu_64bit_cf200f5851.deb' 'packettracer.sh') 注意:最新版的packertracer打开后,必须登陆账号才能使用,有点坑。 花费点时间注册了账号后,才能用。 参考 https://forum.manjaro.org/t/how-to-get-cisco-packet-tracer-on-manjaro/25506/5

2022-06-15 18:54:11 · 1 分钟 · Eddie Wang

Linux内核参数rp_filter

问题现象 主机上有两个网卡ens192和ens224。ens129网卡是对内网络的网卡,ens224是对网网络的网卡。 SIP信令阶段都是正常的,但是发现,对于来自node3的RTP流, 并没有从ens192网卡转发给node1上。 sequenceDiagram title network autonumber node1->>ens192: INVITE ens224->>node2: INVITE node2->>ens224: 200 ok ens192->>node1: 200 ok node1->>ens192: ACK ens224->>node2: ACK node1-->>ens192: RTP out ens224-->>node3: RTP out node3-->>ens224: RTP in 抓包程序抓到了node3发送到ens224上的包,但是排查应用服务器的日志发现,似乎应用服务器根本没有收到node3上过来的包, 所以也就无法转发。 因而怀疑是不是在内核上被拦截了。 后来通过将rp_filter设置为0, 然后语音流的转发就正常了。 事后复盘 node3的这个IP直接往应用服务器上发包,可能会被拦截。因为在信令建立的阶段,应用服务器并没有主动发 在kernel文档上 rp_filter - INTEGER 0 - No source validation. 1 - Strict mode as defined in RFC3704 Strict Reverse Path Each incoming packet is tested against the FIB and if the interface is not the best reverse path the packet check will fail. By default failed packets are discarded. 2 - Loose mode as defined in RFC3704 Loose Reverse Path Each incoming packet's source address is also tested against the FIB and if the source address is not reachable via any interface the packet check will fail. Current recommended practice in RFC3704 is to enable strict mode to prevent IP spoofing from DDos attacks. If using asymmetric routing or other complicated routing, then loose mode is recommended. The max value from conf/{all,interface}/rp_filter is used when doing source validation on the {interface}. Default value is 0. Note that some distributions enable it in startup scripts. 参考 https://www.jianshu.com/p/717e6cd9d2bb https://www.jianshu.com/p/16d5c130670b https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

2022-06-13 00:00:00 · 1 分钟 · Eddie Wang

mysql placeholder的错误使用方式

Error EXTRA *mysql.MySQLError=Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘? ( 然而我仔细看了看sql语句,没有看出来究竟哪里有sql报错。 然而当我把作为placeholder的问号去掉,直接用表的名字,sql是可以直接执行的。我意识到这个可能是和placeholder有关。 搜索了一下,看到一个链接 https://github.com/go-sql-driver/mysql/issues/848 Placeholder can’t be used for table name or column name. It’s MySQL spec. Not bug of this project. 大意是说,placeholder是不能作为表名或者列名的。 在mysql关于prepared文档介绍中,在允许使用prepared的语句里,没有看到create table可以用placeholderhttps://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html prepared语句的优点有以下几个 优化查询速度 防止sql注入 但是也有一些限制 不是所有语句都能用prepared语句。常见的用法应该是作为select where之后的条件,或者INSERT语句之后的值 不支持一个sql中多条查询语句的形式

2022-06-11 23:51:34 · 1 分钟 · Eddie Wang

WebRTC 人声检测与舒适噪音

人声检测 VAD 人声检测(VAD: Voice Activity Detection)是区分语音中是人说话的声音,还是其他例如环境音的一种功能。 除此以外,人声检测还能用于减少网络中语音包传输的数据量,从而极大的降低语音的带宽,极限情况下能降低50%的带宽。 在一个通话中,一般都是只有一个人说话,另一人听。很少可能是两个人都说话的。 例如A在说话的时候,B可能在等待。 虽然B在等待过程中,B的语音流依然再按照原始速度和编码再发给A, 即使这里面是环境噪音或者是无声。 A ----> B # A在说话 A <--- B # B在等待过程中,B的语音流依然再按照原始速度和编码再发给A 如果B具有VAD检测功能,那么B就可以在不说话的时候,发送特殊标记的语音流或者通过减少语音流发送的频率,来减少无意义语音的发送。 从而极大的降低B->A的语音流。 下图是Wireshark抓包的两种RTP包,g711编码的占214字节,但是用舒适噪音编码的只有63字节。将近减少了4倍的带宽。 舒适噪音生成器 CNG 舒适噪音(CN stands for Comfort Noise), 是一种模拟的背景环境音。舒适噪音生成器在接收端根据发送到给的参数,来产生类似接收端的舒适噪音, 用来模拟发送方的噪音环境。 CN也是一种RTP包的格式,定义在RFC 3389 舒适噪音的payload, 也被称作静音插入描述帧(SID: a Silence Insertion Descriptor frame), 包括一个字节的数据,用来描述噪音的级别。也可以包含其他的额外的数据。早期版本的舒适噪音的格式定义在RFC 1890中,这个版本的格式只包含一个字段,就是噪音级别。 噪音级别占用一个字节,其中第一个bit必须是0, 因此噪音级别有127中可能。 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |0| level | +-+-+-+-+-+-+-+-+ 跟着噪音级别的后续字节都是声音的频谱信息。 Byte 1 2 3 ... M+1 +-----+-----+-----+-----+-----+ |level| N1 | N2 | ... | NM | +-----+-----+-----+-----+-----+ Figure 2: CN Payload Packing Format 在SIP INVITE的SDP中也可以看到编码,如下面的CN ...

2022-06-01 08:27:53 · 2 分钟 · Eddie Wang