FOSS 2019/05/05

为了避免日志太多,以后将会按周总结。发布日期通常是每周日。

openSUSE

opi

  • 快捷安装 Packman codecs, VS Code, Skype
  • PMBS 搜索功能研究(只要得到账号,就能做了)

打包

  • 更新 adobe-sourcehansans-fontsadobe-sourcehanserif-fonts包,提供语言支持信息with additional provides for languages

KDE

翻译

  • 保持核心翻译 100%
  • 翻译 Kdenlive
  • 同步翻译到 SVN

Log 2019/05/01

openSUSE

opi

  • 第一个可用版本发布
  • 打包推送到 openSUSE Factory

打包

  • 更新 adobe-sourcehansans-fonts
  • 更新 adobe-sourcehanserif-fonts
  • 更新 google-noto-emoji-fonts

Log 2019/04/23

KDE

翻译

  • Kdenlive

openSUSE

Geeko Store

  • 用 curl 测试 OBS 搜索 API

打包

  • 推送 vnote

Git Cola

  • 中文翻译

Log 2019/04/21

KDE

翻译

  • 翻译核心组件

openSUSE

维基

  • 修复打印布局
  • 修复头部脚部链接翻译
  • 修复目录的 sticky 布局
  • 编辑 Apache 相关页面
  • 编辑 Chromecast 防火墙内容

打包

  • 更新 WoeUSB

论坛

  • 更新 IRC 新帖同步机器人

翻译

  • yast-control 桌面列表

Log 2019/04/10

KDE

翻译

  • 更新核心翻译

openSUSE

打包

  • 更新 python-PyMuPDF 包

Bug

Geeko Store

  • 用 Qt Quick Controls 做了个界面
  • 尝试在 High DPI 下运行,发现 Native Text Rendering 不能缩放字体,所以只好有条件地使用 Qt Text Rendering

Log 2019/04/09

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

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. 可能会使用更多的资源,启动较为缓慢。

原生应用

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

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

总结

待续……

向日葵

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

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

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

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

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