Git from the bottom up | 自底向上聊 Git

Reading Time: 42 minutes 本文未来可能会落后于 github 上的对应项目, 如果对博文的翻译存在意见或者建议, 请移步 github 提issue 或者是 PR, 项目地址 这是一个 git from the bottom up 的中文翻译. 由于译者水平有限, 保留了英文, 防止误解. 如果真有人看, 还发现了什么错误, 欢迎提 issue, 欢迎 pr. 为了保持整个文章在一个文件里面所以我并没有单独保存图片文件, 引用了原文的图片链接, 只要原文不挂应该问题就不大. This text is licensed under Creative Commons BY 4.0. Please see the text …

记一个沙雕软件的破解

Reading Time: < 1 minute 本文是一篇日记性质的碎碎念, 唠叨和啰嗦在所难免. 见谅 故事是这样的, 我突然想要一个能够在 ubuntu 上同步 Google Drive 的软件. 我需要这个软件能够监控我磁盘上的文件变化, 一旦文件变化了就上传; 当然 Google Drive 上的文件要是发生了变化, 也得能够同步到我的磁盘上. 本来以为 RClone 可以, 但是后来发现它只能单向同步, 相当于是个备份工具, 不能够满足我的要求. 其实我也不希望搞那种很专业的工具, 能有谷歌自己在 Windows 上做的那个 “备份与同步” 那点功能, 其实就可以了. 配置最好也不要太麻烦. 所以我找到了 …

go-shadowsocks2 源码简析

Reading Time: 4 minutes 我们现在来简单分析一下 go-shadowsocks2 这个项目. 第一篇就简单分析一下这个项目大体的处理流程. go 语言的项目找入口就相当好找了. 一眼就可以看到 main 函数在哪了. 来看看吧. 照例, 先看 client 在 main 函数中可以看到: //… func main() { //… flag.StringVar(&flags.Client, “c”, “”, “client connect address or url”) flag.StringVar(&flags.Socks, “socks”, “”, “(client-only) SOCKS…

Shadowsocks (二) TCPRelayHandler

Reading Time: 3 minutes 这一次我们主要分析一下 TCPRelayHandler 这个类, 这个类如前文所述, 是 TCPRelay 创建出来, 处理单个 TCP 连接的一个类. 其主要通过 handle_event 函数来处理 IO 事件. 遗留问题 回顾一下我们之前的遗留问题: daemon 进程是怎么启动的呢? 为什么要等最后 loop.run() 之前再 set_uesr 呢? loop 是怎么工作的? 为什么还需要判断 handler 不为空, 什么情况下它会是空呢? 最后看起来是在判断超时的几行代码的意义是什么呢? 三个 server 分别是怎么工作的呢? 为什么 TCPRelay 生成完新 handler…

Shadowsocks (一) 主循环

Reading Time: 5 minutes 这里简单分析一下 Shadowsocks 这个软件的源码. 因为网上一直有声音认为其源码质量不错. 刚好最近在学一些服务器编程相关的知识, 所以就来简单分析一下它. 同时由于希望能获得一些阅读源码的经验. 这里会简单记录我读源码的心路历程. 目录结构 首先我们来 tree 一下, 惯例, 测试相关的文件就省略了 ❯ tree . ├── CHANGES ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── MANIFEST.in ├── README.md ├── README.rst ├── config.json.example ├── de…

只是为了把 Steam 游戏放到开始屏幕上

Reading Time: 4 minutes 很久以前, 我有一个梦想, 我的开始菜单上能直接固定一些 steam 游戏的磁贴. 然后我苦苦地寻找, 发现了这篇知乎文章, 然后我忍痛剁手, 花了我六块大洋, 买了这个叫 Steam Tiles 的 UWP 应用, 而这一切, 只是噩梦的开始. 初次使用这个 UWP 应用, 它就刷新了我的三观. 一个功能如此简单的应用居然能这么卡. 它需要读你安装 steam 游戏的目录, 然后从里面寻找合适大小的图片来制作磁贴, 也允许用户自定义图片, 可以从 url 下载图片, 可以从本地选取图片文件, 允许用户改变图片的位置, 大小, 以及磁贴的背景色. 听起来很美好, 该自定义的都能自定义. 但是事…

麻将图片生成器 – Mahjim

Reading Time: 2 minutes 这两天由于拿到了一个麻将图包, 运用了一些编译原理课上学的知识, 动手实现了一个简单的麻将图片生成器. 项目地址在这里, 同时也在自己的服务器上部署了一个demo. 这里简单聊聊这个小工具. 名字 Mahjong, 是麻将这个游戏的一种英文表示方法, 由于雀魂叫 majsoul, 这里就只用到 j 为止, 加上图片 image 的 im, 就成了 mahjim, 这个命名可以说是很没有新意了. 思路 基础 首先要解决的就是如何用字符串表示麻将的问题. 天凤有比较完整的记牌方式: – m=萬子, p=筒子, s=索子, z=字牌, 0=赤 – 一般形=4面子1雀頭 / 標…

铺砖问题

Reading Time: 3 minutes 这是昨天读 <<挑战程序设计竞赛>> 的时候看到的一个状态压缩动态规划, 书上写的文字内容其实挺好懂的, 但是初次读程序的时候花了一些时间才完全理解了这个题. 实际上我并没有在网上找到过这个程序的正确解释, 我写这篇文章的时候找到的三个解释 (解释一 解释二 解释三) 都有一定的问题 前两个解释属于完全没有看懂书上在写啥的, 而解释三提供了一种额外的解法, 参考了 hiho1048, 但是 hiho1048 这个题的列数 m 最多只有5, 所以可以使用一个 $O(nm(2^{m})^2)$ 的做法. 但是书上这个题的 m 是15, 解释三的做法是一定超时的. 由于这个状…

关于 lambda 和 返回值优化

Reading Time: 6 minutes 这里整理一些关于 c++ 中的匿名函数的知识. << C++ primer >> 上有的内容就不在重述了. 这里重点讲一些 primer 上 可能 没有的东西. 捕获的时机 primer 向我们介绍到: 有两种捕获变量的方式, 值捕获和引用捕获. 其中: … 与参数不同, 被捕获的变量的值是在 lambda 创建时拷贝, 而不是调用时拷贝 … 如果我们采用引用方式捕获一个变量, 就必须确保被引用的对象在 lambda 执行的时候是存在的. lambda捕获的都是局部变量, 这些变量在函数结束后就不复存在了. … 我们看一段代码: au…