Code Journey #1

这是第一篇,把自己做的一些小事记录下来,激励自己坚持下去。自由软件是一个有意义的事情,这点我从没怀疑过。

KDE

翻译

  • 同步中文翻译,有大量来自钛山同学的 Krita 文档翻译。

openSUSE

打包

  • 更新 php-composer 包
  • 打包 python-PyMuPDF
  • 更新 riot-web 包

Geeko Store 开发

  • 开始施工

中午过了一阵雷雨,阳光穿透稀薄的云。短暂的,明媚,清凉和安宁。

路上深深的车辙,困住了些许雨水,此时已沉淀干净。

男孩子穿着凉鞋,脚上沾着泥沙,将捡来的木片,泡沫和其它小东西,放在小水洼中。水面的波纹折着耀眼的光,一圈一圈。影子投在水底,像漂在空气里。在很小的时候,人会忘记眨眼睛,盯着一个小小的世界,很久很久。

时间好像不会前进一样。

这一年,隹五岁。

隹晚了三个月入学。由于年纪稍小,母亲拜托了学校里的亲戚,才勉强让他上学。

学校里的小孩儿们大多都互相认识了。隹找不到说话的人,藏到了教室最后一排的角落。旁边的男孩在桌子上刻字,还有些女孩在玩贴纸。课间,教室吵得厉害,他感觉自己的猫耳朵太过灵敏了。隹走路没有声音,可以悄悄离开不适应的环境。

隹的第一本教科书是托人买的,在学期末的时候,他发现最后少了一页。他把最后一页的文字和插图临摹下来,夹在书里。不是因为喜欢,而是因为害怕。此后的每一本教科书,即使课外读本,他都要翻看好几遍。

这一年,隹七岁。

在村子的深处,有一处废弃的宅子。里面囚禁着疯子,一个没有名字的人。

偶尔,隹会跟着邻家的男孩子们从墙的坍塌处溜进来,因为院中有一棵非常甜的枣树。无人照看的地方,草木如妖化了一般疯长,诡异的绿色让人害怕。低矮的屋子,已没有了门窗。白色的墙皮脱落殆尽,露出了土坯。隹隐约听到铁链拖动的声音,那个眼睛如野兽般的人,在阴影里盯着他们。男孩子们朝屋子的方向扔石块,然后飞快地逃跑了,屋里传出令人毛骨悚然的叫声。

隹有时候会梦见,那个有着蓬乱长发的人在哭。

那一年,隹十岁。


隹的姐姐年长两岁。每天她都会教隹明天老师要讲的内容,还会画英文单词的卡片。她有各种各样的爱好,虽然村子里的孩子没有机会上兴趣班。她会拉着隹一起画画,绣花,织毛衣,抓蚱蜢,打游戏。

直到有一天,姐姐要去高中寄宿。一个星期后,隹和妈妈去县城的学校看望姐姐。姐姐刚刚结束军训,看到家人便哭得不停。这里的辛苦快让她崩溃了。隹只是在旁边呆呆地站着,吃着盒饭,不知道要说什么。夏天的燥热,树叶的哗啦声,感受不到清凉的树荫,小声的啜泣。

小时候觉得,哥哥姐姐天生就是哥哥姐姐。他们为各种事情都做好了准备,然后再来告诉你到时候要怎么做。这种错觉总是会不见的。

分别前,姐姐塞给隹一块巧克力,那是她趁着午休前的间隙去便利店买的。

那一年,隹十四岁。

隹遇到了第一个令他无可奈何的女孩——莺。

她是隹的对立面,做事很用力,却依然平平,很容易结交朋友,心里有情绪绝不会等下一分钟再爆发。她似乎一直看不惯隹的安静,孤高和并不努力的优秀。从偷保温瓶里的热水,到故意在教室门口挡路。课间的揶揄调侃,回答不出问题时的嘲讽。两个人的冲突一直一直持续着,直到这成为了他们日常的一部分。少男少女之间的感觉,很容易就转化成了什么了不得的东西。

莺留起长发,声音变得柔和温顺。隹有了积极的态度,去融入自己抗拒过的世界。没有触碰指尖的心跳,也少了让人踮起脚尖的温柔话语。只是在发呆的时候,不约而同地,远远望着对方。

这一年,隹十七岁。

南方的小城,从不缺雨水。一整个六月,总是湿透的。

隹还是形单影只,仍然不习惯带伞出门。虽然在社团和同班都有熟络的人,但他喜欢这样一个人在雨天,在校园的一角,听雨声。有人打扰的话,就可惜了。

他的单肩包里总是放着很多东西,必不可少的是糖,饼干和小瓶牛奶。没有糖分的话,就无法思考,这是他最清楚的事情。最近买了一本很艰涩的英文书,总是带在身上。他对未来没有计划,也没有期待。在别人谈论这些话题的时候,他总是悄悄地挪远一点。沉浸在今天的兴致里,已经让他感到别无所求了。

午餐和晚餐,他总会在食堂买一份最便宜的蔬菜。尝不出味道,也依然幸福着。

这一年,隹二十一岁。


二十三岁。

去了一趟日本

因缘

去年秋天 DYX 同学和越南同学拉我入伙,参加一个 Hackthon,以期获得免费的日本旅行机票。虽然最终获奖了,但是计算一下在这期间投入的时间成本,实际上不太划算的。连到了日本,都还要花一天时间做 Presentation 和 Social。

(更多…)

技术对 UX 的影响

做一个应用程序有非常多不同的技术选择。使用 Web 技术既可以用做小的开发成本做出跨平台的应用,但是性能和功能又有诸多限制。完全使用原生技术则需要极高的成本。选择技术的因素固然有很多,不同的技术可能实现相同的功能,但体验上是有差异的。

下面介绍的顺序是从更接近 Web 技术到更接近原生技术。

Web 后端渲染

典型的 Web 应用模式,网页在后端进行渲染,配合少量的 JavaScript而构成的应用。这种模式适合交互简单,以内容为主的应用。典型的例子是 GitHub, WordPress, Wikipedia 之类的网站。

后端渲染对服务器的压力更大,每跳转一个页面,浏览器都要等待至少数秒钟。除了 Safari 之外的移动浏览器都有一个刻意而为的点击延迟 (300ms),这让点击链接跳转在移动端的体验变得更差了。速度是最大的弊端。

单网页应用

使用 Angular, React, Vue 之类的 JavaScript MVC/MVVC 框架制作的应用。前端作为 JavaScript 被整个或部分加载到浏览器。然后只从服务器获取需要的数据,更新页面的部分内容而不需要重载页面。服务器不再需要处理网页渲染,数据可以缓存,数据库查询等耗时操作也更少。这种模式适合交互频繁,数据更新频繁的应用。典型的例子有 Twitter, Facebook, Instagram 之类的网站。

缺点仍然很多:

  1. 初次加载仍然非常耗时。
  2. 受到浏览器限制,尤其是移动浏览器。
    1. 大多数移动浏览器在滚动时会自动隐藏地址栏。如果有浮动元素的话,这会非常讨厌。
    2. iOS Safari 强制所有网页可两指手势缩放。这种缩放可能会破坏原有布局,给人一种不可靠的感觉。而原生应用是不可以被整个自由缩放的。
    3. 仍然有点击延迟 (300ms)。这是单网页应用给人一种比原生应用慢的最常见原因。
    4. 移动浏览器的性能导致很多动画变得缓慢卡顿。
  3. 设计/开发模式的问题。
    1. Web 开发者通常不会花心思去做手势操作和过渡动画。
    2. 在桌面用响应式设计模式开发,并不能完全模拟实际设备的交互感觉。主要问题在于屏幕尺寸,手指的精度和活动范围,以及导航栏和键盘的影响。
    3. 桌面和手机共用结构和组件,常常在手机上不太好用。

Electron 和 Cordova

这两个东西都是提供了原生系统接口的 Web 容器。Electron 主要用于桌面应用,只要 NodeJS 可以做到的它都可以做到,因此可以使用非常之多的原生接口。Cordova 或者 PhoneGap 面向移动平台,能使用的接口由插件提供,非常之有限。

  1. 加载时间快,不需要下载界面组件。
  2. 界面仍然是 Web 引擎渲染的。运行性能仍然比原生差,但是优于浏览器。
  3. 相比浏览器,消耗更多的系统资源。
  4. 浏览器界面的干扰被削弱。没有标签页,地址栏,更像是单应用。
  5. 无法使用一些原生的库和系统接口。

React Native

JavaScript + 原生 UI。一个性能和快速跨平台开发的折中选择。但也可能是一个陷阱。

  1. 界面与原生应用几乎没有差异,交互非常流畅。
  2. 只提供了原生 UI 组件的一个子集。
  3. 可用的原生系统接口有限,第三方 SDK 就更少了。很多功能仍然用 Web 技术实现,变成了混合式应用。
  4. 可能会使用更多的资源,启动较为缓慢。

原生应用

原生应用可以在所支持的平台上做尽可能多的优化,取得最好的效果。但代价是巨大的开发成本。

以视频播放器为例,原生应用可以支持任意视频格式,并尽可能优化性能,获得悬浮窗等系统权限。

总结

待续……

向日葵

夏天的中间,我搬到了离工作很近的地方。骑车需要十分钟,路上会经过很大一片花田。延伸到森林边缘的紫色,开过了整个夏天。燃烧殆尽,花穗只剩了白色。仅仅过了几天,一片看似荒废了的土地,向日葵压着杂草生长起来。向日葵田在路的转角。骑车经过的时候,总是会望着它们。

这一段不长,只有公路和两旁的树林,草地,溪流。上班和下班的时候,只有一辆旧自行车的我,独自消化着不知从哪里来的想法。人大多是实实在在地活着。出与归,作与息。幸福感来自无忧且知足,禁忌是:改变。

平平常常,短暂停留于世的花,不是轻易让人欣赏的。它们的孤高,无畏,从未随随便便生长。无法选择天气和土壤,也要用尽方法获取阳光和养分。

我羡慕那些还在困境中挣扎的人,因为挺过困境之后,其实什么也没有。

夏天已经结束,这片向日葵田也时日无多。它们只有一个夏天,而我们有几十个。

戚风研究报告

从零开始做蛋糕。

材料

面粉:芬兰超市里一般有三种面粉,包装上面画着面包的,画着蛋糕的,还有画着面条。用途就和画的一样,应该不会买错的。

牛奶:芬兰有三种牛奶,不论品牌都可以按包装颜色区分。红色的是全脂牛奶,深蓝色的是半脱脂牛奶,浅蓝色的是脱脂牛奶。我现在用的是半脱脂牛奶 kevytmaito。

色拉油:我用葵花油替代了。其实菜籽油,花生油都可以。专用的色拉油只是这些油提纯过,去除了味道而已。因为想省钱就没有专门买。可能用色拉油味道会更好一些。

鸡蛋:买最便宜的就好。

砂糖:大包的那种最便宜的。

嗯,用不到黄油。

巧克力坚果也别加。

不要在里面放水果。

把你的葡萄干收好。

配比

鸡蛋:5 个

砂糖:90 克(30 克用于面糊,60 克用于蛋白霜)

面粉:80 克

牛奶:40 毫升(40 克)

色拉油:45 毫升(40 克)

称量方法:我只有一个很便宜的量杯,它有三种刻度,分别测量液体体积,面粉重量,砂糖重量。液体材料我都用体积记录了,牛奶的密度大约是 1 克/毫升,油的密度是 0.9 克/毫升。

打发

蛋清必须完全不含任何蛋黄和水分,必须用电动搅拌机。

  1. 先搅拌到产生大量细小泡沫的膨胀状态。
  2. 加入 15 克糖。
  3. 继续搅拌到表面出现些许褶皱。
  4. 加入 15 克糖。
  5. 继续搅拌到能戳出坑,但能缓慢复合的程度。
  6. 加入 15 克糖。
  7. 继续搅拌到能戳出坑,且很难恢复的程度。
  8. 加入 15 克糖。
  9. 继续搅拌到能戳和拉出的形状比较锐利的程度。

其实也不用这么复杂,只要记住糖要晚点加分几次加,然后搅拌得足够久,让蛋白霜有点硬硬的,能成型感觉就行了。

面糊

  1. 加入蛋黄。
  2. 通过筛子筛入面粉。
  3. 倒入牛奶。
  4. 倒入色拉油。
  5. 手动搅拌。

尽量多搅拌,搅拌到均匀没有结块的感觉。可以用搅拌器拉起来看看能不能形成一张膜。

混合

将面糊倒到蛋白里,或者反过来?两种做法我都试过,好像没有什么差别。

用橡皮刮刀从下到上翻几下,然后将刮刀插进去,横着划一遍,竖着划一遍,重复几次。这个动作可以找网上的视频看看。直到颜色比较均匀了为止。不能搅拌太久,气泡会消失的。

搅拌之后倒入大约 8 英寸 / 20 厘米直径的圆形模具中。然后重重地在桌子上 Duang 几下,将里面的大气泡震出来。一些中等大小的气泡不可避免的会留在里面。

烤制

  1. 先预热烤箱到 140 摄氏度。
  2. 烤 25 分钟。
  3. 升温到 170 摄氏度。
  4. 烤 35 分钟。
  5. 拿出来迅速倒扣在案板上放凉。底下垫两根筷子啥的可以让蒸汽散出。

这个过程可以避免两个问题:鼓起塌陷。先用低温烤定型,可以避免鼓起。拿出后倒扣放置,可以防止塌陷。

这个方案尚不完善,持续修正中。

成品

2017 年十月 23 日。烤制时间不够,是 140 度 25 分钟 + 170 度 35 分钟。高温烤制时间应该延长。

继续实验中,持续更新……

芬兰给年轻工作者的廉租房(Nuorisosäätiö)

毕业之后,HOAS 的学生房还可以住一段时间,从几个月到一年不等,取决于 HOAS 什么时候来核实你的学生身份。我毕业后三个月仍然没有收到 HOAS 要我搬走的通知。但是为了有备无患还是开始找房子了。希望换一个大一点的,保温好一点的房子。现在的房子到冬天必须再开一个电暖器才能熬过去。

Helsinki 和 Espoo 的政府住房我都申请了,但是过了三四个月都完全没有消息。有人说至少要等半年,还可能要等一年多。也许是我的申请表有问题也说不定。

租房网站上的租房广告都是挺贵的,在 Espoo 都很难找到 800 欧元以下的房子,而且还是20 平米,位置偏远的小房子。有些芬兰家庭会出租自家的屋子,但是这些广告也很难找,很多都是芬兰语网站。而且房间通常也小。

然后 DYX 同学告诉我有个叫 Nuorisosäätiö 的机构提供很便宜的住房,35 岁以下在芬兰工作的人都可以申请。如果是合租的,只要有一个人是有工作,且未满 35 周岁都可以。合租人之中,年龄最小的年满 35 周岁之后就要搬走了。相当于我还可以住 9 年……可怕。

价格是按照房子的面积计算的。有些比较新,地段较好的房子会贵一些,但大部分都在 15 欧元/平米×月。一个人住 30 平米的一室一厅,每月 450 欧元左右的房租。两个人合租 40 平米的两室一厅,每月 600 欧元左右的房租,每人 300 欧元。虽然比学生房仍然是贵一些(我现在的房租 190 欧元),但是考虑到市场房价,我觉得这已经是最好的选择了。

地段没有特别靠近 Helsinki 市中心或者是 Espoo 的 Otaniemi 这种毕业生工作机会较多的地方。一般只能选择那些靠近火车站,地铁站,交通枢纽的小区。

申请过程分两部分。

第一部分是填写网上申请表。

https://ssl.agenteq.fi/nuorisosaatio/asuntohakemus/hakemus/hakulomake/hakulomake.aspx

这个网站还挺难用。你要先选择自己想找的城市,地区,户型,面积,价格等条件,然后按 Search 按钮搜索。在找到的户型里,你可以选自己比较喜欢的。然后点 Next 按钮一步一步去填写申请人的信息。最后提交之后你可以选择发送一份申请表详情到邮箱,还有通过短信或邮件接收 Offer 的选项。

现在你的申请还处于 Inactive 的状态。

第二部分是提供所需的文档,将照片/扫描件发送到他们的邮箱 vuokrauspalvelu@nuorisosaatio.fi ,或者是将复印件带去他们的办公室。如果缺少某些材料,他们会发邮件通知你补全。材料包括:工作合同,工资单,税单,护照,居留许可等。详见:

https://www.nuorisosaatio.fi/in_english/how_to_apply/enclosures

比较费事的一个材料是税单。一份是你纳税的税率,也就是 Tax Card;一份是你去年的纳税记录,叫 erittelyosa。这两份东西都是每年会邮寄给你的,但是很多人可能都弄丢了。这时候你就要去 Tax Office 补办一个,他们可以当场给你打印出来盖章。Helsinki 的 Tax Office 在

材料齐全之后,他们会发一封确认邮件给你,告诉你你的申请已经是 Active 状态了,以及何时过期(通常是 6 个月)。接下来就只能等短信或邮件通知 Offer 了。

不知道什么时候能申请到。

汉堡-哥本哈根-柏林

十一日。早上出发前还头一次用电熨斗熨烫衬衫。今天依旧是绵绵小雨,好像秋天的红色和金色都要被洗掉了。

从天上感受芬兰的秋天,像是放太久的花椰菜

第一站是柏林。只是走马观花地闲逛了一圈,就出发去汉堡了。

与慕尼黑比起来,柏林算不上繁华。施普雷河从城市中心穿过,宽阔的道路和大片的广场绿地,都有种空旷的感觉。既有现代主义风格的建筑,也有铁锈般的历史遗物。 (更多…)