日常发现(技术方面) 2025-7-26 双塔奇兵mud: telnet 104.239.142.24 8080 2025-7-15 Ken Thompson: 我大学时随波逐流, 我没有野心, 我是一个工作狂, 但我所做的事情没有目标. 贝尔实验室让我去面试, 我拒绝了, 我说我对商业机构工作不感兴趣. 2025-7-6 acme.sh用法: 1. 部署 需要先把nginx上的服务改为80端口 acme.sh --issue --server letsencrypt --nginx -d catlabs.cn -d www.catlabs.cn 2. 安装到nginx acme.sh --install-cert -d catlabs.cn -d www.catlabs.cn \ --key-file /etc/nginx/ssl/catlabs.key \ --fullchain-file /etc/nginx/ssl/catlabs.cer \ --reloadcmd "nginx -s reload" 3. 改nginx配置 server { listen 443 ssl; http2 on; server_name catlabs.cn www.catlabs.cn; root /root/www; autoindex on; autoindex_exact_size off; autoindex_localtime on; add_header Strict-Transport-Security "max-age=63072000" always; ssl_certificate_key /etc/nginx/ssl/catlabs.key; ssl_certificate /etc/nginx/ssl/catlabs.cer; } 4. 测试renew acme.sh --cron --home "/root/.acme.sh" --force 2025-6-12 任正非: 从根本上说,算法不掌握在IT人手里面,而是掌握在电力专家、基建专家、煤炭专家、医药专家、各类行业专家……手里面。 2025-4-18 treap树, 体会到旋转的两个性质: 上下交换, 左右交换. 有序性决定左右, 优先级决定上下. 插入10000节点: avl树 用时3.3ms 重构节点14000 treap树 用时4ms 重构节点40000 平衡度不如avl 2025-4-17 替罪羊树就实用多了, 懒平衡, 而且根本不用什么旋转, 打平再重建多简单. 但是统计后发现, 重构涉及节点数加起来是树大小的2倍. 那还不如全插入完成再rebuild一遍. 如果改成定时重构可能更实用. 而AVL数在插入n个节点后, 旋转涉及到的节点数是1.4n. 插入10000个数性能: 替罪羊树 用时9ms 重构节点20000 AVL树 用时4ms 重构节点14000 看来直觉不一定对, AVL并非徒有虚名. 2025-4-16 在平衡树的基础上实现了SB树, 用来查排名的. 发现还是需要优化下节点高度的查询, 进而发现avl的bug. 我的旋转采用的是原地旋转, 这样不需要改动上级节点. 总结, 看来还是需要存高度的, 不然无法实用. 代价是每次插入都要用logn的时间更新高度和size, 每次旋转后用logn时间更新高度, O(1)时间更新size. 平衡树的实现竟然比B+树还复杂, 平衡树应该用于一次性录入, 无限次查询的场景. 以下是sb树的效果: data: [9,7,5,2,6,10,8,4,3,1] 10(1) 9(3) 8(1) 7(10) 6(1) 5(2) 4(6) 3(1) 2(3) 1(1) rank: 10 2025-4-15 两天实现了AVL树, 还挺费劲. 感觉这个东西大部分时间花在平衡上了. 2025-4-14 终于亲手实现了B+树, 想不到是在学数据库20年后. B+树的插入算法, 就是先找到所属叶节点, 再沿来路回溯. 插入, 如满则分裂, 把分裂后的中值和左右节点插入上级节点. 以下是插入100个随机数后的效果: [50] ...[6,14,19,25,31,38,43] ......[1,2,3,4,5] ......[6,7,8,9,10,11,12,13] ......[14,15,16,17,18] ......[19,20,21,22,23,24] ......[25,26,27,28,29,30] ......[31,32,33,34,35,36,37] ......[38,39,40,41,42] ......[43,44,45,46,47,48,49] ...[58,68,73,80,89,94] ......[50,51,52,53,54,55,56,57] ......[58,59,60,61,62,63,64,65,66,67] ......[68,69,70,71,72] ......[73,74,75,76,77,78,79] ......[80,81,82,83,84,85,86,87,88] ......[89,90,91,92,93] ......[94,95,96,97,98,99,100] 2025-4-12 看来平湖和松江的河运比较发达 https://www.marinetraffic.com/en/ais/home/centerx:121.2/centery:30.8/zoom:10 2025-4-11 im就是个并发日志系统. 2025-4-10 买笔记本, loongArch的龙芯还是x86的Thinkpad或兆芯? 我是更想支持国产的, 或者两个都要.. 很看好zig语言的发展,比rust简洁, 是c语言替代品。 https://ziglang.org/ 2025-4-9 计算机数据结构本质上就是组织与管理. 数据结构不是凭空想象的抽象概念,而是现实世界中“组织事物的方式”的高度提炼。 可以说,每一种经典数据结构,都能在现实中找到对应的“组织方法”。 股票技术分析属于时间序列预测算法. 内存管理策略用于供应链的库存管理. 操作系统就是一个事物调度工具. 图灵机的灵感就是来自于"纸+笔+规则+人脑", 计算机是处理事务复杂性的必然产物, 而做事的方法仍是宇宙通用的. 2025-4-6 InnoDB index 上的并发能力是一个主要的系统瓶颈. Material for MkDocs, 用markdown生成文档网站: https://squidfunk.github.io/mkdocs-material/getting-started/ 试了下将同一个主题的维基百科和百度百科, 用ai融合起来后描述得更好. 2025-4-5 德州扑克AI提示词 请你模仿职业德州扑克选手{Daniel}游戏 参赛人数: {7}, 座位编号从你开始顺时针1~7 大盲注: {10} 当前轮次: {翻牌前} 公共牌: {A, Q, 10} 手中筹码: {1000} 手牌: {红桃5, 黑桃5} 前情: {翻牌前大家选择平跟, 前一轮1号加注, 2号跟} 本轮剩余选手: {2号, 4号, 你} 本轮下注情况: {2号过牌, 4号加注100} 对手筹码: {已下注, 剩余筹码} 对手类型: {2号紧 4号松}, {最近5局弃牌加注次数, 盈利多少} 自己形象: {紧强} 现在轮到你行动, 给出两种方案及概率. 2025-3-23 滑动窗口经常用来解决时序数据的预测问题, 比如TCP, 股票趋势策略, 限流算法. 滑动窗口, 卷积核, 滤波器, 其实是一个东西.. ema就是一维噪声滤波器. 2025-2-21 判定两个集合是否相同的算法: 就是直接比较两个集合的指纹是否相同, 集合的指纹=各元素指纹相加. 文本相似性哈希算法: 提取出文本关键词和权重(TF-IDF), 把权重*关键词的指纹再相加, 加权后的指纹之差一两位, 相似性就>80%. 2025-2-16 信息熵就是不确定性 消除不确定性的办法就是引入信息. 福尔摩斯高明的地方是巧妙找到和问题相关的信息. 而投资反而追求信息熵的最大化, 即最求投资组合的最低相关性. 用相关性(互信息)解决歧义问题. 计算机用到的算法和数学其实是最基础的 2025-2-15 语言这个东西没有固定语法, 就是谁说的多了就按谁. 2025-2-14 不同语言能够翻译, 说明语言只是信息的形式. 提高信息安全性的方法是重复, 冗余. (我认为)文言文是有损压缩. 语言对还是语法对, 事实证明是前者. 早期科学家企图通过语法分析来理解自然语言, 然后发现难度太大, 因为自然语言不像编程语言, 一个词有多个意思, 还严重依赖上下文. 这就说明单纯算法不能理解自然语言. 后来转到基于统计和神经网络的方法就有了质的飞跃. 也就说现代人承认自然语言没有规律性, 把自然语言当成纯信号来处理反而效果更好, 等同于通信技术. WikiTok 用抖音风格制作的维基百科 2025-2-10 现在市面上缺乏研究投资组合的软件. 2024-10-30 突然明白, 编程的本质是规划设计, 设定规则. 绘画,作曲,写作,制定法律,工商管理,无一不是编程. 2024-3-30 ux设计工具: figma, sketch, adobe xd, canva, invision, penpot 2024-2-25 zed编辑器的解析算法很先进,能高亮压缩后的js. 它的算法是tree-sitter增量解析, 而vscode,sublime用的是正则匹配, 速度慢很多. atom也用的tree-sitter. https://www.youtube.com/watch?v=a1rC79DHpmY 2023-11-19 bitmap转svg用的是potrace算法 2023-9-21 mysql DECIMAL类型其实就是大整数, 每9位数用4个字节存储. 2023-9-18 mysql timestamp 中国时区准确范围是 1970-01-01 08:00:01 ~ 2038-01-19 11:14:07 select UNIX_TIMESTAMP('2038-01-19 11:14:08') 在mysql5.7中返回0, 在8.0中会正确返回. 日期和时间戳的字符串格式可以很灵活. 比如select date('000102') 2023-9-14 mysql默认隔离级别用READ-COMMITED就可以了, 除非事物中有用到多次select, 再动态切换为REPEATABLE-READ. READ-COMMITED并发性能强一些, 不容易死锁. 有个细节, golang的BeginTx用的是set transaction isolation level, 如果没有任何SESSION或GLOBAL关键字,该语句将应用于当前会话中执行的下一个事务。后续事务恢复为使用SESSION隔离级别。 set transaction isolation level READ COMMITTED; select @@session.transaction_isolation; // 还是REPEATABLE-READ set session transaction isolation level READ COMMITTED; select @@session.transaction_isolation; // 变为READ COMMITTED SET @@var_name = value; // 这样设置任何变量都只对下次事务生效 奇怪的是并没有办法查询当前事务的系统变量. 实时开启慢查询: set global slow_query_log=1; set global long_query_time=2.0; select @@slow_query_log, @@long_query_time; select sleep(3)+1; tail -f /var/lib/mysql/-slow.log 2023-9-13 mysql8.0 默认sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' 大概意思就是: 开启了严格模式(更严格的group by, 日期不能插入0值, 不能0除, 不能随便切换存储引擎). 感觉默认字符集定为utf8mb4_bin就行了, 大多数情况下不需要忽略大小写. 如果需要忽略大小写, 单独设置就好了. 8.0之后默认用utf8mb4_0900_ai_ci, 更新更准确. 总之就是: utf8mb4_general_ci < utf8mb4_unicode_ci < utf8mb4_unicode_520_ci < utf8mb4_0900_ai_ci 2023-9-11 dolt - 一个可以进行版本控制的mysql数据库 使用场景: 游戏设计, 统计数据 https://github.com/dolthub/dolt 2023-9-10 一种在客户端嵌入本地服务器的前端技术, 没仔细看但感觉很nb https://logankeenan.com/posts/client-side-server-with-rust-a-new-approach-to-ui-development/ 2023-9-2 原来Michael “Monty” Widenius才是MySQL真正的开发者. https://gist.github.com/baymaxium/14bd56835496d03ead3513b6a5d0691a 这个翻译插件很好用 https://immersivetranslate.com/ 2023-6-16 客户端防止接口域名被墙的方法: 发邮件, 更简单就是直接用DNS的MX或TXT记录保存网址, 因为gfw不会直接影响MX记录. 2023-6-15 发布多CPU架构镜像: docker buildx create --name mybuilder docker buildx use mybuilder docker buildx inspect --bootstrap docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/386 -t gamcat/rongnu:latest --push . 2023-6-8 工作中遇到golang append的缺陷, 干了这么多年居然不知道. // 测试append缺陷 func Test1(_ *testing.T) { plain := []byte{1, 1, 1, 1, 1, 1, 1, 1, 1, 1} card_data := plain[:1:1] // 注意这里一定要加上第三个下标, 用来设置切片的容量为1 fmt.Println("slice cap:", cap(card_data)) card_data = append(card_data, 2, 2, 2) fmt.Println("plain:", card_data, plain) } 2023-5-16 dozzle是一个轻量的docker日志查看器, 但似乎只能看实时日志不能看历史日志. 更加强大的日志查看器有papertrail, kibana, loggly. 2023-4-25 Docker镜像只是目录结构不同, 其实还用的同一个linux内核, 同一个cpu arch. 相当于不同的linux发行版和linux内核之间的关系. 同一个image背后其实是打成了各个arch的包. 2023-4-14 TELEGRAM中文包: https://t.me/setlanguage/zhcncc 泛域名证书申请: https://ssl.ioiox.com/ 中国式耳语算法 : 今天在dlib代码中发现他用了一种图聚类算法叫Chinese whispers, 用来识别图片中人脸去重计数. 这种算法用于现代的自然语言处理和人脸识别. 2023-4-10 给win10的git bash安装rsync: https://shchae7.medium.com/how-to-use-rsync-on-git-bash-6c6bba6a03ca 2023-3-11 David Brevik: a Creator of Diablo 从某种意义上说,布雷维克说,《暗黑破坏神》的外观和技术都是直接基于《X-Com》的屏幕截图。 2023-3-10 发现一个非常酷的python代码: >>> g = {} >>> c = compile("o=1", '','exec') >>> exec(c, g) >>> g["o"] 1 http://www.rpscontest.com/rpsrunner.py 2023-3-7 开通了两个博客: 一个是把中文博客翻译给老外看, 一个是把老外博客翻译给中国人看. https://programmer-blog-gems.blogspot.com https://www.cnblogs.com/coder-gems 2023-2-17 WebRTC本质上就是一个音视频的pubsub. 终于弄清了WebRTC的一堆概念是做啥的: * stun就是查询外网IP的. * SFU就是服务端自己代理了一堆客户端. https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API/Connectivity Livekit客户端连接内部流程: 1. client连接websocket地址, websocket只用来交换信令消息, 比如加入退出房间 2. 客户端连上ws之后, 服务端创建房间和参与者, 并发回JoinResponse消息, 里面包含重要的IceServers地址, 也就是config.yaml里配的rtc服务地址, 也既是stun和turn的地址, turn是专门传输音视频流的服务. 3. 接下来就是处理一系列Signal消息了 4. trickle: 客户端告诉服务端, 我要用这个ice_server发布/订阅流, 服务端记下来 5. offer/answer/add_track: 交换sdp信息, 确认双方支持的媒体格式 offer是用来询问对方能否接收我的推流(publish), answer以后调用SetRemoteDescription() 6. SetRemoteDescription: 保存对方客户端信息, 完成呼叫流程, 将ice_server绑定到PeerConnection, 以后就把流转发到该地址. 2023-2-16 关注下openai的主要研发人员: Ilya Sutskever、Barret Zoph、Liam Fedus、Luke Metz、Jacob Menick.. https://www.huxiu.com/article/795210.html 2023-2-15 livekit的multi-region方案还不成熟, 必须远程连redis. 作者确认了这一点. https://github.com/livekit/livekit/issues/630#issuecomment-1430840503 2023-2-14 livekit推流到阿里云cdn: 1. 服务器上安装运行livekit, 注意配上redis 2. 服务器上安装运行egress 3. 阿里云上开通"视频直播", 添加一个推流域名和一个播流域名 4. 用地址生成器生成推拉流地址 5. 用机器人加入房间 livekit-cli join-room --room room1 --identity bot1 --publish-demo 6. 服务器上用livekit-cli命令推流 livekit-cli start-room-composite-egress --request request.json # https://github.com/livekit/livekit-cli 7. 用flv.js播放rtmp拉流地址 http://tv.catlabs.cn/app1/room1.flv?auth_key=1676366556-0-0-6b26f13428009bc0c376b308dac3bed1 2023-2-8 deepl的防爬虫算法太逗了 https://blog.csdn.net/u012516914/article/details/124743697 https://www.sobyte.net/post/2022-04/deepl-api/ 2023-2-7 NTP时间同步算法: org: 客户端发送查询消息的时间 rec: 服务器收到查询消息的时间 xmt: 服务器发出响应消息的时间 dst: 客户端收到响应消息的时间 误差: offset = ((rec-org) + (xmt-dst)) / 2 最终客户端时间 = now + offset 2023-2-6 f.root-servers.net 192.5.5.241 根服务器用的是泛播技术, 同样一个IP在全球有多个节点. https://root-servers.org/ 这个命令可以查到距离自己最近的泛播节点ID: dig @f.root-servers.net hostname.bind ch txt 2023-2-4 用curl测量网站的dns解析时间和tcp连接时间 curl -s -w %{time_namelookup}"\n"%{time_connect}"\n"%{time_appconnect}"\n"%{time_starttransfer}"\n"%{time_total}"\n" https://ws.catlabs.cn/ws time_namelookup: 解析域名所用的时间 time_connect: 建立到服务器的TCP连接所用的时间 time_appconnect: SSL握手时间 time_starttransfer: 在发出请求之后,Web服务器返回第一个字节所用的时间 time_total: 完成请求的总时间 SSL握手还是很耗时的 海外服务器全球线路优化策略: 境外: 用亚马逊DNS+亚马逊CDN 境内: 用国内DNS+香港专线 这个太酷了 https://threejs-journey.com/# 2023-2-3 飞书海外版的域名服务器居然是阿里 dig NS larksuite.com feishu.cn. 80821 IN NS vip4.alidns.com. feishu.cn. 80821 IN NS vip3.alidns.com. 2023-1-31 费了半天劲把网站接到cloudfront了, cloudfront的中国线路比cloudflare好. 写了篇笔记: https://gist.github.com/zii/c099a2399c52fecdaaac5bfcf8fb5106 2023-1-28 fasthttp功能有缺陷不支持h2, 默认不支持系统代理. 2023-1-27 http3将取代websocket,dtls,srtp,sctp?也就是说webrtc完全可以用h3来通讯,传输音视频. https://bloggeek.me/who-needs-quic-in-webrtc/ 2023-1-26 kdl格式不错, 比json表达能力更强还支持注释 有人想到用wasm做插件. 亚马逊的cdn还是不错, 移动4g的信号都可以流畅访问. https://imdb-video.media-imdb.com/vi3644114201/1434659607842-pgv4ql-1674610410588.mp4?Expires=1674803427&Signature=gC7jy-l-8Q-Af5nzHPkjvr3hoqh59yBKu6HTgeSobLdQAnZ~qpmWS13F0HpZ2BOvhq87BsK0zUEkzBVatuUqWetc3xsmLsAGgQEIQVU0qTT6aaUVdK-9IE9pBwHo5acIlQxqUMTyJuJazACc01hNC1tn151TLapWVPOSgb~SMJqXvyCMpRDL-pY~F6s-ROMN9b2mNfjDzFbmi8jjgINLMf-Wjz6rVjU2AO9flUCN-QFlcoa3cVbNJFx1NWHhEQZUVOrOyqD~4VWgs02xB9PyO~f7Kh6z5PEGZU4bfi5Cl0aoiByu3LzMtjPzEnj0uoe~aj2lVn-dwKHgES5BJoPl9Q__&Key-Pair-Id=APKAIFLZBVQZ24NQH3KA 发现一个现象, 我的手机用移动4g网络用代理访问境外服务器是很卡的, 基本用不了. 然而加上一层cloudflare cdn就好多了, 至少可用了. cloudflare对国内线路的优化方法: 接入梦牛, 然后可以让域名以cname接入cf, 这样可以分地域用不同的cdn. https://www.wenboz.com/p/f647.html 2023-1-18 Telegram的multi-dc架构分析: 电报大概分了美欧亚三个中心, 用户数据被分割到不同的中心, 比如你是用中国手机号注册的, 你的账号以后只能连DC5(新加坡)的服务器登录. - 先看Telegram FAQ上的一段话 为了保护未被端到端加密覆盖的数据,Telegram使用了分布式基础设施。云聊天数据存储在全球多个数据中心,这些中心由分布在不同司法管辖区的不同法律实体控制。相关的解密密钥被分割成若干部分,并且从未与它们保护的数据保存在同一个地方。 - 哪些数据是绑定到单一DC的? 文件,头像,表情,authtoken(解密密钥),用户对话列表,用户聊天记录 比如我是DC5的用户, 我在群里发了个视频, 这时DC5机房挂了, 别人就打不开这个视频了. - 哪些信息是全部DC共存的? 用户基本信息,群,超级群,群聊天记录 虽然用户是属于某个地区的, 但基本信息(昵称,头像,username)是全球都要存的, 一是发消息需要知道对方dc_id, 二是为了全局搜索用户. - multi-dc如何同步数据? 用户的所有操作统统形成Update事件, 有序放入全球队列, 互相拉取后回放, 可以达到最终一致. 像区块链一样. 我猜测Update的设计应该符合CRDT原则. https://adamant.im/cn/ 这个项目实现了纯区块链的IM, 不过很简陋, 延迟也很高. 多中心架构是为了解决延迟问题, 反之如果网速极快, 也就不需要多中心了. 而多中心本身最大的问题仍是DC间的同步速度问题. 最终还是延迟问题, 这是个悖论. 把网站迁移到新服务器上了, 价格非常令人满意. 2023-1-17 nginx gzip还是要开的, 之前经常忽视. gzip on; gzip_min_length 1k; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_vary on; gzip_comp_level 6; telegram相关接口: https://api.telegram.org/bot wss://zws1.web.telegram.org wss://zws2.web.telegram.org wss://zws5.web.telegram.org https://dev.moe/2564 2023-1-16 AVIF 主要开发者是Wan-Teh Chang, google的程序员. 飞书海外版api ping open.larksuite.com 域名本身测速: ping得都很快, 国内用的是网宿cdn, 国外用的akamai cdn time curl -X POST 'https://open.larksuite.com/open-apis/im/v1/messages?receive_id_type=chat_id' 实际调接口测速: 在香港, 大陆, 印度都是300~400ms 2023-1-13 看了下crisp chat, 看来客服系统和常规IM还是有区别的. 客服系统的聊天消息是发给会话的(session_id), 而不是发给人的. https://docs.crisp.chat/references/rest-api/v1/#create-a-new-conversation https://api.crisp.chat 会话是有开始和结束的, 结束后标记为关闭状态, 数据库只存储会话, 和访客(visitor)聊天记录. 没有群和单聊的区别. 啊, chatgpt很适合作为机器人客服. https://medium.datadriveninvestor.com/chatgpt-customer-service-and-knowledge-management-do-we-hear-a-roar-of-a-revolution-2aec14806233 2023-1-12 待调查的rtc开源库: srs, jitsi https://cloud.tencent.com/developer/article/1968375 2023-1-11 基于pion的rtc项目有两个: ion, livekit. 2023-1-8 机器要想做到真正智能, 它必须得懂点哲学, 这是决策的基础. "不要因为某些东西很时髦就相信它是好的。我认为做好的科学比做流行的科学更有声望。如果你去做你真正认为重要的事情,那么从长远来看,它真的很重要的可能性更高,而长远来看,对世界的好处最大。" - Donald Knuth (2012) 《对计算机科学的反思》 http://www.ict.ac.cn/liguojiewenxuan_162523/wzlj/lgjjs/201912/t20191227_5476650.html 2023-1-6 变量名: duedate, 应付日, 交货日 2023-1-4 twirp, 类似于rpcx. 感觉很有意思, 这篇文章提到了Perlis-Thompson Principle. 说k8s是当代的multics, 意思是太复杂, 未来会出现一个unix风格的分布式系统. 肯-汤普森会设计一些更简单的东西, 具有持久的价值. http://www.oilshell.org/blog/2021/07/blog-backlog-2.html#kubernetes-is-our-generations-multics 2023-1-2 gost不错, 不过文档很差, 倒腾了半天. 2022-12-21 最后他还是排除一切疑虑,将衣服放在佛陀脚下。做完之后,他不禁鼓掌欢呼:「我胜利了!我胜利了!」 天呐他战胜了自己! 看到这句话我哭了, 但同时发现我的嗓子不疼了. 新冠后遗症一下就好了. 2022-12-10 如何高效经济地种植出一座森林? 我有个大胆的想法, 把郑州建成一个森林城市! 2022-11-29 nginx代理sse流的时候, 需要这样配置: location / { chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; proxy_read_timeout 1h; # 防止长时间没动静断开 } 2022-11-17 python字符串内部是按1,2,4字节为单位定长存储的, 具体单位长度根据码点最大的字符决定. 如果中英文混合, 如果英文少于一半, 还是比utf8省. 查找路由表时遵循最长匹配原则. [root@86 network-scripts]# ip route show default via 10.10.10.1 dev ens192 proto static metric 100 10.10.10.1 dev ens192 proto static scope link metric 100 10.10.10.86 dev ens192 proto kernel scope link src 10.10.10.86 metric 100 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 172.21.0.0/16 dev br-ceadf9237b4f proto kernel scope link src 172.21.0.1 172.23.0.0/16 dev br-c9bd3e3b619d proto kernel scope link src 172.23.0.1 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 顺序为: 10.10.10.1 10.10.10.86 192.168.122.0/24 172.17.0.0/16 172.21.0.0/16 172.23.0.0/16 default(0.0.0.0) 2022-11-16 各种翻译平台API接入: https://kalacloud.com/blog/best-translation-api/ code point: 码点, 指的是unicode字符的数值 code unit: 编码单元, 指的是数值编码的字节格式; USC-4和utf-8虽然格式不同, 但对应的码点数是相同的. 对中文来说用utf16编码更好 这样的网页打开乱码, 必须保存为UTF-16 LE with BOM, 必须带BOM标记才认. 2022-11-15 mp4的码率控制参数rc=crf和abr https://www.bilibili.com/read/cv9056051 - CRF ffmpeg -i tw.mp4 -c:v libx264 -crf 28 crf.mp4 - 2pass-ABR 适用于指定码率, 便于控制大小 ffmpeg -i tw.mp4 -c:v libx264 -b:v 160K -pass 1 -f null /dev/null ffmpeg -i tw.mp4 -c:v libx264 -b:v 160K -pass 2 abr.mp4 2022-11-13 变量翻译 job: 作业 task: 任务 badges: 徽章 flag: 标志 gitlab可以生成access_token和deploy_token, 也就是临时账号, 很适合服务端部署: access_token示例: git clone https://<用户名随便填>:Ldo6fGCujWCsi1zDY4TT@gitlab.xxx.com.cn/xxx.git deploy_token示例: git clone https://<用户名是固定的>:Ldo6fGCujWCsi1zDY4TT@gitlab.xxx.com.cn/xxx.git 2022-11-12 jq命令虽然很有用, 但弱点在于不是linux内建命令, 很难用于安装脚本. 现在一般还是用grep -oP来做字符串提取. 2022-11-10 奇文网盘的文件下载是代理了一层oss的流, 其中验证了token. 2022-11-9 web office编辑器: 首选onlyoffice 2022-11-8 飞书文档前端用到的开源库: sheetjs, localForage, wps/weboffice 飞书的excel分两种: wps spreadsheet feishu sheets couchdb就是支持geo-repl的数据库. 协同编辑的技术: Operational Transformation 实现一个多人协作在线文档有哪些技术难点? - 互联网编程的回答 - 知乎 https://www.zhihu.com/question/274573543/answer/696527737 2022-11-7 今天发现goadmin角色表里有个字段叫slug, 不知什么意思, 搜了一下: A slug is a human-readable, unique identifier, used to identify a resource instead of a less human-readable identifier like an id. 就类似于label的意思, 一个可读的唯一标识. 群组成员表按什么分表? 当然是按群ID分, 但每个群的成员数差异极大, 如何均匀分布? 前几天看到的一个分库分表策略, 应该很实用: https://juejin.cn/post/6844903821441777671 2022-10-29 很喜欢svetle, 机制简单直接透明, 非常贴近原生js, 没那么多花里胡哨. 2022-10-13 开源文档框架: https://gohugo.io/ 2022-9-25 开源语音翻译 https://github.com/PaddlePaddle/PaddleSpeech 2022-9-12 支持CRDT的数据库: riak 2022-9-11 用jsonpb似乎可以解决json oneof的问题, 但是太慢 https://github.com/golang/protobuf/issues/446#issuecomment-360698636 2022-9-10 一款没有文档的软件是没有价值的。文档应该反映工程部分,而不是代码本身。通过阅读文档,你应该了解以前的开发者是如何构建产品的,并且能够删除所有的源代码,从头开始重新创建一切。如果你能这样做,就是好的软件技术文档。 https://medium.com/@VincentOliveira/how-to-write-good-software-technical-documentation-41880a0e7814 2022-9-4 postman也能导出不错的文档呢 https://documenter.getpostman.com/view/8899980/UVC8BRBo#intro 2022-8-7 产品开发的本质就是理解. 2022-8-5 gob的精髓在于流式编码, 单个编码是非常慢的. 也就是说只适用于socket连接的编码, 因为首次编码会额外携带类型信息. 2022-8-2 http服务端发送事件: text/event-stream https://developer.mozilla.org/zh-CN/docs/Web/API/Server-sent_events/Using_server-sent_events https://github.com/euskadi31/go-sse 致命伤就是必须用\n来分割事件 2022-7-10 写了一篇博客, 通过内网穿透搭建wss测试服务器. https://catlabs.cn/blog/frp_wss.txt 2022-6-11 carkmack .plan的前缀含义: A * entry was completed on that day A + entry was completed on a later day A - entry was decided against on a later day 说实话我并不喜欢web框架, 比如gorm, gin, ...大众似乎总是趋之若鹜, 我只感到厌烦. N-game中用到的碰撞算法很有趣: 判断圆与矩形是否碰撞, 分出8个voronoi regions, 判断圆心处于哪个区域, 再决定是和边相交还是和顶点相交. https://www.metanetsoftware.com/2016/n-tutorial-a-collision-detection-and-response#section3 感谢这篇文章中精美的小例子. 2022-5-26 nginx proxy_pass大图片显示不完整: 加配置 proxy_buffer_size 32k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; 2022-5-22 https://github.com/lsg2020/gort 通过函数名动态调用函数 2022-5-8 实现了一个小想法: github.com/zii/sqlroller 2022-5-7 js: for循环不加let的坑 2022-5-4 牛人blog: http://richg42.blogspot.com/ 2022-5-3 旧版ios貌似不支持js replaceAll, 替代方法: .replace(/\//g, "-"). 2022-4-16 6T的TiDB配置清单: Placement Driver: ecs.g7.xlarge *3 964.15/月 TiKV: ecs.g7.4xlarge *3 3856.61/月 TiDB: ecs.g7.4xlarge *2 3856.61/月 总计: 15935.7 ~ 22175.5/月 2022-4-10 太危险了, 2048bit的RSA公钥两小时就能破! 看来得以后得用ed25519了. https://blog.benjojo.co.uk/post/auditing-github-users-keys 2022-3-22 go写的操作系统 https://github.com/SanseroGames/LetsGo-OS.git 2022-3-21 这篇开示非常重要 炒股所得利益, 属于小福报. 不能用来布施众生, 因为来路不正当. https://www.youtube.com/watch?v=h5yudI7DOC8 2022-3-20 go里用到的一个快速哈希和快速rand. https://github.com/wangyi-fudan/wyhash 2022-3-16 go1.18 调整了append内存增长因子算法. 也就是随着容量越来越大, 增长因子从2无限减少到1.25, 更加平滑. https://github.com/golang/go/commit/2dda92ff6f9f07eeb110ecbf0fc2d7a0ddd27f9d 2022-3-15 管状空间中最短路径的一种有效算法, 感觉不错可以用于隧道中机器人探路 https://www.mdpi.com/1999-4893/15/3/79/htm 2022-3-13 w3.css简洁大气, bootstrap的替代品. 2022-3-3 如何让工作量证明变得有意义 https://catlabs.cn/blog/pow.txt 2022-2-27 randomx是为了慢而设计出来的算法.. 不过想想确实, 让专有硬件或GPU都跑不快也是很有难度的. 作者都说: 工作量证明的目标是耗时又耗能,而且还低效。我花费毕生精力在构建高效软件、调优编译器上,只为追求低能耗高效率,这于我而言,是一种精神上的打击。 https://github.com/tevador/RandomX/blob/master/doc/specs.md 2022-1-14 今天证实了限价订单确实可以降低手续费:D 2021-8-9 原来mmap可以并行写入, 称为parallel mmap. https://github.com/filecoin-project/merkletree/blob/83dea222923a55432bb74f6bcc8559292dc0f221/src/store/level_cache.rs#L451