Meet us every second Tuesday of the month!
Text Size
   

Happy Software Freedom Day!

Celebrate SFD with us on September 17, 2016!And today is the 13th edition of Software Freedom Day! We wish you all a great day talking to people and discovering (or making them discovery) the benefits and joys of running Free Software. As usual we have a map where you can find all the events in your area. Should you just discover about SFD today and want to organize an event it is never too late. While the date is global, each team has the freedom to run the event at a date that is convenient in their area. We (in Cambodia) are running our event on November 26 due to university schedule, other conferences and religious holidays conflicting.

So hopefully you’ll get hooked just like us and start a new journey into the world of learning, sharing and contributing to your needs!

Happy Software Freedom Day to all of us!

Chinese tv shows – braindump

Since i am watching lots, i mean LOTS of Chinese, Korean and other TV shows i feel i have to write down somewhere my reviews. Since i generally don’t like to write words. I will cover a basic summary in this ever changing list (Korean list will merge in a separate post).

Disclaimer: I watch in original tone and subtitle (if i have to)…. 100% of epic dramas spanning over multiple years showing the character in the childhood before the main part starts (main actor) is horribly bad dubbed in Chinese by adults with squeaky voices pretending in the worst way ever to sound like children. No idea why, i do believe the children actors cant be any worse that that, but i never seen anything else, so i don’t judge this in my review 😛

Sorted chronology or not ^_^:

Legend of the condor heroes (2003)
I have seen the predecessor of ‘return of the condor heroes’ after the original, this was kind of ok, since they don’t ‘actually’ keep following the previous story. The acting was good, the costumes could have a notch more realism and not being to TV-Show like. the story was amazing, since the basis is as well. The pace is sometimes slow and the comedic character treads to shallow. But it was a solid show.
Verdict: 8, Seen: All

Return on the condor heroes (2006)
They did learn a lot from the previous show, the actors are a lot better (Liu Yifei was brilliant) its a nice independent story building loosely on the previous one. The pace is good. The little downpart was that they try to force to much melodrama in.  Compare to the previous one (i am talking about the series of the same director) the CGI was to much and to bad, but this goes ok with the style. Exception here is the voice action of the young Xie Yunshan, whoever sopke that, it was ok, compare to 99% of the child dubbing crap, it was actually quite good ^_^
Verdict: 9, Seen: All

The Heaven Sword and Dragon Saber (2009)
The last installment of the trilogy of Zhang Jizhong, it went again a not more melodramatic and cheesy, but the story compare to the story is solid, even tough he left a bit out. The pace is a bit to slow and they could have shorten the series a lot, i guess they wanted to fit the previous format. The more available CGI got over the trilogy, the more they used it, so its really present and looking cheap, even the cable-work is bad, that has been better in the first parts.
Verdict: 7: Seen: All

A Step Into The Past (2001)
It might be because i seen it in a horrible resolution, but it never looked ‘polished’ in any sence, sad, because the paing, characters and everything else was good. The costumes where very studio like and the feel never got me to ‘buy’ it, but scenes where well done and fitting the tv budget. Forget the first ep. CGI, it was 2001 and TV.
Verdict: 8, Seen: All

Romance of Red Dust (2006)
Shu Qi in the leading act, 10 points, review over … Well, she dis an amazing job, as most of the other actors. BUT the script and pacing sucked, much to slow, to much repetitive fake melodramatic back-views, scenery was good, costumes and style also, even tough very thing in the acting extras. With the right script, half the episodes, and the budget for the other half episodes spend in extras to get a better feel, this could have be a 9 …
Verdict: 7, Seen: All, Shu Qi: 11 <3

iPartment (2009)
Brilliant start (first and second episode) then it looses the jokes in repeating situation comic and copied jokes (friends, how i meet your mother) but in the longer run there is some more Chinese comedy taking over and it was watchable (finish-able). A bit repeditave after 2nd season.
Verdict: 6, Seen All

Three Kingdoms (2012)
Great story (interpretation), since the story is the basis of 100+ shows… good pace of development & episodes. The character development is excellent and detailed BUT you have to kind of know the original story, so when a name is called you should know the basic treads and historical ideas, they just build on top, its a minus point. The costumes are great, the scenery is solid, the CGI is seldom but visible, but not ‘really’ bad.
Verdict: 8, Seen: All

The story of Hua Mu Lan (2013)
This is an very good example of how to produce a low cost show (i assume) without going to fancy and prominent in the grand style, there have not been any mass army bad CGI effects (except first ep.) and in general they seem to know how to set the scenery to make the budget look good. BUT the far far over dragged the first two thirds of the show with overly focusing on the character building. The acting was sub par, Yao Lian as Mu Lan father did well, as well as Jerry Chang, who gave and excellent acting performance as an ‘early evil’.
Verdict: 7, Seen: All

Female Prime Minister 2013
A typical harem/politics Intrigue bubble talk show, a good one for this style. Acting is ok, costumes and flair are ok, even tough not realistic. Story had to much cliffhangers, but develop’s nicely. They teased to many potential interesting characters that leave the stage without a reason, they should have had a bit more chance. Good mount of extra actors and not much fucked up CGI, but the pase was off many times, from to slow, over ok to skipping parts … over all never the less solid.
Verdict: 7: Seen: All

The Great Protector (2014)
Potential a good plot, overy extreme stereotypical characters, super good and extreme evil. Made to simple, you kind of know whats going to happen, next in the plot. It would just be a 4 out of 10 if there would not be the details for the time and costumes, the feel is good, almost authentic, so it is an 6 for me.
Verdict: 6, Seen: 12

 

Leanings:
– Child actor dubbing is a crime, they are better that the fake adult’s child fuckups
– Even CGI is getting better and cheaper, just don’t use it to much
– If you sometimes can come out with n original story, please do so, its not always bad…
– Everyone just remembers the one good version of the 200 retold story’s (look before point)
– Don’t try to please everyone by putting non fitting characters in, or non fitting comedy
– Non realistic costumes are ok, if you keep the style constant, don’t puzzle together
– If you use Jin Yong’s base material, make as much episodes as you need, don’t stretch or cut

September is here!

September is the Software Freedom Day month (among other things) since 2005 (SFD 2004 was in August) and this year is no exception! As of last night we have a total of 58 events in 34 countries, with only 42 fully registered (you can see the location on our famous SFD map). There is always a delay between wiki page creation (which includes the plan, speakers, date and location) and the registration which ask organizers to specify where the event will happen.

What to expect from most events? Well Software Freedom Day is really an event to introduce Free and Open Source Software to newcomers and show them all the cool things which can be done using FOSS. While we have a resource page on our wiki to discuss about the various topics which can be presented we let each team decide how to organize their events. Usually events go through FOSS migration or how to gradually switch from proprietary software to FOSS ones starting by switching common applications such as email clients, office applications or other daily used tools. Once all this is working fine an Operating System migration is thinkable. Of course you will always have that application that has no GNU/Linux/BSD equivalent and it is always a pain. Among the various solutions you can either use a virtual machine inside your Free Operating System (but it will usually require extra RAM), dual boot or try Wine/Crossover. There is always the possibility to keep an extra machine just for that too.

Then you have all the more exciting topics about specific tasks or applications which are fully FOSS compliants. Among many Blender and its various projects are probably the more eye catching ones. You also have Inkscape and GIMP for the digital graphists. Then you have projects such as Open Street Map which everyone can make use of and contribute to, or web oriented application such as web servers, web analytics, content management software, configuration application for server such as Vagrant or Ansible, programming language and fun stuff like PyWeek or also educational applications and distributions to get your kids started.

And the list goes on… and then there are the social parts of the events where you meet people and do things together. We’ve had many variations of that over the years and we believe the 2016 edition will be no exception. What can you expect? Best is to attend and see for yourself.

And for the one still wondering if they have time to prepare for September 17, the simple answer is SURE!. You can start reading our StartGuide to get familiar with what to do, and then talk to other FOSS members of your community.

So don’t forget to put our countdown on your sites or blogs and see you all on September 17!

Celebrate SFD with us on September 17, 2016!

More translations added to the SFD countdown

Software Freedom Day is celebrated all around the world and as usual our community helps us to provide marketing materials in their specific languages. While the wiki is rather simple to translate, the Countdown remains a bit more complicated and time consuming to localize. One needs to edit the SVG file and generate roughly a 100 pictures, then upload them to the wiki.

Still this doesn’t scare the SFD teams around the world and we are happy to announce three more languages are ready to be used: French, Chinese and German!

So should you need to use one of those three languages you can simply use the following code to display the countdown on your website or blog:

English:
Celebrate SFD with us on September 17, 2016!

Simply go to the English countdown page to get the code to insert.

French:
Célébrez SFD avec nous le 17 septembre!

Simply go to the French countdown page to get the code to insert.

Simplified Chinese:
让我们一起为09月21日的自由软件日(SFD)庆祝吧!

Simply go to the Chinese countdown page to get the code to insert.

German:
Feier SFD mit uns am 17. September!

Simply go to the German countdown page to get the code to insert.

Update on August 29:

Thanks to the SFD community, two more languages have been added:

Portuguese-Brazil:
Comemore o SFD 2016 no Sábado, 17 de Setembro!

Simply go to the Portuguese Brazil countdown page to get the code to insert.

Portuguese
Celebra o SFD 2016 no Sábado, 17 de Setembro!

Simply go to the Portuguese countdown page to get the code to insert.

Happy SFD to all!

2016 SFD Registration is on!

web-banner-chat-registerThe Digital Freedom Foundation is very happy to announce that registration of its thirteenth edition of Software Freedom Day has just opened. While the wiki has been back online for about a week we were still lagging on the registration. Fear no more, it is now fixed and you can all register your events!

On the bright side we have a newly configured server and brand new websites for SFD and DFF. Other sites and efforts are on the way.

On the sponsorship side we are keeping the same organizations for SFD, Google being our major sponsor, Linode and Canonical helping us on the infrastructure sides. Full details are available on this page.

We would like to point out a new additional sponsor for DFD in the name of Freiheit this year (from our perspective).

So as usual registration happens after you have created your event page on the wiki. We have an exhaustive guide here at http://wiki.softwarefreedomday.org/StartGuide for newcomers and for the others who need help, the SFD-Discuss mailing list is probably the best place to get prompt support.

So get ready to celebrate and happy preparations to all!

Celebrate SFD with us on September 17, 2016!

SFD Countdown Ready!

Celebrate SFD with us on September 17, 2016!The Software Freedom Day countdown is ready for usage in English. We are therefore informing translators and also people willing to add a new language that translation can start right now. All the instructions are available on the wiki at this page.

For those who already want to add the countdown on their page/blog/website the code is the same as last year and has the same support for time zones. So if for example you’re living in Paris (GMT+2/UTC+2 that would be) then the code to add is:

<a href="http://www.softwarefreedomday.org/"><img src="http://www.softwarefreedomday.org/countdown/banner1-UTC-4-en.png" alt="Celebrate SFD with us on September 17, 2016!" width="160" height="90" border="0" /></a>

The new svg file in English is here.

Should you want to run the script from your website and customize it to your liking you can find the source code here and you’ll need to add a cron job to run it every 15 minutes if you want to support all time zones. Else every day at 1am is probably fine. Full support available from our mailing list!

If you are preparing for your Software Freedom Day events, please create your team page here and registration will be opened shortly, stayed tuned!

Happy Software Freedom Day Preparation!

My DCTC2016 talk: Linux MD RAID performance improvement since 3.11 to 4.6

This week I was invited by Memblaze to give a talk on Data Center Technology Conference 2016 about Linux MD RAID performance on NVMe SSD. In the past 3 years, Linux community make a lot of effort to improve MD RAID performance on high speed media, especially on RAID456. I happen to maintain block layer for SUSE Linux, back port quite a lot patches back to Linux 3.12.

From this talk, I list a selected recognized effort from Linux kernel community on MD RAID5 performance improvement, and how much performance data is increased by each patch (set), it looks quite impressive. Many people contribute their talent on this job, I am glad to say “Thank you all ” !

DCTC2016

A slide in Mandarin of this talk can be found here, currently I don’t have time to translate it in English, maybe several months later …

自由开源社群治理之道——《庄子》寓言的启示与思考

这是去年我在 COSCUP 2015 的演讲,原题《庄子哲学与开源社群治理》,后来在清华大学举行的 SFD(软件自由日)活动中又讲了一遍。中间一直有朋友想让我把此演讲整理出来,或者想找演讲视频(貌似 COSCUP 那场并没有录下视频,也没有录音)。后来本想自己花时间整理,因为各种私人事情一直拖延,结果竟然拖延了近一年之久……
其实社群治理,无论是开源社群还是其他社群,治理的方式方法,注意事项和成功案例,早就有各种著作介绍。即便是开源社群治理,也有很多经典书籍,两年前我曾整理过《理解开源,必读的“四书五经”》,都是前人写过的经典。不过我写此文并非简单提炼,或推翻前人经典,而是希望借由《庄子》的哲学阐述我本人理解的自由开源社群治理之。 《庄子》的一些哲学理念比较“玄”,此文力图不引入“玄”的部分,更多关注对实际开源社群治理的作用。希望此文可以给在开源社群迷茫,找不到定位,不知如何贡献不知如何治理的朋友,指明一点点方向吧。 注:此文在演讲的基础上,有所增改。

缘起

高中时作为语文课本的必读篇目,曾学习过《庄子·逍遥游》的节选,当时就很喜欢《庄子》的思考方式和那种大器的文辞风格,后来曾翻看一些面向中学生的庄子浅解和寓言故事等等书籍。慢慢了解到平时我们生活中常出现的成语、典故很多都出自《庄子》,比如“螳螂捕蝉”、“游刃有余”、“井底之蛙”、“螳臂当车”……等等。其行文风格,以及辨证的思考方式也对我有一些影响。不过后来就没再深入学习,毕竟三分钟热情嘛。 后来,近年看过一些文章引用了庄子的寓言故事,讲述庄子对自由主义(我信奉的哲学思想)的阐释。无意中想到,是否可以将庄子哲学和他对人世间的理念用在开源社群治理呢?《庄子》作为一本哲学和文学著作,对人生无疑是一种巨大的财富。将庄子哲学用于开源社群治理,显然并无不妥,更重要的其实是用庄子的一些寓言故事,融会我本人对开源社群治理的理解和感悟,阐释开源社群治理之

运营开源社群的理念

先说我们熟悉的运营方式,很多人认为要想让开源社群发展壮大,需要号召更多人贡献参与其中,更多有识之士一齐共治,最终达成共荣的开源盛世,简单说就是三个词“贡献·共治·共荣”。看上去好像前景很美好,一切都是那么的必然而通达,说实话几年以前我也一直都是秉持同样的理念,不论是参与还是治理开源社群。可是,随着观察到的矛盾情况越来越多,社群里的问题暴露越来越多,难免会对这套理念产生质疑。这样的理念究竟错在哪里?欠缺了什么呢? 很显然这是只关注宏观构想,而忽略实际困难,忽略每一个开源参与者的个体诉求,凭空画了一张大饼而已。很多时候为了让“共荣”实现,不得不祭出一些手法,导致很多参与者的热情锐减,项目或社群很快失去活力而死掉。实践中遇到的各种各样的问题,靠“贡献·共治”都不能完成,于是最终的“共荣”就只能是一句空话。 所以最后我提出三个词“自私·自治·自由”,并不是说前面的提法是错的,而这三个词恰恰是前面三个词的先决条件:只有“自私”(这里不是贬义,保留中性词),即满足自己需要为前提,才能贡献更多。正如 Eric Raymand 在《大教堂与市集》一文中说,像 Linus Torvalds 开发 Linux 内核这种行为是“挠到了自己的痒处”(scratching personal itch),满足了自己需求的同时,也恰恰满足了更多人,很多开源贡献者的行为都符合这个规律;另一方面,共治的前提是自治,只有每个社群每个人,都治理好自己社群,不倚赖不做伸手党,这样才能空出余力协手共治,否则自己的事情都搞不好,怎么可能参与协作?而过度依赖别人除了增加其他人的工作量,更增大人际矛盾和冲突的可能性;同样的,只有自由才能最终共荣,每个人在社群中都能享有自由的权利,不受压制不受封闭,也尊重每一个人自由表达,自由参与的权利,只有这样社群才能更多人愿意贡献其中,更多人愿意协手共治,共荣的局面才会最终到来。 这就是开源社群运营和治理之道,我是如何想到上面这一段的呢?就是这两年重读《庄子》时品味出来的。下面容我慢慢解析。

道的理念

没有得道的时候,我会很赞同“贡献·共治·共荣”,甚至为其摇旗呐喊,而当我参与更多开源社群,特别是在社群中做过组织者以后,发现以前的想法是多么局限,正所谓“不当家不知柴米贵”啊。“道”的理念是很重要的,无论对组织者还是参与者,一旦遵循“道”都会很轻松。 那么,“道”是什么呢?先不妨来看一个大家都熟悉的例子——庖丁解牛。这个故事人尽皆知,不再罗嗦,里面有一句话:
臣之所好者道也,进乎技矣。——庄子·养生主
其实这句话就已经将开源社群里的道说明白了,就是围绕开源技术(或许是某个具体的项目)的一种规律。庄子在解释道的时候还说“无问其名,无窥其情,物故自生”,也就是说,道不以人的意志为转移,人是很难改变固有的规律,只能顺应。演讲的时候我讲了庄子的两个寓言故事:鲁侯养鸟和拊马不时。 《鲁侯养鸟》的故事很简单,大意是鲁侯偶得了一只名贵的鸟,他给鸟奏乐,给鸟吃人间美食“太牢”(各种猪肉牛肉羊肉),结果让鸟每天都头晕不安,不吃不喝很快就死了。庄子则感慨:
此以己养养鸟也,非以鸟养养鸟也。——庄子·至乐
《拊马不时》也很简单,说的是一个人很喜欢马,用上好的竹筐装马粪,用各种漂亮贝壳装饰的容器装马尿,突然一只苍蝇骚扰,把马惊了,不仅踹伤了主人,还挣脱韁绳跑了。庄子又说:
意有所至而爱有所亡,可不慎邪! ——庄子·人间世
上面这两个故事都说明了,运营开源社群不能像鲁侯养鸟那样,用自己的意志强加在上面,而要尊重社群自身特点;同时还不能像拊马不时里的马主人那样,对社群过度管理,因此这样就引出下面的两个话题。

自由开源社群的特点

首先来看看,自由开源社群都有什么特点,而我们也必须尊重这些特点。
  • 道和技的完美结合
从庖丁解牛的故事里,其实就可以很容易发现。其实庖丁很符合现代对 Hacker 的定义和理解,只不过我们现在的 Hacker 是对计算机结构、处理器架构等等成竹在胸,对编写代码游刃有余。所以从某种意义上说,庖丁可以算是最早的 Hacker 了吧。 而由 Hacker 们组成的自由开源社群,同样如此,结合了很多个人诉求和内部运营规律的。特别是维护特定开源项目或推广特定开源技术的社群,更是道和技术结合,这在运营时更要求对技术的悉知,对相应技术点潜在发展的预判,以及对市场对相应技术的反馈有足够了解。
  • 开源社群具有草根性
很多给开源项目贡献很多的大牛,或者开发了著名软件的名人,往往并不是名企要员,或者社会地位很高的人。很多开源开发者都很困难的,比如 GnuPG(一款著名的非对称加密 PGP 协议的自由实现)的作者 Werner Koch 就很贫穷;又比如第一次提出“开源”理念,写了著名的《大教堂与市集》一文的 Eric Raymond 去年曾经发起众筹为自己募捐生活费。这样的例子很多,还有像自由软件运动和 GNU 的发起人 Richard Stallman 也都如此。类似的例子在国内也是很多很多,俯拾皆是。难道他们不想提高一些个人社会地位吗?也许《庄子钓于濮水》可以给一些参考。 庄子自比是一只在泥塘里拖着尾巴的龟,在他眼里与其做一只死后被供奉在佛龛里的神龟,还不如活着的时候在泥塘里拖着尾巴好好玩耍。
吾将曳尾于涂中。——庄子·秋水
好吧,让我们向那些不为名利所动,“曳尾于涂”的开源大牛致敬,也请同时尊重他们的个人选择吧!
  • 开源社群是自组织的
这一点是在参加了北京 GNU/Linux 用户组的活动组织工作以后发现的。一个成熟的,拥有自身文化和能力的社群,在没有强力组织者的情况下,依旧可以很好的运转。后来闲暇时和国内其他自由开源社群的交流也发现了很多类似的情况。比如现在上海 Linux 用户组的维护者也认同,开源社群在没有强力领导的情况下,依旧可以很好的运行。也许这正解释了庄子说的“物故自生”吧。 因此在运营时如何更好的激发社群内部的自治力,迎合并顺应社群自身方向,为提高社群成员自治能力,做好准备。而参与开源社群也可以用是否有很好的自组织能力,来考察开源社群的成熟度。关于这一点下面会详细讲到。 综上,开源社群的特点就是:
  1. 自我完善的道技结合
  2. 自恋的草根心理
  3. 自组织的社区形态
所以紧紧抓住开源社群的特点——“自我完善·自恋·自组织”,这样可以让我们在运营和参与开源社群时更懂如何加入,更容易把握开源社群的道。

如何运营和参与?

已经熟悉了开源社群的特点,那么就可以来探讨如何运营开源社群了。
  • 社群规模不要贪大
《红楼梦》第六回里,王熙凤说贾府人很多,事情也很多,人吃马喂的各种消耗也很多。于是她有感而发了一句“大有大的难处啊”。庄子在开篇《逍遥游》里也讲到
覆杯水于坳堂之上,则芥为之舟,置杯焉则胶,水浅而舟大也。风之积也不厚,则其负大翼也无力。故九万里则风斯在下矣,而后乃今培风……   ——庄子·逍遙遊
道理其实很简单,规模变大以后,依赖的资源和能力就大幅增加,在这方面必须量力而行。也许运营一个100人以内的社群,仅需管理大学社团的能力和三两人的小团队协作就行了;可是一旦社群规模上千,也许就需要建立基金会,需要更多赞助商,需要层级化的管理或更深入的治理模式。另一方面,不同规模的社群,也要根据自身规模选择恰当的管理方式。一个只有几十人的小社群,没必要特意搞基金会(除非在资金上确有必要),或使用复杂的层级管理方式,显然平面化的管理更有利。 可是很多小社群,总是梦想着要做大,或者有些已经很大的社群在一些名利的诱惑之下,希望可以变得更大。贪图过大的社群规模会让管理变得苦不堪言,超过运营能力的规模,势必会成为一种拖累,让运营者的精力消耗在无畏的人际处理,而不是处理项目相关的问题上。 与此同时,也要着力在社群成员的“转化”上下功夫,也就是比如也许一次活动来了很多新手,而这些新手能否转化成为社群的贡献者,有多少可以转化,也就是“转化率”的问题。这里说的“转化”是从商业技术社群的运营上借来的概念,这里不赘述了,若有可能我会再撰文详述。
  • 自治无为,自我负责,激发社群自组织活力
庖人虽不治庖,尸祝不越樽俎而代之矣  ——庄子·逍遙遊
刚才已经说过了,成熟的开源社群有很强的自组织能力,激发社群的自组织能力是关键的。而一个不成熟的社群,还能运行下去,往往因为有一个强力的领导者,也许其技术很强,也许其能力很强,而同时社群成员则往往很弱,什么事情都要靠该领导者的发号施令。这个强力的领导者,在集权的同时,也剥夺了社群成员自治的能力和自我发展的自由。这样越俎代庖的治理方式,会直接导致社群容易“集中力量办大事”,比如办一场大型研讨会、分享会等等,但却无法办好常规化的社群运营,无法真正推动社群价值的释放。这样的社群长久下去一定是很快失去活力,慢慢在整个开源生态中边缘化。 那么要怎么激发社群的自组织活力呢?这就首先从培养每个成员的自治能力开始,呼吁每个人做好自己的事情,不依赖不做伸手党。只有人人自治,每个人都履行开源社群成员的责任,才能更好的推行社群整体自组织能力。也就是为什么先有自治才有共治。我们做好了自己的事情,就无瑕管别人了。
古之至人,先存诸己,而后存诸人。所存于己者未定,何暇至于暴人之所行! ——庄子·人间世
同时,社群运营和发展规划的时候,也要考虑到满足成员的个人的需求,社群的未来规划能否挠到社群成员的“痒处”,社群成员能否与社群产生强联结(bond)。所谓“粘性”就是如此,“粘性”也是社群经济时代,常常听到的一个词,也是借用过来的概念。成熟社群的管理者,常常有一种身不由己的感觉,常常会被社群既有规律推着走的错觉。所以说“无为”,并不是什么都不做——那是“不作为”,而是不刻意为之,放手让社群自组织的活力推动社群的自然发展吧。
  • 见利不忘初心
“螳螂捕蝉黄雀在后”的故事已经家喻户晓,庄子在结尾说了这么一句话:
(螳螂)见得而忘其形,(黄雀)见利而忘其真  ——庄子·山木
在利益面前,谁能不动心,但若是一直追求利益,被利益捆绑住了手脚,在开源社群中的动作就一定会走形,一定会偏离之前的方向,偏离创立社群的初衷。也会因为被名利所累,而犯下错误,会被利益引导,甚至成为商战上的炮灰。相关内容,可见2014年年底时的采访稿整理《对开源社区中商业参与的思考——答中央民族大学范小青教授的采访》。 其实如果是大企业的利益,也就罢了,对社群诱惑的能力比较小,而作用比较大而且诱惑巨大的则是政府的政策。特别是最近几年方兴未艾的民族主义国产大潮,“自主知识产权”等等。在这方面我不能说那些追求民族软件的人不好,而是在追求的过程中,不要忘初心,如果你的初心就是要做一个中国人自己的某某软件,比如中国人的操作系统,中国人自己的芯片云云,这都没什么问题。可初心如果只是团结一众热心人,开发一个自由的操作系统,那么在受到民族主义蛊惑的时候,一定会丢弃原有社群基础。而失去社群的支持,也就失去了前进的力量,这样的项目最终只会慢慢死掉。
  • 增进人与人之间的自由联结
很多人说开源社群里的人际关系比较亲密,其实然也不然,更多的是基于共同价值观的自由联结,人与人之间的关系是平面去中心化的网状联结,而不是围绕领导者的中心化联结。平面联结更容易激发社群成员之间的活力,更容易创造互联互通互相合作的机遇。
相濡以沫,不如相忘于江湖。 ——庄子·大宗师
同时人与人之间的关系又不能是相濡以沫的。一个自由的人,也就是有能力选择,又有能力负责的人,是不会依赖和捆绑住别人,也不会满足于“相濡以沫”这种最低生存需求的,一定会有更高的需求,更大的发展诉求。这是社群能够满足他的,否则他就会离开和抛弃现有的社群。 因此对于社群运营来说,要构建尽可能平面化的自由联结,同时挖掘和培养社群成员的自由精神,自治能力和自主性,增加自由人之间联结的机会,比如举办常规活动,在增进社群成员之间粘性的同时还可以吸引更多新人加入。
  • 放大格局,不做井底蛙
井底之蛙的故事,也是《庄子》里有名的寓言,我上小学的时候还学过据此改编的故事(改成了井底蛙与小鸟的对话)。 对开源社群来说,未来的发展完全取决于其所在的格局,如果开源社群的运营和管理者有足够长远的眼光,和广阔的大视野,对开源社群的未来发展是有很大帮助的。某种意义上说,一个社群处在什么格局下,就有什么样的未来。 那么如何放大社群的格局呢?有三个方法。首先是社群创立时的定位就要高一些,比如定位是一个国际化社群,或者是一个有商业化转化的开源项目。如果后期要修改的话,要征得更多成员的同意,与他们的“痒处”相一致。一个定位为自HIGH的社群,较难改成更大格局的社群,这也正是长期内部自组织的结果;第二是参与或邀请其他社群,通过社群交流和合作,可以吸收其他社群的优势,学习到其他社群的经验;第三则是参与较大格局的社群活动。比如参加国际的开源会议,参加 Google Summer of Code 这样的全球活动。或者并入更大格局的社群,或者联合更多类似的社群成立社群联盟。但也可以只是以个人身份参与进去,进而慢慢改变自身所在的社群。

大道至简

好了,洋洋洒洒说了这么多,不妨用一句话来总结,运营和治理自由开源社群的究竟是什么: 自由人在自由联结中的无为之治 自由人,表示的是社群里的成员都是能够自主自治的人;自由联结上面也已说过,就是平面化不依赖他人的绑定(bond);无为之治,就是发挥社群的自组织活力,顺应和迎合这种活力不刻意为之。 因此只要遵循这个道,运营和治理自由开源社群就不是一件难事,而是在平时的一种惯常所为。希望这篇文章可以为迷茫中的人,提供一些小小参考,也希望可以和各位朋友能在开源大潮汹涌的江湖中,一起守望相助。 最后附上,COSCUP 2015 时的演讲投影片做参考:

搬家到悉尼,谈谈华人

因为遇到一份工作机会,可以使用我对区块链的专业知识,我就兴冲冲地重新回到职场了。

这是人生第一次为人打工,我先飞去,留着爱人穿州过府地把我们千疮百孔的通用爱维欧开着到悉尼。工作地点是情人港,旅游必经之地,到处都是华人游客。

在唐人街,鱼市这些地方,在火车站附近的公寓楼,以及悉尼周边华人聚居的地方(如KINGSFORD),都可以看到这样的场景:店铺中文优先于英文,有时候就不翻译为英文了。街上人都是华人,零星一些本地人像点缀在上海街头的欧美游客。周五晚上市场上人山人海,除了市门口站岗的警察,其它均是华人了。

借读者有人对密码学有兴趣的事讲个话题。我遇到悉尼一位密码学家,给我说你知道不戴维在中国?戴维的名气是cyberpunk密码学家,其设计影响了后面的产品如比特币,但是在2000年前后就再没人知道他。我问为什么,他说中国政府有一段时间招海外学者回国,大约是04、05年,海外学者回来就给实验室,给配顶尖团队,给待遇给房子,着实吸引了一批专家回国,也使一批当初没出去的专家觉得还是先背叛祖国再悔过比较好。这个时期到中国的有来学嘉(IDEA加密算法),姚期智(2000年图灵奖,多方安全计算问题),戴维也是这时候不见了的,所以推测他在中国。我觉得人家澳洲人对华人知识分子的去留这样清楚我都不好意思,所以也借请中国的朋友留个心眼,戴维同学,有好多粉丝在找你。


libelf-devel is required when building kernel module

For most documents about kernel module building just need a Makefile like this,

HELLO = helloworld

obj-m += $(HELLO).o

$(HELLO)-objs := hello.o world.o

KERNEL_SOURCE := /lib/modules/`uname -r`/build/

default:

        $(MAKE) -C $(KERNEL_SOURCE) M=`pwd` modules

clean:

        $(MAKE) -C $(KERNEL_SOURCE) M=`pwd` clean

        $(RM) Module.markers modules.order

Then type “make” will make everything set. (Of cause source of current kernel is ready at /lib/modules/`uname -r`/build).

But yesterday when I tried to build a kernel module for Linux-4.6-rc5 (openSUSE vanilla) kernel, I observed an error never saw before.

helloworld> make

make -C /lib/modules/`uname -r`/build/ M=`pwd` modules

make[1]: Entering directory ‘/home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla’

make[2]: *** No rule to make target ‘/home/colyli/source/tmp/helloworld/hello.o’, needed by ‘/home/colyli/source/tmp/helloworld/helloworld.o’.  Stop.

Makefile:1428: recipe for target ‘_module_/home/colyli/source/tmp/helloworld’ failed

make[1]: *** [_module_/home/colyli/source/tmp/helloworld] Error 2

make[1]: Leaving directory ‘/home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla’

Makefile:10: recipe for target ‘default’ failed

make: *** [default] Error 2

It seems nothing missed, but the error message was there.  Today a friend (Chang Liu from Memblaze) tells me maybe I should check the output of “make modules_prepare” in the kernel source directory, here is my result,

linux-4.6-rc5-vanilla> make modules_prepare

Makefile:1016: “Cannot use CONFIG_STACK_VALIDATION, please install libelf-dev or elfutils-libelf-devel”

This is an informative clue, so I install libelf-dev package and re-run “make modules_prepare”,

linux-4.6-rc5-vanilla> make modules_prepare

  CHK     include/config/kernel.release

  CHK     include/generated/uapi/linux/version.h

  CHK     include/generated/utsrelease.h

  CHK     include/generated/bounds.h

  CHK     include/generated/timeconst.h

  CHK     include/generated/asm-offsets.h

  CALL    scripts/checksyscalls.sh

  DESCEND  objtool

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/fixdep.o

  LD       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/fixdep-in.o

  LINK     /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/fixdep

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/exec-cmd.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/help.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/pager.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/parse-options.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/run-command.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/sigchain.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/subcmd-config.o

  LD       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/libsubcmd-in.o

  AR       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/libsubcmd.a

  GEN      /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/arch/x86/insn/inat-tables.c

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/arch/x86/decode.o

  LD       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/arch/x86/objtool-in.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/builtin-check.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/elf.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/special.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/objtool.o

  CC       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/libstring.o

  LD       /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/objtool-in.o

  LINK     /home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla/tools/objtool/objtool

No complain anymore, then I back to kernel module source directory, run “make” again,

helloworld> make

make -C /lib/modules/`uname -r`/build/ M=`pwd` modules

make[1]: Entering directory ‘/home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla’

  CC [M]  /home/colyli/source/tmp/helloworld/hello.o

  CC [M]  /home/colyli/source/tmp/helloworld/world.o

  LD [M]  /home/colyli/source/tmp/helloworld/helloworld.o

  Building modules, stage 2.

  MODPOST 1 modules

  CC      /home/colyli/source/tmp/helloworld/helloworld.mod.o

  LD [M]  /home/colyli/source/tmp/helloworld/helloworld.ko

make[1]: Leaving directory ‘/home/colyli/source/suse-kernel/patched/linux-4.6-rc5-vanilla’

Everything is cool, the kernel module is built. So installing libelf-devel package solve the problem.

But it is still not clear to me, why missing libelf-devel may cause kernel module building failed. If you know the reason, please give me a hint. Thanks in advance.

Happy Hardware Freedom Day!

Today is the new selected date for Hardware Freedom Day. We did a community survey a few months back and that was by far the most popular time. While our website is back up the wiki and registration are still down though. Considering the status we’re hoping to get things back up and encourage people who missed the date to celebrate a HFD on their schedule. Following up our mail list you may know there are events in Barcelona and India or can simply ping us there.

Thank you all and happy HFD!

Happy Document Freedom Day

Today is Document Freedom Day. As in the past 8 years we celebrate DFD on the last Wednesday of March all around the world. While the date is recommended this year DFD is being celebrated from March 16th to April 5th so far (we’ re still getting new registration as of this writing) .

DFD is the international day to celebrate and raise awareness of Open Standards. Open Standards goes beyond essays and spreadsheets and covers all digital formats from artwork, sheet and recorded music, email, or statistics. They provide freedom from data lock-in and the subsequent supplier lock-in.

Today people around the globe come together to run local events and let the public know about freedom of information accessibility. Join us by attending an event close to you, help spreading the word or see other ways of how to get involved.

Happy DFD to all!

Celebrate Document Freedom Day on March 30

The FSFE has handed over Document Freedom Day to us earlier this year and while it took us a bit of time to get familiar with the way the current DFD website handles the events registration we have been steadily gathering more and more locations all over the world. So Document Freedom Day is happening on the last Wednesday of March, which is March 30th this year and Latin America seems very active in promoting Open Standards. We are very happy to meet new people thanks to the effort and will also celebrate our local DFD in Phnom Penh but slightly later on April 5th. If you are in the area please drop by, and if not please check the Document Freedom Day website for an event in your area. Happy DFD!

搬家到墨尔本

因为爱人小鱼在墨尔本机场工作,一家就搬到了墨尔本。一开始住在Brunswick,Sydney Street附近,街旧店旧房旧。这算是本地特色,百年老街,法律保护,不能改扩建。寄宿别人家,没有办法做饭,街上食物也乏善可陈,还吃到一家穆斯林做的半生的肉馅,小鱼拒绝付钱,店家也没办法。后来我终于考到驾照,于是租到离机场近的房子(没有驾照的话,可选的住处太少),前天搬进新宅,总算日子好过一点。

本地人比较善良。买酒的时候,我没带优惠券,店主就去垃圾筒里给我翻出来之前客人没用的优惠券,一边翻一边还说这垃圾筒是他的“文件柜”他在给我找“文件”。刚来的时候还有一个新移民欢迎晚餐会,就是免费吃饭跟本地社区互动,可惜我和小鱼那晚上太累哪也去不了。会展中心一年一度免费请大家吃饭我们倒是赶上了,食物甜点都是十分精美的。大体上感觉老墨尔本人比国外出生的移民好,但是也可能是新移民不懂得如何帮到别人的缘故。

来墨尔本已经闯了四次红灯,好在没有出事。4次中只有一次是小心可以避免的,其它都属于大城市交通特色,我是昆洲学车出来的,没见过这样复杂的,所以出错。比如十字路口左转小道中间再放一个红灯,比如50米之内三个十字路口(不清楚哪个灯管哪个路口),比如转盘上放个红灯。我闯了4次红灯,现在学会不闯了。每次闯了红灯都一身汗,回家看了交通局给出的摄像机地图,知道没有被拍到,但是不能忽视这种错误。

来墨尔本穿洲过府的,开了几天车把周边几个城市都转过了。同行美国人说,澳洲人开车喜欢哄。这哄(Honk)就是鸣笛的意思。我开车被Honk了好多次。我还不觉得冒犯,因为是出了错被Honk的,总得有人提醒错了。这种哄是短短的一下。比如有一次走了电车专用道,后面的车哄我。这本不干它的事,因为没有影响到他,他哄只是提醒。这种哄,可以减少警力,我不至吃了罚单才知道错。不过,公路上的恶习这里也有,有人曾跟在我车后一段,没有哄我,超过我的车后却打手势骂我,嫌我之前开太慢的缘故。

机场近处属于City of Hume,居民复杂,我们早上吃阿拉伯人的早餐,中午吃印度人做的咖喱,晚上吃土尔其人的烤土豆,大家说什么语言都不懂,总是担心各色人种之中有坏人。坏人也许有,我们没遇上,愣头青确实遇上了,晚上又开快车又鸣笛的就是,估计是酒也喝了不少。


FlightGear 官方手册中文翻译全部完成

最近花了一些时间,重新翻译了官方手册 Getstart。利用官方发布 3.4 之后一直到下一个版本 2016.1.0 之前的空隙时间,抓紧将所有都翻译好了。 下载 PDF 文件:https://tonghuix.fedorapeople.org/getstart-zh.pdf 翻译项目地址:https://github.com/tonghuix/getstart-zh 项目使用了 CI 系统帮助构建,可以大幅减少本地构建的开销。不过我依旧使用本地了本地构建,为了使最终效果达到最好。README 文件详细讲解了如何在 Debian/Ubuntu 下从源码构建手册的过程。 为了与英文手册兼容,也为了更方便的跟上官方发布的脚步。依旧使用 Latex 语言编写,为了兼容中文我增加了 xeCJK 包,对手册代码做了大量的hack,编译命令也从pdflatex改成了 xelatex,虽然与原文保持了兼容,但缺点是目前看来只能编译 PDF,而不能编译 HTML。而且这个改动只对中文有效,若编译其他语言可能会出现问题,所以这个翻译基本就算是 Chinese Only 了。毕竟我对 Latex 不是很熟悉,很多地方都是现学现卖,大量 Dirty hack 也可以在代码里发现,若出现问题也非我本人力所能及。 这次把所有内容都翻译了,从 FlightGear 的安装到配置,飞行教程,还有最后的附录,包括一大堆贡献者的名字和他们的贡献介绍。翻译快完成时才注意到此网站竟然也有中文翻译的教程,但并不全,缺失了很多内容。我的翻译可以算是补充和提高了既有翻译。 有关民航相关专业名词和飞行相关技能的中文翻译,参考了《私用飞行员教程》和《商用飞行员教程》(2003,西南交通大学出版社,张泽龙主编),以及中国民航网站的公开可访问的内容,另外还有台湾飞友翻译的 FAA 《飞行员航空知识手册》(2003版)。在翻译过程中我尽力保证航空专业性。但也注重新人易读性,对里面出现的很多专业内容我增加了页脚的“译者注”,这在第八、第九、第十和第十一章的飞行教程里更常出现,以方便新手入门。翻译过程中也参考过一些非授权内容,比如真实塞斯纳172P的飞行手册(网上搜出来的)等。 手册里所有出现的教程,我都亲自在 FlightGear 里试飞过,可保证教程的真实有效可操作性。 话说,我是2003年开始入坑飞行模拟的,早年从微软 FS2002 开始一直飞到 FSX。后来加入了中国模拟飞行组织(CFSO),也许有人听说过这个组织,现在已经不复存在了。我的 CFSO 编号是 3192。后来还在 IVAO 和 VATSIM 里都有飞过,也做过虚拟空中交通管制。我从 2008 年开始关注 FlightGear,2012 年加入到 FlightGear 官方社区里,很希望可以为这款自由软件的本地化做自己的贡献。 任何人对此翻译项目有任何想法都可以提出,可以在 Github 项目页面直接提交 issuse。若懂 Latex 那就太好了,欢迎直接提交 Pull Request!也欢迎有经验的朋友不吝赐教,大家一起完善 FlightGear 的中文本地化。 后面,我可能会开始翻译 FlightGear 的界面,目前还不是中文的,争取能在最新的 2016.1.0 版本中加入中文界面。

Securing DNS Traffic in China

Overview

DNS poisoning is one of the most common cause of nuisance when accessing websites
that are outside this 1.4 billion-people Oriental country. So far, the best way to protect yourself from this trouble is to route all your DNS traffic through an encrypted channel, and the method I am going to introduce is DNSCrypt. There is not yet a standard for encrypted DNS, DNSCrypt is a project done by OpenDNS. According my experience, DNSCrypt is very reliable and robust, the cryptography of the protocol is called DNSCurve, which is a public-key crypto that employes an extremely strong elliptic-curve cryptography called Curve25519.

If you have read my previous writing, you should know my setup is a Raspberry Pi, and so the rest of this article is based on that, running Raspbian. Dnsmasq will be used as the first DNS caching proxy to serve incoming DNS queries from machines on the network. If the queried domain name is a China one, the request will be served by a China DNS. This is necessary because for some domains, answers from DNS servers in China and global ones could be different. If the requested domain does not belong to any known China domains, the request will be forwarded to dnscrypt-proxy, which will ask a DNSCrypt server for an answer.

After DNSCrypt is used, your DNS traffic will look like this:

+----------------------+
                                             |   China DNS server   |
                                      +----> |                      | 
                                      |      | e.g. 114.114.114.114 |
                                    China    +----------------------+
                                   domains
                                      |
                                +-----|---------------------------------+
                                | +-------+   Other   +----------------+|
       +------+                 | |dnsmasq|---------->| dnscrypt-proxy ||
       | Host |-- DNS query --> | +-------+  domains  +----------------+|
       +------+                 |                              |        |
                                |            Raspberry Pi      |        |
                                +------------------------------|--------+
                                                               V
                                                       +---------------+
                                                       |DNSCrypt server|
                                                       +---------------+

Setting up DNSCrypt

As illustrated in the above diagram, dnscrypt-proxy is the piece of software that handles DNSCrypt, but it is not available in Raspbian’s Wheezy and Jessie releases, only in testing (currently Stretch). You can either compile it yourself, or grab the debian package I built and install it. You can find the package here. It is based on the Raspbian package in testing repo, with some modification to debian packaging files, since the one in testing depends on systemd, which had not yet been adopted when Wheezy was released.

If you really want to build the package yourself, first install the libsodium packages. The package are also not available in Wheezy repo but the ones from testing, libsodium13_1.0.3-1_armhf.deb and libsodium-dev_1.0.3-1_armhf.deb, can be installed without any problem. Download and install them, then follow these steps to build your dnscrypt-proxy package:

$ sudo apt-get install autotools-dev debhelper pkg-config
$ git clone https://github.com/anthonywong/dnscrypt-proxy-raspbian-wheezy.git
$ cd dnscrypt-proxy-raspbian-wheezy.git
$ fakeroot debian/rules binary

After dnscrypt-proxy is installed, you have to update the port it uses. Change DNSCRYPT_PROXY_LOCAL_ADDRESS in /etc/default/dnscrypt-proxy to another port other than 53 (as it will be used by dnsmasq later), like this:

DNSCRYPT_PROXY_LOCAL_ADDRESS=127.0.0.1:5353

You can also change the remote DNSCrypt server, but since the default (cisco) works well for me, I left it unchanged.

Now test it to make sure it works as expected:

$ dig @localhost -p 5353 www.facebook.com

; <
> DiG 9.8.4-rpz2+rl005.12-P1 <
> @localhost -p 5353 www.facebook.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9735
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.facebook.com.      IN  A

;; ANSWER SECTION:
www.facebook.com.   2725    IN  CNAME   star-mini.c10r.facebook.com.
star-mini.c10r.facebook.com. 47 IN  A   31.13.77.36

;; Query time: 140 msec
;; SERVER: 127.0.0.1#5353(127.0.0.1)
;; WHEN: Mon Jan 18 00:39:36 2016
;; MSG SIZE  rcvd: 90

$ dig @localhost -p 5353 www.sina.com.cn

; <
> DiG 9.8.4-rpz2+rl005.12-P1 <
> @localhost -p 5353 www.sina.com.cn
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22371
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.sina.com.cn.       IN  A

;; ANSWER SECTION:
www.sina.com.cn.    2733    IN  CNAME   jupiter.sina.com.cn.
jupiter.sina.com.cn.    3580    IN  CNAME   region.sina.csglb.txcdn.cn.
region.sina.csglb.txcdn.cn. 1261 IN CNAME   n2wous.panthercdn.com.
n2wous.panthercdn.com.  20  IN  A   103.4.200.227
n2wous.panthercdn.com.  20  IN  A   103.4.200.235

;; Query time: 125 msec
;; SERVER: 127.0.0.1#5353(127.0.0.1)
;; WHEN: Mon Jan 18 00:38:25 2016
;; MSG SIZE  rcvd: 171

Setting up dnsmasq

Dnsmasq is very common and is available in Raspbian, installing it is easy:

$ sudo apt-get install dnsmasq

Now we have to do some configuration in /etc/dnsmasq.conf. These are my recommended settings. Please note that the interface option is the network interface that dnsmasq will serve, and in my case that is wlan0. You have to change it to the one that applies to your case.

domain-needed
bogus-priv
no-resolv
interface=wlan0

Now comes the interesting part. We are going to tell dnsmasq to use a China DNS server (114.114.114.114 in my example) for China domains and DNSCrypt server for all others. This is done by using the server option in /etc/dnsmasq.conf. Here is an example:

# Add other name servers here, with domain specs if they are for
# non-public domains.
server=/baidu.com/114.114.114.114
server=/sina.com/114.114.114.114
server=/ifeng.com/114.114.114.114
server=/phoenixtv.com/114.114.114.114
...
server=/deppon.com/114.114.114.114
server=127.0.0.1#5353

This is pretty straightforward. The last line tells dnsmasq to use your dnscrypt proxy if the domain you query does not match any China domains. In my config file there are 12238 lines for China domains so I’m not going to post them all here, you can get the snippet of my dnsmasq.conf here, and put it into your own dnsmasq.conf. The problem is to maintain the list for all China hosts. I am now using the list from the fqrouter project, it has been serving me well, since most common domains are already there. What’s worrying is due to the abandon of the project by it’s author, the list is now unmaintained. If you know a more updated list, please let me know!

The post Securing DNS Traffic in China appeared first on Anthony Wong.

Debian 哀悼 Ian Murdock 離世

bits.debian.org 上發佈了 Ian Murdock 的死訊,由於對 Ian 十分敬佩,看到之後立馬把它翻譯過來,本來已經在上月31號翻好並發到 debian-publicity 郵件列表,可是不知什麼原因那邊一直沒收到(已經用了兩個不同的 email)。由於剛好那段時間在日本旅遊,也就沒太注意。今天打算再看看什麼問題的時候,發現 Anthony Fok 已經把另一篇由 Bootingman 翻譯的中文版放上網站,既然如此我也不好把它換掉。可是翻譯畢竟已經完成,而且還花了點心血,結果還算滿意,因此就在這公佈一下。

原文:https://bits.debian.org/2015/12/mourning-ian-murdock.html

Ian Murdock 是一位自由/開源軟件的忠實擁護者、一名父親、兒子、以及 Debian 中的 ‘ian’,我們懷著沉重的心情,對 Ian 的離世致以深切哀悼。

Ian 於 1993 年 8 月啓動 Debian 計劃,並於同年不久推出首個版本。之後,Debian 逐漸成爲世界上的一個通用作業系統,無論從嵌入式設備,乃至國際太空站,皆能尋到它的蹤跡。

Ian 在創造 Debian 發行版與發展社羣文化時,無不專注於確保在道德層面,抑或技術層面,所做的事情都是正確的。譬如每個版本只會在最终完備時發佈,而 Debian 計劃對自由軟件的堅定立場,現已被視爲自由與開源領域的標準。

Ian 對於做正確事情的執著,使得他在 Debian 及往後的日子裏,一直朝向最美好的未來邁進。

Ian 的夢想猶在,Debian 社羣仍然非常活躍,上千的開發人員奉獻數不盡的日日夜夜,帶給世界一個穩定及安全的作業系統。

在這個傷痛的時刻,Debian 社羣眾人與 Ian 的家人心繫一起。他的家人亦請求各位,在這段艱難時期重視他們的私隱,我們對此表示尊重。各位來自 Debian 以及廣大 Linux 社羣的朋友,請將您們的慰問發送至 in-memoriam-ian@debian.org,所有唁函將被永遠保存。

譯者:黃彥邦 (Anthony Wong)

The post Debian 哀悼 Ian Murdock 離世 appeared first on Anthony Wong.

XMPP(Jabber)聊天快速指南

花了一点时间,写了一个XMPP+OTR的快速上手指南。之前曾写过一篇文章,已经安利过XMPP的种种好处了。 这次使用Libreoffice,做了一个两页纸的教程,以方便自由开源社群活动时使用。 下载 PDF版。目前只有简体中文版,若有人想帮忙,可以翻译为其他语言。ODT源文件在此

两岸开源社群面面观

声明:此文只代表我个人浅浅的认知观点,有任何不妥之处欢迎指正! 本文比较了两岸草根开源社群之间的异同,提出了草根社群共同面对的挑战和压力。也许两岸开源社群深度合作,才能解决这些问题吧。本来计划在9月份完成本文,却先后因为个人的感情变故、工作转变和亲人生病亡故一直拖到年底。
2014 年参加完台湾 COSCUP 以后我写了《两岸开源文化面面观》一文,在两岸开源社群中引发讨论。甚至还引起台湾出版业巨擘郝明义先生的关注,并在今年9月出版的他的新书《如果台湾四周是海洋》中提到并引用,同时郝先生也亲自参加了今年的台湾 COSCUP 2015。一年后,当我再回头看这篇文章时,难免觉得仍然有些片面,缺少实践考察和足够广泛的了解,还有很多地方需要再来补足。 从 2014 到 2015 这一年,通过各种平台,我不断与对岸的草根开源社群保持联系,持续考察和比较两岸开源社群的差异。今年参加 COSCUP 2015 期间,更是想办法补足之前缺失的地方,特别是与去年没能深入交流的朋友,加深了联系和交流,又与某些“COSCUP-Hater”聊,听听他们的看法。今年不仅与年轻人聊,更与年纪大的人交流,与传统大公司的人员交流,以获取更多"世代"之间的看法。与去年参加 COSCUP 之后对台湾开源社群的盛赞不同,今年我更多了几分理性和开明。也许也与这一年多来我本人心智看法的变动有关系。 [caption id="attachment_1208" align="aligncenter" width="500"]COSCUP 2015 的主题是“开放文化” COSCUP 2015 的主题是“开放文化”[/caption] 近几年,我更偏重去中心化、草根化的社群治理,所以这次去台湾完全只关注草根社群,已经不再丝毫考虑其他组织形式。决定在去年《两岸开源文化面面观》一文的基础上,再写一篇《两岸开源社群面面观》。

散兵游勇 VS 自治共荣

大陆的草根开源社群,很难有形成规模,形成社群优势的。即便是我参与的北京Linux用户组(BLUG)也无法很好的发挥社群优势,这与社群成员闲散,社群整体偏向自由的风格是密不可分的。然而更多的草根社群,则是因为太过闲散,无法组织起有效的开发,或组织新的活动,也就无法产生什么新的价值,大量曾经活跃的社群名存实亡。产生这个问题的原因是,社群成员个人自治能力欠缺,总希望让别人来帮忙,没有意识到自己动手治理自己的社群。 [caption id="attachment_1207" align="aligncenter" width="500"]参加 Hacking Thursday 和 WoFOSS 联合举办的活动 参加 Hacking Thursday 和 WoFOSS 联合举办的活动[/caption] 相对来说,台湾开源社群的自治能力很强,成员的自治能力,自我负责的意识也比大陆强一些。这次在台湾恰逢 Hacking ThursdayWoFOSS 两个社群一起联合举办活动,在参加活动的过程中,我与很多新朋友交流,发现台湾开源社群成员的自主意识比较强,社群自我治理的能力比较强。也就是相对大陆开源社群而言,台湾的开源社群更加成熟,有更多自身的价值,这样就能有稳定的社群文化输出,有更稳定的社群影响力。关于这一点,本文下面会多次提到。

商业导向 VS 社群主导

从成果的角度来比较,这么多年大陆几乎没有在国际上很响当当的,或具有开创性的开源项目,也许可以想起来的是阿里巴巴的 Tengine 比较国际知名,然而却不是一个由草根社群发起或维护的开源项目。OSChina网站收录了 5800 多个国产开源软件,看看有哪些是国际知名或有国际开创性的,有哪些是真正由草根社群维护或主导的。我的意思不是大陆没有国际知名的,像 fcitx 输入法框架、文泉驿字体等等也有一些,真正具有开创性和全球普遍应用的少很多。即便有,往往也不是由草根社群来维护和传承的。 既然没有自己的国际开源项目,那么我们就在现有的国际项目里挤进自己的位置吧。借着民族主义和政府”自主可控“的想法,比如国内某超级大公司(不能说其名字),鼓励公司员工贡献到国际主流开源项目里,或者从开源基金会的成员里挖人,比如 Linux 基金会、Docker 基金会、OpenStack 基金会、Linaro 等等。这家大公司贡献的同时,更利用强大的财力和人员优势,可以从这些基金会中争取到足够的话语权,甚至影响这些基金会最终为己所用,最终可以服务其商业目的,甚至为民族主义和政府的“自主可控”背书! 这次在台湾的一个收获是,听了 LXDE 桌面环境的作者,同时也是 Android 项目的主要贡献者 Jim Huang (黄敬群,Jserv) 的封麦演讲。在演讲中,他回顾了台湾这十几年来开源历程,其中一个个响当当的开源项目,让我知道除了 LXDE 和 PCManX 以外,还有那么多国际知名的开源项目,比如 CLE(中文化的Linux桌面)、Open Webmail,Firefox OS(台湾 Mozilla 主导),MCLinker(LLVM 链接器,MediaTek 开发),uming/ukai 自由字体……除少数外,几乎没有大公司的主导或者影响。 [caption id="attachment_1204" align="aligncenter" width="500"]IMAG0657 黄敬群在 COSCUP 2015 的封麦演讲[/caption] 草根社群基于兴趣开发的开源项目,在大陆并不是没有,最终往往还没成气候就死掉,或者被大公司收入囊中,亦或者封闭起来自己创业,沦为商战炮灰。在商业大潮中,我们需要涌现更多由草根底层社群维护的开源项目,这需要从社群治理到项目管理等多方面共同入手和改变。

学校领导 VS 学生自治

草根社群的一个重要组成和人才来源就是学生社团。自从去年在 COSCUP 上知道了台湾的 SITCON(学生计算机年会) 之后就一直很关注此组织的发展和其活动方式,我还曾观看 SITCON 2015 的在线直播。 除了办会,还在这两年推出了夏令营,社群讨论会等等多种活动形式。在我看来,像 SITCON 这种跨学校间的大范围社团联盟组织,具有非常强的生命力和社群影响力。今年 COSCUP 2015 上,无论是学生志愿者还是演讲者,很多都是 SITCON 的成员。他们在传播开源理念,传递贡献精神和参与意识上,付出了巨大的努力。 [caption id="attachment_1210" align="aligncenter" width="500"]SITCON 在今年香港开源年会上的演讲,SITCON 现已发展到香港 SITCON 在今年香港开源年会上的演讲,SITCON 现已发展到香港[/caption] 中国大陆没有一个跨学校间的社团联盟组织,即便有也会被取缔或者被党团收编,强力管控起来。很多高校都有自己的开源社团、Linux 协会等组织,绝大多数都在学校党委、团委等领导的强力管控之下,活动自由受到极大影响,更不可能有丝毫的社团影响力,难以在学校中吸引到学生群体的注意。更有些社团组织在学校的影响之下,变成了创业推进社团,完全走向了逐利。不过也有一些夹缝生存的社团组织,他们尽其所能创新活动形式,引入适宜学生的开源项目,引导学生进入开源贡献的队伍。这其中的佼佼者如中科大的 USTC LUG 和清华大学的 TUNA 协会。 根据几年前我的观察,发现社团里的学生群体普遍缺少自治能力、自我约束和自负其则,这一点在二类本科和三类本科学校尤为明显。去年我工作过的公司就是利用了学生的这个特点,瞄准差一些的学校学生,急于追赶且忧虑就业的心情,向学生群体灌输“开源即免费分享”、“开源贡献=大公司敲门砖”的思想。这种做法虽不能算错,但让学生群体如此“利欲熏心”,是非常不利于学生自治能力提高的,更不利于草根开源社群的构建和发展壮大。

草根开源社群的挑战

无论大陆还是台湾,草根开源社群面临的挑战都有出现,且日益严峻,这些挑战每一个都影响到社群的生存和发展。下面仅就我观察到的社群挑战,说说看法。
  • 青黄不接的代际传承
很多开源社群都面临这样一个问题,都在担心“继承人”的问题,很多社群就是因为没有人继承而慢慢死掉了。现在面临的情况是新的社群成员还没成气候,老的社群成员就离开了(事业变动,个人原因等等)。即便是北京有像 BLUG 这样从很早就定下代际传承的,也依旧面临青黄不接的问题,深深的担忧。这次参加台湾 TOSSUG(台北开源软件用户组)的活动时,发现他们也同样发愁这个问题,很多时候发现开源贡献者或者参加线下活动的就是那些人,很少见到新面孔。 如何解决呢?11月黄敬群来北京,参加活动并和 BLUG 一起聚会聊天。他一针见血的说到“开源社群需要更‘开源’”(广开源路),需要社群更多包容能力,需要拓展更多的渠道,也需要积极培养新手的成长(这正是黄敬群现在台湾做的事情)。在大陆草根开源社群的生存空间和渠道很窄,这就限制了发展的能力,加之社群能力有限,发展困局非常严重。我依旧会在 BLUG 多作尝试,探索社群治理的新模式,努力开拓更多渠道和生存空间。
  • 中心化的压力和诱惑
另一项挑战是大公司看到开源社群的价值以后,希望“招安”。有人会说,这样不会很好吗?但这样会牺牲掉社群的独立性和轻利性,会进一步削弱自治能力。对缺少自主能力的人,大公司的诱惑力很强的。黄敬群在今年 COSCUP 的封麦演讲上直言:“本来你就可以自己改,不要沦落为某些商业公司的‘抬轿者’”。比如国内某 Linux 发行版,最后就是创业并走入政府热门行业“国产操作系统”,甚至为“自主可控”的民族主义背书,实在让人唏嘘不已。 我本人是非常看重社群自治和自主能力的,可以参考今年5月写的文章《开源社区最需要什么?》
  • 经济价值的转化
面临挑战,同时也蕴藏机遇。草根开源社群虽然轻视经济利益,但如果能有很好的产品,显然对其自身发展有极大的帮助。今年台湾 Ezgo 团队带我一起拜访了 Banana Pi 的设计者洪宗胜老师,顺便参观了他的工作室。Banana Pi 是洪宗胜老师和深圳的开源硬件社群一起完成的产品,非常成功也有极大的影响力。目前还有很多芯片厂商希望与其合作。 [caption id="attachment_1206" align="aligncenter" width="500"]Banana Pi 的设计者洪宗胜老师 Banana Pi 的设计者洪宗胜老师[/caption] 同样,还有脱胎自 COSCUP 的 “CPR 线路组”,成功创业承接会务专业布线和网络架设的业务。 “线路组”和 Bnanana Pi 的成功并不是孤立的现象,这背后既有社群治理的成功,同时也有敏锐捕捉市场需求的能力,最重要的依旧是踏实奋进,自主创新的实干精神。我们不需要天天混吃混喝,聚会打嘴炮吹牛逼的社群,我们需要能够创造交流合作机会(如 SITCON 和 Hacking Thrusday),或有能够产出具体成果(如“线路组”和 Banana Pi),或者可以主导和维护有国际影响力开源项目(如 LXDE)的草根社群组织。

跨越海峡的开源社群合作

我在《两岸开源文化面面观》一文的结尾发问“一弯浅浅海峡隔开的是什么?”,呼吁大陆可以通过开源社群的发展,进而推动公民自治。一年过去了,草根开源社群的非但没有发展,反而大跨步退化。自治能力丝毫没有提高,开源社群一个个倒掉,或投入大公司和政府的怀抱,就更别提什么公民自治了! 大陆和台湾的草根开源社群,面对的挑战是相似相同的。台湾因为成员有相对较高的自治能力,社会环境比较自由(主要是互联网),解决问题也许会容易一些,社群治理会简单一些;而大陆的优势则是机会比较多,资本相对集中,适宜创业开发。既然如此,大陆和台湾的草根开源社群完全可以合作,共同建立跨越海峡的开源社群,推进开源在两岸间的双向落地。我相信草根开源社群,也就是去中心化的社群合作,要比其他方面的合作更容易,因为年轻人之间有相似或相同的文化,对去中心化的社群治理有广泛的认同,大家对真正的开源精神(黑客伦理)也有更多的共识——这是真实存在的共识,不是“没有共识,强说共识”。 [caption id="attachment_1202" align="aligncenter" width="500"]郝明义先生的赠书 郝明义先生的赠书[/caption] 我希望两岸间的开源社群合作,可以遵循“自由自治,相互尊重,草根融合,联结共荣”的原则。每个社群应懂得“自己的社群自己治理”;社群里的每个成员也应自负其则,切实负起发展自身社群的责任。同时社群和社群、人与人之间也应该尊重彼此社群的特性,尊重对方选择的社群发展路线(比如创业或停掉)。同时我希望的是底层草根之间的融合与合作,而不涉及企业商业公司社群,甚至政府部门;只有草根社群之间才有可能对真正的开源精神(也就是黑客伦理)有较多的共识,才有可能深度融合与联结。最终达到两岸开源社群的共同繁荣。为何我要提出这十六字原则,也与这一年来我对开源社群治理的看法有关,我认为只有自治才能共治,只有自私才能无私,只有自由才能共荣。郝明义先生在《如果台湾的四周是海洋》一书中说“要敢于和对岸合作”,这句话不仅说给台湾人,也说给大陆人。合作才能创造价值,闭门造车最终只会毁了自己。更何况,开源精神的本质,就是通过促进人与人之间的联结,创造更大的价值。 2015 年是 COSCUP 的第十年,十年来 COSCUP 为台湾本地的开源推广和开源发展,推进人与人之间的联结,社群之间的合作,作出了不可磨灭的贡献。展望 COSCUP 2016,即将到来的 2016 年将会开启 COSCUP 的“后十年时代”,这里我斗胆提个不成熟的建议:不妨将 2016 年 COSCUP 的主题定为“两岸开源社群合作”吧。我衷心希望两岸开源社群可以加深合作,互通有无,互相融合,让 2016 年成为两岸开源社群合作的元年。 [caption id="attachment_1205" align="aligncenter" width="500"]感谢200多位志愿者的努力,让此次 COSCUP 如此成功 感谢200多位志愿者的贡献与付出,让今年 COSCUP 如此成功[/caption]

兰州荣膺《今日变革进步奖》是自娱自乐?

从CCTV得知家乡空气治理得好,得了联合国大奖,叫做《今日变革进步奖》。我不免心里高兴,想说给朋友们听。客居澳洲,给人说事得用英语。好在CCTV说得清楚,这个奖名字叫做“Today Reform Progress Prize”。

就我多事。我想引用一下其它得奖的城市,如果这些城市有大名,引用它们,可以显得老家兰州跻身前列了。新闻上说从11年开始发此奖,应该不难找到。这一找倒好,搜索了半个小时,不但其它城市没有找到,这个奖的英文名字都不清楚了。相关报道一共3篇,奖名各不同。

Today Reform Progress Prize
这个名字来自CCTV英文报道原文

Today Change Progress Award
来自 get-top-news.com的这篇报道英文极差,原本不值得引用,但是除了它再没兰州得奖的英文报道了。这虽然是英文新闻网站,从原代码里的方块字来看是国内出品。
Award for Today’s Transformative Step
这个奖今年除兰州还有其它得主。另外一个得主是:中国可持续发展工商理事会(CBCSD)。这篇CBCSD的报道又给此奖取了新的英文名。

这个国际大奖的英文名虽然各异,中文名却一直是同一个。用中文名字搜索,可以看出,今年得奖的一共五家,前述兰州,前述CBCSD,中国建材集团、国家电网和晶科能源控股有限公司。去年此奖的得主是上汽集团和霍林河循环经济示范工程。前年和大前年阙如。总之,所有荣膺此奖的都来自中国。既然是联合国大奖,中国年年大满贯,不免令世界瞩目吧。

这个迷我能猜到答案。我年轻时候参与过一些中外国际合作项目,有时候,中方合作者会提出奖项,用作政绩……这往往是自家项目做了一两年,需要外界肯定的时候。国际合作单位也有中国通,知道报道是给国人的面子用,不影响单位国际信用,还可以拿来建立关系,还可以当令牌免得小鬼档道,也就放灯通行。发奖单位名义上往往是国际合作单位的上级部门,或者上上级部门,具体也不用越级请示,大家都玩得开心就好。个别也有中方和国际单位闹得像夫妻吵架,不肯发奖的。

奖是中国制造给中国消费者享用,英文名当然不统一。

本文引用的三个带有英文名称的报道,CCTV算是比较诚实的,指明发奖单位是四个,UNFCCC(联合国气候变化框架公约)之外还有四家,中外各半。其它报道都是全文中用文,都更大胆一些,比如说“兰州在巴黎气候变化大会上获奖”。

兰州空气治理得到底怎么样?其实兰州不出名,找到翔实资料还不太容易。NGO Clean Air Asia年度报告报告数据量大,没官腔和颂歌,里有提到兰州去年的情况。去年2014年PM2.5兰州大体相当于全国74个采样城市的平均值,在65左右。北京是85,兰州胜出。2014年PM10兰州150多一些,北京在118左右,北京胜出。治理得怎样?PM10兰州在去年2014年比前年2013年更严重,增加了25%左右,同期全国平均值增加了15%左右。这就是不怎么样的意思。PM2.5方面,缺少往年数据来评定去年变化。2015年的第三方数据还没出来,也许兰州今年做得特别好,也末见得。自娱自乐之外是不是有真的进步,我们等今年的报道出来看看。


Welcome to Ghost

You're live! Nice. We've put together a little post to introduce you to the Ghost editor and get you started. You can manage your content by signing in to the admin area at <your blog URL>/ghost/. When you arrive, you can select this post from a list on the left and see a preview of it on the right. Click the little pencil icon at the top of the preview to edit this post and read the next section!

Getting Started

Ghost uses something called Markdown for writing. Essentially, it's a shorthand way to manage your post formatting as you write!

Writing in Markdown is really easy. In the left hand panel of Ghost, you simply write as you normally would. Where appropriate, you can use shortcuts to style your content. For example, a list:

  • Item number one
  • Item number two
    • A nested item
  • A final item

or with numbers!

  1. Remember to buy some milk
  2. Drink the milk
  3. Tweet that I remembered to buy the milk, and drank it

Want to link to a source? No problem. If you paste in a URL, like http://ghost.org - it'll automatically be linked up. But if you want to customise your anchor text, you can do that too! Here's a link to the Ghost website. Neat.

What about Images?

Images work too! Already know the URL of the image you want to include in your article? Simply paste it in like this to make it show up:

The Ghost Logo

Not sure which image you want to use yet? That's ok too. Leave yourself a descriptive placeholder and keep writing. Come back later and drag and drop the image in to upload:

Quoting

Sometimes a link isn't enough, you want to quote someone on what they've said. Perhaps you've started using a new blogging platform and feel the sudden urge to share their slogan? A quote might be just the way to do it!

Ghost - Just a blogging platform

Working with Code

Got a streak of geek? We've got you covered there, too. You can write inline <code> blocks really easily with back ticks. Want to show off something more comprehensive? 4 spaces of indentation gets you there.

.awesome-thing {
    display: block;
    width: 100%;
}

Ready for a Break?

Throw 3 or more dashes down on any new line and you've got yourself a fancy new divider. Aw yeah.


Advanced Usage

There's one fantastic secret about Markdown. If you want, you can write plain old HTML and it'll still work! Very flexible.

That should be enough to get you started. Have fun - and let us know what you think :)

Obfuscated SSH tunnel

VPN providers were cracked down, open source anti-censorship tools were eliminated. This is what’s happening in China and has become even more severe than ever. Shadowsocks alone is no longer reliable due to more powerful deep packet inspection implemented at the GFW.

I am now replacing shadowsocks on my gateway with obfuscated SSH tunnel, based on Tor‘s obfsproxy. To the impatient ones, I will first give a concise summary of the necessary steps of my set up. You can follow it without drilling down the details. I will explain in more details later. But please note that you have to follow the other instructions in this blog post to complete the whole set up.

Quick Set up

On your server

Assume your server runs Debian 8 (jessie) or Ubuntu, and its IP is 1.2.3.4, run these commands:

$ sudo apt-get install obfsproxy
$ mkdir /tmp/obfsproxy-temp
$ obfsproxy --data-dir=/tmp/obfsproxy-temp scramblesuit --password=QWLY42YHB75J3B57XOKYNNFJPOQ7APHL --dest=127.0.0.1:22 server 0.0.0.0:7700

On Raspberry Pi gateway

$ sudo apt-get install python-dev
$ sudo pip install obfsproxy

Edit ~/.ssh/config:

Host 1.2.3.4
  ProxyCommand nc -X 5 -x 127.0.0.1:3333 %h 7700

Run these commands:

$ obfsproxy --log-file=obfsproxy.log --log-min-severity=info scramblesuit --password=QWLY42YHB75J3B57XOKYNNFJPOQ7APHL socks 127.0.0.1:3333
$ ssh user@1.2.3.4 -N -D 1080

The post Obfuscated SSH tunnel appeared first on Anthony Wong.

SFD Phnom Penh 2015 roundup

It’s the second time I organize Software Freedom Day in Phnom Penh! I would like to thank everyone who volunteered, joined and/or presented yesterday. We had a great event and a nice turnout. It seems we managed to have a better focus on our audience this year.

What is coming out of the event is a multirotor course with free and open source software with the National Institute of Posts Telecommunications and ICT (NIPTICT) and more regular PPLUG meetings, a few planned events with specific schedules, e.g. Sirko Kemter from Fedora already committed to help us to host our very first Fedora release party and installfest in Phnom Penh in November. NIPTICT’s President also mentioned that they are having a new building under renovation at the moment and we will be able to host a bigger event with 200 people capacity for Software Freedom Day in 2016.

Here are some of our great moments to share with you:

sfd2015-preparationPreparation before the event
sfd2015mozillaMozilla Local Team
fedoraThanks to Sirko Kemter, we had a Fedora booth!
sfd2015presidentOpening speech by NIPTICT’s President
sfd2015fredmFree Software: what’s it and what can I do with it? by Fred
sfd2015fredBuilding multirotors with free software
sfd2015localizationLocalizing free software by Khoem Kokhem
sfd2015fedoraFedora.next for everybody by Sirko Kemter
sfd2015mozilla1Contributing to Mozilla community by Vannak Eng
sfd2015mappingOpen Source Mapping by Nhiep Seila
sfd2015leapUnderstanding virtualization by Sok Leap
We finished the event by playing drones together! We finished the event by flying quadcopters together!

Celebrate Software Freedom Day today!

Free and Open Source Software has come a long way since its inception and while we’re celebrating SFD for the twelfth time, the FSF is celebrating its 30th anniversary. Every software company now tends to use Free and Open Source Software but unfortunately that has just set the Software more as a commodity with very little benefit for advocacy, education or awareness. And so, in a world with Free Software used almost everywhere very few people notice or even care.

Software Freedom Day is here to tell people why we need to remind ourselves of the importance of Software Freedom and to get all the communities together to celebrate and introduce their philosophy to newcomers. Probably more than ever we need to go out and demonstrate the great many things that Free Software has done and enables everyone to do.

As usual events are listed on the SFD Map and should there be no event in your area you can always get together and run one in the upcoming few weeks. On top of all the good things Free Software brings we would also like to remind people that a good way to get started can be through Outreachy, a remote internships in Free and Open Source Software open to everyone regardless of their origins or differences. The next round of internships is from December 7 to March 7 with applications deadline on November 2. This is of course ideal for students in the south hemisphere as the program requires you to be available 40 hours a week but also for anyone either looking for a career change or applies what he/she has learned in a real software environment.

With all these years of experience we are sure your events will shine. And if you’re a little short of ideas you can always refer to our resources. One of note could be the latest Blender movie released end of August maybe followed by a discussion of how the Blender Foundation has been so successful over the years.

Finally we would like to thank all the people making SFD possible and that is our sponsors like the Google Open Source Programs Office, Linode, the Free Software Foundation and our various supporters in the media and community arena. But of course more importantly all the various Free Software communities from Google Developer Groups to Free Software Groups, GNU/Linux User Groups and the various universities interested in Free Software among them.

So, Happy Software Freedom Day to all of you!

Celebrate SFD with us on 19 September 2015!

Software Freedom Day 2015 Phnom Penh

blog-sfd-pp2015The Digital Freedom Foundation is organizing our Software Freedom Day event in Phnom Penh together with the National Institute of Posts Telecommunications and ICT and the Ministry of Posts and Telecommunications on September 19, 2015 at the NIPTICT Building. There will be 10 presentations and several lightening talks with topics covering free and open source software ranging from operating system, virtualization, drones, mapping, servers, to security. Here is the detailed schedule.

We aim to target both the university audience and the young workforce and expect to have a hundred audiences to join. All in all it’s been a joy preparing for this event together with Makara, Rapid, Arky and Fred. It also allows us to talk and plan resources with people from different local communities such as the Open Institute and FPV Cambodia.

The event will start at 1:30pm tomorrow, if you happen to be in Phnom Penh please do drop by!

web-banner-chat-we-re-organizing-h

恋爱中的UNIX哲学

已经有三个多月没有更新博客了,主要是忙着参加六月香港的开源年会(HKOSC),以及八月的台湾COSCUP开源人年会,这两个会我总共有3个演讲要讲,准备演讲外加办理各种旅行证件和手续,占去了我大量的时间和精力。当然于此同时还和我的女神Eris牵手在了一起,和她交往的这些日子以来,还是很快乐和欣喜的,虽然异地相隔万里。
上个月为了准备COSCUP的演讲,我又翻阅了《Linux/Unix设计思想》(作者是 Mike Gancarz)这本书,虽然后来这本书里的内容并没有被我用到COSCUP的演讲中。但却让我联想到了正在经历的恋情,以及之前爱情的经验,赫然发现UNIX哲学竟然可以在爱情中找到应用,而这些应用却一点也不牵强附会,让我不由得对伟大的UNIX哲学,更敬三分! 本文更多的谈论自己的理解和感悟,以期用 Hacker 的思维模式和新颖的角度看待爱情。欢迎交流哦!

何谓“UNIX哲学”?

提到“UNIX哲学”,很多人会首先想到KISS原则(Keep It Simple and Stupid),这就是为什么我会将UNIX哲学和爱情联想到一起,因为KISS嘛(哈哈哈~)~其实UNIX哲学中不仅仅包含KISS原则,更有其他一些相关细节,但KISS原则依旧是核心思想。 事实上,所谓“UNIX哲学”有很多版本,可以看到维基百科就列出了四种解释,另外还有Eric.S.Raymond在《UNIX编程艺术》一书中总结出来了17条原则。而这里我更倾向于选取 X Window 系统开发组成员之一的 Mike Gancarz 所写的九条格言,因为这是目前最广泛接受的。 1 小即是美 2 让每一个程序只做好一件事情 3 尽快建立原型 4 舍高效率而取可移植性 5 使用纯文本文件来存储数据 6 充分利用软件的杠杆作用 7 使用shell脚本来提高杠杆作用和可移植性 8 避免强制性的用户界面 9 让每一个程序都成为过滤器 目前很多人认为UNIX哲学已经弱化了,已经无法追上时代脚步了,比如 systemd 和其追随者都认为UNIX哲学已经不够为现今时代所用,不过我倒认为 systemd 恰好是黑客伦理和UNIX哲学的体现呢。因为本文并不是讨论UNIX哲学,因此相关展开和外延可以搜索相关文档,也可以看 Mike Gancarz 写的《Linux/Unix设计思想》(Linux and the Unix Philosophy)一书,或者是ESR的《UNIX编程艺术》。

UNIX哲学的爱情启示

一点也不牵强附会的说,UNIX哲学的九句箴言完全可以一一对应的应用在爱情中,增加俩人之间的连结,增强感情。下面就谈谈我自己的理解。

1. 从小处着眼,创造小感动

简单说就是“小即是美”,也就是用一切机会创造小感动,加深感情。这种小感动,可能是一个小礼物,一次小约会,一个吻,一次温馨的聊天,甚至仅仅只是一句话而已。 11870941_10204945790024977_4419727180094315724_n 女神Eris在今年七夕节时发我的信息,当天我还在台湾刚刚参加完COSCUP。 想象一下,对方送你一辆豪车和一个贴心的小礼物,哪个产生的感动更强?哪个更能增加俩人之间的连结?很多时候大而全,不如小而精,人性在情感的选择上很有意思,可能会忽略大量付出,但却对一两次小的感动无法自拔。这是因为每一次的感动背后,其实都蕴藏着建立连结,蕴藏着丰富的人性关系。

2. 和TA在一起,只需做好这一件事

很多事情在头脑中萦绕不去,比如我依旧会时常回忆和女神Eris一起畅游京城,一起喝咖啡,一起牵手走过黑夜的胡同和小巷。为什么这些事情在我脑海里不断重演,在于我内心将这件事和她联系在了一起——建立连结。 通过几次恋爱经历,我学到一件事,就是无所谓两个人在一起做什么事情,无论是一起看电影,看书,写代码,调bug,学习,工作,吃饭……只要是和她在一起,这件事情往往印象深刻,于此相关的各种记忆也大量涌来。因此一件事情在我脑海里变得有意义,是因为和喜欢的人在一起,共享同一段时光。 这就教会我一个经验,和她在一起就要专心于她,而不是解决事情本身。因此和她一起的时候,最好安排一些没什么意义的活动,比如吃饭啊,看书啊,看电影,旅游啊这种,因为一个人做也是做,俩人做也是做,但会因为多了她而赋予意义感。当然这也要另当别论的考虑,比如有些女孩喜欢做一些有意义的事情,这时候给予陪伴就是最好的爱。

3. 尽快表白,减少暧昧

当爱情展露出些许“原型”的时候,就应该将其明确,而不是保持暧昧,这也是女神Eris教会我的。表白的作用就是将这样的情感以爱情的形式明确下来,让双方都可以转换角色投入其中,而不会在暧昧关系中试探和浪费时间。 我很喜欢的Hacker,也是《大教堂与集市》一书的作者 Eric S. Raymond 在《大教堂与集市》中提出“Release Early, Relase Often”(早发布勤发布)。同样的,这句话放到爱情中,也可以表述为“早表白,常言爱”,也就是在恋爱关系已经初露端倪之时,就尽快明确下来,否则早一点结束暧昧,对双方都有好处。另一方面,如果能够在关系相处中,经常表达爱意,也能明确和加深互相之间的感情。

4. 多移植经验,少冒险少作

谁都不是天生就会恋爱的,而很多经验也是需要从别人那里学来。无论是网上还是朋辈,多多学习别人的经验确实有帮助。但注意哦,学习不等于是生搬硬套的移植,这就如同很多代码与运行其的环境有很大关联,这样的代码就不要移植过来,因为可能要同时把各种部署环境都一并带过来,这就太臃肿了。我们需要移植的是两类,一类是与我们目前境遇相似的,就如同在Ruby平台上运行Ruby代码是很合适的,但此时如果弄了段Node.js代码过来,我们就要做大量适配工作;另一类是本身就具有高可移植性的经验,针对某一类问题,总结出的相应的解决方法,因此这类经验就很好。 另外,父母的恋爱经验是最好的学习素材。因为心理学(主要是客体心理学)认为人的恋爱关系往往是与父母亲密关系的投射,因此父母的恋爱经验,或者他们之间的幸福故事,简直是绝佳的教材。因为我们首先在恋爱中倾注和投射了与父母关系的模型(部署了环境),因此在这个基础上构建的亲密关系(构建代码项目),因此很多经验甚至可以直接移植过来。 移植经验的同时,不要做太多冒险的事情,不要作。传统的虽然未必会带来更多好处,但绝对不会产生问题,因此保守一点的恋爱并非有问题。还有就是不要考验对方,考验一段情感关系,这是相当愚蠢的!当然做一些有创意的事情挺好,送对方一些有创意的小惊喜啊(注意,一定要小),做一些颇有情趣的小事啊(一定是小事),也是很不错的。

5. 爱要多多表达,直白胜于婉转

中国人的传统认为爱是内敛和含蓄的,认为既然在一起,只要多做就行了,不需要表达出来。但其实殊不知,更多爱的表达,会大大推进情感的加深,更多多让双方明确感情关系,明确内心的需求,也明确爱的责任。曾经很喜欢美国作家欧-亨利的短篇小说《麦琪的礼物》,认为里面讲的爱情很感人,但最近几年越来越觉得这样的爱情太伤人,里面的故事恰好是因为缺少沟通而导致的悲剧啊。所以有爱就多多表达,不要再想什么只要做了对方就一定会开心,其实不表达出来,对方为什么会开心? 估计会有人拿UNIX哲学里的一条反驳我,因为UNIX下当命令成功执行,屏幕上是不会有多余输出的。但人不是机器,当我替对方做了一件事情的时候,我其实是期望着对方有反馈的,这应该是人之常情嘛。因此多多表达出来肯定是有好处的。 同样的,愤怒、哀怨、失望和无助,也是需要表达出来的,这样对方才会一起分担,痛苦才会变得更少,更容易相处。对方如果做了不好的事情,说了伤自己的话,第一时间以不伤对方自尊的方式告诉TA,也能更好的让对方接受自己的错误,更能让关系进一步。 很多时候,我们为了关系着想,或者避免争吵,会刻意压抑自己内心的想法和诉求,不愿意向对方提出来,这样的结果往往会造成更深的伤害,或者放纵对方的错误做法。所以多多沟通内心的感受是非常非常有必要的,内心的感受只有自己最清楚,说出来才能让对方感同身受,让对方接受和体谅此时此刻的心境。

6. 充分利用亲朋好友的杠杆作用

很多网上的文章都谈到了,要想搞定一个妹子,如果能让她的亲朋好友也接受自己,会搞定妹子。这不是没有道理的,亲朋好友对一段感情的认可,不仅可以减少对情感的干预和阻碍,更可以在感情可能进入歧途的时候,帮助修正。 不仅要搞定对方的家人朋友,很多时候自己这边的朋友更重要。有些朋友会因为羡慕产生嫉妒,有些时候甚至是下意识的想法,会奚落、诅咒甚至是阻碍俩人之间的感情。所以安抚或者远离身边的各色朋友,也是非常有帮助的。

7. 使用社交平台公开和固化情感关系

与父辈那一代不同,随着科技的发展,我们有了更多机会和平台”秀恩爱“,利用社交网络表达关系,真的是一种非常好的方式,公开表达的情感关系,也是一种公开的责任,这也对双方来说增加了一些公开的制约。 因此在社交网络”秀恩爱“,并不是像很多人说的那样,”秀恩爱死的快“,而恰恰相反——”秀恩爱更有爱“!因此大胆在公开的社交平台秀恩爱放闪,是一件非常好的事情。 当然,照顾一下单身狗也是必要的,太过甜腻咸湿和限制级的照片文字,最好不要发出来。反倒是情趣幽默又温馨的往往会感染所有人,当然也包括情侣自身。也许多年以后,翻到曾经的这些甜蜜记录,也是让人心头一暖。

8. 避免过强的控制欲,减少单一化选择

毋庸置疑,爱情是排他的,是只属于两个人的。但过度控制和限制对方,短期虽然可以巩固关系,但长久来说却是不利于情感发展的。当一个人缺少自信的时候,也会不相信对方,失去信任别人的能力,进而增加控制欲,这在依恋模式是”焦虑型依赖模式“的情侣身上,经常可以看到。 另一方面,过度的控制对方,不仅仅是限制其自由,更是斩断其对外界的连结,当一个人对外界的连结变少的时候,就会变得缺少自信,增加猜忌。此时两个互相不自信,又互相猜忌的人,怎么可能会有稳定的关系。 因此如果是真爱,就要给对方足够的空间和自由度,更要允许其与外界建立更广泛的连结,当然于此同时自身也要多多与外界建立连结,只有这样才能让双方都更自信,也更信任对方。

9. 让生活的每一处都成为情感的连结

之前看过一篇文章很有意思,说追女生可以每天给她送早餐,送到第十天的时候突然不送了,因为巴普洛夫条件反射原理,这个姑娘一定会产生怀疑,因此变得怀念和感动。这其实就是“小即是美”的应用之一,因为创造了连结,增加了俩人之间的亲密感。 因此生活处处都可以成为沟通感情的连结,发挥和制造一切机会,从小处着眼,发挥连结的价值,让感情在连结中越来越深入。

不能忽略了另一面

爱情中没有”42”(代表The answer to life, the universe and everything),不要妄图用一套固定方法解决所有问题。面对不同的人有不同的做法,此文里所写的只是我的个人经验,外加一些从网上看到的文章总结,并不能涵盖大多数情况。

爱情就是多多建立连结

我认为,UNIX哲学的核心虽然是KISS原则,但其真正理念却是“创造连结,成就伟大”。比如我们都熟知的“一个程序只做好一件事”,这背后的理念是通过管道和重定向等机制,将小程序有机的连结在一起,来做更多更好的事情。还比如开源社区,其本质也是创造人与人的连结,发挥人在连结中的作用,充分合作和创新,产生更多伟大的开源软件。而爱情也是如此,通过创造两个人之间更多的连结,来加深感情,而这一点与UNIX哲学是异曲同工的! 因此,找到自己爱情中的一套方法并善加利用,记得多多建立连结,一定会有幸福的未来!祝各位 Happy Hacking! Happy Loving!

干净、美丽、闲适、优雅的海滨煤城Newcastle

<!–
小鱼说:

风景好吗?说说看海豚的事。

大狗说:
–>
(尚末完全写完,提前发布。)

最让人喜欢的不是风景,而是人。小鱼在店里端详礼品,退了几步,撞到一位老人。他说:“My life has changed! A lady in my arms!” 待到小鱼和我回过神来,听懂了老人的幽默,他已经信步走出门了。都铎街(Tudor)和娈峰街(Beaumout)交接的地方有蜗窄的小小市场,算是本地唯一每日运作的市场了,里面有七八个商家,一个小姑娘搭了个凉棚在里面弹唱,边上写着“请资助我游欧洲”。大凡有市场,就有人在边上弹唱,澳洲的日常市场就是这样。我买了一个印有美元票面的钱包,店家说,你去过美国吗?你看,这些商贩真是没话找话,这样算打开话题了,聊了十来分钟。店家是南非人,早年移民到美国,晚年在这里享受生活,走的时候我对他们家三代都很了解了。


Hiring Pike Programmers

Once in a while i have someone reject to work with me because they don't know Pike. What they are really saying is, that they are not willing to learn something new.

If you are a decent programmer, then learning a new programming language is not hard. Technology changes all the time, and every year you'll learn new frameworks and tools. That's part of your work. So why shy away from learning a new language?

If you can't bring yourself to learn a new language then i suspect you'll also have a hard time learning anything else. So actually i should thank you by refusing the job because of that.

You say: learning a new language is hard.

If you believe that, you haven't tried enough. Sure, if you pick some of the more unusual languages like Haskell, it may be hard (but i don't know, i have not tried learning Haskell yet) and in general, learning your second language is probably the hardest (because the first language you learn, everything is new and you expect it to be hard, but with the second language maybe you fear it is as dificult as the first one, and you don't want to go through that again), also learning a new syntax may take some getting used to.

But all of these hurdles are measured in days.

Pike in particular has a syntax very close to C and Java. (that is, operations that are the same in C, Java and Pike also use the same syntax, with very few exceptions). This makes the syntax also similar to Javascript, PHP, and the many other languages with a C-inspired syntax. Picking that up should not be hard.

The rest is learning the Pike libraries and figuring out what makes Pike tick. You should have that down within a few weeks.

This is the same for pretty much any other language you might start to learn.

I am talking from experience here. I'll give you a few examples:

At my first fulltime job i was hired for my Pike experience. As a junior programmer who hadn't finished univeristy yet, i didn't really have any work history. But i did have a number of Pike modules for the Roxen webapplicationserver that i could show off.

At the same time a university graduate was hired, who had not even seen Pike before joining the team. Within a few weeks she was as productive as the rest of us, and having finished her studies she arguably knew more about programming and could explain more about Pike than i could.

At another job a few years later one of my managers who had just recently joined the company fell in love with Pike, and when he left he built his own company using Pike as the main development language. This guy was not even a programmer.

When i came to china, my first job was for a python programmer. I had learned python by then, but i had no practical experiece whatsoever. I was allowed to do the programming tests in Pike (they had an automated testsuite, which of course could not handle Pike, so in my case the answers were reviewed manually. They had no problems reviewing their tests in a language they had never seen before. That's how good they were). One of the tests i did in python, and i passed and got the job. I was productive from the start.

A few years ago i hired 3 chinese students to work for me. Since this was the first time i hired anyone, i was not sure how learning a new language would go down, on the first day, possibly their first experiene working with a foreigner too. So the first project i gave them was in Java. It was a Java client for the sTeam server. Two of the students left after the summer holidays were over, but one stayed on, and his next project was in Pike. Also for the sTeam server, so he could reuse his knowledge of the APIs that he learned during the Java project, but he did have to learn the language itself. He was productive within a few days.

Last year i was hired to help with a PHP project, using the Laravel framework. I had never really written PHP code before, but the framework was not so different from others (eg Django) so that i was productive immideately. And i ended up fixing other peoples code too.

This summer, i was working with 3 students for Google Summer Of Code. One student worked on the sTeam server, and had to learn Pike for that. He did it during the get-to-know period and started churning out code from the first day of the coding-period.

Another student picked a smalltalk project. She learned smalltalk as soon as she picked the project, joined the pharo-smalltalk community and became a recognized contributor to the pharo 4.0 release. All before her proposal for the GSOC project was even accepted.

Convinced yet?

You say: Noone else uses Pike. It won't help me get a job.

That is probably true. But it is becoming less true as time goes by.

One of the problems with hiring is that, just as you believe learning a new language is hard, so do the hiring managers, and thus they search only for programmers that already know the language that they will need to use.

In the Pike community too. I was the only Pike programmer available who liked moving countries, and so i had my pick for jobs in the USA, in Germany, in New Zealand, in Latvia. Thanks to Pike i got around. Try that with a popular language.

Fortunately, this is changing. Like my first China job, more companies recognizing the ability to learn as more important than a particular language. For them it won't matter which programming languages you learned, as long as you can demonstrate your learning skill. In fact, learning an unknown language will let you stand out as someone serious about learning programming languages.

Learning new languages will also increase your confidence in your ability. For that PHP job i was never asked how much PHP experience i had. I did make clear that i had no experience with Laravel, which is something they could not expect from everyone, even if they had plenty of PHP experiece. But i had experience with similar frameworks, and i was confident that i could pick up what i needed quickly. And i proved it.

When i am hiring programmers myself, i definetly don't care which languages they know. All i care is that they know at least two languages. These people have at least gotten over the second language hump, and learning a third language will be a breeze. Whether it's Pike or any other language.

Stop telling me that you can't learn a new programming language. You can! Because if you couldn't, you would not qualify as a programmer to begin with. At least, i would not hire you.

2015 SFD registration is on!

I am very glad to share with you that registration of the twelfth edition of Software Freedom Day has been opened since early August and you can see from our SFD event map, we already have 62 events from more than 33countries shown in our map. As usual registration happens after you have created your event page on the wiki. We have a detail guide here for newcomers and for the others who need help, the SFD-Discuss mailing would be the best place to get prompt support.

Don’t forget to tell people about SFD! Simply use one of the banners we’ve made if you are organizing, participating, attending or speaking at a SFD event by placing it on your webpages and link it back to your SFD event page or http://www.softwarefreedomday.org. You can also help us to promote SFD by placing our SFD counter with your own language as well!

So get ready to celebrate SFD on September 19 Saturday and happy preparations to all!
Celebrate SFD with us on September 20, 2014!

Bitcoin accepted on my store enveloped.com.au

I’m running the fledging new Australian store enveloped.com.au – it has lots of stuff in envelop size and I offer free postage.

Now with recent addition of bitcoin paymnent, as a special gift with everypurchase made, you will receive one free btc to redeem at one of Brisbane’s first stores to barter in this unique and decentralised payment system.

Unique to Enveloped.com.au is the option of making purchases using Bitcoin. Enveoped.com.au is one of the first known online busineses in Brisbane which is pioneering this great new way to shop.

If you don’t know already bitcoin is a fabulous new way to pay for products and services that allows you to shop with total freedom *see more information on bitcoin

As a special gift to you, all purchase from enveloped.com.au, will receive 0.001 of BTC to redeem however you like.

bitcoin


巴比看娃

妈咪说巴比看娃就是边

IMG_3027

2014-08-31


Boost WIFI Speed by Forcing 40 MHz Channels in hostapd on RPi

802.11n can double the channel bandwidth of 802.11g from 20 MHz to 40 MHz, but this operation mode is not recommended in areas that the spectrums are congested and likely interfere with existing WIFI and bluetooth devices. As a result, hostapd will not enable 40 MHz when it finds other channels are being used, like what is seen from the hostapd log below:

nl80211: New scan results available
nl80211: Received scan results (16 BSSes)
40 MHz affected channel range: [2397,2447] MHz
Neighboring BSS: 1c:fa:68:8e:a6:e0 freq=2412 pri=1 sec=5
Neighboring BSS: e0:05:c5:4c:e2:b6 freq=2427 pri=0 sec=0
Neighboring BSS: b0:48:7a:6a:9d:32 freq=2437 pri=6 sec=10
40 MHz pri/sec mismatch with BSS b0:48:7a:6a:9d:32 <2437,2457> (chan=6+) vs. <2412,2432>
20/40 MHz operation not permitted on channel pri=1 sec=5 based on overlapping BSSes

However, this is unrealistic in modern cities. You should be grateful the primary channel you choose has not been used already, let alone the additional one for 40 MHz. What can we do? We have to force hostapd to turn on 40 MHz anyway. But since hostapd does not have any configuration options for that, we have to recompile hostapd from source. Actually, this has been done in other distros. For example, OpenWRT and Arch has patched their hostapd with the noscan patch, which adds an option to force 40MHz mode regardless of the environment.

Before turning on 40 MHz, the iwconfig on my laptop is like this, notice the bit rate is only 54 Mb/s:

wlan0     IEEE 802.11abgn  ESSID:"bibiworld"  
          Mode:Managed  Frequency:2.437 GHz  Access Point: C8:3A:35:C9:17:4A   
          Bit Rate=54 Mb/s   Tx-Power=15 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=70/70  Signal level=-32 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:30  Invalid misc:683   Missed beacon:0

Now let us start. First you need to add a deb-src source to apt so that we can download source packages. Note that I am still using Raspbian Wheezy. If you use Jessie, change the deb-src line according to your original deb line.

pi@raspberrypi $ echo "deb-src http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi" \
 | sudo tee /etc/apt/sources.list
pi@raspberrypi $ sudo apt-get update
pi@raspberrypi $ apt-get source hostapd            # download source of hostapd
pi@raspberrypi $ apt-get build-dep hostapd    # download all build dependencies
pi@raspberrypi $ cd wpa-1.0

Save the following patch into a file:

--- wpa-1.0.orig/src/ap/hw_features.c      2012-05-10 05:56:09.000000000 +0800
+++ wpa-1.0/src/ap/hw_features.c        2015-07-18 17:22:37.788215009 +0800
@@ -430,6 +430,7 @@
                oper40 = ieee80211n_check_40mhz_2g4(iface, scan_res);
        wpa_scan_results_free(scan_res);
 
+#if 0
        if (!oper40) {
                wpa_printf(MSG_INFO, "20/40 MHz operation not permitted on "
                           "channel pri=%d sec=%d based on overlapping BSSes",
@@ -439,6 +440,12 @@
                iface->conf->secondary_channel = 0;
                iface->conf->ht_capab &= ~HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET;
        }
+#endif
+       wpa_printf(MSG_INFO, "Force 20/40 MHz operation on "
+                  "channel pri=%d sec=%d even there are overlapping BSSes",
+                          iface->conf->channel,
+                          iface->conf->channel +
+                          iface->conf->secondary_channel * 4);
 
        res = ieee80211n_allowed_ht40_channel_pair(iface);
        hostapd_setup_interface_complete(iface, !res);

pi@raspberrypi $ patch -p1 < patch.diff

Because we are going to create a new hostapd package, it’d be a good practice to increment the version number by adding a new section at the top of debian/changelog, like this:

wpa (1.0-3+deb7u3) wheezy; urgency=low

  * Force 20/40 MHz.

 -- Anthony Wong   Sat, 18 Jul 2015 16:30:43 +0800

wpa (1.0-3+deb7u2) wheezy-security; urgency=high
...

Now we are ready to compile the packages:

pi@raspberrypi $ fakeroot debian/rules binary

If it succeeds, install the new package with dpkg -i.

Restart hostapd, it should now force 40 MHz mode:

nl80211: New scan results available
nl80211: Received scan results (23 BSSes)
40 MHz affected channel range: [2397,2447] MHz   
Neighboring BSS: e0:05:c5:4c:e2:b6 freq=2427 pri=0 sec=0
Neighboring BSS: 00:d0:41:c4:25:31 freq=2437 pri=6 sec=2
40 MHz pri/sec mismatch with BSS 00:d0:41:c4:25:31 <2437,2417> (chan=6-) vs. <2412,2432>
Force 20/40 MHz operation on channel pri=1 sec=5 even there are overlapping BSSes
HT40: control channel: 1  secondary channel: 5
Completing interface initialization

And my iwconfig output now shows Bit Rate is 150 Mb/s, yay!

wlan0     IEEE 802.11abgn  ESSID:"bibiworld"  
          Mode:Managed  Frequency:2.412 GHz  Access Point: C8:3A:35:C9:17:4A   
          Bit Rate=150 Mb/s   Tx-Power=15 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=70/70  Signal level=-28 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:31  Invalid misc:330   Missed beacon:0

The post Boost WIFI Speed by Forcing 40 MHz Channels in hostapd on RPi appeared first on Anthony Wong.

Deploy Shadowsocks on Raspberry Pi with ChinaDNS and Redsocks

Assume you already have a Raspberry Pi configured as a WIFI router like mine shown below, but you live in China and have to deal with the fact that many websites can’t be accessed due to GFW. Don’t be despair and with some hacking you can get your Internet freedom back.

IMG_20150714_134341

The mechanism is to use shadowsocks on your router which directs any traffic to a shadowsocks server in the free world. It’s simple to get it up and running on a local machine, but on a router you need to use redsocks to redirect traffic to the shadowsocks client running on your Raspberry Pi. DNS traffic has to be routed by redsocks as well otherwise your DNS replies will be contaminated. To remain as fast as normal when accessing China websites you also need to skip routing traffic to Redsocks for anything within the China IP ranges. Even if you don’t care about performance, this is still necessary in some circumstances like geoip restriction such as tv.sohu.com does not deliver contents if you live outside of China.

Finally, we want to improve the performance even further by using ChinaDNS. To avoid DNS poisoning, we can always resolve DNS over our secured shadowsocks connection, but this is not optimal if a China website have CDNs outside China. ChinaDNS queries local DNS servers to resolve Chinese domains and queries foreign DNS servers to resolve foreign domains, and from my testing it is useful to avoid DNS poisoning with the “DNS compression pointer mutation” option. (Update: I have switched from ChinaDNS to dnsmasq+dnscrypt, please read Securing DNS Traffic in China to see how it works.)

Shadowsocks

I assume that you have shadowsocks server running on a public server, so I will skip that part and only talk about the client side.

Installing shadowsocks is very simple, note that it will be installed under

/usr/local/
.

pi@raspberrypi $ sudo apt-get install python-pip
pi@raspberrypi $ sudo pip install shadowsocks
Downloading/unpacking shadowsocks
  Running setup.py egg_info for package shadowsocks
    
Installing collected packages: shadowsocks
  Running setup.py install for shadowsocks
    
    Installing sslocal script to /usr/local/bin
    Installing ssserver script to /usr/local/bin
Successfully installed shadowsocks
Cleaning up...

Start up shadowsocks while listening on local port 1080:

pi@raspberrypi $ sslocal -s <shadowsocks server IP> -p <shadowsocks server port> -k <password> -b 127.0.0.1 -l 1080

Redsocks

Install redsocks, simply apt-get from the archive:

pi@raspberrypi $ sudo apt-get install redsocks

Then you need to change the START option in

/etc/default/redsocks
from NO to YES, so that redsocks will start automatically at boot time and also can be started by
sudo /etc/init.d/redsocks start
:

pi@raspberrypi $ sudo vi /etc/default/redsocks
START=yes

Then update

/etc/redsocks.conf
. Most of the default settings work fine, just need to change
local_ip
in the
redsocks
section to your address of the network interface that accepts traffic from your local network. The default is 127.0.0.1, but that does not work well if you want to re-route traffic from other machines on your network, so change it to something like:

redsocks {
        /* `local_ip' defaults to 127.0.0.1 for security reasons,
         * use 0.0.0.0 if you want to listen on every interface.
         * `local_*' are used as port to redirect to.
         */
        local_ip = 192.168.0.1;
        local_port = 12345;
        ...
}

But we want traffic from other hosts in your network to be redirected by redsocks to your local shadowsocks client, which in turn sent to the the remote shadowsocks server. We need to pay special attention to DNS traffic, as DNS poisoning is prevalent in China. We need to take special care to redirect DNS traffic through redsocks/shadowsocks.

We also want all China traffic NOT to go through shadowsocks for performance. This can be easily done by looking at the destination IP, if it is in the China IP range we skip going through the REDSOCKS china. First we need to get all network segments allocated to China and save it to a file called

chnroute.txt
:

pi@raspberrypi $ curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt

These all can be accomplished by iptables. You need to run the following iptables commands, or put them in a local script and run it with sudo.

# Specify your shadowsocks server
SS_SERVER_IP=11.22.33.44

iptables -t nat -N REDSOCKS  # Create a new chain called REDSOCKS

# Do not redirect to shadowsocks server
iptables -t nat -A REDSOCKS -d $SS_SERVER_IP -j RETURN

# Do not redirect local traffic
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

# China traffic does not go through REDSOCKS
while read subnet; do
  sudo iptables -t nat -A REDSOCKS -d $subnet -j RETURN
done < /tmp/chnroute.txt

# Redirect all TCP traffic to redsocks, which listens on port 12345
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345

# These traffic go to REDSOCKS chain first
iptables -t nat -A PREROUTING -p tcp -j REDSOCKS

Run

iptables -t nat -L -n
to make sure the rules have been added correctly. Now start up redsocks by
sudo /etc/init.d/redsocks start
and let’s test it out by doing some web browsing on another computer in your local network. If that works fine, congratulations and you have set up everything correctly! If not, look at shadowsocks output and also turn on redsock’s
log_debug
and check if there is anything useful in
/var/log/daemon.log
.

ChinaDNS

ChinaDNS is not absolutely necessary, but as explained at the beginning it is desirable. There is no pre-built package so we need to compile it. It is simple to do:

pi@raspberrypi $ sudo apt-get install git automake
pi@raspberrypi $ git clone https://github.com/clowwindy/ChinaDNS.git
Cloning into 'ChinaDNS'...
remote: Counting objects: 815, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 815 (delta 0), reused 0 (delta 0), pack-reused 810
Receiving objects: 100% (815/815), 213.52 KiB | 111 KiB/s, done.
Resolving deltas: 100% (426/426), done.

pi@raspberrypi $ ./autogen.sh
pi@raspberrypi $ ls
aclocal.m4  autom4te.cache  chnroute.txt  configure     COPYING  install-sh  Makefile.am  missing  packaging  src
autogen.sh  CHANGES         config.h.in   configure.ac  depcomp  iplist.txt  Makefile.in  openwrt  README.md  tests

pi@raspberrypi $ ./configure 
...
pi@raspberrypi $ make
...

After it is successfully compiled, test it out:

pi@raspberrypi $ sudo src/chinadns
pi@raspberrypi $ host video.sina.com.cn 
video.sina.com.cn has address 58.63.237.200
pi@raspberrypi $ host www.youtube.com
www.youtube.com is an alias for youtube-ui.l.google.com.
youtube-ui.l.google.com is an alias for youtube-ui-china.l.google.com.
youtube-ui-china.l.google.com has address 46.82.174.68
youtube-ui-china.l.google.com has IPv6 address 2404:6800:4005:80b::200e
pi@raspberrypi $ sudo src/chinadns -m -c chnroute.txt
pi@raspberrypi $ host video.sina.com.cn 
video.sina.com.cn has address 123.125.22.225
pi@raspberrypi $ host www.youtube.com
www.youtube.com is an alias for youtube-ui.l.google.com.
youtube-ui.l.google.com is an alias for youtube-ui-china.l.google.com.
youtube-ui-china.l.google.com has address 74.125.203.138
youtube-ui-china.l.google.com has address 74.125.203.100
youtube-ui-china.l.google.com has address 74.125.203.113
youtube-ui-china.l.google.com has address 74.125.203.139
youtube-ui-china.l.google.com has address 74.125.203.101
youtube-ui-china.l.google.com has address 74.125.203.102
youtube-ui-china.l.google.com has IPv6 address 2404:6800:4005:808::200e

If it goes well, run

src/chinadns -m -c chnroute.txt
when your router boots.

That’s it! I hope these are useful to you.

Update: I have switched from ChinaDNS to dnsmasq+dnscrypt, please read Securing DNS Traffic in China to see how to set it up.

The post Deploy Shadowsocks on Raspberry Pi with ChinaDNS and Redsocks appeared first on Anthony Wong.

[转]小心!八个小细节可辨出身边的小人!

每个地方都有小人,通常,小人做人处事不太厚道,常以不良手段达成目的。 与小人相处,稍不谨慎,会吃大亏;学会分辨小人,非常重要。他们言行有以下特色:

喜欢造谣生事:

通常是另有阴谋目的,并不单纯以此为乐; 有时为了升迁,衬托自己优秀,也不惜丑化对手。 他们唯恐天下不乱,惯用「听说」造句,歪曲事实,无中生有。

喜欢挑拨离间

分化同事感情,制造纷争和事端,鹬蚌相争,结果渔翁得利。 他们口才好,善于撇清责任; 事后扮演和事佬,双面间谍,闽语所谓「双面刀鬼」。

喜欢奉承

「赞美鼓励」和「奉承拍马」不同,后者舌灿莲花有心机,热情又嘴巴甜,让人晕陶陶而迷失方向。 他们更刻意亲近上司,常伺机打小报告,备受宠爱。

喜欢阳奉阴违

工作方面,言行不一,善于表面功夫,也善于俟机邀功抢功。 待人方面,他们是表里不一两面人,有时面前夸你套出你的秘密,背后就损你出卖你。

喜欢见风转舵

谁得势就依附谁,谁失势就舍弃谁,所谓西瓜偎大边。 他们利用别人权势以提升自己地位,没有利用价值的人,他们不会想亲近,顶多虚以委蛇。

踏着别人鲜血前进,踩着别人肩头攀高

你种树,他乘凉;利用你替他们开路,成功时,不会报答你; 甚至翻脸无情抹煞你;他们占人便宜视为当然,怎会感激?

喜欢落井下石

只要有人或跌倒或失败,他们会追上来再补一脚; 例如,四处渲染那人「罪有应得」云云。他们也是事后诸葛,常说一些幸灾乐祸的风凉话。

喜欢找替死鬼

明明是自己言行有过错,却死不承认,昧着良心硬拗瞎掰,也要找一个冤大头(软柿子)来背黑锅。 他们口才犀利又敢发誓,很能误导大家以讹传讹,日久则众口铄金,积非成是。 有时「真相」就此石沉大海,永远被扭屈蒙蔽了。   事实上,小人的特色不只这些,凡是藐视法律,鄙弃道理,刻薄寡情,不遵循伦常道德,唯利是图,损人利己,容易鬼迷心窍…的人,通常都带有小人的性格。古人说“画虎画皮难画骨,知人知面不知心”又说“逢人且说三分话,不可全抛一片心”又说“害人之心不可有,防人之心不可无”又说“人不可貌相,海不可斗量”又 说“明枪易躲,暗箭难防”都是教导子弟看清社会,保护自己。 当你看出谁是小人之后,要懂得如何与小人相处?简单的说:

1.不要得罪小人

千万不要因为正义感而独自公开揭发他…. 小人从不认为自己奸诈不厚道,他们敏感度高,眼锐如鹰,舌利如剑…你绝对不是对手。

2.敬而远之,和他们保持距离

保持平淡的表面关系,千万不要亲密如友, 因为小人蜜腹剑,翻脸无情,让你措手不及,吃不完兜着走….

3.说话谨慎,客套寒暄即可

如果你批评或谈别人隐私,绝对变成他们兴风作浪的把柄,或是做为日后报复你的筹码; 如果他们批评或谈别人隐私,你要立刻中止,一句都不要听,因为无论如何,他们绝对会嫁祸给你… 尤其是他们拨电话寒暄聊天,常常顺便帮你录音喔! 你不要怀疑~他们这样快乐吗?干嘛那么累?这就是小人心态!

发现开源社区的扫地僧——Google Summer of Code 2015导师手记(1)

前几天,我指导的两名学生被Google接受,这样我就以导师(Mentor)身份第一次参加到Google Summer of Code中。很多朋友通过各种渠道,包括XMPP、IRC和微博私信,问我关于如何参与Google Summer of Code。我也确有想法写一篇文章,带着大家一起“骗”Google的钱。。。 三年前,洪谦兄以一篇划时代的《做一名开源社区的扫地僧 (上)》叩响了在中国推广Google Summer of Code的大门,其后在广州Linux用户组(GZLUG)邮件列表里他发表了另一篇长文,讲述参加Google Summer of Code的各种好处,以及学生参加所需要的各种经验。可以说,洪谦兄的这两篇文章,将参与开源项目必须掌握的一些内容很好的包容在里面了。 今年恰好我成为Google Summer of Code的导师(Mentor),也是我第一次做GSoC的导师。而之前当过GSoC的导师的中国人,好像也没留下什么文档。所以我打算不妨从导师的角度来谈谈,更会结合在这段时间自己的经历和学习到的东西,力求深入浅出的表达出来。特别是想告诉那些有志于从事开源贡献的同学们,如何通过GSoC赚得第一桶金,更开启自己的“开源生涯”。 注意,为了力求不与洪谦的两篇文章冲突和重复,凡是他已经着重强调过的内容、文档和相应的细节,我这里都略过不讲,毕竟他是从 Wine项目 的实践角度,我可能会从更大更通用层面去谈论。 声明:阅读本文之前,请确保已经仔细阅读过 Google Melange 上的 FAQ 文档学生手册。此文毕竟不是面向学生的FAQ,最多就算是我自己阶段性的感悟。

我参与的组织,提出的idea以及指导的学生

首先为那些心急的朋友,可能会好奇我今年参与GSoC的基本情况,所以首先就把一些事情先讲出来。GSoC主要面对的是开源社区组织,因此我参加的就是其中一个组织——FOSSASIA。FOSSASIA从2011年开始在亚洲区推荐自由和开源软件的落地工作,还是卓有成效的,他们也参加GSoC多年。去年我曾作为FOSSASIA的 Google Code-in 活动(也是Google资助的,旨在鼓励14~18岁高中生完成一些低难度的任务,进而参与到开源社区的计划)的导师参与其中,于是也就顺理成章的希望可以继续担任 GSoC 的导师了。 这次我提出来的idea也是在FOSSASIA组织下的,只有一个:Self-hosted Online communities Communication with OTR encryption。提出这个的主要目的和大概想法也是基于现实需求的,更多的依旧还是考虑这样一个项目相对简单,适宜学生群体上手,而且若有中国学生参与,也容易完成。 这个 Idea 从发出到3月27日截止,总共收到 4 份来自中国和印度学生提交的 Proposal,两名印度人,两名中国人,而且性别比例也是两男两女。从3月27日到4月27日的一个月间,与这四位学生不断交流和沟通,我按优先级排序推选出了3个Proposal,最终Google和FOSSASIA的管理员确定了其中两位幸运者,在4月27日公布最终结果。 因此最终就是这两位入选,来自中国的 Iris Gou 和来自印度的 Heena Mahour。她们两位以优秀的 Proposal 和丰富的开源社区经历,打动了包括我在内的 FOSSASIA 所有导师,还有 GSoC 活动的管理员。

什么是 Google Summer of Code?Google这土豪为什么要设立这个?

先摘录一下 Google 官方宣传材料里的说法:
Google Summer of Code(谷歌编程之夏)已经把超过8500名学生和440个开源项目聚集到一起来创造上百万行代码。我们期待导师和学生加入我们来打造2015年最好的编程之夏!谷歌编程之夏计划设计用来鼓励学生参与到开源软件开发中。从2005年开始,这个计划有这些目标: - 鼓舞年轻开发者参与到开源项目开发中 - 在暑期为计算机及其相关专业的学生提供与学习相关的工作机会 - 让学生更多地接触到真实的软件开发环境(例如邮件列表规范,软件许可问题,分布式开发等等) - 创造和发布更多的开源代码以惠及大众 - 帮助开源项目确立并带来新的开发者和提交者 我们将会为成功的学生贡献者提供5500美元的奖金,帮助他们集中精力在三个月内编写项目。这个计划完全在线实施。
从这段官方宣传文字里我们已经可以很清晰的看出GSoC的使命:鼓励大学生投身开源社区的开发中去,同时让学生学习开源开发的方法、规范和社区精神。可以说对Google这种土豪,投入巨资搞GSoC很大程度是一种公益行为,通过物质鼓励学生,贡献开源,而开源的大发展对Google来说也有利。 需要澄清的一些问题:
  • GSoC 不是……

    不是比赛,不是竞赛,不是考核,不是技能评定,更不能与国内某机构的所谓“开源大使”或类似的夏令营相提并论。因为竞赛或者技能评定因为学生攀比,都可能会带来舞弊,而舞弊对Google来说不仅损失金钱,更重要的是对GSoC的品牌不利,也无法达到真正帮助开源社区贡献的目的。最重要的一点,GSoC这货不能吃,不是吃的,也别问我是不是好吃。
  • 帮助就业?

    学生肯定会最关注这一点,尤其是中国的学生。实际上,这仅仅只相当于是个实习而已,对就业的直接帮助并不大。但在整个过程中学习到的知识、技能和能力锻炼,对大学知识的查缺补漏是非常有好处的,可以很大程度上提升以后工作中的发挥。很多中国公司并不知道和了解Google Summer of Code,以及它对学生能力提升的价值,但很多外企对此还是很看重的。而另一方面,参加GSoC会占用大概三个月左右的暑期时间,而这段时间对很多大学生来说,暑期往往是在各种出游闲宅或一些简单重复低层次(如饭馆打零工)的所谓“社会实践”中度过的,与其如此不如通过暑期提升自身价值和能力,是一次超越常人的挑战。事实上,一些非名牌大学,非一类本科高校毕业的学生,是完全有可能通过GSoC达到翻身的目的,更可以借此超过其他同龄人。
  • 谁是核心?

    正如前文所言,Google这么做的目的是让学生投入到开源项目的贡献中去,因此整个计划的核心就是开源社区,不是学生也不是Google,学生是参与者,社区里的导师是评定者,左右着学生的命运和社区自身的价值契合,而Google只是审核者。

学生参加GSoC的大致流程

Google Melange 的 FAQ 文档里写得很清楚有关学生参加GSoC的流程,我用图示的方式帮助理解。 [caption id="attachment_1169" align="aligncenter" width="204"]学生参加GSoC的基本流程(点图片可以下载PDF版。CC-BY-SA 4.0) 学生参加GSoC的基本流程(点图片可以下载PDF版。CC-BY-SA 4.0)[/caption] 从这大致流程里可以明白,学生参加GSoC需要很早就开始准备,事实上,大概一年半年之前就投入其中是很有必要的,比如可以从前一年的组织名单中找出心仪的组织,加入其中,了解该社区的项目、文化,组织结构和人际关系,进而通过项目找到合适的贡献。这些基本都可以在洪谦兄的文章里找到,他以 Wine项目 为基础讲述的这些过程是非常非常具体和生动的。 这里要特别强调,不同的开源社区对待GSoC有不同的要求,不要根据 Wine 项目或 FOSSASIA 的情况,想当然地就认为其他社区也是如此,学生一定要仔细阅读社区内部的相关文档。这次很多学生申请FOSSASIA的时候,就发生了不熟悉FOSSASIA的规定,也没有阅读社区里相关文档,而直接被拒绝的情况。可以说Google之所以没有规范开源社区接受学生的具体做法,很大程度也是为了尊重社区的本身精神,体现以社区为中心的宗旨。

导师的角色、职责以及分工

当导师比学生轻松,有能力的都来当导师吧,带着学生一起“骗”Google的钱,哈哈哈哈。。。 首先说,为什么去做导师呢?又不给钱,5500美金是给学生的,导师拿不到任何好处。也没什么名望上的提升,除了像我这样写点博客自吹自擂以外,大多数导师最终无人知晓,对自身名望的提升基本可以忽略不计。导师的工作完全是为了社区的利益,为了引导学生参与到社区中来,贡献到社区中来,所以从这个意义上说导师是完全无偿的劳动,一切都以社区利益为先。 在我自己看来,导师的角色有点像是产品经理(PM,Perject Manager)。前期提出Idea,类似产品经理与客户沟通之后,得出来的一个大致开发需求;中间审核学生的Proposal,则是与开发者共同完成需求分析、技术解读和开发计划;而开发中间与学生的互动,则可以类比成不断检查开发者完成相应的Milestone,并与开发者协调修改开发计划的过程;最后项目完成,可以看成是产品发布、验收等。 不过与产品经理不同的是,导师要考虑学生的技术实力,工作时间分配,以及随时关注与此相关的技术变化,以便更好的指导学生完成项目。同时导师也还有一部分工作,是对中期和最终项目完成作出评定和验收,写出评测报告,以示Google此学生已经完好的做完了自己的工作。 一般来说,一个项目不是只有一个导师,一般会有多个导师同时协助,一个是主要负责,其余的都是备份和协助。以防主要负责的导师因为各种各样的原因无法完成时,顶替出现。一些备份导师是由组织指派的,还有一些是由Google指派的。 GSoC对导师的资质并没有限制,只要是参与该开源社区的成员,在组织中有过贡献的,深谙开源社区精神的,经过该组织管理员认可的都可以成为导师。而且即便是提交了Idea,也可以不由提交Idea的人来指导,也可以由别的导师或该组织的管理员指派导师来完成。因此后备导师和协作导师就显的比较重要。

导师的前期工作

根据GSoC的导师手册,导师在前期是需要完成一些工作的,当然这些工作其实并不轻松。 比如首先就是如何写出一个idea,这一点其实就难住我了(不是因为如何用英文表达)。因为按照GSoS文档里提出来的建议,我的很多idea就不是很适合。比如我想到可以考虑给北京Linux用户组重建网站(因为工作量较大,且烦复不好量化而做罢),还比如我考虑给FOSSASIA会议做一个自助导览机器人(项目无法准确描述需求,而且规模太大只好算了)。 总之,最终我提出来的这个Idea还是和北京Linux用户组的同僚,并在SUSE Hackweek 12上,大家商量过以后一致觉得这还是比较好的一个Idea,所以才有了现在的状态。 其实在提出Idea之前,还有一件非常重要的工作,就是和组织的管理员沟通好,提出的Idea也能得到组织管理员的认可。比如我和FOSSASIA的管理员Mario沟通,表达我的想法,他便给了我Github的提交权限,这样我就可以提交我的Idea了。这里要说明一下,不同的组织提交Idea的方式不同,比如 GNU Fedora ProjectDebian ProjectGNOME 提交 Idea 是直接修改 Idea Page,这往往就是个 Wiki 页面,修改这个页面加上自己的Idea就行。而FOSSASIA的Idea Page是托管在Github上的,所以就用Github的方式,比如通过Pull Request,或直接提交commit。 提交了Idea之后,组织的管理员会来审核这个Idea,并与导师沟通修改,以方便学生更好的参与。

导师是如何选定学生的?

这是学生群体最关心的问题了吧。其实在导师手册里写的很清楚!那么我在选择学生的时候,也是基本按着文档里的要求来选(毕竟是第一次当主导师,还不敢偏离太多)。主要是考核如下几点:
  • 首先是Proposal的专业程度,反映了学生完成项目的能力

    比如我这个Idea,学生至少应该明白OTR(Off The Record)加密是什么,以及在XMPP聊天中的应用(前面我有写博文讲过);另外还有,学生是否考察过类似的开源项目,查看过相应的代码,考虑过是否可以直接引用到此Idea中,或自己实现的能力。因此在审核Proposal的时候,没能谈到这几点的我都会要求其尽快补上。
  • 与导师的有效沟通,表明学生的社区参与能力

    FOSSASIA有官方的邮件列表和IRC频道,我们所有导师都会考察学生是否会使用,并参与到这些社区常用的沟通中去,懂得基本的邮件列表礼仪,IRC聊天方法和规范,并与其他社区成员打成一片。更重要的是,在Google-melange的后台,导师可以在学生的Proposal下面发评论(学生也可以回复),而这些评论,同组织内的其他导师都可以看到,也都可以参与进来,一起来评判学生是否按照导师要求修改Proposal,参与到社区活动中去。
  • 其他开源社区的参与

    参与过其他开源社区、开源项目的人,更容易融入到GSoC中来,更容易获得导师的青睐。因此我建议打算申请GSoC的同学,可以多多参与各种国际上的开源社区,积累经验,在申请填写Proposal的时候,一定多多列举你在这些开源社区里的经验。比如我这次指导的学生 Heena,她曾在 KDE 社区中贡献多年,有深厚的社区基础,组织过印度高校的线下活动。你说不选这样的学生选谁? 关于这个多说一句,为什么推荐是国际上的开源社区,主要是因为国内的开源社区尚不够成熟,名气也不大,除非碰上懂国内开源社区的导师,否则不会太多考虑这方面的。我推荐在北京的学生可以考虑北京Linux用户组来过渡一下,因为毕竟这是个在北京的国际化社区,社区风格与国外社区比较接近,作为一个跳板和桥梁,能够让你尽快与国外开源社区接轨。
  • 人情关系

    如果你和导师在社区活动或其他情况恰好认识,关系也比较好,那么导师会格外关注你,并会帮助你完成。这不仅仅是中国特色,全世界都如此,因为站在导师的角度来看,他肯定希望由更熟悉的学生来完成,除了可以保证项目完成,更多的是因为这种互利的关系,让社区可以更好的发展。因此从一点一滴开始关注开源,与潜在导师多多搞好关系,还是很重要的。

参加GSoC的学生需要哪些“软实力”?

通过对学生的遴选,以及参与其他项目(也就是并非我提出的Idea)的评选。我初步可以归结出学生的一些特性和品质,而有这些品质的学生,更容易获得通过。这些内容在洪谦兄的文章里亦有大段大段的谈论,但我依旧会站在导师的角度,说一些看法。 基本上,无论最终结果如何,整个过程下来,学生可以掌握和提升很多能力。这些能力无论对从事什么工作,都非常有帮助,因此这部分内容我会着墨较多。 首先,对中国学生来说,有三个能力必须掌握,其他国家的学生在这方面不是大问题,但对中国学生来说就是三座大山,要想搞定GSoC必须首先翻过这三座大山!
  • 翻墙。

    必会!!否则你可能连Google Melange后台的网页都打不开!
  • 不要用百度

    参加技术开发,活用Google是基本技能,这没的说!搜索娱乐新闻和花边爆料就随便你了。
  • 英文交流和阅读能力

    这里仅限文字交流,除非导师或组织有特别要求,加入语音或视频,否则大多数情况基本的英文文字交流能力就够了。阅读能力主要是阅读各种文档,可以通过阅读Google Melange的文档来检测一下自己的英文阅读能力。根据我的平时感觉,现在大学生的英文能力足够应付了。
还有一些品质,不仅GSoC需要,参与各种开源项目也都需要,也都是一些非常重要的“软实力”
  • 时间规划的能力

    根据GSoC对Proposal的要求,学生还要提交每周的开发计划。通过开发计划可以明白学生在这段时间要做什么工作,有什么产出。往往一句话的总结,就可以说明很多问题。这个规划时间的能力,其实也算是自我管理的一部分,不过我认为单独拆分出来更好。虽然开发计划在Proposal中的占比不过10~20%,但时间规划与项目构架息息相关,时间规划能力也反映了学生对项目的理解、处置、控制和把握的能力。一个简明扼要的项目规划,往往胜过千言万语。
  • 自主学习能力。

    这是很多中国学生的短板和弱项。何为“自主学习能力”?就是自己辅导自己学习,找到所需要的学习材料,制定符合自己特点的学习计划的能力(特意加粗!)。还举我碰上的一个中国学生的例子,他的Proposal写的还是不错的,经过几番交流,看他的个人博客感觉在前端开发方面还是很有能力,对Node.js/io.js非常熟悉,感觉完成项目问题不大,我因此一直很看好他,再加上是中国学生,我的民族自尊心作祟,强烈愿望想选他。直到有一天,他问出了这样一些问题,这是该学生Proposal的评论区,可以看到我发的问题,以及他的回复(中间略过一些评论): 2015-05-04-053306屏幕截图.png   注意图中,最后那两个红框里的问题。这最后两个问题恰好说明了,他自主学习能力不强,不懂得自己找寻学习材料,学会自我管理和学习。其实他是所有申请学生里唯一一个指出 lets-chat 使用 Nunjucks 模板引擎的,说明他的开发能力非常强,但却问出"Should I learn them first?"这种让我啼笑皆非的问题。。。通过摘录的这些评论,其实也能看出来,他其实并没有很好的理解项目的需求和想法没有自己的主见,事事都依赖导师的确认。再加没有足够的沟通和互动(一个月中总共只有6条互动评论,没有看到他参加IRC和邮件列表讨论)。因此我认为他可能没有强烈的愿望完成此项目,也担心一旦选定他项目有可能半路流产的危险。 另外,Google要求学生每周要写博客总结和展望,这其实也是要求学生通过GSoC,强制培养自主学习能力的一个过程。真可谓用心良苦啊! 根据几年前,我在培训机构担任培训导师的经验,国内一些高校的学生,自主学习能力普遍不足,一些二类本科和三类本科、专科学校的学生,在自主学习能力方面,还是要多多加强训练。如何检测自己的自主学习能力?可以从FOSSASIA的Ideas Page里找一些你感兴趣的 Idea,尝试思考一下,假如你来做你会打算怎么做这个项目?从哪里入手?需要学习什么方面的知识?如何构建自己相关知识体系?
  • 好奇心和求知欲

    很多学生在这方面都不是问题,主要体现在Proposal上,比如是否提供了足够多的参考资料,Heena的第一版Proposal里提供了超过50条参考资料和技术文档(后来删减到20多条),足见她的学习能力。
  • 沟通能力

    上面已经多次强调与导师沟通的重要性,对申请GSoC的学生来说,与导师和社区其他成员的沟通,几乎是评判学生申请能否通过的铁律。但是沟通并不是越多约好,比如因为我有挂IRC的习惯,4月中旬的时候很多申请的学生会在线问我很多问题,把我搞的不胜其烦(其他导师也同样被烦的够呛,结果他们后来都不挂IRC了。。。233)。有些时候往往在我超级忙的时候,还会发来要求解释的邮件等等。 沟通的要求是高效率的沟通。什么是高效沟通?就是在尽可能简短的沟通过程中,解决尽可能多的问题。比如这次获得通过的中国学生 Iris Gou,她问我的问题往往并不多,大多依靠自己解决,但经过点拨和线下社区活动接触,她可以很快上手修改Proposal,找到学习的方向,让社区的成员快速对她有比较好的印象,这就是高效沟通,同时外加她较强的自我学习能力,也为最终选定奠定基础。
  • 适应和社区融入能力

    这一点也是中国学生比较缺乏的。申请FOSSASIA的GSoC中,中国学生很少参与社区活动,也不在IRC聊天中露面,更不会花精力研究社区如何运作等等,往往直扑项目而去。而很多其他国家的学生会考虑参与到社区中去,并且与导师通过各种渠道搞好关系。还比如 Heena,她还没发Proposal就在各种社交网络找寻我的痕迹,从Facebook到Twitter,再到Linkein和GNOME基金会网页,几乎我有涉足之处,都被她找了个遍。。(简直人肉搜索啊),完全没任何隐私的感觉。这也反映了她希望可以拿下GSoC的强烈愿力,让人不得不佩服。 因此中国学生若想搞好GSoC,适应一个社区的氛围,参与社区,融入其中的能力非常之重要,往往看似简单的一些交流和沟通,会让社区导师对你印象大增。毕竟遴选学生,不仅仅是由导师选择自己指导的项目,有时候还会参与到其他人的评选中去,因此,与这个社区里的导师都搞好关系,还是非常有帮助的。而这也是Google设立GSoC的初衷——推进更多学生参与到开源社区中去。

与GSoC相似的计划

说这么多,GSoC往往是针对学生的,但对已经毕业,或错过最后一次机会的大四/研三/博三的学生,还有没有更多机会参与类似的活动呢?当然有!
  • Outreachy

    曾经是著名的Outreach Progrm for Women(OPW)计划,这是由GNOME基金会联合其他自由软件社区,自由软件基金会、Perl基金会、Debian社区、Wikimedia基金会等发起的,旨在鼓励全球女性和跨性别者参与自由软件的开发、文档、运营、市场和管理的计划。与GSoC相同,凡是成功完成者,每人也可以获得5500美金的奖励和全球开源会议的差旅补助。与GSoC不同的是,GSoC主要面向计算机相关专业的学生,项目也是以编码贡献为主。而Outreachy则开放更多层面,除了开发,更包括了文档编写,本地化翻译,美工设计,文案和新闻推广,市场和社区运营等开源社区所需的多个方面。同时也不仅仅局限在学生,只要是女性(包括跨性别者)都可以参加!事实上,目前中国有至少3名女性已经成功完成了这个计划,她们涵盖了美工设计、项目开发和本地化翻译这几个方面。而这个计划目前的要求是女性和跨性别者,因此如果男性想参加,只能挥刀自宫了!(不过可以去当导师。。嘿嘿)
  • 其他

    这里有一个列表,里面总结了几乎所有可以找到的各种开源夏令营和类似的实习项目。总之,若不幸错过了的话,依旧可以考虑参与其中。(或者像我这样做个导师)

持续的开源社区贡献更重要——发现扫地僧

Google Summer of Code计划高明的地方就在于,Google创造了一个共利共赢的平台,学生能拿到物质奖励,开源项目可以得到代码贡献,Google则收获了名望。正是因为这种大家都得利的状态,所以才可以使其从2005年创立的十年来不断壮大。这就是为什么国内某些“开源”平台,刚开始声势浩大,结果半年多之后就开始淡出人们视线,也很大程度是因为没有打造一个众赢的平台,而仅仅只是自己得利而已。 从Google的角度,创立Google Summer of Code的公益目的是非常明显的,它给学生的奖励除了5500美金,还有500美金的全球开源会议差旅补助,可以让学生参与开源项目的同时又能与全球开源届的大牛,面对面深度交流。而这么做的最重要目的是要求学生持续的开源社区贡献。 什么是持续的开源社区贡献?比如洪谦,他2012年参加Google Summer of Code,当年还是个大四的学生,为了“骗得”Google的5000美金奖励而加入GSoC,选择了给Wine项目报Bug,这个当年在他看来比较“清闲”的工作。当他成功拿到GSoC的5000美金之后,并没有停下在Wine项目上贡献的脚步,继续在Wine项目上作出自己的贡献,成为核心开发者,并成功入主Wine的母公司CrossOver。至今依旧活跃在Wine项目中,为大量Windows下软件可以运行在Linux和Mac OS X平台而努力。同时,他现在还自诩是“GSoC助教”推广和帮助希望申请GSoC的学生更好的加入,经过他的协助有多位学生都成功完成GSoC。他也正如他自己所说,真正成为了一名开源社区的“扫地僧”!因此,洪谦这几年的整个过程就是实践了持续的开源社区贡献。 这么多年,参加Google Summer of Code的中国学生有多少呢?拍脑袋保守估计一下,至少100有余,而参加过的导师也在3~5名左右。在洪谦之前,推广GSoC的却几乎没有(只是“闷声发大财”),很大程度因为这些学生,参加过GSoC以后,没有做到持续的社区贡献。简单来说,GSoC只是一个人“开源生涯”的起点,而不是终点。GSoC结束并不等于不需要继续贡献开源了,相反更需要持续的贡献其中,可以不再继续GSoC的那个项目,那个社区,可以转投入其他项目,其他社区贡献。这种持续的社区贡献,也正是Google Summer of Code和GNOME基金会的Outreachy(Outreach for Women)近十年来长盛不衰的法宝。 所以,作为GSoC的导师Mentor,我们的工作是什么呢?除了指导学生完成TA的GSoC项目开发,完成整个社区的开发任务,我们真正要完成的,其实是在遴选和甄别学生的过程中,发现和培养那掩藏在芸芸众生中,可以如洪谦这样为开源社区持续贡献,投入毕生力量的“扫地僧”。

参考链接

开源社区最需要什么?

前几天看了一篇文章《5 Ingredients for Building Community》,原文讲了构建一个设计师社区需要什么,作者将这些总结成了5个P打头的英文单词:Purpose(目标)、People(人)、Practice(实践)、Place(场地)和Progress(进取)。仔细想想,这5项要求几乎可以覆盖到所有社区,当然开源社区也依旧适用,不过却因为开源社区的特殊性,又有了不同的变化和含义。 我认为中国的开源社区缺少很多基本的能力,因此我将这些品质要求,与原文这5个P打头的英文单词放在一起,最终是这样的:

Purpose(目标)

一个社区无疑必须要有一个清晰且简明的目标,能够用一句话直接说明。这里仅以开源社区为例,摘录了一些著名社区的例子:
  • GNOME 基金会:To create a computing platform for use by the general public that is composed entirely of free software.(以完全自由软件构建公共通用的计算机平台)
  • Fedora Linux:Freedom. Friends. Features. First.
  • OpenCV: was designed for computational efficiency and with a strong focus on real-time applications. (OpenCV 是设计用来大幅度提高实时应用中的运算效率)
  • Blender: We want to build a free and open source complete 3D creation pipeline for artists and small teams. (我们的目标是为艺术家和小型团队构建一个自由开源的全3D创意流水线)
上面这些例子都是国外的,国内有没有呢?当然也有,有些开源产品或开源社区的目标还是很清晰,但在表述上就比较罗嗦,无法直达人心。为什么要有清晰的目标?目的是用这些目标指导社区活动,也是为了找出愿意贡献其中的人。

People(人)

开源社区不同于其他社区,甚至与很多技术社区又有很多不同,这里面的关键是开源社区里的人是特定的一类人——黑客!每次我都要说,黑客与所谓“骇客”是不同,黑客以研究计算机并让计算机为人类服务为己任,而“骇客”则是以损坏别人的数字财物,盗取别人的隐私和财产为目的,是一种犯罪行为。“骇客”的行径是为黑客群体所不齿的。 那么黑客都有那些品质呢?这可以从《黑客——计算机革命的英雄》(Steven Levy 著)一书中得到解答,里面总结了一套黑客伦理,伦理原则强调”共享、开放、分散、为操纵机器不惜任何代价”,与PC文化与互联网文化的精神内核一脉相承:
  1. 对计算机的访问(以及任何可能帮助你认识我们这个世界的事物)应该是不受限制的
  2. 任何人都有动手尝试的权利!
  3. 所有的信息都应该可以自由获取。
  4. 不迷信权威——促进分权
  5. 评判黑客的标准应该是他们的技术,而不是那些没有实际用途的指标,比如学位、年龄、种族或职位。
  6. 你可以在计算机上创造出艺术与美。
  7. 计算机技术可以让你的生活更美好。
所以秉持这样黑客伦理的人往往能够在开源社区中,有较高的地位并被社区所尊。因此构建一个开源社区,也就是在各种场合尽可能吸纳和寻找这样的优秀黑客人才。也正是因为有了这些人才能开展符合开源社区精神的实践。

Practice(实践)

社区里有了人,大家做什么事呢?其实大道理都懂,但现在中国的很多开源社区,让人觉得像“死”了一样,因为其已经很久没有实践活动了,没有聚会,没有代码,没有产出,更没有人际交流,可以说完全是名存实亡了。 开源社区根据目的不同要做的事情也不尽相同,以开发开源项目为目标的,主要活动肯定是以开发展开,比如编写代码、Bug维护、文档、美工和产品推广;而以推广技术为目标的社区,主要活动会围绕技术本身展开,比如实例开发、本地化/国际化、推广活动和市场。这些活动各有各的特点,也各有各的要求,不同的实践活动因为有了合作,而突显了团队协作的重要性,同时因为跨领域、跨学科的融合,为不同学术背景的人构建了一个充分交流和合作的平台。 由此其实可以推演出一个结论,所有这些实践活动的最终都是一件事——交流。就比如台湾的COSCUP(开源人年会),他们有一个清晰的目标:四成演讲,六成交朋友。这简明而清晰的目标直接述说了开源社区的根本目标,就是人际交流而导致的产出,开源正是因为社区交流和合作,而带来的新的开发方式上的巨大变革。因此开源社区的主要实践就是要促进人际交流,促进去中心化的合作。

Personality(个性自主)

与《5 Ingredients for Building Community》不同,这里不是Paces(地点),而换成了Persionality(个性)。因为开源开发更多的是线上活动,线下活动比较少,更没有太多要求,而为了交流的目的任何资源都可以被利用起来,反倒是个性往往是被大家忽略的。 很多中国的开源社区有个不好的思想,认为开源社区必须“挂靠”在某个组织下面,或者大公司大企业,丝毫没有想过开源社区应该是独立自主的。其实这里我不想说太多个性,更多的是讲自主。开源社区必须有自己的风格,有独立的运营能力,而不能依靠别人的力量。因为越是依赖别人,就越是将自己应该承担的义务由别人来承担,与此同时也就把自己可以享有的权利,也一并让渡给了别人。因此开源社区必须明白这个道理。虽然俗话讲“大树底下好乘凉”,但离开了罩着你的“大树”,这个社区还能不能独立存在?还能不能独立运营下去?上面讲过的一些社区之所以后来名存实亡,就是因为缺少了独立自主的能力,最终葬送了自己。 不仅社区如此,社区里的每一个成员也都应有自主能力。能不能自主贡献开源项目,能不能找到自己在社区中的地位和价值,完全取决于自主的程度。台湾的g0v.tw(零时政府)有一句名言“不要说‘为什么没有人’,你就是那个‘没有人’”,这句话直接回答了”为什么没有人做XXX?“这种问题。对有志于参与开源社区的人来说,永远不要问”为什么没有人做XXX?“,”怎么没有人来做XXX?“这种问题,因为当你发现需要改进的时候,就是需要你贡献的地方,不要等着别人来做而你享受成果,而应该努力贡献在你发现的问题,也许这就是你价值体现的地方。

Progress(进取)

对社区领导者来说,能否提供给社区成员个人成长的空间是很重要的,但比这更重要的却是整个社区的进取能力。如果一个社区只有各种混吃混喝,或者开发的开源产品不能跟上时代,很快被取代,没有让人看到社区进取的能力,这样的社区会最终分崩离析的。 北京一个推广某开源项目开源社区,曾在2008年的一次活动后名噪一时,也深谙开源社区需要多多交流的道理,所以利用活动剩余的赞助费,盛情招待社区成员吃吃喝喝,这本是一件很好的事,可是后来很长一段时间,大家参加社区活动都为了蹭吃蹭喝了。多年后,这个社区渐渐名存实亡,无法开展起完好的活动了,甚是可惜。回顾这段过程,并不是因为大家蹭吃蹭喝,而是因为社区在推动技术上努力太少,后期也没有什么贡献了,无法招揽并留住新成员。 再举一个我参加过的例子,2012年和几位同好决定成立一个开源硬件的社区,目的是为了构建完全开源的四旋翼飞行器Open-Drone。社区规模还是很大的,也有大量活跃成员,甚至还上了《环球时报》(英文版)和《今日北京》(英文版)等报纸。但很快随着老成员离开北京,或忙于自身事物,社区最终在去年归于平静。现在回想,大家的目标是For Fun,而在技术层面迟迟没有太多推进,产品最终也没有原型开发出来,虽然最终有很多附加产品出现,但社区却始终没能发展和留住新成员。 说到底,社区的进取是伴随着每个社区成员的不断进取奉献的。上面的两个实例可以很清楚的看出,社区成员个人要有努力进取的动力,同时社区也要给这些成员发展的空间,鼓励和促发新成员找到自身价值,尽快融合到现有社区结构中来。   简单来说,一个目标清晰明确的社区,会吸引来那些适合的人,一起来做适合的事,在交流和合作中体现价值。而这一切依赖于社区和每个人的自主能力、进取精神和上升空间。 希望此文中所讲的开源社区最需要的Purpose(目标)、People(人)、Practice(实践)、Personality(个性自主)和Progress(进取),可以帮助那些迷茫在开源社区运营中的人们,一篇小文不足以解决所有问题,但我依旧希望可以指明一个方向。

大家一起完善 OpenStreetMap 协助尼泊尔救灾

转自台湾 g0v.tw 的林雨苍的Facebook原文
尼泊尔发生了大地震,造成许多人丧生。目前该地区亟需救援。 但救援的第一个前提是该地区的路网需要被标示,因此目前开放街图(Open Street Map)计划正在利用卫星地图快速画出当地偏远地区道路路网,协助救难人员前往该地区救灾。目前需要大量人力协助。 目前有两个协助完善路网的计画: http://tasks.hotosm.org/project/994 http://tasks.hotosm.org/project/995 这是多人协作的任务,所以开始编辑时会锁定地图,可以稍微作个两三条公路就存档、解除锁定,让其他人继续编辑,所以请不要担心一编辑就要完成。不过请记得完成编辑后要解除锁定喔! 我刚刚编辑了一下,发现难度没有很高,因此写了一篇教学,请有空的朋友可以去尝试看看。 https://docs.google.com/document/d/1Qdauh108_HhMo4zH7d51JKsNBksaHoqSMHvHuTiSr0k/pub 本文欢迎大家分享、转贴。 相关连结: 尼伯尔地震OSM Wiki协作指引页面 http://wiki.openstreetmap.org/wiki/2015Nepalearthquake 相关讨论: [1]协作指引连结和发问区:https://www.facebook.com/groups/OpenStreetMap.TW/permalink/854441551287982/ [2]twlandsat、NSPO图资使用可能:https://www.facebook.com/groups/OpenStreetMap.TW/permalink/854412134624257/ 若有问题,欢迎至 OpenStreetMap台湾 提问! PrayForNepal
本人补充两句,在大陆标注 OpenStreetMap 这种行为可以被提升到“违法”的高度,也就是所谓的“非法测绘”。我们虽然不能公开和高调的参与标注国内地标,但可以通过互联网协助其他国家,完善其地标,方便尼泊尔的救灾。人人为我,我为人人。 也许下次中国的大灾难,也会有别国的热心网友,通过互联网来帮忙!

养Zoë是一场战斗

这几日跟Zoë一起。Zoë过了一岁生日之后会扶墙走了,现在养Zoë于是更困难,相当于养3个韡武。这里是具体说一下今早的事,每个早上都像这样。

早上一起来,Zoë去看电视。但是遥控器不好用,Zoë就去修电视。修了一回儿,电视死机了。Zoë找爸爸,爸爸正手里拿个杯子。Zoë一手指遥控器,一手指电视,意思是让爸爸修。爸爸折腾遥控器的功夫,Zoë发现爸爸把杯子放到茶几上了。Zoë拿着玩,就落在地上了。家中的玻璃杯当然早就碎完了,这是个铁杯,里面水洒了一些。爸爸和奶奶看了都不管,每件事都管肯定会累死的。爸爸重启电视机(它下面的DVD机和边上的笔记本电脑早就被Zoë玩坏了),Zoë这时候发现杯子可以当球踢,从这里踢到那里,连着地上其它东西,茶叶罐子什么的,都成她的球了。踢着踢Zoë发现地上有一个别针,还是已经打开的,原来是爸爸为了重置手机(被Zoë玩坏的)用的工具,用完之后就被Zoë连着其它东西都打翻在地上了。Zoë不认识针,不知道会被扎,不过知道拿起来总是对的,于是拿起来交给奶奶。奶奶庆幸Zoë没有把它吃掉。

过一回电视开始唱了,Zoë看电视安静了一小会儿,奶奶正抓紧了时间休息,不想借这个机会她已经拉屎拉了一地。裤子得换自不必说,地毯则只能凑合擦,这样我们家成了唯一一个大肠干菌集中在客厅的家庭。这正在换裤子的当儿,Zoë又踩到屎上了,然后还坐下。这下子所有东西都得洗了。

Zoë可以扶着东西走。对她而言就跟玩电子游戏似的,想去什么地方得计算从哪里扶着,然后跳到另外一个可以扶的东西上。先扶沙发,再转身扶茶几,再转身扶墙,再顺着墙和电视柜这就到另一个房间了。所以她可以自己去所有地方。但是她不专一,每次要去哪里,路上遇到好玩的就不去了。比如:

Zoë遇到纸巾,就一张一张取出来,一边取一边大声叫,好像是Tristan在杀龙。然后抱着一团卫生纸倒在地上口吐泡泡,好像Tristan被龙毒倒了。又遇到盒子,那就打开,里面东西全拿出来,觉得好的拿给奶奶,其它的散在地上不要了。又遇到一个耳机,上面有麦克风。对着麦克风喊了一通,没用,也许是吃的,于是把麦克风吃了,又吐出来。顺带吐一堆各种方才吃的东西。又遇到一袋饼干,因为刚才吃麦克风饱了,所以不吃,拿出来分给奶奶。奶奶不吃就哭。奶奶吃一片,再拿一片给爸爸。爸爸不吃一样要哭。然后再拿一片。这半个小时就分饼分过去了。最后一片,先给奶奶,奶奶刚要吃,Zoë又改变主意了,收回来拿给爸爸。

这只是一个片段。最近孩子闹肚子,随时拉稀,家里东西被污染扔了一大批。虽然应该是孩子难受,孩子却一点难受的样子都没有,仍然精力充沛闹个没完。奶奶常常觉得她要受不了了。我觉得如果不是奶奶和爷爷这样有耐心,如果是我俩,我俩肯定会沉思生命的意义了,为什么要我们受这样多苦之类。任何项目自然都是做不成的,更别说读书喝茶了。


Google Summer of Code 2015, I am a mentor…

As Google required for students, when this program starts they should post blogs every week, but no any requirements for mentors. However, as a GSoC mentor, I want to share what I thinking during this time, and post what I've learnt by the end of some mile-stones. I would like to write some notes and thinking to this blog, but may not so frequency as weekly, maybe monthly or every two weeks. As the language, I prefer English for that, but some reason, I am not good at writing English essay, so that I may post some Chinese blog future.

First time for me

When I graduated from my collage, I've heart Google Summer of Code first time, but that time was so rush, and that should be my last time to apply this program as a student. So I missed GSoC when I was a collage student. So, when I apply to GSoC this year, this should be my first time to attend GSoC ! Last year, I followed with FOSSASIA, attend Google Code-in program, which focuses on encouraging middle school student contributing FOSS projects. By the end of Google code-in, I considered that how about continue follow FOSSASIA to GSoC, cause they already attend GSoC for about four years, so that they have very large number of succeed in this program.

What project I involved?

I submitted a idea at the FOSSASIA Lab, it about what I want to do during this summer. You may curious that why I eager to start this project? You could find what I focus on recently by looking over my previous article, I am working on promoting XMPP-based instant messaging tools and chat with OTR encrypted messaging via XMPP. But for Beijing GNU/Linux User Group, we want to use a self-hosted chat sever and port encryption on it, especially for people join in easily . So that we do so many research on it, and tried so many projects, finally we find a project named lets-chat, that is a fantastic project. It has a XMPP protocol back-end, and a web clients, further more, it focuses on group chat, same as Slack do. Unfortunately, lets-chat doesn't has a support for encryption chat, so we have to port a OTR encryption on it, that's what this project doing during this GSoC 2015.

How about students?

By the end of March 26th, I received four student's proposals, two Chinese and others are Indian. After reviewing these four proposals, and make some comments on that, most students are very active with me, make some modification after my suggestion. Finally, I chose two students for this project, cause they make their best for the project, and make their contribution before this program starts, good communicating with me and other mentors. We discussed more about our project and learning what we want to implement, finding exist FOSS project that we could import in, and built a online platform for our testing. They are all genius and excellent, that means I have to do more to catch up them :)

And...Organization?

Sorry for that, I nearly forget organization. FOSSASIA is the fifth time attend Google Summer of Code, there are a large number of success by GSoC and Google Code-in. When I met Hong Phuc first time at GNOME.Asia 2012, they just finishing a FOSS Game distribution at that year's GSoC and they managed to make a topic showing that project. Thanks to Mario and Hong Phuc, they organizing Google Summer of Code events more and more efficiency, more mature and more professional, so that a lot of mentor would like to join in their GSoC and submit lots of ideas. Besides, FOSSASIA is working on FOSSASIS summit every year, which gathering FOSS contributor and company join in a three days summit. I attend this year's FOSSASIA in Singapore, in this event, there was so many talks and workshops, more than hundreds speakers and sponsors. That was a awesome experience during this time.

More Challenge...

I was working on Embedded Linux and worked in several training agent as a training mentor and evangelist before, but for this front-end project, I am totally fresh man, it is a big challenge for myself. As a result, I have to do more research on front-end ,JavaScript, Node.js and UI design. Further more, it is my first time mentoring students out of China via Internet, that would be some problem with timezone - India has two hours later than China, and language - I never mentoring students in English before. But I believe that we could solve these problem by working together tightly! Why I start mentoring GSoC idea, not because it's easy, but because it's hard, because that program will serve to organize and measure the best of my energy and skills, because that challenge is one that I am willing to accept, one I am unwilling to postpone, and one I intend to contribute to FOSS projects...

Future...

I suppose FOSSASIA would recive more slots for their Google Summer of Code next year, and make FOSSASIA summit more successful. For mentoring students, I suggest they could be involved in FOSS project deeply, and make their contribution more and more. If it is available, I would like encourage them join in some FOSS conferences to meet more people and learning more things by traveling to other countries. And for these two girls, I suggest they could involved other program like Outreachy by GNOME Foundation, and Women Who Code, which focusing on encouraging women to FOSS projects. For me, I would be involved in Google Summer of Code time by time, and as a GNOME Foundation member, I would love to be involved in Outreachy Program as a mentor, mentoring more and more students and girls into FOSS world. And I would love to promoting FOSS in China as usual. By working in Beijing GNU/Linux User Group, Fedora China and GNOME Foundation, I could make my contributions to these projects. Yes, There's a road starts under my feet...

回国第二日:郑州

回国后容易感受到压力和冷漠。比如电梯门开了,我弯腰把箱子抬起来,身子一直,所有人已经从我后面飞进去,电梯也满员了。第二次把箱子踢进去得以进入。

这些是意料之中,本不想写。又比如下了飞机坐火车,上车下车乘务员都没话。

上车没话。我当然没指望对方会说“您好”,我是问能不能从另外一头上车,我的铺最远,有两个带回国装满礼品的大行李我得从一头拉到另一头。乘务员不理我,不说可以,不说不可以,不停手,检后面的人的票。我们俩的对话仅限于我在说,对方没有在听。我可以自做决定从另一头强行上,但是知道如果这边没说可以,那边会打回来让我问这边。为什么知道?因为那就是我上次出国时坐车的经历。只好先上车,从车里拖过去。乘客看到两个行李大都让路了,也有不让的。没有抹黑中国人的意思,好坏都写,比如,放大件时有乘客主动指出哪张床下面有空间。这一点善意也是意料之中。

下车没话,是指要我换票,我在一床被子里找,说找到给您拿过去行吗?乘务员也不说话,不说可以,不说不可以,继续换其它人票。我几分钟后找到了票,找到她换票,都没对我说过一句话,也没看过我一眼。我下飞机到上火车,中间还需要坐一段公交,问公交司机坐这车方向对不对,司机沉默不语,不说对,也不说不对。我感觉到他似乎微微抬了一下眉,又不想继续做表情,也不愿再说。我灵机一动,问投币多少钱。司机说2元。我想,如果明知方向不对,却仍然说2元,就不是缺少善意,而是恶意了。按我的中国常识,人的冷漠因为缺少善意而非因为有恶意。司机不至于有恶意。回答2元就是肯定了方向正确,不然他会再不理我或者指头向外叫我出去。事实证明我是对的。

这都是意料之中,我注意这些细节仅仅是因为在国外不是如此。这次回国更换环境会显出来这区别。我完全没有不满和抱怨祖国和同胞的意思,正常的人不可能生活了三十年仍然抱怨自己的环境。我仅仅是注意到了。读者来信指出也许我在国外是外国人,受更好对待,评价中国应该按外国人在中国所受礼遇比较。我回复说悉尼和墨尔本市区华人占比15%,不是明显的外国人,另外撰文只是日记体裁,不是意在评价中国,不然一人所遇有限,不足评价。

但是今天的事却值得写下来。

从火车站转车,下了火车已经晚点,发现下次列车仅有十几分钟就要开出了。我有点慌,因为来不及先出站再入站了。我不知道下面要转的车在几站台,问列车员,一句话“不知道”。站台上这就没人可以再问了。我又问“您不知道我应该问谁”?答案一样:“不知道”。只好跟着人流到地下出站通道。出站通道是给人出站的,直通7个站台,信息提示很少,总不能每个都上去看看。我在里面团团转,找到一个穿铁路蓝制服的。我说,“没时间出站了,请问xxx次列车在几站台?”对方说不知道。我想也许具体车次谁都记不住,不如换个办法问。这里动车和普通列车都在同一个火车站,可能有些站台是专门为动车的,我应该问动车站台在哪里。又找到一个蓝制服,问“动车站台在哪?真是没时间出站再进了,不好意思”,我说。人家不语,用最小动作指了个方向(事后发现是相反方向)。我感激不尽,照所指方向去走了一段,发现是出站口,想必她是让我出站再进来,但是没兴致说清楚这个意思。每个出站检票员工面前都有几十个人,问她们肯定没人睬。有一位蓝制服身边人少,是向一位妈妈要小孩超高的补票费的,我借机去问,蓝制服说“不管这个”,然后继续跟妈妈吵。补票室的人看起来没事,我问了他,也是一句,“出站再进来”。我说怕误车,车要开走了,回答说“那个我管不着”。

真要先出站再入也不容易。出站的队卡在那里,因为一个老农满脸通红在跟检票员争执。检票的人要他补行李票,行李超重。他身材小,带一个扁担,前后各一个大包裹。他不肯补票,因为铁路从未真执行过这项起重规定,他觉得这是检票的针对他,欺负他。既然反正误车,我就不急了,在那里看这出戏,心里为他叹息了一段时间。我早上看上周的经济观察报,上面提到过一位铁路员工,在哀求之下,放行了一个送行的丈夫——他妻子带着孩子和行李。之后被铁路便衣记录下来,这位员工被停职三个月。我为老农心里叹息,是因为他面对的不是恶意,而是一套体制,一个机器。即使蓝制服想免去他的行李票,这体制也会惩罚她的善意。老农在为生活奋斗,但是阻挡他的蓝制服何尝不是?这里行李票也不是为了铁路营收——这点行李票钱,连便衣的便衣都不够——而是为了使老农们不带太多行李,便于管理海量旅客。这就是说,老农的愤怒是设计的一部分,这次刺激他一下,下次他就不带扁担了。他越回去愤怒地说这件事,越多的人不敢过线,铁路也就能更容易完成管理旅客的任务。你可以用情,用理,愤怒,哀求,总之面对体制单薄的个人抗争是可笑的。

为什么这一天的事我记下来?因为我在人山人海之中误车这事,我感觉到自己是一滴水在海洋中,既没有人关心我,我也影响不了谁。这个世界紧密联系着,却和我都没有关系。没有人关心我会不会误车,也没有人指望我关心他们。这种孤独无助的感觉是回国以来对我冲击最大的一次。

我不能指责铁路员工。我认为她们从事的是最困难的工作。她们全是女性。我记得有一个年龄和我妈妈接近的蓝制服,她小小的身子淹没在几十人围住的圈圈当中,声嘶力竭阻止一个客人进门,她的坚定和客人的坚定算是硬碰硬。好不容易解决了,另一个客人也是这样硬碰硬。得要怎样铁一样的意志,才能每天轮着跟人硬碰硬?须知旅客只需要硬一次,她却每次都得坚持到底。这份工作还需要她放弃女性关心照顾的天性,而是要拒人千里——也许只能选择天性拒人千里的女性,也许为了生存的奋斗她必须形成这种性格?也许试过男职工,结果经常引起打架,只好全换成女职工?如果是在澳洲有这样的岗位需要每天跟人吵几百次,员工不换岗位应该会去自杀吧。和她一样,所有拒绝我的铁路员工,肯定也是压力很大。也许她们每次想帮助旅客,都会使旅客提出更多要求或者无法完成任务被罚。也许旅客也没有善意,一有机会就逃票,在高铁厕所吸烟,动不动威胁投诉?这种令人绝望悲哀的生存状态是非如此不可吗?


[转载] 窗外有自由——給自己一個正確認識 Linux 的機會

(刊載於「資訊與電腦」雜誌, 2000/08)[16] Linux 的爆發力, 廣受媒體注意; 然而此爆發力更重要的, 是它背後蘊釀已久的自由軟體思潮與文化。 企業的資訊部門主管若想作出有前瞻性的決策, 或許更應該深入了解自由軟體文化, 而不是只看到針對爆發當時的各種細節報導。 許多批評 Linux 是短暫狂熱的文章, 就像是試圖要以單獨一張飛球的照片要判斷這些飛球的去向一樣, 缺乏時間軸的縱深。 試想: 17 年前 Richard M. Stallman 創立自由軟體基金會 1; 9年前 Linux Torvalds 以 GPL2 釋放 Linux 核心, 當時的自由軟體不論從技術面、親和力, 或商業支持的角度來看, 都乏善可陳。 當時如果以靜態的眼光試圖去預測未來的發展, 如何能夠想像接下來的「軟體界變天說」、資訊大廠的挹注資金, 以至今日資訊家電棄微軟就 Linux 的趨勢? 公元2000年, 或許是某些預言的世界末日, 但並不是軟體自由化現象的終點。 且讓筆者從電腦使用者的角度著眼, 打破「Linux 不值得信任」的迷思, 說明為何使用自由軟體才符合企業與個人的長遠利益。

軟體出了問題該找誰服務

這是不願意使用 GNU/Linux 的企業最常問的問題。 真巧, 這也是我想請教所有合法的MS Windows與MS Word用戶的問題。 你的應用程式出現「請與程式設計師聯絡」時, 你的文件中毒時, 或者你的 Windows 罷工時, 是誰幫你解決問題的呢? 是賣 Windows 或 Word 使用權給你的微軟公司嗎? 恐怕不是。筆者倒不是在指責微軟不替中Mellisa、CIH、ILoveYou 病毒的使用者善後 -- 他們的確沒有義務這麼作。 請打開 help\licence.txt 檔看看, 清楚明白地寫著微軟並不提供軟體產品之支援服務。 購買版權私有軟體 (proprietary software) , 買到的不是保障與服務, 而是使用權。 當然, 企業級的用戶可以在購買軟體使用權之外, 另外與軟體公司簽訂維護合約。 該與誰簽約呢? 如果我是MIS部門主管, 必然選擇與該軟體的製造商, 而不與其他任何廠商簽約。 這不是在替微軟或者... (呃, 台灣還用了那些其他軟體廠商的產品呢? 一下子還真不容易想出來) 在作廣告, 而是因為只有製造商握有該軟體的原始碼, 遇到問題時, 只有他們的工程師有機會深入探究問題的核心。 「軟體可以自由拷貝, 如果出了問題該找誰服務? 」 這樣的問題, 顯然把兩件事情混為一談了。 對於 GNU/Linux 等自由軟體的用戶而言, 軟體的使用權是免費的; 但如果需要技術服務那是另外一回事, 就像版權私有軟體用戶一樣, 必須另外購買。 即使你的 Linux CD 購自廠商, 也未必附贈有技術服務, 你所購得的往往只是方便, 精美的手冊和光碟片而已。 然而不同於版權私有軟體用戶的是: 自由軟體用戶有選擇技術服務廠商的自由。 美國的 Red Hat、 台灣的網虎, 或許是當地目前最具聲望的 Linux 技術服務廠商, 但是如果有一天他們的合約費高過頭了, 或是服務品質不佳, 還有很多自由軟體的 service providers 等著與你作生意。 因為自由軟體的程式原始碼不為任何單一公司所擁有, 後者的工程師一樣可以深入原始碼解決你的問題。3 甚至是微軟, 如果他們願意的話, 也可以出售 Linux 的服務合約 -- 因為他們的工程師也看得到 Linux 的原始碼。 事實上在國外, 自由軟體的服務合約市場已越來越成熟。 例如 IBM, HP, RedHat, Suse 等廠商都出售自由軟體的服務合約。 對消費者而言, 能夠從微軟處買到什麼樣的 MS Windows 服務合約, 就一樣可以從這些公司買到相同等級的 Linux 服務合約。 更好的是, 如果對這些公司提供的服務還不夠滿意, 你甚至還可以直接找軟體作者洽談第一手的程式修改服務 -- 沒有人或公司有能力擋在消費者與程式設計師之間。 當然程式設計師是否同意這麼做是另外一回事; 但這個可能性, 在專屬軟體的世界卻是完全不存在。4 當你同時使用數種不同的軟體時 (例如作業系統, 資料庫, 網頁伺服器), 自由軟體的優勢更明顯了: 如果你使用的是版權私有軟體, 而這些軟體來自不同的廠商, 那麼發生問題時更有可能因為廠商之間彼此指責反而沒有人可以負責 5; 然而如果你使用的是原始碼公開的自由軟體, 出售服務 (而非軟體) 的廠商就沒有任何藉口可以推卸責任了. 「使用自由軟體, 出了問題, 該找誰? 」對於這個問題, 我沒有答案, 因為選擇的自由在你, 消費者的手裏。

版本眾多, 相容性問題如何解決

有些人認為 Windows 是一個比較有保障的選擇, 因為它由單一公司掌控, 版本變化較小; 反觀 Linux, 有 Red Hat、Debian、Slackware, ... 等等眾多不同的版本, 其間的紛歧將造成相容性的問題, 對消費者終究是弊多於利; 對工程師而言更會使學習的負擔增加數倍。 如果我們把這樣的邏輯套到影音設備上, 得到的結論就是: 世界上的家庭劇院產品最好是由單一公司統一包裝出售, 不要有太多不同的版本; 如果把它用到電腦硬體上, 所得到的結論就是: PC最好只有一種廠牌, 才不會有不同PC之間不相容的情形; (咦, 這不正是蘋果電腦公司的做法嗎? ) 再把它用到汽車上, 所得到的結論就是: 全世界的汽車最好只由一家廠商來生產, 以免用 Ford Escort 學開車, 之後卻遇到 Nissan Sentra 就不會開了。 相容性問題的根源不在於有多少廠商生產多少種不同的產品來競爭, 而在於參與的廠商是否全力支援公開標準的通訊介面。 影音設備市場之所以活潑、消費者之所以可以享受選擇的自由, 是因為影音設備之間的連線、接頭不外那兩三種, 這些接頭的規格不為任何一家公司所獨有, 任何廠商都可以生產相容的產品。 各家產品可以在功能上不斷推陳出新地競爭; 但接頭規格卻必須在有實質需求, 且受到眾多廠商支持時, 才會更新。 PC 硬體市場也是這樣, 從 ISA 到 PCI 架構的這段時間當中, CPU、週邊設備的功能已經由於激烈的競爭而提升許多 (另一方面價格也下降許多。 請與 Mac 比較) ; 但相容性的格式卻沒有對消費者造成太大的困擾, 只要共同支援公開的PCI介面, 從來也沒聽說過主機板和週邊設備必須來自同一廠商這樣的理論。 軟體亦復如此, 不同的 Linux Distributions, 就像是不同廠牌的音響或不同廠牌的 PC, 把它拆成零件重新組合不僅是可行的, 有時甚至是必須的。 大部分與系統核心相關性較低的套件很容易就可以互換使用。 我的 486 筆記型電腦因為硬碟太小, 又沒有光碟機, 只能安裝slackware。 然而在上面安裝來自我桌上型電腦 Red Hat 的應用軟體, 也是一件輕而易舉的事情。 工程師只要學會操作命令列及 regular expression 6 等組合性高的共通介面, 不論是從 Mandrake 換到 Debian, 甚或是從 Linux 換到 FreeBSD, 都應該像更換汽車廠牌一樣容易。 事實與先前似是而非的邏輯正好相反: 使用封閉通訊介面/檔案格式7 的軟體, 才是相容性的殺手; 而程式原始碼未公開的版權私有軟體, 正是部分廠商刻意安置封閉通訊介面/檔案格式地雷的最佳掩護。 不同版本的Word之間莫須有的不相容問題, 就是最明顯的例子。 8 GNU/Linux 及其上的自由軟體, 不僅支援公開的標準, 連程式原始碼都公開了, 廠商難以刻意製造不相容的產品, 更缺乏如此做的動機, 除非它還沒有理解微軟的壟斷手法在自由軟體時代已經不適用了。 如果真有廠商刻意如此做, 其他廠商從修改過的程式原始碼立即可以看出如何解決不相容的問題。 如果你真的在意相容性的問題, 更應該盡快以開放的 GNU/Linux 取代封閉的MS Windows。

可是我還聽說...

「Linux 對硬體支援不佳、安裝困難、缺乏友善的圖形介面、欠缺應用軟體」 這些都是過時、片面、靜態的描述。 如果你有心了解當下事實的真象, 只消問任何一位熟悉 Linux 的工程師, 就會發覺即使單單從技術面考量, 微軟視窗在上述各項當中都已有許多細節遠遠落在 GNU/Linux + XFree86之後。 筆者認為更值得大家深思的, 是這類說法盛行的原因。 例如 ZIP drive 在上市一段時間之後, Linux 才能使用, 並且初期的驅動程式效率不佳。 然而仔細探究原因, 問題其實出在 IOMEGA 公司不願意公開 ZIP drive 的介面。 對於公開的標準, 如IDE、SCSI等, 自由軟體程式設計師很快就能根據 specification 寫出驅動程式; 但若買到使用 proprietary interface的硬體, 對他們而言, 就像買到沒有說明書電器一樣, 必須冒著燒毀電器的風險, 以嘗試錯誤的方式很辛苦地找出正確的操作順序。 硬體廠商不提供軟體操作介面的技術文件, 造成程式設計師必須額外投入逆向工程的時間精力以達相容的目的 (尚且不談法律問題), 最後吃虧的終究是消費者: 降低了作業系統選擇的自由度 -- 為的卻不是 (但看起來彷彿是) 技術層面的原因。 再以「難以安裝」為例, 試想如果一位使用者取得一部已安裝有 Linux 的電腦, 現在給他一片 Windows CD, 要他在保有 Linux 系統上既有資料的前提下, 把 Windows 裝在第二個分割, 那麼 Windows 的安裝又談何容易? 以這樣的邏輯來批評 Windows 難以安裝看似荒謬, 但相同的邏輯卻是許多 Linux 批評者未曾明說而直接視為理所當然的要求。 若再仔細深究, 你會發覺一部機器同時要安裝兩種以上的 OS 之所以困難, Windows 其實是最大的困擾來源。 筆者在 x86 架構上所使用過的數種作業系統當中, 唯有微軟系列的產品無法安裝在邏輯分割上, 對多個主分割支援不佳, 未提供可載入不同作業系統的真正多重開機管理程式, 卻又會暗中對 MBR (Master Boot Record) 作不必要的修改。 只有微軟。9 筆者的用意不是在貶低微軟的技術能力, 而是在指出「Linux 不好安裝」表象之下, 問題的真正根源。 一個綁匪可以對者關在囚房內的人質說: 「我提供你山珍海味, 你不需要其他食物。 有那一種食物可以像我提供的山珍海味一樣, 那麼方便地放在你的桌上呢? 」 但他不會指出其他食物之所以進不來, 是因為他刻意把它們阻擋在窗外。 他更不會告訴你山珍海味內是否施了鴉片, 讓你上癮之後, 即使重獲自由也非得繼續回來吃他的食物不可 8。 筆者認為食物是否美味還是其次, 即便綁匪所提供的美食確未下藥, 我還是必須堅持掙脫禁錮, 因為我的一輩子比一頓飯的時間要長得多。 你呢? 你的企業是否打算經營超過一個版本的 MS Word 的壽命呢? 堅持只願意看 "windows 能, 而 linux 不能" 的部分; 堅持對於 "linux 能, 而 windows 不能" 的部分視而不見, 是一件很可惜的事情. [也請看看有那些事情是自由軟體能做而版權私有軟體不能或不方便做的?]

不管你把 Linux 說得多好, 現在流行的還是 Windows 啊!

沒錯, 現在流行的是 windows. Windows 之前流行的是 dos. 更早之前流行的是 Apple II 的 basic. 在那個「個人電腦」等同於「Apple II」的時代, 如果有人跳出來說個人電腦市場的主宰者將換成 wintel 組合, 有誰會相信呢? Wintel 組合之所以能夠打敗 Apple II, 又豈是因為它本來就佔有較大的市場呢? [市場生態] 一時的流行未必是長遠的最佳選擇。 即使市場佔有率可以作為消費者選擇軟硬體品牌的參考因素, 這也是一項動態的因素。 不要忘記, 佔有率是一個比值, 當整個市場的大小成長數倍時, 舊市場的龍頭大有可能變得無足輕重。 新的競爭者毋須與舊龍頭正面交鋒, 往往只需要以其價格優勢即可進入 (應該說創造) 更低階更大圈, 舊龍頭無法進入的新市場。 而新競爭者的價格優勢從何而來? 軟硬體元件之間使用公開的資訊接駁管道, 廠商公平競爭, 消費者享有選擇元件的自由, 是電腦價格下降, 市場擴大的重要原因之一。 Macintosh 比起 Mainframe 的優勢在哪裏? 因素固然很多, 但 API 公開, 應用軟體來自眾多公平競爭的 ISV (Independent Software vendors) 是其中重要的一項。 Wintel 組合 (Windows + Intel) 比起 Macintosh 的優勢在哪裏? HPS 公開, 主機板, CPU, 介面卡, 來自眾多公平競爭的 IHM (Independent Hardware Manufactures) 以致 TCO (Total Cost of Ownership) 降低, 這是主要的因素之一。 GNU/Linux 向下可與多種不同的硬體平台組合, 向上則提供完全公開的各種資訊接駁管道 (連原始碼都公開了, 還有什麼介面隱藏得住呢?) 應用軟體研發商不需要付任何版稅即可支援 Gnome Office 的檔案格式。 有什麼力量可以阻止 GNU/Linux "勇敢地進入沒有電腦去過的地方" ("to boldly go where no one [computer] has gone before"), 像是中國, 印度, 中南美洲及非洲的偏遠地區呢? 10 當我們驚覺新世紀的多數電腦使用者礙於法律限制, 都無法讀取我們的 .doc 檔的時候, 又將如何追得上更新的流行呢? 盲目追隨流行的表象, 而不去深究每一波流行的原因及它所帶來的問題, 恐怕是最能夠傷害企業永續經營的利刃之一。 蛋塔熱現象值得我們資訊人警惕。

自由的代價

讀者可以在 lwn.net、 slashdot.org或 linuxtoday.com等網站上找到更多的事實。 如果你願意多上這些網站, 或許也會和筆者有一樣的結論: 不只是伺服器, 連桌上型電腦也應該盡快換成 Linux、FreeBSD 或 Hurd 等自由作業系統。 然而就像政治的世界當中, 爭取自由必須付出代價一樣, 全面改用 GNU/Linux 及其上的自由軟體也必須付出代價。 就像政治世界的自由, 有爭取過程的短暫痛苦, 和獲得自由之後伴隨而來的長期責任一樣, 改用自由軟體也有短暫的痛苦和長期的責任。 筆者不建議立即全面改用 Linux, 但是以下觀念與做法或可盡早實施: 從現在開始, 避免使用封閉的檔案格式與通訊協訂。 這兩者是部分版權私有軟體控制客戶的利器。 微軟內部的「萬聖節文件」11 不小心被揭露, 從他們自己的觀點來看, 更容易明瞭這個手段對消費者的傷害。 同樣道理, 避免使用介面不公開的硬體, 或者進一步站起來向這些廠商要求他們公開其產品的程式控制介面。 從現在開始改用跨平台的應用軟體。 一套侷限在單一作業平台執行的一般應用軟體, 就像一套只能擺在某戶特定公寓的家具, 或一付只能接在特定廠牌擴大器的喇叭一樣, 不論它本身品質多好, 對於永續經營的企業而言, 並不是值得長期信賴的解決方案。 Linux 的壽命會比 Windows 長很多, 但你希望企業的壽命更要長過 Linux 吧? 向拒絕轉換的技術人員說明學習 GNU/Linux 的優點。 尤其是打算長期從事技術工作的人員。 Linux 上的 GNU (革奴) 軟體及其他自由軟體一開始確實比較難上手; 但它們良好的組合力是很多資訊從業人員所忽略的重要優點。 把時間、投資在這樣的工具上, 才能讓新舊知識發揮相乘的效果, 才能讓解決問題的能力成指數成長, 6 而不致讓技術人員自己淪為軟體廠商更新版本的犧牲品, 成為歷史上某一版的MCSE。[12] 事實上在 Linux 上所學習的技術, 如果搭配適當的軟體 13, 移到 windows 下一樣有用; 只不過受限於 windows 對於 interprocess communication 支援的先天不足, 比較難伸展而已。 重視安全問題。不過我們要談的不是 「因為程式原始碼公開, 所以不安全」的問題。 那樣的想法叫「security by obscurity」, 研究資訊安全的專家都知道這是不成立的。 了解自由軟體文化的人, 認為其上資訊安全問題最弱的一環在系統管理者身上。 Linux 上解決安全問題的版本經常在問題發生後數小時至數日內釋出, 但若你的系統沒有更新, 就無法獲得保障。 其他軟體不急著追新; 但是應該給你的系統管理員足夠的「閒暇」 時間去注意最新的security patches。 改變「購買軟體, 附贈服務」的觀念。 Linux 及其上自由軟體可以自由拷貝, 但技術服務需要人力, 當然要收費。 鼓勵軟體廠商以更好的技術服務競爭, 而不是只以「附贈服務」的方式削價競爭, 才是消費者之福。 在台灣的資訊生態系內, 要完全揚棄 Windows, 改用 GNU/Linux, 短期之內恐怕不容易。 但是我們現在不這麼做, 遲早會被沒有微軟包袱的 「開發中國家」間接逼著做。10 與其到了逼不得已才勉強打破窗子, 不如現在就探出頭來真正認識窗外的世界, 主動作出理智思考後的判斷, 勇敢走出視框, 邁向自由。

參考資料

[12]: http://www.examcram.com/studyresource/openforum/old_issues.asp?num=0 也請到 http://slashdot.org/article.pl?sid=00/03/15/0747210 找到被歸類為 "Score:5" 的讀者投書。 [15]: 本頁最新版網址: http://user.frdm.info/ckhung/a/c000.php; 您所看到的版本: February 13 2012 19:32:24. [16]: 作者: 朝陽科技大學 資訊管理系 洪朝貴

回国第一日:深圳

多少习惯了客居生活,回到国内,凡是觉得不适应的地方,都是过去没想到会注意的地方。这第一篇记的是我回国后到深圳的感受。飞龙同学叫我写的。他问得细,我答得多,他说应该写下来。“细碎的东西太多,娘娘腔,写起来没意思。”我说。不过飞龙一定要我做个试验。

关于空气和拥挤这些常见感受就不说了,说点别人没说过的。

大中华物资丰富

布里斯班是我心里明珠(广义的,包含了卫星城们),之前我自己在博客上赞扬过,说人类造的城市,只能这样好了。这话不是说它发达富贵,只是说它适合生活。中国人喜欢把布里斯班叫做布村,意思是它小。其实四百万人,连上卫星城,算是一个Global city,虽然比不上深圳的一半,却比兰州人口多,称为村只是见其可爱而已。

到深圳的第一天,我首先领教了大中华物资丰富,把布里斯班抛在后面。超市里琳琅满目,商场动不动四五层,真是不到中国不知道竟然有这样多的品牌在一起斗艳。在布村,服装品牌半数是临街的独立店面,而中国必是在商场里,人被店面包围,所以觉得争奇斗艳。这样四五层的商场,布村虽然没有同样多层的,确有规模相当的,Garden City是也,我每两个月会去一次。但是深圳四五层的商场是每条大街都带一个,每个地铁出口都能找到一家,每天吃个午饭都去!美食城和饭店也是一个接一个。这足令澳洲来客觉得乡下人进城了。悉尼和墨尔本的客人也许不会惊到,那里购物中心更多,但是悉尼和墨尔本应该去跟北京上海比,布村应该跟深圳比。

虽然物资更丰富,但并非“啥都有”。客居习惯了喝澳洲当地的Ale,到了中国才意识到没有。超市确实进口了很多洋啤酒,都不是Ale,可能不合中国人口味?啤酒有两大类,一曰Larger,比较常见,中国市面上的都算这一类,包括市上的生啤和扎啤;一曰Ale,英国的比较出名,澳洲啤酒传承它,亦多是此类。说完啤酒说葡萄酒。中国市场上红酒虽然丰富,却几乎没有白葡萄酒,这也是件怪事。澳洲红白葡萄酒都很受欢迎。

另外一样缺少的是咖啡球和咖啡粉。澳洲超市各种espresso咖啡球,中国一种都没有。要说中国人不喜欢咖啡,为什么街上那么多咖啡店?考虑espresso咖啡球主要供应家庭和办公场合,不供应咖啡店,这就说明一个有趣的事实:中国人只在咖啡店里喝新鲜咖啡。我早先就疑心是这样,现在有了超市产品目录,可以坐实了。这是奇怪的事,如果你喜欢咖啡店里的咖啡,不应该在家做吗?如果不喜欢,不应该在咖啡店点茶吗?为什么会到了咖啡店就喜欢回了家就不喜欢?深圳一杯咖啡30元(澳洲大约15元到20元人民币),在深圳喝10杯咖啡馆咖啡的钱就可以买一个澳洲的espresso咖啡球机器(估计是中国生产的)。咖啡馆这样贵,深圳人民应该更有动机买espresso咖啡球,而超市没卖espresso咖啡球的。这事得国外生活过回国后才看得出奇怪。

编辑修改:飞龙问起来各种咖啡的区别,我增加一句科谱一下:咖啡店各种咖啡都是用espresso做的。做出来就喝的是意式咖啡,加水的是美式咖啡,加奶的是拿铁,加巧克力的是摩卡,加奶油的是卡布其诺。这不是中国人喜欢花哨,外文原文就是这样花哨。另外我上面讨论关注咖啡球而非咖啡粉,是因为球用起来跟速溶咖啡一样快,不需要技术,观察它的销售可以排除客人嫌麻烦的可能。

虽然酒类和咖啡失了些分,中国在其它物资上把分都拿回来了。给飞龙的原信里我提了些例子,如今觉得读者不会有兴趣看购物清单,在此省去了。

我又观察到市场上各种服务的价格都更贵了,从茶点到pizza(茶点跟澳洲同价,pizza比澳洲贵)都更贵了一些。如果人民负担各种服务的能力没有变差——我想是没有变化的,因为客人很多——那么说明中国人收入水平近年来又上涨了。考虑近年来工资上涨的同时人民币在升值,这说明大家和发达国家收入水平更近了,这里给祝贺一下。

深圳Pizza比澳洲更贵,是有文化因素的,澳洲当地人觉得Pizza是快餐,包括必胜客也属于快餐。这一点连pizaa的祖国意大利来的移民都赞同,说他们觉得在家做Pizza方便,便宜又好吃。刚出国的留学生们,还没找到兼职工作的,贫穷的日子可以用pizza对付过去。在深圳,文化上认为pizza是好东西。要说到正餐,还是深圳便宜。两个人三个菜,加上啤酒,100元人民币,在澳洲估计要相当于两三百元人民币。这里“便宜”说的是实价,不是消费收入比。

中国人素质逐渐提高

有一个地平线效应,讲的是人们对地平线上的逐渐变化没有感觉。有人为村子拍了照片,绿林白水。过了几年,绿林和水都少了好多。问村你的人,你们村的环境有变化吗?大家都说没有。给大家看看过去的照片,大家都吓了一跳,原来过去这样美的。这是说,人对逐渐的变化没有感觉。

在国外生活一段时间回国,就有机会看到这种逐渐的变化,当地人却不一定能感受到。中国居民素质的提高就是不容易观察到的。我来列举我的观察:

  • 飞机还没停稳的时候,机仓里不再有啪啪啪的解开安全带声音,大家也不抢着离开飞机了。
  • 飞机在天上的时候,我看到有趣的一幕,一位乘客觉得被冒犯了,差点跟男空乘打起来。大家一定以为又是中国人的德性了吧,其实两边都是马来人,中国乘客安静得很没事。
  • 在一个二线城市(不点名)取行李的时候,往年大家会抢着占地方,不少人跳到行李转送带中间的岛上,以便自己行李第一时间抢得到,尤其是飞机夜里到的时候。今年我到的时候午夜12点,这里秩序井然,没有人跳到行李转送带上。
  • 十字路口上,机动车道换信号灯要提前人行道几十秒。这段时间,人行道明明是红灯,大家都会统一闯红灯。今年我意外发现,只有约三成深圳市民闯红灯,大多数人等到人行道绿了再走。

谈到交通,我想多说几句。

我离开宝安机场到深圳大学,晚上拖着行李过人行道。这个人行道是slip line上的,就是连接三角形安全岛跟步道的人行道,不受红绿灯控制。一辆出租车以60公里速度呼啸过来,大灯开得雪亮,在我面前来个急刹车,笛声高响,吓死人了,好在没把我碾死。这事其实是我不对,我在中国长大,应该懂得的不能信任人行道,有人行道也要左看右看再三确认才可以走。这次是刚回来还没习惯,所以差点送命。

但是这事不是重点。重点是下面发生的事:我惊魂末定,不敢动。这时候,他应该把车在我面前开走,顺带说“你瞎了眼了!”。没想到他停在那里不走,直到我捡回我的小魂儿,慢慢走过了人行道,他才开走。这使我明白了一点,很重要:虽然司机素质还不够高,没有直接把我碾死,但是他确实觉得人行道应该让行人先通过的。读者可能以为我在取笑中国人了,其实不是,这确实是素质的提高。素质提高,首先要认识到这样做是错的,然后才能行动上慢慢改正。比如醉驾。首先要知道醉驾是错的,才有机会改,我离开中国那时候,司机们都还在谈怕醉驾被抓到,而不觉得有错。这次司机的做法已经说明,他虽然做不到安全避让,心里是知道“应该”避让的。这已经是上了一个台阶了。这样下去,不出十年,礼让行人就可以实现。

中国人钱包逐渐鼓起来

前面说到中国的服务业收费提高了。我顺手查询了一下收入水平,搜索结果第一位的是职友集网站上的信息,深圳平均工资在5650元多。当地报纸报道说随着祖国发展,生活在第一世界的华人,头上的光环已经不再。我想这是真的吧。因为中国人一方面工资上涨,一面人民币增值。12年深圳平均工资3821元(也来自职友集网),当时一澳刀对6.5元。澳洲当时平均月工资近5000刀。澳洲人民收入是深圳人的8.5倍。现在一澳刀对4.5元人民币,澳洲月平均工资过5000刀一点。澳洲人民收入是深圳人的4倍。这2年时间深圳和澳洲收入倍数8.5倍变4倍。如果澳洲居民头上过去有光环,现在至多只能算富一些而已。人民币保持强势已经是趋势了,进入IMF储备也快了。这样的发展势头,再过几年,也许深圳人的平均工资就已经超过了澳洲。

我自己是IT行业的,注意到了深圳社保局资料写着信息行业(IT业)工资指导价2014年高位数是36,735元每月。这个工资水平在澳洲比程序员的平均税前工资还高一点。就是说在有些行业(IT),中国高级员工工资水平已经是发达国家中级员工的收入水平了。澳洲IT行业最好的是Goolge了,Google给程序员首年支付大约每月4.5万人民币的薪水(薪水之外带很多福利)。我相信,按社保局统计深圳应该有些民营IT企业已经在支持这个澳洲最高水平的工资了。也许在澳洲廉价软件开发任务多包印度人是这个原因?当然这样比较有不公平的地方,澳洲程序员照例不加班,大约每周工作4天半,经常去BBQ。不看压力只看收入的话,中国确实富有了。但是我刚离开深圳那天,报纸上说深圳IT程序员张斌的死,人们说是过劳致死。十年前,报纸报道过不少深圳IT员工压力太大自杀,如今不自杀了,不知道是更好还是不好。

“国外连个喝个酒的人都没有”

这次回来跟人在深圳聊天。他说,回中国发展的朋友们都说,国外连个喝个酒的人都没有。这绝对不是真的,好像“鬼佬”不喝酒似的。这只是那个人自己找不到人喝酒而已。布村盛产酒鬼,加上有福利不容易穷死,酒鬼喝成刘伶的也大有人在,都成社会公害了。周末跟朋友们一起在公园里一边BBQ一边喝酒,这是我的海外生活的高点,喝着喝着朋友从家里拖出几条独木船,几个人一左一右摇摇晃晃在近岸的水上划船“散步”,水中树林丰茂,跟林间散步一样。虽然名义上公共场所禁酒,其实举止没失节的人警察是不会找麻烦的。虽然每年都得花纳税人的钱从海里救出我们这种人,但是我们在中国不也是总给政府添麻烦吗?政府还有时候不关心我们死活呢。“国外找人喝酒都没有”这说不过去呀,就算你不愿意找鬼佬喝,悉尼和墨尔本市区华人占比15%呢。我觉得还是成年之后客居不容易交朋友,华人之间有比拼文化也不容易交到至友,老想跟发小喝酒,才会有找不到人喝酒这种感慨。少年出国的华人就没有这种抱怨了。另外,华人有面具,酒后真言,可以起到释放效果,所以有喝酒的人是件大事。如果不必酒就可以直言,也就不必喝醉了,亦不必找酒友。

常见的“外国好还是中国好?”讨论,现在懂了

人到底是感情决定认识,还是认识决定感情?在国外和国内都待过一段时间,我有了一些特殊的证据:人的认识是感情决定的,而人基本是感情动物。

这个证据就是“中国好还是外国好”的讨论。在布村有时候我会遇到中国人说,还是出来吧。有一个人说,我的朋友们很多都出来了。

到了深圳,聚会时大家很容易谈到这个话题。大家都说,还是回来吧。有一个人说,我的朋友们出了国的都回来了。

我现在懂得,已经出去的人不想证明自己出去的决定不对,要寻找证据。国内朋友处境一样,要么出不去,要么有酸的感觉,也寻找证据证明待在国内好。尤其是外语没准备好的朋友,更是理由多,但是说出来众多理由中肯定没有外语不好这一条。

刚出国的时候,看不出这一点,觉得大家都是理性讨论。出国再回来,就明显能看出,大家用情多,理性讨论少。

如果暂时不谈文化上的不适应,在哪里生活好是显然的。发达国家社会总体达到了相当高的水平,虽然有欧洲经济危机地区的情况,总体仍然是发达国家生活更好。前往外国生活的中国人比前往中国寻找发展机遇的外国人多很多。在国外华人圈里,经常遇到的话题不是什么时候回国发展,而是如何获得签证长期待下去。这些华人回到中国就不再谈他们努力而得不到外国长期签证的痛苦了,转言回国好。这是因为,他们一旦谈求签证不得,中国同胞们就会劝他回国发展,他要是说不想,还是想在国外,那就得不到同情,不旦没拿到签证,还把周围人都得罪完了。最好说自己选择祖国机遇多,还可以多保持些中国当地朋友。这种聪明的办法也可以反着用。有的人到了澳洲对当地人说他们选择自由的国度,其实他根本不在乎自由,只是喜欢生活水平高的国家,到了不自由的新加坡他一样会很开心的。至于中国是不是机遇更多?别的我不熟悉,就因特网领域是真的,在中国发展又快用户又多,外国企业又进不来,青年正好施展。但是大部分新移民人追求三点:少干活、多收入、有福利,简单说是“少给多要”。这三个关键点发达国家都仍然比中国好。真追求自由和尊严而去西方国家的,和真追求乱世称雄(或乱世救人)去中国的,都是极少数,两种我都仅见过一位。事先并不知道人有尊严,唾面自干习惯了,到了国外生活几年被“洗脑”,开始认为尊严很重要的,我没有算在里面,因为这算老移民了。这一段只讲新移民。

大量中国留学生返华,主要是两类,一是文化不适应交不到朋友没归属感,二是拿不到居住签证。留学生理应返华的,移民政策就是如此。澳洲出口大学教育服务不等于给移民名额,留学生返回祖国是题中应有之意,发达国家留学生一样应该回祖国,我在couchsurfing活动上就遇上不少为了拿到澳洲签证到乡下打工的英国人、欧洲人(不乏软件工程师、化工工程师这样背景的),说明合法留在澳洲这里不容易,不能拿大家回祖国这件事证明中国条件好。不管是交不到朋友还是得不到签证,都是“只好回国”,这跟“选择”了回国不一样。

飞龙又建议我文章翻译成英文。读者不一样写法也就不同,直译无意义,我就没再努力。英文我也确实写了,内容不同,但是我对英文稿子比较认真,怕乱发读者有误会,所以现在还停在英文编辑手里等他改完再说。


姥姥今天走了。。。

她 曾经是上海交通大学建国后首批毕业生 曾经是朝鲜战争中首批雷达兵 曾在十年浩劫中起起落落 image 她 更是我的姥姥 她与癌症抗拒了17年 今天凌晨还是走了 与波澜壮阔的一生不同 走的时候很安详很平静 享年87岁 为缅怀,全网站采用灰黑色界面7天。

弃用QQ和微信!全面转向基于XMPP(Jabber)的即时聊天

国内的互联网服务越来越流氓,现在微信已经需要实名验证才能加入群聊。早在微信刚出来的时候,就非常流氓的会要求导入手机通讯录。同样的超级流氓,还包括QQ,因其封闭其他开源实现,而自身的Linux客户端早已废置,总之放弃这样的流氓已经刻不容缓! 特别是其后还有无比流氓的天朝官府。如果不想被“有关部门”监视盯守,使用去中心化的,且完全由自由开源软件驱动的相应聊天工具,当然是再好不过了。 因此首先我会想到XMPP(Jabber)协议,Jabber是一个开放源代码形式组织产生的网络实时通信协议。XMPP原本是为即时通讯而量身定制,但由于XML Stanza本身是XML元素,在基于XML灵活发展的特性下,使得XMPP也可以适用其他方面,已经得到了IETF的批准。XMPP与IMPP、PRIM、SIP(SIMPLE)合称四大IM协议主流,在此4大协议中,XMPP是最灵活的。 [caption id="" align="aligncenter" width="467"] XMPP协议图解[/caption]   早期的Google Talk也是这个协议(Hangout已经禁止跨服务器间通讯),Facebook Message也与此兼容。另外国产互联网服务里的新浪微博的私信功能是基于XMPP的,还有据称米聊、人人桌面和陌陌,也是XMPP/Jabber协议的实现。

XMPP的功能和优点

除了常用的IM功能以外,还支持SASL和TLS加密,因为它最大的好处是分布式/去中心化的,这样就使得ISP的封锁和公愤网(GFW)无能为力。当然最重要的是因为多服务器S2S连接,产生的负载均衡效应,这不容小觑。再加它的实现方式依赖XML,因此强大的可扩展性为此增加了非常多的功能。目前XMPP标准基金会负责制订和维护相关标准。 有人认为XMPP不能发图片和传文件,实际上这些都是协议里支持的,主要是依赖客户端支持。试想,如果这些协议不能支持,那么微薄私信的发图功能怎么实现呢?当然了,在XMPP协议层里,语音视频这种SIP也是支持的,有兴趣的可以研究XMPP的Jingle协议。 XMPP也不是没有缺点。一个严重问题是因为全部都由服务器中转,服务器的压力会比较大,特别是高连接数的情况下。另外一个致命问题是某些服务器程序会丢消息(曾有人反映openfire就会丢消息),不过常见的开源软件实现,基本都解决了这问题,有些采用离线消息的方式提供暂存,进而可以解决这些问题。目前我的使用过程中,尚没有发现丢消息的问题。 多点登录,可以用多个设备同时登录(以优先级区分之)。这既是优点也是缺点,优点是多个登录端可以互相通信,缺点是不容易同步。因此若A和B通信,B有3个客户端登录,那么若A给B发送一条消息,只会默认推送到优先级高的客户端上,除非A指定B的某个已经登录的客户端。因此XMPP需要多点同步功能也是需要解决的。 多人聊天。XMPP/Jabber实现多人聊天(MUC,Multiply User Chat)是采用聊天室的方式实现的,也就是开一个群聊的服务,比如jabber.ru服务器会单独开一个conference.jabber.ru来帮助大家实现多人聊天。想要群聊需要先建立一个房间,比如room@conference.jabber.ru,然后其他人加入到这房间里即可多人聊天了。多人聊天是个可选服务,很多服务器提供商提供了,有些则没有提供。因此缺点就是群聊不是很方便,在现在很多聊天软件已经可以非常轻易加人构成群聊的情况下,这种方式多少还有点低端,与传统的QQ群聊很类似。

申请XMPP(Jabber)帐号

因为Jabber/XMPP是可以跨服务器的(也可以在服务器端禁用这个功能),这样只要有一个帐号就行就可以与所有人公开的人通信。这里推荐使用[https://xmpp.net/directory.php](点表头就可以排序)网站列出来的公共服务器列表。右侧两栏是安全评级,分别是客户端-服务器端(C2S)安全评级,以及服务器与服务器(S2S)之间的安全评级。A级为最高,F为最差。 我花了一些时间遴选,既考虑到安全性(必须是A评级),又考虑其提供较多的服务和低ping值。最后可选的服务器如下:
  • xmpp.jp:服务器已经迁移到AWS东京机房了。主要优势是安全性非常好,速度也挺快。因此综合考量是最佳选择。
  • dukgo.com:著名的非追踪搜索引擎 DuckDuckGo 旗下的 XMPP 服务。安全性和速度都不错。如果不在亚洲地区,这个服务器是最好的。
  • swissjabber.org: 苏黎世的服务器,老牌Jabber提供商。速度略慢,安全性也还不错。值得作为后备帐号使用。综合能力不输给其他的。
  • jabber.otr.im:这个服务器强制要求 OTR 加密,提供了较强的安全性,同时速度也不慢。追求极佳安全性的时候可以考虑。
  • wtfismyip.com:服务器在美国,AWS的云主机,ping值稳定在300多ms。其优势是安全性极佳。速度也不慢,同时还支持Tor和暗网。因为是AWS云主机,我认为稳定持久可能会不能保证,带宽可能比较少。追求极佳安全性的时候可以考虑。
选好服务器以后,如何注册呢?因为XMPP/Jabber对用户注册的后端并没有规定和限制,因此各家服务提供商就各自有自己的数据存储方式,目前主流的XMPP/Jabber服务器都可以连接数据库(比如MySQL)、LDAP服务器、甚至单纯的只是文件存储。当然,这些注册也都是免费的! 常用的注册方式,比如在网页注册,有的则是在客户端直接注册(这也是XMPP协议里支持的)。下面说说客户端注册,至于网页注册嘛,大家可以自己研究咯,反正非常简单。

准备客户端

PC端肯定要推荐一些比较经典的啦,诸如PidginEmpathyKopeteMiranda IM(只支持Windows)或Adium(只支持Mac OS X)这样的都可以很好的兼容XMPP/Jabber协议,不过呢还有一些专门的客户端软件,比如 GajimPsi+(这是Psi的升级版,增加了更多功能)这样的XMPP专业工具。类似Pidgin这样大而全的软件可以很好的支持XMPP几乎所有的功能(通过各种插件)。而专有的软件则可以更加专注于协议的实现,更加完善,也更加富有使用的优势,特别是需要加密聊天比如OTR和PGP这样的时候,专攻XMPP协议的这些客户端就更方便可靠了。当然还有命令行下的软件,mcabber是专门设计给XMPP/Jabber使用的,可以非常方便的提供OTR和PGP加密聊天。 [caption id="" align="aligncenter" width="600"] Gajim下的基本聊天[/caption]   手机移动端。Android和iOS都可以用ChatSecure,一款知名的支持OTR的XMPP/Jabber的手机软件,很是方便。但如果希望支持PGP,则推荐使用Conversations,Android用户可以用过F-Droid非常容易的安装(这款APP在Google Play竟然是收费的!)。 [caption id="" align="aligncenter" width="253"] Android 下的客户端 ChatSecure[/caption]    

连接XMPP/Jabber,享受聊天

这个过程与其他IM软件几乎没有什么区别了,只是因为客户端不同而造成的操作区别而已,只是注意,如果添加好友,每个人的识别方式,不再是一个号码(类似ICQ或者QQ),或者一个字符串(微信号),这里变成了形如
username@domain.name
这样的形式有很大的好处,不用费劲去记忆大量无意义的号码了,更可以不用担心微信号冲突的问题。不过这也带来很大的缺点,就是有可能冒用身份。某人冒用了他人的XMPP/Jabber账户,容易产生一些问题。唯一的办法的是通过类似openPGP/GPG这样的方式来标明身份。这也就是为什么我青睐使用Psi+或者mmcabber这样客户端的。因为可以使用openPGP/GPG密钥来签名登录服务器,这样的好处是大大降低了身份被冒用的风险。 因此,添加好友,或者散发自己的XMPP/Jabber账户的时候,就可以这样以邮件地址的方式散布。很关键的一点是要告知别人如何认证你的身份,制造身份的唯一性。

私密聊天

目前常用IM的端对端私密聊天方式主要有两种,分别是OTR(Off The Record)OpenPGP,这两种都是利用非对称加密的原理,实现加密聊天。 OTR是XMPP/Jabber协议里提倡的加密方式,优点是速度快,可以快速建立链接,利用Deffi-Hellman密钥交换算法和前向加密原理,可以快速加密信息,并且保证安全。缺点也有,由于是基于客户端的,如果更换客户端,或者多终端登录的时候无法保证身份一致性,这要求聊天对方信任我的所有客户端密钥,这问题会导致伪造身份出现。 [caption id="" align="aligncenter" width="613"] Gajim 下的 OTR 加密聊天[/caption]   对OpenPGP的支持并不是每个客户端都有,能够符合XMPP-XEP0027要求的不多,目前Gajim、Psi+和mcabber都可以满足这个需求。openPGP毕竟是面向邮件的非对称加密,因此其速度和效率尚不足以与快速的即时消息相适应。 SSL/TLS连接也很重要,虽然对聊天双方来说都是一样的,但因为多增加了一层加密,使得聊天更加安全。

自己搭建XMPP/Jabber服务器:Prosody / ejabberd

目前自己搭建XMPP/Jabber服务器是非常可行的,常用的方案有很多,我亲测的是 Prosody 以及 ejabberd 这两种。前者更加轻量级,也简单易行,而 ejabberd 有更为强大的配置,可以自行配置强大而独立的XMPP/Jabber服务供他人使用。可以自行在互联网上搜索相关的内容,搭建起来并不复杂。 我自己架设了一个测试用的XMPP/Jabber服务器,tonghuix.asia。有兴趣的朋友可以来测试。注意,服务器在墙内且未备案,虽然执行加密,仅可做普通连接和测试使用,不得作为可能涉密的使用。服务器的测试结果:客户端-服务器服务器之间

特别提醒!

  • 千万不要忘记密码!。大多数XMPP服务提供商并没有提供密码找回功能。因此密码要妥善保管并牢记!
  • 确定主要身份,防止冒用。莫轻信聊天的对方。OTR的方式提供了通过保密问题的方式验证身份,虽然比较LOW,不过却是目前比较好的方法了。
  • 一定选择妥善的加密服务。首先登录连接必须是SSL加密,若能选择一定考虑服务器是否支持TLSv1.2,因为这是目前比较安全的。另外聊天一定选用OTR或者PGP其中一种,一般OTR就够,若对保密要求比较高可以考虑OpenPGP。
  • 安全起见,一定选择自由开源的客户端。这毋庸赘言了!不仅客户端,包括其上的插件也必须是自由开源的。
  • 多人聊天的时候防止外人窜入。我们曾经测试MUA多人聊天的时候,一个俄国人突然窜入我们的房间,并大谈俄日争端的北方四岛问题……所以安全起见,多人聊天的时候设置房间密码比较好,我觉得如果追求最好的多人聊天,比如在线开会等,最好的还是IRC。
关于XMPP/Jabber拉拉杂杂的先说这么多,有空我可以再基于具体客户端,写一个图文的教程。目前来看,移动互联网时代,分布式去中心化一定是大势所趋,所以我觉得必须要解决的问题就是让开源的协议和客户端尽快流行起来。总之,大家都用起来,早日屏蔽流氓软件,这条路一定不会很顺利,毕竟人间正道是沧桑。 从现在开始我就弃用QQ和微信了,欢迎加我的XMPP帐号,大家一起畅聊!以下两个均可:
tonghuix@jabber.gnome.org tonghuix@whatismyip.com

UPDATE: 2016年1月6日,修改了文中提到的一些 XMPP 服务提供商,因为有些已经失效,或者安全性有调整。

亚洲其他国家开源社区一瞥

提前声明:此文所说的“国家”一词既包含主权国家,也包括一些地区和政治经济体。 这次我去新加坡参加FOSSASIA,认识了很多很多亚洲国家的朋友们,结合之前的体会和观察,决定将一些看法和交流的结果呈现出来。希望借由这些他山之石,可以帮助中国开源社区的治理和运营学到一些经验。原来想定此文标题为“亚洲国家开源发展一考“,但“考”字会让人误解我真的做了深入的考察,然而事实上,大多只是参加了当地的开源社区活动,和当地人交流、闲聊的结果,更何况有些国家,我其实根本没有亲身前往;另外,我本人的思想和体验也会多多少少影响到对这些国家的评价,并不客观,比如我更加青睐台湾的开源社区模式,所以后来就把文章标题改为”一瞥“,本文也就是给各位朋友开开眼界,当个旅行指南也是不错的。 再次声明:此文评价非常主观,并不代表客观真实的考察。众所周知,我更喜欢台湾开源社区模式,但也会尽量客观的评价其开源社区,及与其他国家的比较。

新加坡

毕竟这次FOSSASIA在新加坡举行,我也是刚刚参加完这次活动,趁着现在依旧记忆深刻,不妨就先来说新加坡。 作为一个多文化融合的国家,新加坡本地的开源社区就像这里的饮食一样,也更多的呈现一种多民族、多种文化、多种宗教共通融合的国际化社区。因此在这方面,开源社区在新加坡也就更加具备国际化特性。实际上,国际化并不是新加坡开源社区的主要特点。新加坡开源社区的一大特色是注重开源社区的社交作用,从Hackerspace的多种活动,再到其他社区的频繁合作,整个新加坡的开源社区具备一些很多新技术的前沿特性,这里的开源社区对商业诉求不多,一切还都是For Fun的朴素社区状态。 所以一句话来总结新加坡的开源社区特色:多文化融合、国际化、一切For Fun。这种模式也有个缺点,就是大多集中在Geek层面,落地的比较少,也难以将社区规模扩大,产生更大的影响力。

韩国

2013年我曾前往韩国参加在那里举行的2013 GNOME.Asia会议,给我印象比较深的是,这里的开源社区发展还是非常初级的,甚至并没有什么成型的活动。由于大公司,如三星、LG的投入,这里的开源发展大多围绕这些大公司来布局,开源的发展偏向公司对开源技术的诉求。从某种角度来说,这种开源社区的治理模式,就是之前我曾说过的完全以商业利益为转移,完全按照商业模式指导开源社区运作。 从2013年至今,各种开源社区会议上,韩国社区的演讲虽然技术性很强,但其演讲人往往大多是商业公司职员,在开源社区往往没有什么太多贡献,使得当他参加开源社区会议的时候,很难与大家有共同语言,由于之前社交缺乏,让大家比较难与其沟通。当然也有例外,比如韩国GNOME用户组的Changwoo,他本人就很有能力,也在开源社区中有大量的贡献,以至于往往提到韩国开源社区的时候,我就会想到他。 简单来总结一下韩国开源社区的特点:韩国开源社区的发展方向遵循商业利益导向,公司发展对社区的发展影响重大。开源技术的贡献者并不少,但很难融入社区开发中。

日本

首先声明,我并没有去过日本,不过却接触了很多日本的开源社区朋友,更结交了一些深度贡献者。总的来说,日本的开源社区更加国际化,这种国际化与上面提到的新加坡的国际化不同,日本的国际化是一种近乎脱离亚洲的那种国际化,他们往往不太在意亚洲各国举办的开源会议,也不会参与到亚洲的开源社区中来,而日本却会不遗余力的承办LinuxCon Japan,承办各种国际上著名的开源会议。总的来说,日本的开源发展正如明治天皇时代提出的日本国家路线一样,有些“脱亚入欧”或者“脱亚入美”。但是,日本因为在开源社区贡献者众多,开源社区力量比较强大,我接触比较多的是他们本地的LibreOffice社区和openSUSE社区,并与很多朋友深入交流。 日本在亚洲开源社区虽然接触少,但因为代码(包括文档、翻译等)贡献者众,使得他们在亚洲社区中的地位还是比较高的。毕竟我没有去过日本,若有机会我还是很想前去日本,参加一下那里的活动,参加一下当地的开源社区活动,与当地的朋友多多交流。

台湾

之前文章所言,我个人非常喜欢台湾开源社区的模式,相关讨论亦可以参考我之前的相关文章。那么我为什么在亚洲各国中独爱台湾的开源社区模式呢,原因有三:其一,都有共同的文化,面临相同的问题,具有同样要考虑的问题。只有政治制度和近几十年的发展与中国大陆不同;第二,台湾开源社区通过自由的社区文化,引导开源社区的成员对自己的社区负责,同时引入社交和更开放的文化,使得开源社区更加具有生命力;最后,台湾开源社区的发展,从一开始就是自下而上,最终以开源社区为中心,一切以社区利益为转移,而不听命于任何公司甚至是政府机关。 另外,我个人之所以喜欢台湾开源社区,还有一点是他们很成功的解决了,开源与商业发展之间的困局,可以在社区发展中有限度的接纳商业公司进入,让商业公司为开源社区服务,同时在这种服务中,商业公司也能找到自己的价值。 不过台湾这种模式,亦有其背景原因。台湾有很深厚的学生运动基础(从日治时期的学生运动,到“野百合学运”再到“太阳花学运”),社会很容易促发一种自组织形态。这对开源的草根发展是有利的,但对开源的更进一步发展就产生了制约,因为草根往往有民粹特性(台湾人称之为“鄉民”),当开源发展进入一种精英阶段以后,这种民粹性会形成掣肘的力量。事实上,台湾一些朋友也已经看到这种现象,甚至产生的社区分裂。其实这个问题国内也有发生,真正为开源贡献的人,却被一堆“喷子”误解,或者有些开源贡献者进入民粹和民族主义的阵营,对各种“国产”大肆热衷,投错了方向。

香港

如果让我来评价香港的开源发展,真可用巨变来形容!2012年时,我曾参加在那里举行的GNOME.Asia,那次会议并不成功,只有大概不到100人参加,人数最少的时候只有20几个人。而香港的Linux的用家协会(也就是我们平时说的Linux用户组,LUG)平时活动也不多,与大陆众多的开源社区活动相比,更是不值一提。 但这两年香港的开源社区发展逐步走入了高速路,短短两年间就成立了HKCOTA(香港创意开放科技协会),并成功举办两届HKOSCon(香港开源年会)。如果深入了解一下就可以发现,香港的开源社区发展之所以如此迅速,有这样几个原因:其一,靠近深圳内地,可以通过硬件创业,以及深港澳的多种机遇直接与内地丰富的资源对接,这里就比如香港Wen开发的Tiny3D就借助深圳工厂的能力,实现规模化生产。第二,香港政府层面对科技文化的支持,大力推进本港IT科技创业。第三,香港各大学思想开放,自由交流,思想碰撞更多,易于组织起来,发起自组织的社团,进而有发展成开源社区的能力。 香港这种发展也蕴含着隐忧,目前主要问题是平时那些开源社区的熟人,这么多年依旧是他们,我们很难看到新鲜面孔,这也就意味着香港的开源社区尚没有实现人员的新陈代谢,人员的发展无法与社区的进步相适应,还需要大力发展新成员,进而实现社区的真正有序可持续发展。同时日常的社区活动以及社区活跃度并没有太多提高,虽然有一些变化,但整体还是比较初级,难以形成规模化社区协作模式。开源社区与国际开源社区的对接也尚有发掘的空间。

印度

我没有到过印度,不过却认识了不少印度的开源社区朋友,很多都是Fedora社区的。某种意义上,印度是亚洲传统计算机技术最发达的地方,就连日韩都难以望其项背,不过其社区却并不如预想的那么发达。这与其整体社会发展比较初级有关,开源社区比较基础,社区成员组织起来的更加本地化,而缺少了更多的国际化联系。这也就是为什么我认识的大多是红帽员工啊什么的,公司成员比较多。而比如从事其他行业啊,其他工作进而参与到开源社区中的人就比较少了。从某种意义上,开源社区在印度是日韩两国模式的综合体,不像日本那样纯粹的脱离亚洲而国际化,同时又不像韩国那样完全为了商业利益服务。 平时我们可以看到很多印度的开源贡献者,他们要么活跃在国际知名的开源项目,比如我在GNOME项目中就遇到很多印度人;要么就活跃在像Google Summer of Code或Google Code-in这样的国际活动中,可是我们很难见到印度的社区组织,只能看到独立的个体,而看不印度本地的社区。这也是印度比较有意思的一点。 毕竟没到过印度,据参加过印度开源社区的朋友的反映,印度比较难组织好一次开源社区活动,社会比较零散,人与人之间更加缺少粘性。不过也有一些朋友说,印度的开源社区很活跃,不仅贡献者众多,平时的活动也有声有色。不过据说印度的城市之间差异也比较大,有些孟买或者班加罗尔的社区就好一些,而在其他城市的就难以为继。   希望我提供的以开源为主题的“旅游手册”能帮助到各位。还是那句话,此文具有很强的主观感受,没那么客观,不能作为对一个国家(地区)开源发展真实面貌的评判,更多只能算是我的一些信息收集整理。本文还有很多国家并没有涉及到,比如承办今年GNOME.Asia,并且在政府机关大力使用开源软件的印度尼西亚,还有最近几年开源社区飞速发展的马来西亚和泰国。之所以没有写在本文中,主要是因为接触的朋友太少,了解也少,写不出什么东西。 亚洲国家大多是后发现代性国家,而且几乎都有过被西方列强殖民的历史。这些国家如何接受开源这个新生事物,如何将开源与本地文化结合,并发展出本地社区的这个过程,以及他们在社区运营和治理方面的经验和教训,还是非常值得学习和借鉴的。

过去,现在和将来

我们在时代发展的哪一个环节?如今是2015年,我家Zoë到3岁时、5岁时,世界应该是什么样子?

回顾一下近5年令我惊讶的科技界事件,每个惊讶都指出了某一方面我缺少洞见和实践知识。

  • Google Chromebook获得成功。类似概念每年都有人提到,比如NetPC,为什么轮到Google做就成功?
  • Google Glass失败。IT巨头相争使人们忘记眼镜是市场驱动还是投资驱动的项目。
  • Episodic Video Game引起人们关注。
  • 无人飞行器技术发展很快但是应用却很少。(噱头和专业领域应用不算)
  • Tesla电动车的发展。电动车获得发现是很容量预见到的,不容易预见到的是以目前这种形势发展:有一个厂商既有远见又有叹为观止的工程力量,比大家都早走出很多步。相应,容易预见到的是油改气这样的逐步发展。
  • Bitcoin和block chain。我参与得很早,2011年,但在发生之前没有预见到这种技术是可能的。在Brisbane旧海关大楼里演讲的一位早年参与设计VRML的Mark Pesce说这个技术是可以预见的(真的吗),过去叫做Digital Money,主要困难是没办法不信任中间点,如今解决了。

观察IT发展的趋势,过去几十年,电脑和手机主要是一种工具,需要人脑学习它。工具做得很不错,但是不错是指用户容易学习容易使用。比如,字处理软件能修正拼写错误,如果用户想标记一段重点,也很容易做到。但是字处理软件自己并不标记重点。又比如,LinkedIn能帮助用户制做简历,但是它并不为用户制做简历。它对求职者能力的评估来自其它用户,由其它用户来定。也就是说,我们的软件在做出决定这一点上十分笨拙。

如果字处理软件能提供编辑建议,并且常常是好建议,用户应该是会喜欢用的。具个例子,如果你写了这样一句:“间谍按之前所指示的等候在月台上。”如果电脑建议你改为:“间谍奉命在月台等候”你一定得是一个自大狂才会拒绝这种建议,因为这种编辑更多反映了文字功底,而非风格。我的编辑帮我改文章时候,九成的修改都反映了文字功底,没办法拒绝。

所以现在我们没有看到这样的功能,仍然是因为字处理软件还是不能提供足够好的建议。微软早些年制做clipper(小别针机器人)的时候,就认为机器辅功人编辑的时代到了,其实那时候人工智能技术很有限,建议做得很差,在用户盛怒之下这个功能取消了,之后微软也变得很保守。

为什么我们一直认为会成功的机器人技术没有进展?为什么没有机器人去擦建筑物外面玻璃?这里有两个原因,一是机械技术滞后信息技术,二是人工智能还差得很。机器人必须做出很多决定,我们仍然不能信任机器做出的决定,即使是如何绕开一个建筑物上的坑也不能信任。因为我自己做软件,我倾向于认为主要是原因二,即机器人仍然只是工具,不能做出好决定。但是如果原因二是主因,我们应该能看到很多机器傀儡,比如机器傀儡去擦建筑物外面玻璃,机器把实时视频传送出来,由坐在家中控制的人来操作。在人工昂贵的国家比如澳洲尤其应该出现这种技术。这种技术既然没有出现,说明“没有人工智能”还不是主因,机械技术滞后,没有办法廉价制造复杂机器,应该是同等重要的原因。目前即使在支付力高的发达国家,家中也没有比洗碗机更为复杂的机械结构。这很说明问题。

最近5年我看到一个有趣的变化。最重要的变化来自Google搜索结果。人们对渐变不敏感,所以不一定注意到:现在Google比之前更理解用户的意图。我不知道这是因为大数据还是人工智能(或者两者是一回事),但是结果是一样的,即Google更聪明了。我所说的有趣的变化,是机器或信息系统越来聪明。最近纽约时报报道说明我们读到的报道有很多是机器自动生成的,但是我们没有觉查到。我在澳洲本地开车时电台常收到连续数小时无语气变化的高速体育比赛报道,这可能也是机器生成的,只是我没时间追究。

这就是说,我们可能正在接近简单的人工智能。

再回到一开始的问题:我们在时代发展的哪一个环节?如今是2015年,我家Zoë到3岁时、5岁时,世界应该是什么样子?

我们先考虑我们是不是正在接近简单的人工智能。未来3、5年这方面会不会有长足发展。

如果没有,那么近3、5年的演进将主要集中在游戏规则的发展。LinkedIn就是一个很好的游戏规则,很有效果,其产品不带智能,但是游戏规则引人入盛,大家一起玩,既得到奖励又奖励别人,最后形成一个有价值的网络。AirBnB以及Instagram以及taobao都算。(instagram其实就是洪之前说的Image Labler游戏)。

如果有简单人工智能的高速发展,机器人不撞墙变成了基本功能,但是机械技术无法降低成本大量普及,那么我们会见到一两种标准化的机器人获得长足发展,机器人的标准化过程将开始。未来5年会有几种机器人操作系统产生,Android可能又是其中之一。当然不是我们熟悉的Android。这个品牌价值高,Google比较可能再次领先入场,又不愿意花时间建立新品牌。这些标准机器人会有一两种四旋翼直升机,几种小型陆用机器人。他们会面向操作简单但是需要判断力的领域,比如割草。这也是家俱和建筑设计更新换代的时候,新的家俱和建筑被设计成便于简单机器人工作的样子。大数据/人工智能当然在机器人之外的领域也会发展,比如会自动标记重点的电子书和智能的电子游戏,但是另文讨论吧。

如果机械技术同时变得可靠廉价又普及,那么我们会看到复杂操作的机器人,比如建筑物擦窗机器人。这是因为擦窗的动作比割草复杂得多,需要更多的液压管和机械臂。

如果人工智能没有高速发展,但是机械技术同时变得可靠廉价又普及,我们会见到很多机器傀儡,同时中国和印度的廉价劳动力将会坐在家里控制富有国家的机器傀儡。我们会看到一两个使用机器傀儡完成的凶杀案,其操作连接使用加密,所以找不到真凶,或者找到了真凶并出现一个新福尔摩斯名探,总之,使得上了年纪的人,比如80后们,大大惊讶一通,觉得自己都不熟悉自己所生活的世界了。

这是对未来的思考的第一篇文章,欢迎批评。

要是读到这里,祝贺你,这也能读下去。下面的会更无聊:我检讨一下过去5年考量,越检讨越不易再错。我过去的观点是:

拼车软件将广为流行,冲击出租车行业,并引起中国政府严厉监管。
这个预计的基础是手机定位和地图功能的完善,尤其是基于google map api的软件,以及类似于淘宝这样网上评分系统的广泛使用。考虑严厉监管会有效果,实际使用中有现金交易的拼车服务不容易做,适合先做免费社区服务。前述预计错了。错在一是高估了政府的管理力,二是低估了收费交易的力量,可以产生大量业余全职或近于全职的司机,而这才是变革的中坚力量。另外,没有预见到政府会打击Google Map API。
智能手机广泛发展,企业对智能手机使用水涨船高,软件业将努力争取企业级用户,微软有机会再发力一次
实际上企业对手机的应用是从最小的单位即个体户和微型企业开始的。从澳洲这边观察,目前报纸上报道的企业创新软件是微小的工作流程改进,解决具体而微的问题,比如供房屋评估人士使用的应用,无非是纸张评估清单的手机版,但是受到很多好评。想像中的微软掌上Office跟Google Docs大战并没有发生。这跟微机上是不同的,微机(就是PC和Mac)上传统故事是通用杀手级应用程序大战,小的应用跟进。这可能是因为Google比较有远见,将对手抛得太远;也可能是因为手机应用是场景用例,不像微机可以一个应用软件解决一万个问题(比如Microsoft Excel),而是一万个问题需要分析一万种使用场景,解决一万个用例,所以需要一千多个应用软件对应,万用办公套件不流行。这给小应用开发又带来了机会。
电子游戏更加真实,增加很多虚拟现实游戏与Second Life竞争。虚拟生活如此实际,以至很多人不再提Second Life,而是直接提到里面的事物
这件事不但完全没有发生,而且意想不到的事发生了。一是虚拟游戏式微,Second Life一年比一年没人理。二是小制做、每关只有几秒的游戏崛起。三是独立制做出现了一些艺术性特别强的作品,比如80 Days。为什么错判断?应该是因为既不理解游戏行业的运作方式,又对玩家不够理解。玩家基础扩大,总体需求就变了。
负载均衡的新技术发展
实际发生的事是书店Amazon成为最成熟的云资源服务商。记者喜欢说Amazon发现自己有过剩计算资源,所以卖出去。懂行的人知道计算资源不是煤炭资源,并不是说卖就能卖的。必须有长远打算,持续改进,才有希望卖得出去,不然ebay也有剩余资源为什么不卖。之前有多种负载均衡技术,灵活部署技术,比如刀片服务器,比如Solaris系统的Zones。但是这事没有了下文,现在大家关注的不是一种技术,而是一个云资源服务商。过去大家学习vmstat、pstree这些命令的用法,现在学习一套新的Amazon术语,这些术语不再涉及“系统如何工作”,而是关于“用户如何使用系统”。
机器人技术在各方面发展应用,超出制造业和科研这样的典型应用场景
实际上没有发生。即使是扫地这样简单的工作,机器人做的也很少,这一点中外一致。典型应该使用机器人的领域,比如摩天大厦外部保洁这样危险的工作,以及花坪剪草这样费时简单的事,都没有使用机器人,原因是机器人的效果尚差很多。安保巡逻也没有使用四旋翼和履带小车机器人。
HTML的发展会使得app变得不再重要,正如10年前html发展取代了大量桌面软件,如gmail取代电子邮件软件
实际上app因为懂得应用场景,近5年发展很快,创新想法很多,很流行。网站手机版的重要性似远不及手机应用。有些网站似无必要亦无优势发展应用(LinkedIn等等),仍然在努力推动其应用。

解決 WordPress 中 Google Web Font 被 GFW 屏蔽問題

自從本 blog 的 wordpress 升級並更換 theme 後,偶爾發現 page load 得很慢,用 chrome 自帶的 developer tool 查了一下才發現原來 theme 用了 google web font,因爲 google service 被牆了所以在大陸瀏覽就像卡住了一樣。由於我絕大部份時間都是科學上網,所以一開始沒有發現問題。

Google font is blocked in China

既然 google web font 不能用,最簡單就是乾脆不用,把相關代碼拿掉就行,不過這樣做的後果是網站會極其難看。上策還是把 google web font 放到 wordpress server,再將 CSS 配置好。Google 一下發現有個很棒的 shell script 能幫個大忙:https://neverpanic.de/blog/2014/03/19/downloading-google-web-fonts-for-local-hosting/,它能幫你把需要的字體下載下來並產生一個立馬能用的 CSS 文檔。

WordPress 最少有兩個地方會加載 google web font,第一是 wordpress 本身用到的 Open Sans,另外是個別 theme 可能會用到的字體。視乎你的 theme 有沒有用 google font,有可能兩個地方都要處理。

目前我用的 theme 基於 twentyfourteen(我把原來左邊的 navigation 拿掉,header 加了 facebook, twitter 等幾個 icon),best practice 是在 wordpress 的 themes 目錄開一個叫

twentyfourteen-child
的新目錄,裏面只放用來 override parent theme 的東西。

解決問題的具體步驟如下:

  1. 下載剛才介紹過的網站的 shell script,我把它命名爲
    downloadgooglefont.sh
  2. 先下載 wordpress 會下載的所有 Open Sans 字體(包括不同粗幼和斜體),在
    downloadgooglefont.sh
    裏要指定它們:

    families+=('Open Sans:300')
    families+=('Open Sans:400')
    families+=('Open Sans:600')
    families+=('Open Sans:300italic')
    families+=('Open Sans:400italic')
    families+=('Open Sans:600italic')

  3. 針對你使用的 theme,需要把 theme 用到的 google 字體寫進去。你要查一下你的 theme 會用到什麼字體,例如 twentyfourteen 會用到的字體在
    themes/twentyfourteen/functions.php
    的 215 行有提到:

    'family' => urlencode( 'Lato:300,400,700,900,300italic,400italic,700italic' ),

    總共有7個字體,所以 script 需要加上:

    families+=('Lato:300')
    families+=('Lato:400')
    families+=('Lato:700')
    families+=('Lato:900')
    families+=('Lato:300italic')
    families+=('Lato:400italic')
    families+=('Lato:700italic')

  4. 執行該 script:

    $ bash ./downloadgooglefont.sh
    Downloading Open Sans:300... eot woff ttf svg 
    Downloading Open Sans:400... eot woff ttf svg 
    Downloading Open Sans:600... eot woff ttf svg 
    Downloading Open Sans:300italic... eot woff ttf svg 
    Downloading Open Sans:400italic... eot woff ttf svg 
    Downloading Open Sans:600italic... eot woff ttf svg 
    Downloading Lato:300... eot woff ttf svg 
    Downloading Lato:400... eot woff ttf svg 
    Downloading Lato:700... eot woff ttf svg 
    Downloading Lato:900... eot woff ttf svg 
    Downloading Lato:300italic... eot woff ttf svg 
    Downloading Lato:400italic... eot woff ttf svg 
    Downloading Lato:700italic... eot woff ttf svg

    這些就是下載完的所有文檔,包括適用於 chrome/chromium, firefox, safari 會用到的字體,還有一個 CSS file:

    Lato_300italic.svg
    Lato_300italic.ttf
    Lato_300italic.woff
    Lato_300.svg
    Lato_300.woff
    Lato_400italic.svg
    Lato_400italic.ttf
    Lato_400italic.woff
    Lato_400.svg
    Lato_400.ttf
    Lato_400.woff
    Lato_700italic.svg
    Lato_700italic.ttf
    Lato_700italic.woff
    Lato_700.svg
    Lato_700.ttf
    Lato_700.woff
    Lato_900.svg
    Lato_900.ttf
    Lato_900.woff
    LNM3t2QINm
    Open_Sans_300italic.svg
    Open_Sans_300italic.ttf
    Open_Sans_300italic.woff
    Open_Sans_300.svg
    Open_Sans_300.ttf
    Open_Sans_300.woff
    Open_Sans_400italic.svg
    Open_Sans_400italic.ttf
    Open_Sans_400italic.woff
    Open_Sans_400.svg
    Open_Sans_400.ttf
    Open_Sans_400.woff
    Open_Sans_600italic.svg
    Open_Sans_600italic.ttf
    Open_Sans_600italic.woff
    Open_Sans_600.svg
    Open_Sans_600.ttf
    Open_Sans_600.woff
    font.css

  5. 把上面所有的字體上傳到 wordpress server 的
    wp-content/themes/twentyfourteen-child/
    目錄。
  6. 把 font.css 複製到 wp-content/themes/twentyfourteen-chile/style.css。
  7. 由於 twentyfourteen 在
    functions.php
    通過
    wp_enqueue_style
    加上
    fonts.googleapis.com
    的 link 來加載 Lato 字體,要想辦法把它拿掉:

    // Add Lato font, used in the main stylesheet.
            wp_enqueue_style( 'twentyfourteen-lato', twentyfourteen_font_url(), array(), null );

    不過我不喜歡直接修改 parent theme,所以我選擇在 twentyfourteen-child 把它 dequeue 掉。注意 add_action 的 priority 必須低於 10,dequeue 才會成功。

    theme_enqueue_styles
    的前兩行是用來禁止 Open Sans 字體從 google server 加載,第3行才是禁止 Lato。
    _twentyfourteen-child/functions.php
    :

The post 解決 WordPress 中 Google Web Font 被 GFW 屏蔽問題 appeared first on Anthony Wong.

Building an API with Zinc-REST in Pharo Smalltalk

In this session we are going to build a simple RESTful API using the Zinc-REST package.

The base image is again Moose, now the latest build of Moose 5.1

You may watch part one, part two and part three of this series if you are interested to find out what lead to this point. They are however not needed to be able to follow this session.

A static webapplication hosted on Pharo Smalltalk

For part three of our workshop series we start from scratch, and build a small website that hosts nothing but static files from a memory FileSystem.

We are also going to explore the new development tools that are built in the Moose project

You may watch the first and second parts of this series, or you may jump right in here.

In the next session we are going to build the RESTful API to make this application functional

Building an API with Zinc REST in Pharo Smalltalk

In this session we are going to build a simple RESTful API using the Zinc-REST package.

The base image is again Moose, now the latest build of Moose 5.1

You may watch part one, part two and part three of this series if you are interested to find out what lead to this point. They are however not needed to be able to follow this session.

Osaka, Kyoto and Nara Travel Tips

Kiyomizu Dera (清水寺)Kiyomizu Dera (清水寺)

After more than 10 years I traveled to Japan again. This time I went with my wife to Kyoto, Nara and Osaka. Here are some tips about travelling to these areas I want to share and also serve as notes to myself if I will ever go there again in future, which I will definitely do as Kansai is so beautiful and relaxing.

Keep connected

Getting mobile internet connection was not easy in the past since you need Japan residency to get a SIM from telco, but nowadays the market is more open and there are now many options. In this travel, I used a SIM card called Fuji card (富士卡), which I bought from Taobao at 76 CNY (about 1450 JPY or 12 USD). This card has 1.8GB 3G data, valid for 7 days, but does not have any voice call and cannot be recharged after you have used it up. This card is backed by China Unicom and Softbank, in my experience the data connection and coverage is very good. If you live in Hong Kong, you can find this card in Sham Shui Po as well.

“Fuji” SIM card (富士卡)“Fuji” SIM card (富士卡)

If this card does not suit your purpose, you can find other alternatives:

  1. Fuji card has a cheaper sibling which has 1GB data only, sold at 66 CNY, and a more expensive sibling which has double the data to 3.2GB, sold at 155 CNY.
  2. Before the existence of Fuji card, there was Sakura card (櫻花卡). Sakura card still exists and offers 3GB of data with 7-day validity. From what I read it is slower than Fuji card’s 7.2Mbps and lesser coverage.
  3. There is also a nameless SIM which offers unlimited data. The first 100MB data each day uses 3G speed but afterwards it falls back to 2G speed. It is cheaper but I bet no one want to suffer from slow speed especially during traveling.
  4. If your phone does not support WCDMA or you are not good at fiddling mobile phone settings, you can rent a WIFI router. More expensive, and you have to return it after the trip which I find inconvenient.
  5. So-net also sells pre-paid SIM cards at the airport, at a higher price than the Fuji card.

About Hotel

Valentine’s day is not a good day to travel to Japan not (just) because restaurants are fully booked but room rates could be more expensive than normal days 2 to 3 times, even for budget hotels like Toyoko Inn. I was very lucky that I found a really nice ryokan called Kitanoya (北野家) where the rates remained the same on the special day. Only available at Jalan, so knowing some basic Japanese is a pre-requisite. In general, check Jalan and Airbnb and you might find hidden gems.

Kitanoya (北野家)Kitanoya (北野家)

Hotel near Kansai Airport

My flight landed almost at midnight so I chose to stay in a hotel close to the airport and began our journey the next day. There are not many options, the hotel at the airport is too expensive so I chose to stay at First Hotel. It is located in Izumisano (泉佐野) and very close to the Izumisano railway station, so you can take a train there, or if it is too late like my case, you can take the late night airport bus, the last stop is exactly the Izumisano railyway station.

The bus station is just outside the exit of the departure hall. After exiting the airport, turn right, look for the stand numbered ’12’. No need to buy ticket beforehand, pay when you take off, so better make sure you have 1000 yen notes or coins, which I did not have. Luckily the bus driver was able to find a lady who had ten 1000 yen notes to change for my 10000 yen note, otherwise I don’t know what would end up.

Travel to/from Kansai Airport/Kyoto

If your destination is either Osaka or Kyoto and your flight will land at the Kansai International airport, you will likely buy the “ICOCA and Haruka” ticket set to take advantage of the Haruka train (non-reserved seat) from airport to Osaka or Kyoto.

Haruka train ticket from Kansai AirportHaruka train ticket from Kansai Airport

In my journey I made a mistake of buying the one-way instead of the round-trip, thinking that I would take the Nankai railway back as many people suggest. Later I found out my hotel actually is closer to Tennoji (天王寺) where there is JR station, so at the end I took the JR Hanwa line rapid train to the airport, that costs 1060 JPY, and in total it is more expensive than the round-trip “ICOCA and Haruka” ticket set. So check the location of your hotel carefully, Google Maps is your friend.

The ticket set is sold on the 2nd floor of the JR office at Kansai airport, show them the passport when buying.

The railway system in Japan is complicated and could be astounding to new individual travelers, so
do your homework carefully in advance.

Travel in Kyoto

Kyoto is well connected with buses, they are very frequent and can reach all the popular attractions in the city. I took the bus almost exclusively in Kyoto, so I highly recommend buying the one-day bus pass. The pass costs 500 JPY and each bus ride costs 220 JPY, so the pass makes sense if you take more than 3 bus rides, not to mention you free your mind from worrying coins.

There are other passes that let you take subway as well, but since there are only two subway lines in Kyoto, I find bus to be more convenient and so subway passes may not be worth buying.

Travel in Nara

Deer in Nara ParkDeer in Nara Park

As Nara is not big and most attractions are close to each other, most people go to Nara as a day trip and stay in Osaka or Kyoto at night. For me, I stayed in Osaka and went to Nara in the morning by taking Kintetsu train to Nara Kintetsu station. Kintetsu has discount tickets called Nara-Ikaruga one-day pass (奈良・斑鳩1dayチケット) that offers unlimited bus rides in Nara and round-trip Kintetsu trains from/to Nara. Like Kyoto, you can go to many places just by bus so this ticket is highly recommended.

Nara-Ikaruga one-day pass (奈良・斑鳩1dayチケット)Nara-Ikaruga one-day pass (奈良・斑鳩1dayチケット)

Depending on which city you buy the ticket, there are additional benefits. As I bought in Osaka, I could also enjoy unlimited rides on bus, subway and new tram in Osaka.

In Osaka, the ticket can be bought at the subway station supervisor office (駅長室), which is surprisingly located after passing the gate, which could be hard to find in maze-like Osaka subway stations.

Travel in Osaka

Osaka has a good subway system that covers most key destinations so getting a one-day pass is a smart choice.

The most basic form of the one-day pass is the Enjoy Eco card, which costs 800 JPY on week days and 600 JPY on weekends and national holidays. It can be bought directly from ticket machines. This card can be used on New Tram and bus as well, and offers discounts to some attractions like Osaka Castle and Floating Garden Observatory.

Enjoy Eco CardEnjoy Eco Card

If you ever come across the Osaka Visitors’ Ticket and wonder what it is, forget it if you do not live in Hong Kong, Taiwan or Korea. It has the same benefits as the Enjoy Eco card, but with a lower price and is only sold in these 3 regions.

There are many other passes, such as Osaka Amazing Pass and Osaka Kaiyu Ticket, see which one suits you best here.

Money Matters

If you buy the “ICOCA and Haruka” ticket set, you will then have the ICOCA e-money card with 1500 JPY in it, which can be used to take trains and subways. But it is not too useful as a means in buying stuffs as many shops do not accept it, except convenient stores like 7-11. In Osaka, I found vending machines accepts PiTaPa rather than ICOCA as well.

Before leaving Japan, ICOCA can be returned at JR office and you can get 500 JPY deposit back. 220 JPY will be charged as handling fee from the remaining amount in your card, so if you have spent all the money in the card then it means no handling fee. If you think you will visit Kansai again in 10 years, you can keep the card and recharge it next time when you come back to Japan.

That’s it! Hope you enjoy Japan and find my tips useful.

The post Osaka, Kyoto and Nara Travel Tips appeared first on Anthony Wong.

neo-noir time!

In its overwhelming kindness and knowlegde, Wikipedia granted me this information: http://en.m.wikipedia.org/wiki/List_of_neo-noir_titles so i have been watching a few of them, starting with the asian media, and a real surprise was “Black Coal, Thin Ice” the acting is superb, the noir mood intense, and the whole setting just beautiful …

quite exited for a few more, but due to the heavyness only one film a week

Serving files through FileSystem in Pharo Smalltalk

In the second part of this series we transform our website to serve all content as files from a FileSystem object.

If you haven't yet, take a look at part 1

In the next session we will serve an actual web-application

Using the FileSystem class in Pharo Smalltalk

I am learning how to build a website with a RESTful API in Pharo Smalltalk. This project started during Google Code-In as a set of tasks for students to work on. A handful of students were interested and picked up tasks to learn Pharo.

Now that Google Code-In is over, the students are interested to continue learning and so i am running workshops with them, where we explore the tools needed to build this server.

The first workshop was held last week on sunday the 25th, and the next one will be on saturday the 31st of Jnauary. from 2pm to 6pm chinese time, that is 7am to 11am CET or 6am to 10am UTC. We will meet on freenode irc in the channels #fossasia and #pharo.

A part of website consists of static files. To simplify development and deployment, we want to serve those files from the smalltalk image. One way to hold several documents inside an image is using a memory FileSystem. The FileSystem class is described in the book "Deep into Pharo" in chapter 3.

In the first workshop we try to use the FileSystem class in a sample application. We use the tutorial "Building and deploying your first web app with Pharo" as a starting point, and adapt the code to store images in a FileSystem object.

If you want to follow along, please first complete the tutorial and then watch the screencast below to continue:

In the next session we will convert the rest of the website to using our FileSystem object.

the community calendar project at google code in

For the community-calendar project in total, 11 tasks were proposed, of which 7 got completed:

Not so much work got done on the code itself, but we now have some documentation of the API as well as the start of a testing framework to help keep the API stable.

As a sideproject, these tasks were designed to explore the ember.js framework. the calendar-widget, going to be embedded into different websites was a good target because we now can offer both versions for embedding.

For ember.js the student, samarjeet wrote about the work in his weblog. An initial comparison: Comparing the community-calendar
Creating Ember Components turned out to be more dificult, and we had to enlist outside help to solve it.
Finally, a deeper comparison of Angular.js vs. Ember.js

This leaves us with 4 tasks that were not worked on

csdn interview

I have been interviewed by CSDN. The interview has been published today in chinese.

The original english answers as i sent them are below:

1. Could you introduce yourself to us first?

I am using and developing Free Software and Open Source for more than 20 years. I am a contributor to the Pike programming language, the Foresight Linux distribution and several other Free Software Projects. I co-edited a book on Pike and organized developer conferences. I am also a mentor at FOSSASIA. Throughout my career I focused on developing and advocating Free Software. I have lived and worked in several countries around our planet Earth. I came to china in 2008. I am currently the CTO at eKita, a startup in Bangkok, and the General Manager at Realsoftservice, a Linux service firm in Beijing where i offer software development, training and internships. I live in Beijing with my family.

2. Compared with your own country, what attracts you most in China or Beijing?

China (and Asia in general) has a different culture from western countries. Learning chinese culture allows me to look at situations from a different perspective.

I believe that all the world should be united into one country. And in order to do that we need to understand the different parts of the world, what everyone can contribute to this world, and what unifies us.

China is a large part of this world, and also not much is known about china outside of it. The only way to learn about china is to be here.

China is also huge. I like to travel, and china allows me to travel long distances to places that are very different from each other without having to cross any borders.

3. What is your role in BLUG? Could you describe the important development milestones of BLUG?

I am acting as the secretary. That means i help to arrange meetings and events for the group.

I joined the BLUG in 2008 and i am not familiar with the history before. One important event before i joined was the 2007 Software Freedom Day which was chosen as the best SFD event for that year.

At the time, when i joined, the BLUG had monthly meetings, frequent quan'r dinners and BLUG Tuesday events. We also had a group aiming to build a quadcopter and a library. Active members were both foreigners and chinese.

In summer 2008 an intern at Exoweb where i worked at the time, together with me initiated a hackaton event called "Coding For Fun". I then continued hosting the event by myself as part of the BLUG. When i left Beijing other BLUG members continued hosting the event.

When I came back to Beijing some active members had left. I took over the management of the group in 2013, when most active members had left. At that time active participation was very low. I continued running the monthly meetings and Coding For Fun events. In Autumn we re-started BLUG Tuesday and used it to test new meeting locations. That way we found our current meeting place.

We slowly regained new active members, most of them chinese.

4. What kind of difficulties have BLUG encountered in the process of development, and how to solve them?

The main difficulty we have is finding good locations for the meeting and Coding For Fun events. It is still an unsolved problem. We don't have sponsors to pay for using locations, so we rely on offers for places we can use for free.

5. What are the daily activities in BLUG? Do you (or BLUG) have any interactions with other communities?

I am trying to visit and keep relations with every group that i can find in Beijing. I am regularly participating at events from the Beijing Open Party, Ruby, Python, Angular.js meetups. Barcamp and more.

Most of these groups have Linux users, but as i am a programmer, many groups are interesting to me personally too.

We also work with other groups to organize events, for example the Software Freedom Day. or we support conferences like GNOME.asia and FUDcon or the OpenSUSE summit, all of which had volunteers who are BLUG members.

We also participated at Google Code-In with FOSSASIA.

6. Have you ever attended open source activities in other countries or regions?

What are the differences between other countries and China in Open-source activities?

Every place and every country i have lived in, i participate in the local activities. These vary in size and regularity. In some cases my visit was the motivation for a group to have more meetings. In most groups the meeting involved some form of topic presentation and discussion. But sometimes it was just going out for dinner. Really not much different from china.

7. From your personal point of view, could you share with us some tips on how to manage one open source community successfully?

Well, there are different kinds of communities, for example those that revolve around a particular software project where all members in some form contribute to that software project. The contributions to such projects are often motivated by the contributors own needs. The main goal for community managers is to get active contributors to the project.

Other communities are more loose where people just share a common ideal, but actually may contribute to different projects.

The BLUG is of the latter kind. People contribute to the BLUG more out of a desire to serve the community than out of a personal need. And many do not contribute to the BLUG directly.

The goal of the BLUG is to provide a venue for Free Software contributors and users to share and meet like-minded people. Most Free Software Communities are spread all over the world, whereas groups like the BLUG are very local.

To manage a local group, i believe persistence would be the most important aspect. If the group has meetings, they should be regular, so that new people can easily find out when and where the meetings happen. Then it takes a while for the word to spread, and attendance to grow. Keep holding the meetings, even if only two or three people join. Then keep advertising the group and invite new people. Eventually more will join and come back regularly.

8. Could you introduce us some active and outstanding members in BLUG?

It is difficult to praise the contributions of some people without unjustly leaving out others. Moreover i don't even know all the contributions of every member. Some members don't come to the meeting often but they are very active elsewhere in the Free Software and Open Source Community. This is one of the things that tends to be miss-understood about the Free Software community.

Some people worry if they release their work with a Free Software license, then others can take advantage of it without giving anything back. But we don't know if those users are not active somewhere else making contributions to our society in other ways.

This is after all what i believe is the purpose of our life. All Men have been created to carry forward an ever-advancing civilization. (人人生来是为了推动文明不断进步的)

9. GNU project founder Richard Stallman came to China in May, 2014, did you have a meet with him?

And what do you think about the Free Software campaign leaded by Richard Stallman since 1980th?

I have met richard stallman a few times before, but never had much direct interaction with him. This year he joined us for a BLUG Dinner. As for his campaign, i fully support the idea of Free Software. I believe that all knowledge should be shared, and everyone should have the opportunity to use all of the worlds knowledge in their work. To fulfill the purpose of life we should all use our work to contribute to society. And allowing others to use and modify our software is a great and very easy way of doing that.

10. The last one, could you reveal to us the BLUG's future development plan, and what kind of activity will be organized in the future days?

Future plans of the BLUG depend on its members. For now my goal is to get more active members, people who help to host events, give talks, or help contribute to our website. The BLUG website is very old and in dire need of an upgrade. but it is difficult to do if we want to keep all the data.

I am also trying to work on a community calendar where we can share all events

Education Freedom Day registration launched!

efd-banner

We have just opened Education Freedom Day registration, scheduled on March 21st, 2015. For its second edition EFD has been moved to March to facilitate its celebration in both the south of the planet and China (at least…) and we hope to cater to more events this year.

As usual for all our Freedom celebrations the process is similar, you get together and decide to organize an event, then create a page in our wiki and register your team. As the date approaches you get to put more information in your wiki page (or on your organization website which is linked from the wiki) such as the date and time, the location and what people can expect to see.

Education Freedom Day is really the opportunity to review all the available Free Educational Resources available, how they have improved since last year and what you should start planning to implement to deploy in the coming months. More importantly it is the celebration of what is available and letting people aware of it!

So prepare well and see you all in two months to celebrate Education Freedom Day!

Celebrate EFD with us on March 21, 2015!

30 years of FSF

After an exciting weekend celebrating Hardware Freedom Day what could possibly be better than going back to the very inspiring video made to celebrate the 30th anniversary of the Free Software Foundation? Indeed it’s been made using Free Software only and goes through the work of the foundation for the past thirty years. It’s actually nice to look at, positive and very well animated. We will definitely encourage all our software freedom day teams to use it during their events. But let us say no more and let you enjoy it if you’ve missed it so far:

And then, for the ones into this kind of work, and blender in particular, you can find a detailed explanation of the challenges that the makers of the work went through and how they fixed them right here. Definitely a great read into the whole process from design to finish. Great job guys! And of course a happy 30th anniversary to the FSF from the Digital Freedom Foundation and all its members!

Happy Hardware Freedom Day

hfd-banner2For its third edition Hardware Freedom Day got closer to the holiday season and we hope everyone who took a first step into the world of Open Hardware will use this opportunity to come and meet passionate people who spend their time (or most of it) in hackerspaces or toy with with concept of Free Software and Open Hardware. As usual we have the same strong sponsors as every year such as Google, Canonical, the Free Software Foundation, Linode, all our supporters and the additional support of Lulzbot since 2014 who makes fully Free 3D printers!
So wait no longer and join us to celebrate Hardware Freedom Day in your area!

Google Code In with FOSSASIA

Planet BLUG

Planet BLUG is a window into the world, work and lives of Beijing LUG members and contributors.

Updated on September 29, 2016 - 09:21 UTC.
Entries are normalised to UTC time.

Subscribe

Atom 0.3
RSS 1.0
RSS 2.0
OPML
FOAF

Credits

Brought to you by the Planet aggregator, cron, Python, CANDIS Group (who kindly host the BLUG server). Beautiful template adapted from an early design by Steven Garrity, concept by Seth Nickell and Diana Fong.

Planet BLUG is edited by Fred. Please contact him if you have a question or would like your blog added to the feed.