12月 052013
 

JavaScript 社区的国际性技术大会 JingJS 2013 于 11 月 9 号和 10 号两天在学校东门外的紫光国际会议中心(紫光二楼)举行,我有幸作为活动志愿者一枚近距离围观了两天的活动。这里记录下其中的点滴收获。

活动有众多演讲,特别是有许多国外讲师,组织工作会很辛苦。不过得知活动的组织核心只是几个技术大牛在负责。佩服他们的热情和能力。也耳濡目染到一些组织经验,包括日程调整、活跃气氛等。

活动第一天上午,Jason Denizac 在题为 My Year With Node.js (我与 Node.js 的一年) 的分享中,说自己是个 writer (作家),也 write code (写代码)。听起来感觉碉堡了,这个认识水平比一般人高了不少。

IMG_0007

后面 cnblog 的创始人 Issac Mao 在不用幻灯片的分享中,谈他对社区、分享等的体会。他提到 sharism 这个词,将分享精神上升为一种主义。他还提到 meme 一词,他建议翻译为“媒母”(音)。谈到多种文化时常提到这个词,维基百科上给出的翻译是“迷因”“模因”等。不确定它们是否恰切地反应了词的含义。此外他还提到他们做的对社交媒体信息的归档。

IMG_0010

中午之前有个 workshop 教学环节。无奈家用路由器根本无法满足会场二百多人同时连接的需求,最后只能选取若干幸运者代表大家参与一下。

午饭和众多大神一起在科技园里某餐馆吃的,其中包括 Domonic Tarr,npm 模块数目排行第三的大神。等餐期间,他学习了中文中的模块、土等词汇,并用在了自己第二天的演讲稿中。

头天最吸引人的演讲恐怕是 James Halliday 带来的 the wizard of moduletopia (模块之魔法)。James 不经意间展示了飞速的键盘操作,亲手绘制的漫画风格幻灯片,以及用 Vim 放映展示代码功能的“幻灯片”。James 网名 substack,目前提交 npm 模块数量上排行第二,其中 browserify 模块已经颇为知名。

IMG_0018 IMG_0019 IMG_0021

第二天的演讲,Eric Redmond 在题为 HTTP Is Hard 的演讲中讲述了 HTTP 状态码背后的含义,以及常见的误区。人们或许会习惯于检查 HTTP 回应状态吗是否是 200 以确定是否是正常回复,然而事实上 2xx 都意味着正确结果。有个网站可以帮忙查询每个状态码的含义,用法如下:

curl -I http://codes.io/206

(此外 418 也是一个有趣的状态码。)除了状态码之外,HTTP 本身就支持授权认证 (Basic authentication)。值得一提的是,Eric 还是 7 Databases in 7 Weeks 一书的作者。

百度的 Yao Tong 介绍了他们的一个针对实时性应用的开源纯 JavaScript 框架 Clouda。现场测试的待办事项列表应用在使用手机 GPRS 网络时依然表现良好,令人印象深刻。

闪电演讲环节,一个小朋友流畅地用英文介绍了自己的小项目 gifme。它是一个 Web 应用,获取访问用户摄像头权限后,可以截取一段动作,并自动生成 GIF 图片,然后可以选择保存在本地或者分享到社交网络。

之后有演讲总结了自动化 CSS 测试,介绍了语法检查、lint、截图对比等方式,推荐了 hardy 模块。演讲者 Jakob Mattson 强烈建议设计先行的做法。

来自阿里的漂亮的 Zhouxuan Yang (fool2fish) 介绍了名为 totoro 的前端测试工具。没错,这个名字来自宫崎骏的龙猫。这一工具的设计特点是简单易用足够稳定。

最后一个演讲是沈嵘带来的 Grunt.js 介绍。Grunt 是一个自动化构建工具,实现了用 JavaScript 构建 JavaScript 的美好特性,这在别的语言是似乎还是没有过的,这一特性带来了极大的便捷。Grunt 的安装需要两步,先全局安装 grunt-cli,再给每个项目安装 grunt。详细内容见幻灯片材料

晚上的 After Party 在五道口的 Pyro Pizza,那里提供了丰盛的食物饮料,还有游戏环节,不过最主要的活动还是随机的小范围的聊天。自己也应该更积极地投入到这种氛围中去。

9月 252013
 

上周六(9 月 21 日)北京天气晴好,由清华大学学生网管会 (TUNA) 主办,并由北京 GNOME 用户组 (BJGUG) 协办的自由软件日清华站活动顺利举行。活动有超过 60 人参加。接近下午两点时开始现场注册,这次活动的注册为电子注册,每个人在注册电脑上的 LibreOffice 表格中填写各自的信息,这个表格会被最后幸运抽奖的程序直接读取。我们准备了光盘、贴纸与宣传海报,注册后每人都可以领取。

活动正式开始于大约两点半。开场时由我(赵涛)致欢迎辞。我在欢迎辞中介绍了什么是自由软件日活动、什么是自由软件,此外介绍了活动的主办方和赞助单位。本次活动得到了谋智网络 (Mozilla)、中国开源软件推进联盟 (COPU)、GitCafe、CodeWeavers、深度 Linux、Fedora 社区等的大力支持,他们为本次活动提供了丰富多样的礼品,其中 Mozilla 还对活动宣传品等的开销提供支持。我还对 COPU 支持的 NITE-LPI 联合认证项目做了介绍。

赵涛介绍自由软件

赵涛介绍自由软件

之后便开始了主题演讲环节。第一个演讲由 BJGUG 主席李彬带来,题为“GNOME Shell”。李彬在演讲中介绍了 GNOME Shell 的组成,灵活强大的扩展 (extension) 机制,还现场演示了扩展开发。演讲中推荐了 gnome-tweak-tool 和 https://extensions.gnome.org/ 网站。GNOME Shell 扩展开发主要使用 Javascript,借助于已有的扩展框架生成工具 gnome-shell-extension-tool,扩展可以很快捷地被开发出来。

李彬介绍 GNOME Shell

李彬介绍 GNOME Shell

紧接着是来自 Mozilla 的工程师袁徐磊带来的“Firefox & Firefox OS”。他介绍了流行的开源浏览器火狐 (Firefox) 的特性。使用附加组件 (addon) 定制 Firefox,改善网页浏览体验是 Firefox 的一大特点,袁徐磊对此做了详细讲解。他还对 Mozilla 新推出的基于 Linux 和 Gecko 技术的开源移动操作系统 Firefox OS 的发展和开发平台做了介绍。

袁徐磊介绍 Firefox OS

袁徐磊介绍 Firefox OS

短暂的中场休息后,来自清华大学天体物理中心的周建锋老师做了题为“Airelinux”的演讲。他首先介绍了天体物理集成研究环境 (Astrophysical Integrated Research Environment) 即 AIRE,继而介绍了 Airelinux 项目的目标和计划。Airelinux 是一个新的面向天文学计算的 Linux 发行版项目,欢迎广大天文爱好者、自由软件社区贡献者(特别是 Debian 贡献者)、以及设计人员的加入。

周建锋介绍 Airelinux

周建锋介绍 Airelinux

每个演讲最后都留有大约五分钟时间进行问答,问答互动环节的奖励有火狐玩偶、笔记本、塑料杯、鼠标垫等。

主题演讲环节之后,是并行的展台展示、Hackfest、Installfest 环节,这个环节大家分成若干小组,进行面对面的交流。展台有两个,其一是 Fedora 社区的展示,Fedora 大使吉拉德 (gbraad) 在现场和大家做了深入交流,鼓励大家加入 Fedora 项目,并送出了 3 件 Fedora T 恤。另外一个展台是对 LPI 认证项目的介绍,LPI 中国区经理王雲老师为大家做了答疑解惑,她表示今后会在高校做更多的活动介绍 LPI 项目。Hackfest 则是有王康带来的软件无线电实验。这个实验用声卡进行信息传输,在电脑上用 gMFSK 做调制解调,使现场同学领略到了软件无线电的魅力。

五点左右时,活动来到了最后的幸运抽奖环节,抽奖程序是一个卖萌的网页界面,主体逻辑由 Python 语言实现,作者是 Justin Wong (bigeagle)。我们抽奖送出了 3 件 T 恤衫和 5 个 CrossOver 正版序列号,其中序列号在活动后邮件送出。活动最后大家合影留念。

欢乐的集体照

欢乐的集体照

整个活动过程中也遇到了一些问题。一是筹备期间教室借下来的时间较晚,海报宣传时间不足一周,又恰逢中秋放假,使得线下宣传力度不够。微博大屏幕、人人活动墙的想法没有及时提出,未能实现。二是在开场前注册所用电脑到的较晚,加上电子注册、输入法的问题等,使得注册缓慢,活动比预计推迟了约半个小时正式开始。第三是礼品发放有些混乱,部分礼品被热情的在场同学一抢而空,大概是因为没有明确说明中场休息时只有提问的同学可以上台领取礼品。给今后活动的启示是:早借教室早宣传,注册工作要做好准备尽早到位,礼品发放必须说明规则避免混乱。

活动演讲的讲稿链接、演讲视频的优酷链接可以在维基页面上找到。活动照片请看 G+ 页面。最后,感谢所有到场人员的热情参与,请参加活动的朋友收到活动调查问卷的邮件通知后留下您的宝贵意见。

2月 162012
 

JavaScript 中数组与对象定义时最后一个元素后如果跟了一个逗号,那么可能引起问题。一个简单的例子是 [2, 3].length 等于 2,而 [2, 3,].length 在 Firefox/Chrome 中仍为 2,但在 IE (旧版)中等于 3 (它会认为最后有一个元素值为 undefined)。有关这个问题,还可以参考 Dan Lee 这篇有趣的博文,以及 Drupal 的一个 Bug 报告。而我最初是在看 GitHub 上 Hotot 的一个 Pull Request 时开始注意到这个情况。

末尾逗号的写法 C/C++ 程序员应该很习惯。末尾逗号能在改变对象中元素顺序、使用代码生成数组、拷贝代码时带来方便。然而在旧的 JavaScript 实现中,这是不允许的。根据这篇博文,IE8 里已经修复了这个 "bug"。另外,ECMAScript 5 规范里已经容许了末尾逗号,目前新版本的 Firefox/Chrome 对这个标准有良好的支持。(参见这里

值得注意的是,JSON 规范中要求不能有末尾逗号的,否则就是格式错误。JSON 不等于 JS 对象。因此,使用代码生成 JSON 格式的字符串时,采用前置逗号是更好的实践。(参考 stackoverflow 上的这个问题