阿尔托大学申请

去年八月到今年八月的一年时间,我申请了阿尔托大学硕士项目。这一篇记录我所做的事情,一些客观有意义的信息。我不能指导你如何申请到,因为我也是稀里糊涂的。简历,作品集的好坏难以客观评判,我自己的也不好,所以就索性不写了。而要准备哪些材料,如何通过认证,有哪些流程,这些是客观的,是我想介绍的情报。 (更多…)

在浙大玩机器人

在浙大的三年多都在玩机器人,完全的业余爱好。在浙大的环境中是非常有利的,有很多难得的机会和资源。

机器人协会

机器人协会也可以说是机器人俱乐部,是一个机器人同好会。和大多数科技社团不同,他们真的在玩技术。有教学,实践制作,还有比赛。

对于新生来说,最早接触机器人的机会就是进入机器人协会。机器人实验室和机器人比赛都是高年级才能参加的,而且需要技术基础。而加入社团是不需要基础的,每周有专门的小课堂,面向新生教学。

专业也并不是很重要。在机器人协会学到的技术和课程关联不大,完全可以从零学起。新生在学习机器人技术的时候,往往还没有接触过编程、电路和机械的课程,大家的起点是类似的。 (更多…)

如何在淘宝买电子模块

想做DIY,科研竞赛,或者一些课程,都会用到微控制器和电子模块。

如果住在深圳、广州这种地方,去店里找东西很方便。Arduino.cc曾说深圳是硬件的好莱坞。但是如果在杭州这种地方,想找个轮式机器人用的巡迹模块可不容易。淘宝就成为了唯一可行的选择。 (更多…)

WordPress主题本地化

目前大多数WordPress主题(皮肤)都是英文的。而对于中文或其他语言用户来说,为了与网站内容语言一致,需要将界面转化为本地化语言。

首先,要确定这个主题是否支持“国际本地化”,即是否为翻译为多种语言而设计。在WordPress安装主题界面,可以筛选“支持多国语言翻译”条件的主题。支持国际本地化的主题的PHP代码有着明显的不同:

<button class="search-submit button small" type="submit" role="button">
  <?php _e( 'Search', 'corpo' ); ?>
</button>
<button class="search-submit button small" type="submit" role="button">
  Search
</button>

(更多…)

校内维基的构想与实现

在写下这一篇的时候,我们的维基还是一个知名度不高的校内网站。经过近一年的尝试调整,渐渐得到了发展的方向。去年的时候,我们开始构想一个校内百科。动机很简单,我们觉得每个大学都会需要一个百科全书样的东西。我们的参考目标是维基百科,依靠mediawiki和理想化的社群模式运作。而在这之前,至少有五个类似的网站已经失败。

开始的时候我们有一系列定位和发展规划。制订了内容收录规范,以及社群守则。因为蓝本是维基百科,所以我们觉得它会像维基百科一样依靠用户贡献发展。问题是很多事情不一样。

首先是网站本身的意义。学生们并不是非常需要了解学校的历史,建筑和人物。即便需要的时候,他们也会去查询谷歌搜索。基本的信息维基百科都可以包含,我们只是做了一个更详细的工作,却花费了太多时间。既然是内容主导的网站,什么样的内容最被需要才是关键。

然后说说用户群体。我们的用户群体,是本校学生和教师。我们希望大家能通过此平台分享知识,互助协作。然而师生对此理念并不了解,网站在大多数人眼里仍是一个放内容的工具。一个开始就没有内容的网站,如何让用户参与其中呢?他们会怀疑网站未来的延续问题。

在技术上同样存在麻烦。mediawiki的内容编辑是通过代码实现的,十分复杂,而且不够直观。这严重阻碍了一般用户的参与。

我们的运营也有不少失误。太多的限制和质量要求让早期的内容积累举步维艰。像版权问题,我们并没有能力去验证,实际上是形同虚设的要求。

后来我们陆续进行了几项改变。

收录内容范围扩充,计划成为校内资料库。包含校内信息,在线教材,学习经验,共享文件等。

组建内部编辑组,积累原始内容。我们还通过技术从其他网站导入信息。内容积累足够多,用户对它的认可度也会增加。

在可视化编辑器部署之前,我们通过提供简捷的帮助,降低用户参与的难度。

同时也取消了不可执行的规则,以促进早期的内容积累。

现在的校内维基,已经改变了很多。我们很希望它会是一个成功的网站。

中文维基学院在Wikimania 2013

我是在本次于香港举行的Wikimania 2013上发起了主题为《The Future of Chinese Wikiversity》(中文维基学院的未来)的讨论。

Lunch_time_in_Wikimania_2013

在讨论开始前的休息时间,我与一些中文维基人交流了对中文维基学院的看法。大部分中文维基人不了解维基学院,好像是第一次听说。我遇到了一位德国老爷爷,他知道维基学院计划。有一些维基人知道中文维基学院,但他们大多不看好中文维基学院。不看好的原因首先是中文维基学院的定位不明晰,其次是关注度过低。第一个原因造成了第二原因,而第二个原因也造成了第一个原因。这真的是一个“鸡生蛋,蛋生鸡”的问题。

很遗憾除我之外没有中文维基学院的维基人参与此次讨论。此次讨论的参与者都是对中文维基学院项目感兴趣的维基人。除了中国大陆、港澳、台湾的维基人之外,还有在中国工作、读书的外国维基人。不同的观点让这次讨论更有意义。

首先我向参加讨论的维基人介绍了中文维基学院的现状与目标。

维基学院最初是维基教科书的一个子计划,用于研习原创研究。后来维基学院成为了一个独立的计划,专注于探讨学习和原创研究。而后维基教科书不再接收原创研究。目前已经有十四种语言的独立维基学院,英文维基学院已有超过两万个研究课题。

中文维基学院目前仍在Wikiversity Beta上,尚未独立。目前的参与用户数量约有三十位,而活跃用户数量长期少于十位。已有的研究课题约一百个,而完整的课题很少。中文维基学院没有确定自己的方针指引,其发展方向也尚未在社群中达成共识。

我们没有找到最初关于维基学院构想的讨论,也就无法知晓它最初的目标是什么。在元维基(Meta-Wiki)上的维基学院页面说:

“Wikiversity is a centre for the creation and use of free learning materials and activities. Its primary priorities and goals are to:

Create and host a range of free-content, multilingual learning materials/resources, for all age groups and learner levels

Host learning and research projects and communities around existing and new materials.”

意为:

“维基学院是一个创造和利用自由学习资源和活动的中枢。它的首要职责和目标是:

创建和汇集一系列自由内容的,多语言的学习材料和资源,适用于所有年龄层和学历。

汇集基于现有材料和心材料的学习和研究项目及社群。”

英文维基学院的介绍页面说:

“Wikiversity is a community devoted to collaborative learning. ”

“维基学院是专注于协作学习的社群。”

每一个语言的维基学院都是独立的计划,可以有自己的独特方针,但不偏离维基学院的核心。我们得到的维基学院的目标是“Collaborative Learning and Research”(协作学习和研究)。得到广泛认同的一点是,维基学院是关于学习的。学习和研究都是以知识为中心的,通过维基让不同的人进行协作是维基学院的核心。中文维基学院也将追随这些基本理念。

中文维基学院目前的首要目标是项目独立与发展。这一目标实现的条件是内容积累和社群扩大。所以我们需要用户,需要维基人参与其中。中文维基学院用户之间的交流很不顺畅,在互助客栈及讨论页的讨论非常少,邮件列表和IRC无人问津。

而后参与讨论的维基人聊了很久,有不少重要的结论产生。

最开始大家的问题都集中在“维基学院是什么?”这个问题上。我们怎么区分维基学院和维基教科书?为什么不将内容放到维基百科上呢?维基教科书接纳非原创研究内容,即那些已经被广泛认可的成果。而维基学院接收原创研究,那些尚未获得广泛认可的知识。举一个例子,有一道很知名的中国菜——佛跳墙。我们可以在维基百科上建立一个页面介绍佛跳墙的历史典故和做法、特点。而在维基教科书上可以介绍其详细的做法,特殊技艺。而如果有人对传统做法做了改进,得到了一种不同风味的“佛跳墙”,那么这个成果就属于原创研究,只能被维基学院接收。维基学院是对维基百科和维基教科书的补充,很多时候维基学院能接受的内容并不能被其他计划认可。

相比于现在的论坛,博客和社交网络,维基学院存在的意义是什么呢?论坛,博客,社交网络都是一种自我发布媒体。它们的作用是阐述作者自己的知识和观点,而无法如wiki一样促进协作成果的诞生。对维基学院来说,协作编辑是它最独特的地方。

中文维基学院会做很专业的研究,还是那些起点很低的研究?中文维基学院目前正在早期发展过程中,若只进行专业化的研究,则会失去很多用户。维基学院的用户具有各种各样的年龄和学历,研究不论简易高深,都是有意义的。我们需要热情地吸纳每一个用户的研究贡献,维基学院的贡献者大多是各行各业的普通人,他们的作用是非常关键的。中文维基学院需要一个低的门槛,让更多人加入社群。

伪科学和玄学,中文维基学院将怎样对待?不论中国还是其他地方,都曾经存在着以非科学的方法阐释自然的理论,如中国的风水,中医经络理论。中文维基学院吸纳相关的研究,但研究需要客观评述它们的理论及其无法证实性。玄学和宗教都是存在的,它们的研究只要客观,并且不试图去说服人们相信即可。就像我们可以给孩子讲神话故事,但需要告诉他们神话不是真的。而没有根据的玄学研究会因为无法印证而不被包容,因此维基学院不会成为一个伪科学泛滥的地方。

中文维基学院如何打破“没有用户参与-没有发展目标”的死循环呢?这是最困难的问题。因为没有用户参与,无法探索发展方向;反过来,正是因为没有明确的目标,用户不知道该如何参与。目前有一个方法是可行的,先吸引用户参与,在实验研究过程中不断探索,从而得到适合的发展方向。各个维基计划都曾经经历过探索时期。在最初我们可能会犯不少错误,有很多争议,这都是必要的。没有它们,我们无法知道怎样做才是正确可行的。不断有新的维基人加入,不断地编辑,是发展的必由之路。

有一位维基人问我为什么我会参与维基学院。我觉得这是一个很有意义的计划,它让世界上不同地方的人在一起,毫无功利心地共同探讨学习,发现新的知识,而不是关在自习室里读自己的书。这才是教育的目的。

使用键值对进行串口通讯

在Arduino与电脑/手机之间通过串口通讯,比较麻烦的地方有以下几点:

  • 确定一条指令的开始与结尾
  • 防止字节数据丢失引起的错误
  • 编码与解码

简单的办法通常是每个字节作为一个指令,也就是一个BYTE数值或字符。这样做的缺点是表示的数据范围小,而且不够灵活。如果要发送几种不同类型的指令,这种方法也不行。

而表示一个复合命令,则需要断开每一个字段。使用键值对是一个很便利的方式。能够表示大部分操作指令:

name,value;

我们以逗号和分号作为分隔符和结束标记,只要将指令表示成键值对发送就可以了。在接收的一端,按照分隔符将字串断开,获取名称和数值,然后进行解释。

示例代码如下:

char input;
String value;
String name;

const int NAME = 1;
const int VALUE = 2;

int readProcess = NAME;

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  if(Serial.available()){
    input = Serial.read();
    process();
  }
}

void process() {
  if(input==','){
    readProcess = VALUE;
    Serial.println(name);
  }
  else if(input==';'){
    Serial.println(value);
    run(name, value);
    name = "";
    value = "";
    readProcess = NAME;
  }
  else if(readProcess==NAME){
    name+=input;
  }
  else if(readProcess==VALUE){
    value+=input;
  }
}

void run(String name, String value){
  if(name=="speed"){
    int num = value.toInt();
    if(num==-1023){
      digitalWrite(13, HIGH);
    }
    else{
      digitalWrite(13, LOW);
    }
  }
}

在run()方法里,是对键值对的解释程序。

有分隔符能够很有效地避免传递时丢失字节的问题,保证前面发生的错误不会影响后面数据的传递。一次传输错误最多只影响一个指令的执行,不会对后续的数据传递造成麻烦。

异端研究

这个世界最虚伪的一句话之一叫做“海纳百川,有容乃大”。

即便任何时代,文明或野蛮,先进或落后,都不可避免地有正统学说和异端邪说的差别。所谓异端,并不一定错。往往是人们无法以现有的智慧理解,无法证实,亦无法否定。比如没有望远镜,没有几十年的天文观测数据,怎么了解星系运转。

每每谈及异端,常人只是先一声批判,然后只要拼命寻找理由就可以了。这往往能成功,你只要让异端看起来不可思议就可以了。想“意念移物”这类事情,虽然极少有人去求证真伪,但大多数人一听便定论说这是错的。但一些看似使用正统科学阐述的东西,实际则漏洞百出。但人仍会信,因为考证的成本太大。若听闻每一句皆要求证虚实,人生岂不太累。

而人是如何对待异端的呢?避而不谈!

避而不谈是最虚伪的了。就像中学老师不会教授爱情一样,恨不得将“爱”这个字从字典里彻底抹去。情窦初开这种事算是非常异端了,但仅仅是因异端而异端,欲加之罪。既不证实,亦不证反。只是归之为异端,不让人碰罢了。

炼金术之类的古代遗留,不知耗尽了多少人的心血。时至今日,只被一笑而过,从大雅之堂赶出去了。所谓异端,即使错了,就不能留一席之地吗?如果所有异端都被扼杀,那么所谓正统为何方正,也无法证明了。列反证于书,公诸于世,方能明辨真理。

况且今日的异端,可能是还未被接受的真理。即便是错,也有一些特殊价值。若不是葛洪炼丹,就不会有火药之类的偶然所得。允许异端存在,才是包容的气度。一味的拘泥于正统,只会让智慧逐渐凋敝。

少爷的凉粉

本少爷曾经卖过两年凉粉,对这小吃食也算颇有心得。可惜上大学之后再没机会做了,为了不让妙法湮灭,在此详述。

须知中华的凉粉,有南方凉粉与北方凉粉之分。这里说的是北方凉粉。

凉粉这东西,再简单不过。水与淀粉,足矣。

须知淀粉应是考究的,下品淀粉色泽、味道、口感皆不及上品。淀粉或由绿豆制成,也有用番薯、土豆。常法制凉粉皆选绿豆淀粉,颇有风味。然绿豆淀粉颜色阴沉,不及土豆淀粉通透洁白。土豆淀粉又比绿豆淀粉做的凉粉弹性好,口感佳。故此少爷的凉粉皆是土豆淀粉所制。

然土豆淀粉价本就高,凉粉也就贵了。然而物皆有值,小孩子说不得谎,旁人也都信得。一元一块,从不讲价,生意却也凑合。

有了淀粉,还需准备容器。居家做凉粉,可准备一两小盆,不要太大。还要一只锅子烧水,一只温度计察水温。

既是淀粉与水,必有个比率。水多了有水泡,会散;水少了会结块,也会散。口感不佳的凉粉是最要不得的。按体积算,淀粉与水一比五最佳。可在盆上做个记号,知道水到哪里合适。或者按照盆的大小,量取淀粉。

常人必会教你将凉粉与凉水放入锅里煮,这般则大错。淀粉与凉水混合,结块是免不了的。煮要的时间长,凉粉的色泽口感都会有损。等熬成了浆糊再凝固,必是不好的。我所说的办法,是热水冲泡,用极短的时间混合,等待逐渐降温。

首先是烧水了。做凉粉的水需是软水,硬水会令凉粉结块。水要先烧开,然后关火等温度降下来。到摄氏八十五度时,将热水冲入盆中与凉粉混合。然后迅速搅拌至均一,用洁净的布覆在盆口。需要透气,散去热和水汽,因此不能用盖子。静後半日,便可打开了。

凉粉是一整块的,吃的时候需要用刀切或者漏过钢丝网筛,切成细条。凉粉本无味,独本少爷独爱白水的凉粉。常人或辅以醋、酱油、盐、辣椒等佐料,这全凭自己口味了。少爷体质敏感,平生碰不得辣,故而辣味的是从来不食。

凉粉这物看似能存放数日,其实不然。凉粉第一日做得,第二日吃尚好,第三日则不可再吃了。要知凉粉如生物学用的培养基一样,是易生菌的,夏日更是如此。犹记得当年天若忽有阴雨,当日的凉粉卖不掉。只好转而相送,敦亲睦邻。实在多的,也只好弃了。

做人就和这凉粉一样,不好的凉粉,宁可扔了。

GUI还是CLI

很久之前我看到一位博友写到GUI(图形用户界面)和CLI(命令行界面)的设计哲学,中心含义是:两者各有优劣,无法说哪种是最好。这里我用同样的标题,谈谈另一个方面的问题。

的确,两者都有优点和不足。

图形界面更加直观,更符合初学者的类比逻辑。点几次窗口上的叉号就会明白它会关闭窗口。鼠标和触摸是伟大的进步,让操作更加自如。而这方面就不是命令行能达到的。面对一个黑色的终端,你能想象下一步应该敲哪个命令吗?或许高手可以,但大部分用户甚至不知道如何切换目录。从这一方面说,图形界面往往比命令行易用。

但并不绝对。有时候你要进行一些稍稍高级的操作,比如将所有文件名中的“LibreOffice”替换成“libreoffice”。用一行命令就可以解决的事情,你可能需要手动操作数百次,花费几个小时,或者要去找一个合适的工具软件,甚至自己编写一个……

不过命令行的便捷是有风险的,如果使用过命令行,你一定会遇到。如果你在命令行里用“rm”删除了一个文件,很遗憾,你再也找不回它了。你可能在批量操作时输入错了一个字母,结果是你不得不一个一个去把它们改回来,有时是无法恢复的。

命令行的设计哲学是100%相信人。它假设每个用户都能记住命令的用法,并准确无误地通过键盘输入。但人对命令的记忆是非常困难的,而且是会犯大量错误的。一个计算机高级用户生病住院半年,就忘掉了如何用命令行设置无线网络。如果你每分钟输入上百单词,那么出错也就不足为奇了。对着黑白的屏幕,闪烁的光标,犯错的几率会更高。而它的另一个观点是,软件总会出错,所以越复杂、功能越多的软件越是会漏洞百出。所以命令行程序都尽可能简单,操作方式尽可能单一。你会发现所有的命令行选项参数都那么严格,那只是为了减少混乱。如果你想玩转它,请花时间记住正确的命令和选项吧……

图形界面的设计哲学是不相信人。它认为每个用户都会犯错,而且他们记不得那些命令甚至快捷键,没有时间查使用手册。所以软件会有形象化的图标,会运用大量通用的界面设计架构(菜单栏,工具栏,内容区域,状态栏,滚动条),一些仿照现实物理现象的操作(拖动,按钮,滑块)。这一切都是为了让用户很容易被提示,即使不阅读帮助文档也能操作。设计者会假设用户可能犯的各种各样的错误,做出不同的反应或提示。用户刚想关闭窗口,就被提示“是否保存?”这会阻止用户进行误操作。但弊端是软件会变得相当复杂,为了避免用户忘记保存,不得不引入自动保存系统。用户会很欣然接受,但却是软件设计者的噩梦。