奇文共赏,关于ShadowsocksR事件

题注:本文记录的是一项发生在 2015 年 8 月的真实事件。下面原文的全文可以在文末的地址看到。无论读者是出于因为什么原因看到这篇文章,是 Google 搜索的还是听人忽悠来的,请搞明白文章的背景。另外,希望读者能保持一定的理性,不要“精虫上脑”、一听到“妹子”就管不住自己。互联网上一条狗也可以假装是妹子

因为这篇文章引来的麻烦浪费了我太多时间,本文关闭评论并不再更新。想 DDoS 攻击的请便,反正已经用上了 CDN。有些人傻呵呵的以为自己“攻击”了几个小时,其实服务器才用了 1Mbps 的带宽,建议不要浪费绳命,让自己投入到更有意义的事情中。

16.12.25 更新:说好不更新的,结果还是更新了,堕落到跟某些**一样的水平。

看看这智商真捉鸡啊!正常人都能看懂上面一段斜体的因果关系:因为删一些脑残粉的评论太烦,所以关评;因为被人 DDoS,所以上了 CF。分开两句话的内容也能合成出“正义使者攻击反动网站,博主胆小如鼠关闭评论”的大标题,跟官媒学的这一套也是可以的。还真把自己当什么大V,让脑残粉群起攻之,胆小如鼠的博主都真的笑、笑出声了。

最后加一句:原版 Shadowsocks 软件并没有停更,而且也加入了某些反检测、反攻击的新特性。你们教主很多代码也都是直接 merge 过去的,点开 Commits 就能看到了。要用哪个版本是每个人的自由,但是请不要歪曲事实。还是开头那句话,只是记述真实事件,供参考。


个人建议使用原版 Shadowsocks 软件,比较安全。

以下内容,黑色为 ShadowsocksR 作者的原文,蓝色为本博客(微博 @_小噗)的评论。

背景:某作者(GitHub@blackwa11)用了GitHub@clowwindy的shadowsocks-csharp(现在叫shadowsocks-windows)的代码,原始代码是GPL的,然而新作者发布了二进制但不开源,原作者吐槽了一下,新作者发了这么一篇然后撂蹶子走了。

本版本作为此分支最后一个版本,本分支不再进行维护,也删除了升级提示。

说过的开源承诺一定会兑现,不过兑现得有点偏早了,(GPL要求你从发布的时候就要公开源代码,没有早晚之说)本版本预期的目标只实现了小部分,之后的也不再去实现了。两个可公开的预期目标:1.实现让原版TCP协议过渡到更安全的协议;(小弟才疏学浅,比TCP协议更安全的是啥协议?四层除了TCP和UDP,还准备发明个TCPS?)2.实现让原作者与本版本竞速发布,让使用者受惠。(一口源代码喷在了屏幕上)不过黑脸既然当不下去了,就不当了,爱咋整咋整。(小盆友你几岁啦)至于署名问题,你不怕脑残党来查水表但我怕,你以为这是常用网名么,就算倒台了还要考虑脑残粉随便人肉砍人什么的。

另外,如果你发现某个需求是很有必要的,但和作者说了这个需求但作者不做,和你说“NO”,怎么办?(好问题,接着看)正如三个月前我就和作者说过UDP功能很有用,但作者就说PC上用UDP不如路由器上做。结果呢,那就自己做一个,把功能实现出来,(到这为止都说的非常好呀)把其它人的需求也引发出来,进而通过市场压力迫使作者把这个功能做出来就行了。(哈哈哈哈哈,为什么作者一直在说“市场压力”呢,我们继续赏文)但是你说你不会写代码,或者你写的实现不太好?没关系,我也是新手,我读的经济学,(当当当当!揭晓了!)我不是程序猿,开始动手改代码前我的C#才学了一星期,连select模型是啥也不知道,就算现在也不知道epoll是什么玩意儿,写的代码只能让机器能跑。你要是觉得和我联系也没有问题的话,那就发邮件到mmgac001[at]gmail[dot]com (诚心的打码)

现在的功能看起来这么“完善”,估计还是会继续三个月以前的状况了,不过呢,反正用户不是我,我继续去搞外汇套利得了。(替计算机界惋惜,失去了这么一个不可多得的经济学人才)

下面本噗来强调一下文中的亮点:

1. 最大的亮点,你给作者说了需求作者不做,你该怎么办?是的,如果对你很重要,你就自己做一个,这个是完全正确的。下一步,最好的做法——把你的代码PR给上游!如果你很懒,如果你不会(学经济的嘛),你就把它开源到你的GH上,让作者自己来merge!可是这位经济老兄,不但不开源(GPL violation),还要“市场竞争”,要“逼迫”作者更新……简直亮瞎了朕的狗眼,你说腾讯用了ffmpeg然后违反协议被挂在官网,那是因为怕竞对抄袭,您老这软件也不要钱,用您自己的话说,学了一个周csharp,我感觉写出的代码也就那样,有什么值得背负千古骂名闭源的?最大的可能就是,作者根本不懂开源、git、github这一套,就是小孩子心理自己做了一个方案然后挂出来炫耀而已了。(还有幸被某知名SB博客推荐了一下……于是才有了这一套事。)本噗的建议,外行想掺和开源这一套是好的,但是先把基础知识学好,不是随便写个代码发出来就是造福人类的,你只造福了用你软件的那点儿人,但是让上游作者很心痛。

2. 作者在文中说要切换到“比TCP更安全的协议”,在issue#28里说发现了ss协议的漏洞。虽然我没认真的看过ss协议,但是基本就是对IP层和TCP/UDP层的简单包装。作者可能不是科班出身,不知道现在国际上用的上网协议就这两种……TCP/UDP over IP……接下来,还是那句老话,发现了漏洞为什么不提出来呢?为什么非要在自己的闭源软件里实现呢?今天可以闭源发布客户端,明天就可以在里面加个病毒“造福”你的用户呀,这就是市场嘛。

总之,本噗还是那句话,外行人来自学计算机、写代码,大家都是欢迎的,但是千万不要做这种让内行外行都唾弃的事。GPL就是其它行业中所谓的“合同”,你在下载软件或源代码的时候就等于签订了合同,违反合同无论在哪一行都是不能接受的。

更新:有人给我指出,四层还有个“SCTP”……只想说,grow up吧孩子……任何人只要乐意,都可以在四层自己发明一个协议,你甚至可以在三层发明个IP协议的替代品,然后自己搭个全球互联网……然而操作系统不支持有个卵用啊…… http://stackoverflow.com/questions/2153700/what-kind-of-sctp-support-is-there-on-various-windows-versions

原文:https://github.com/breakwa11/shadowsocks-rss/blob/6623ad7806839562055bf7894320e8e628e88f94/readme.md

 

激活(或重新激活) Bitbucket 教育套餐

我在 2011 年的文章“大学生免费申请 Bitbucket 帐号”中曾经介绍过,Atlassian 免费为在校大学生提供无限用户的私有 Git 和 Mercurial 代码仓库。现在国内很多服务(例如 Git@OSChina)也提供了类似的服务。

Bitbucket 现在做了更新,只要在账户中添加一个现有的 .edu(包括 .edu.cn)邮箱,即可自动开通教育套餐,享受私有仓库无限个用户(collaborators)。但是像我今天手滑把套餐点成了“Free”,就降到了 5 个用户,而且不能直接改回来。

为了防止其他人也犯类似错误,这里提供一个补救方法:

  1. 先将账户中其它邮箱设为主邮箱。在右上角点击“头像–管理账号”,然后在左边点击“邮件地址”,将除了 .edu 邮箱之外的另一个邮箱“设为主要的”。
    • 如果只有一个 .edu 邮箱,则需要先添加一个其它邮箱,验证并设为主要邮箱。
  2. 删除用于教育认证的 .edu 邮箱。
  3. 重新添加并认证 .edu(包括 .edu.cn)邮箱,认证后在左侧“套餐明细”中,即可显示为Academic,用户数量为 Unlimited。

数三角形问题的程序算法和数据结构

题目:数出类似下面的图中共有多少个三角形。(标号是后面我的算法用的) 手动算法:以每个最小块为单位,数出由1个、2个、……、n个单位组成的三角形数量。

提出的程序算法和数据结构:(简单的枚举,高中竞赛渣不会啥高级算法了)

  1. 输入点的数量,以及有几个点在一条线上(由一长条线连起来)的信息。例如:共11个点,0-1-7、0-2-8、……都在一条线上。
  2. 枚举所有不同的三个点的集合,判断是否为三角形:
    1. 若三点在同一条线上(即包含在上述输入的一个集合里),三角形三点不能成一条直线,否决。
    2. 若其中两个点不在任何一个相同集合里,即两点之间没有线连接,否决。
    3. 否则(两两在同一集合,三个不在同一集合),数一个三角形。

Python 渣代码实现:

#!/usr/bin/python3

######## INPUT ########
Points = 11
Sets = [
    {0,1,7}, {0,2,5,8}, {0,3,6,9}, {0,4,10},
    {1,2,3,4}, {4,5,6,7}, {7,8,9,10}
]
######## INPUT ########

test2 = lambda x, y: sum([(x in t and y in t) for t in Sets]) > 0
test3 = lambda x, y, z: sum([(x in t and y in t and z in t) for t in Sets]) > 0
result = [{a, b, c} for a in range(Points) for b in range(a+1,Points) for c in range(b+1,Points) if test2(a,b) and test2(b,c) and test2(a,c) and not test3(a,b,c)]
count = len(result)
print(count)

 

Use yumdb command with DNF to list explicitly installed packages

Since Fedora 22, DNF has replaced Yum as the default package manager. But not all yum commands have been migrated.

Today I felt like querying what packages I installed explicitly, and a quick Google told me to use yumdb search reason user, but it returned nothing.

I dug into the cause, and it turns out DNF now has its own yumdb (the database, not the command, sadly) at “/var/lib/dnf/yumdb”, along with yum’s “/var/lib/yum/yumdb”, and the command yumdb uses the latter by default.

In the man page of yum.conf, it says the “persistdir” value controls the path of yum’s db files, and it defaults to “/var/lib/yum”; but, yumdb --help tells me that it allows me to specify the location of config file. (Cheering for not touching /etc/yum.conf)

So, here’s what I did:

  1. Create a new fake config file with persistdir set to DNF’s folder.
    echo '[main]\npersistdir=/var/lib/dnf' > /tmp/dnf.conf
  2. Calls yumdb with that config file.
    yumdb -c /tmp/dnf.conf search reason user

Voila.

现有32位 C++ 工程修改为64位编译,以 OpenCV 为例

好久没有更新了,今天介绍一下我的一个32位OpenCV C++工程如何修改为64位下编译。

  1. 确保 Visual Studio (Visual C++) 已经带有x64编译器。

如果使用的是完整版VS,在安装时会有选项。如果使用 Express(速成版),则根据微软官方介绍,还需要安装“Windows 软件开发工具包 (SDK)”。

  1. 将工程配置修改为x64。

 

如图,首先在工具栏中,点击(默认为)“Win32”–“配置管理器”。

然后如果在“活动解决方案平台”下没有“x64”,先点击“新建”,在“键入或选择新平台”下选择“x64”并确定。

在添加x64平台之后,在下面将需要64位编译的工程后面设置为“x64”。

  1. 将外部库也设置为对应的x64版本。

这里以 OpenCV 的二进制预编译库为例,在 build 文件夹中可以找到 x64 (32位为 x86),再找到对应的编译器下对应文件,并在属性页中配置好即可。

  1. 编译程序,如果有问题则修改代码。

这里建议阅读官方的“Visual C++ 64 位迁移的常见问题”(见参考资料),尤其要检查指针、size_t和int/long类型之间的兼容性问题。

 

参考资料:

[1] 如何:针对 64 位平台配置 Visual C++ 项目 – MSDN

[2] Visual C++ 64 位迁移的常见问题 – MSDN