土豆柿子不能多吃

上个月上了一门课,主要讲 Leadership 的。其中有一篇论文,以安然和雅虎为例,论证 Strategy As Simple Rules 。当然这篇论文是 2001 年发表的,那时候安然的骗局尚未被揭发,雅虎也还没衰落。

教育实际上已经偏离了朴素主义,他们提出一两个新概念,如果能找到些例证,那就成了。事件的发生都具有偶然性,这往往是研究所无法解释的。因为众多条件无法还原,复制模式的不确定性非常高。大部分的非科学研究成果,不论是基于数据还是逻辑,都不甚可靠。问题太复杂,理论更复杂。很多关键环节只能用“我认为”的逻辑,这就不靠谱了。

每天早起然后听一整天课,累。有时候回家太累,就去吃汉堡王。可乐还是含糖的好喝。

昨天看了朱利安·阿桑奇的采访。他已经在厄瓜多尔大使馆避难四年了,与世隔绝,几乎失去了所有自由。或许那种每天都可能死去的感觉,我们穷尽一生也不能体会。他是个悲剧色彩的英雄,他活在另一个世界。

One of the best attributes of human beings is that they’re adaptable; one of the worst attributes of human beings is they are adaptable. They adapt and start to tolerate abuses, they adapt to being involved themselves in abuses, they adapt to adversity and they continue on.

人类最大的优点是适应性,这也是最大的缺点。他们适应了痛苦,忍受虐待压迫。他们也适应了逆境,继续前进。

大雪,最后一颗苹果还没有落。

心如室,贵在无杂物。既不要经历太多,也不要体验太少。无空虚,无烦恼。像这样写一篇日志,稍稍满足了对生活之期望。

遇见几个人

中午在学校食堂吃饭,遇到了土耳其同学 Orcum 。他原来是和我一个班,现在转去 Product Design 了。和身边那些标准 Service Designer 不一样,他总是很一针见血地批判 Service,Experience 和 Strategy 什么的。

产品设计,创造力和原材料来源于设计师自身。设计师对自己的设计负责,没有既定流程和方案,每一步都能直接看到设计的结果。好就是好,不好也藏不住。每时每刻都在修正,再试。他们遇到的 Negative 可能比 Positive 更多。对结果不满意,就是自己的失败。因为那设计,都是从你的灵魂里诞生出来的。

服务设计,有好多方法。数据从用户那里来,从企业那里来,从环境那里来,你是采集者。靠数据做设计,那更像是计算。大家歌颂创造,粉饰前景。一直相信自己在做绝佳设计,因为看不到它。严肃的艺术家,与空气雕塑。当设计完成,它被交给其他人,其他部分。它已经不是你的孩子了。

遇上不认识的学妹,问我的名字。她说认识我,从网上读到了我的博客。

在汉堡王吃大份汉堡。有个老婆婆背着很多垃圾袋,颤颤地走过去了。我们学的设计,对他们来说,什么用也没有。设计不能改变世界,它只能让幸福的人更加幸福一点,然后对不幸的人,一声抱歉。

十月四日,赫尔辛基动物园免费开放。

已是多么长的离别

天气,未知。

我整天都在家里,踏不出门。窗外的那小树,苹果已经是暗红色。就这样散落在草丛里,只有昆虫来吃。白天依然很长,阳光却没有盛夏那样恣意。凉凉的空气让我咳着,发觉自己的羸弱。从窗子飞进来的异国小虫,初时很吓人,现在觉得很蠢。

手机里有各种各样的聊天软件,却找不到一个可以发送的账号。这个时代的我,想要可以无视意义的交谈。如果活在短信的时代,我还能慢慢地拼字,每一条信息都会激动地等好几分钟。如果活在电子邮件的时代,我还能写一段长长的心情,好好打磨每一点果敢温柔,撒娇任性。如果活在书信的时代,我还能用一张小小的纸,别扭的字迹,浅浅地关心。

爸爸妈妈在老家盖新房子,很期待新的家。怀念小时候喜欢和妈妈一起养花种菜,与兄弟姐妹玩耍。或许回家种田也不错,可惜要从头学起。要教我的孩子,不要捉蚂蚱和螳螂来吃。还乡的愿望,总是留在最后。

外面有无限的美好景色,或近或远。做不了一个背包客,总是走不远。有远行的能力,却总少些动力。双脚能走到的地方,就已满足。回想去过的地方也不错,圣彼得堡,塔林,慕尼黑,苏黎世,香港。旅游其实并不好玩。错过火车,错过飞机的笨蛋,应该早早打消这种旅行的念头。匆匆忙忙的话,只能看看一些知名景点。我却偏偏喜欢无名的街区,偏僻的去处。

还是要用心学习,虽然越发枯燥。学习和工作,可以维系自身的秩序。失去秩序的人类,多是毁灭了。

零点三十三,借着音乐继续写。

作为独居者,时而不快,时而幸福,皆莫能名。若没有现在的状况,或许不会真正思考一些简单的问题。更肆意妄为地计划,更直白明了地行动。读读希特勒,看看马克思。一些有用无用但有趣的知识,总是很喜欢用来填补脑内空白。有些枯燥的游戏,奇怪的漫画也是最爱。减少对人际关系的期望,就能享受安宁的生活。如果它是对你有意义的。

李小龙真是了不起,因为他说了

Don’t think. Feel.

那些具有种种名义的,消失得更快。重要的是可感不可知。抛开称谓,我们都是人呐。即使讨厌喜欢的人,痛恨深爱的人。即使对不重要的人偏偏执着,对珍贵的人轻易放弃。即使幸福却不满足,悲惨却心安。即使对大起大落全然无感,却又在平凡的某天幡然醒悟。放弃了争论,才得到结论。

难怪那么多人,最后都疯掉了。

想念的人,都已是如此遥远。想不起名字和样貌,想不起为何牵挂。像梦一样模糊,没有实感。总想创造一种不可能存在的现实,有期待发生的一切,在过去没来得及的时间。以往的意外也并不讨厌,还挺有趣的。不会再感到空荡荡的了。

两点三十六。

2016-08-26-20-25-19

馒头事件和艺术节

周三晚上蒸馒头,第一锅效果非常棒。

2016-08-24 23.15.53

然而第二锅的时候我忘记定时,结果锅烧糊了,馒头烧成了炭,竹制的蒸笼也烧焦了了。黑烟和呛人的味道,所幸烟雾报警器没有响。

周四晚上有个艺术节,赫尔辛基市里很多人。还没写完毕业论文的我又出来闲逛了。

这辆小电车里面是个酒吧,之前从未见过。

2016-08-25 19.30.27

芬兰锣鼓队,还邀请观众现学现卖。

2016-08-25 19.44.14

戏法,魔术师找了姑娘来配合,然后要从胸里把扑克牌变出来……警察快来抓变态 O_O 然后这个发型炫酷的少年挡住了我的镜头。

2016-08-25 20.02.13

中国戏法,三个杯子里三个球,变来变去。他好像还念了中文咒语。

2016-08-25 20.07.39

最后还变出了水果……

2016-08-25 20.10.57 2

一只大章鱼,爪子很长很长。制作材料是当地超市和店铺的塑料购物袋。

2016-08-25 20.42.09

带了巧克力曲奇来,然而并不好吃。还剩一大袋,皱眉。

吹巨大泡泡,仅限小孩子。

2016-08-25 19.49.13

孤高的艺术家,没顾客的摊主。年轻的歌手,谢幕的魔术师。我们的生活是没有滤镜的,放眼望去,都是朴素的背景,漫不经心的角色。每一点精彩,都是难得的。

海边很安静。摩天轮还在转,尽管没有什么风景。

正确设置 GNU/Linux 主机名 Hostname 和域名 Domain

为什么要设置主机名

一些软件需要知道主机名才能工作,不然会有警告和错误,比如 Apache。

可以使用 “hostname” 命令查看现在的主机名,用 “hostname -f” 命令查看完整域名(Fully Qualified Domain Name, FQDN)。如果查找 FQDN 失败,你需要按照以下步骤设置。

个人电脑 PC

PC 通常没有域名和固定不变的 IP 地址。通常情况下,PC 的软件是不需要主机名和域名来运行的。但是如果你开启了某些网络服务,就可能需要它了。

如果你没有注册过任何互联网域名,可以用一个假的,比如 yourname.local ,yourname.lan ,yourname.geek 之类的。因为 .local .lan .geek 目前不是 ICANN 顶级域名,因此不可能和任何互联网站点冲突。例子:

  • linux-desktop.guoyunhe.local
  • samba-storage.guoyunhe.local
  • laptop-1.guoyunhe.local

如果你已经注册了一个域名,像是 yourname.com ,你可以用它来命名你的计算机设备的域名。因为你自己就可以确保相同域名不会被用在别处。例子:

  • desktop.guoyunhe.me
  • laptop.guoyunhe.me
  • old-thinkpad.guoyunhe.me

第 1 步:修改 /etc/hostname 文件。主机名只能包含数字,字母和连字符。

linux-desktop

第 2 步:修改 /etc/hosts 文件。把完整域名 FQDN  “linux-desktop.guoyunhe.local” 放到主机名 “linux-desktop” 之前。

127.0.0.1    localhost
127.0.1.1    linux-desktop.guoyunhe.local linux-desktop

第 3 步:重启系统。

检查主机名和域名: “hostname” 命令输出 linux-desktop , “hostname -f” 输出 linux-desktop.guoyunhe.local 。

服务器

如果你有一个服务器,绑定了多个域名:

  • guoyunhe.me
  • www.guoyunhe.me
  • wiki.guoyunhe.me
  • shop.guoyunhe.me

你可以选择 “www”, “wiki” 和 “shop” 中的任何一个作为主机名。也可以另取一个,比如 “server” , “vps-1″。

第 1 步:修改 /etc/hostname 文件。主机名只能包含数字,字母和连字符。

server

第 2 步:修改 /etc/hosts 文件。把完整域名 FQDN  “server.guoyunhe.me” 放到主机名 “server” 之前。

127.0.0.1    localhost
127.0.1.1    server.guoyunhe.me server guoyunhe.me www.guoyunhe.me wiki.guoyunhe.me shop.guoyunhe.me

第 3 步:重启系统。

检查主机名和域名: “hostname” 命令输出 server , “hostname -f” 输出 server.guoyunhe.me 。

验证码:UX 终结者

网络验证码技术虽然是外国人发明的,但却在天朝泛滥成灾。

我们有那么多同学去做 UX ,花了那么多心思给用户提供更好的体验。到最后,被一个验证码全毁了。万恶的验证码,以及走不动的进度条,总是最烦人的。

简单的麻烦——淘宝的滑动验证码

48022-20160305151513034-1640022452

淘宝和微博目前使用这个验证码,原理和 Google 的 reCAPTCHA 2 类似。第一步让用户拖动滑块(触屏或鼠标),然后记录鼠标或手指触摸的轨迹,猜测用户是人还是机器。同时还会测试浏览器的排版引擎,JavaScript 引擎等等,确定这是一个人类使用的浏览器,而不是机器人程序。

在滑动过程中,鼠标位置/手指位置的数据是发送到服务器进行验证的(密文,如下图)。由于这一过程很短,采样率有限,而且直线滑动的人为特征性也不是很明显,即使算法再好也很容易被破解程序骗。

Spectacle.G10324

如果第一步判断不是人或者把握不准,则进入第二步,即传统的图形验证码。

e3d4062a23f78089d8463eb8a87d9414_r

有没有必要

它挡不住破解程序。滑动验证比图片验证要弱,所以图片验证码才会作为第二道防线。只要写一个程序控制鼠标,并且让鼠标轨迹看起来不那么有规律就可以了。(配合浏览器,骗过浏览器性能验证机制)

如果是通过用户的交互行为来判断其是人还是机器,大可不必显示这个滑块。用户在浏览网站或使用应用的过程中必然要进行大量交互,记录这些数据要比滑动那么一下有效得多。

滑动验证是不能证明其对错的,它的数据和算法都是不透明的,而且可以推测其原理极其复杂。即使用户觉得自己是滑动到了最右端,它仍然可以强硬地不通过验证,给用户一种很无奈的挫折感。目前看来这算法确实有问题,因为通过率出奇地低于文字验证码的通过率。如是玄学,寡人不服 XD

这就造成了两种常见结果:

  1. 破解程序没被挡住。
  2. 一些用户验证了两步。

在我使用的十次当中,有七次没有通过滑块验证码,而不得不使用图形验证码。滑动和使用图形验证码所需的反应时间其实是差不多的,这意味着我比使用单一图形验证码反而多用了 70% 的时间。

而某些破解程序,已经能够做到 80% 以上的成功率。令人唏嘘不已。

两步验证码的组合更是浪费时间。

我只能说:这不合理。

四处滥用

昨天,有个人在微博上给我发消息,我用 Android 应用回他一下,然后就冒出了验证码,必须要完成验证才能发送消息。然后连续输入错误,消息没有发送成功。

我今天在淘宝注册账号,更改设置,总共输入了十几次验证码。即使我已经输入了短信验证码,后续还是被要求输入滑动验证码。

对于已经登录的用户,验证码通常是没有必要的。如果想验证用户是不是机器人,为什么不在登录的时候提前验证好?如果想验证用户是不是本人,则应该输入密码或者短信验证码。

我在使用 Facebook 和 Twitter 的这些年里,除了短信验证码和手机令牌,从来没有遇到过滑动验证或文字验证码的时候。Paypal 和 Amazon 的验证码也出现得极少,甚至于我都忘记了他们的验证码是什么样子。

当一个交互过程需要安全检查,而人们又想偷懒的时候:加个验证码吧。

验证码是一个在设计过程中绝对应该尽可能避免的东西。不管形式怎么变,用户都会反感,因为它带来了麻烦,且不止一次。它不能保证安全,任何现有的验证码机制都有破解之法。越复杂的验证码,对于人类的挑战也越大。

Sweet Captcha

Spectacle.N10324

参考链接

  1. Inside reCAPTCHA – Google “点击验证”的原理和简单破解方法
  2. 淘宝滑动验证码研究

八月半

新学期开始,最后选了一门英语课,一门设计趋势分析。这是我最后一个学年。不是新人,也不成熟。

我现在很少出门了。门外好像没有什么可以召过去的。大概是我认识的人太少,兴趣也不多。我每天就从小小的窗外望那棵小苹果树,其实它还是海棠。早晨或傍晚,我会穿戴整齐,出门倒垃圾,收信。

天气很冷,晚上睡不好。常会梦见我喜欢的女孩子们。想起教室,车站,山路,峡谷,小岛,轮船,游乐园,水族馆。还有年幼的我,在小菜园里给番茄苗浇水。

昨天去吃 Kebab ,新店员用土耳其语和我打招呼。几个大叔坐在各个角落,互相离得很远。我们在此刻成为了同一类人,虽然找不到有意义的理由。我突然想,我得找个喜欢 Kebab 的姑娘结婚才行。

学校走廊的一扇窗。

2016-08-17 17.27.48

又是奥运会

里约奥运会还没有结束。中间穿插着很多不好的事件,比如对中国运动员的不礼貌评论和疑似不公裁判。在新浪微博,知乎和百度贴吧,各种争论没完没了。

我没看奥运会,也不关心竞技体育。

奥运会本是希望世界和平的,而如今却越来越不平静了。所有人都心有不安,这成了一个发泄躁动情绪的机会。

几百万人在网络上骂外国运动员,骂外国裁判,还要求道歉,这就是网络暴力了。即使他们有错,即使他们不懂中文。

Instagram 在中国是被封的,那四十几万在霍顿的 Instagram 留言骂他的网民,你们是怎么成功翻墙的?

MariaDB 全文索引

MariaDB 和 MySQL 的全文索引的建立方式与查找方式,都和普通的索引不同。

建立索引

建立索引的语法可以简单也可以复杂:

FULLTEXT(title)
FULLTEXT(title,content)
FULLTEXT INDEX post_title_content_ft_index(title,content)

查询

1. 按照自然语言查询,匹配完整单词。比如查询 rabbit 可以匹配 rabbit, rabbits, Rabbits,但是查询 rab 不能匹配 rabbit 。

MATCH(title,content) AGAINST('rabbit')

2. 按照字符匹配查询,从单词开头开始。查询 rab 可以匹配 rabbit ,但是查询 bit 不能匹配 rabbit 。

MATCH(title,content) AGAINST('rabbit' IN BOOLEAN MODE)

多列索引与单列索引

对于普通的索引,如果建立了(title,content)的联合索引,就不必单独建立 title 和 content 的索引,也可以搜索单列。但是全文索引就不行,索引的列必须和查询的列完全一致。如果查询 title ,就要建立 title 单列的全文索引;如果查询 (title, content) 就要建立只包含 (title, content) 两列的索引。

搜索中文

MySQL 和 MariaDB 的全文索引一开始就不是为东亚语言设计的。单词断字是按照空格和标点符号的,但是中日韩文字单词之间没有空格。因此搜索“明月”无法匹配“床前明月光”。使用 IN NATURAL LANGUAGE MODE 只有在搜索整句的时候才能匹配到,基本上没有什么用处。使用 IN BOOLEAN MODE 的时候,只能搜索一句的开头,比如“床前*”可以匹配,而“明月*”就不行。* 通配符只能放在单词的结尾。

因此对中文而言,全文索引反而没有 %LIKE% 的效果好,虽然 %LIKE% 的效率很低。小型网站,可以采用。

MySQL 提供了额外的 ngram 技术,支持每 n 个字符断字。这样就可以用逐字搜索中日韩文字。但 MariaDB 还没有引进此功能。

一天又一天

近一个月来,都在忙创业的工作。网站推出开始运行,逐渐积累内容和用户。也不是特别出彩,但也像模像样的。

santakani.com

万事开头难。得时时想着这件事,偶尔跳出圈子,才能理清头绪。工作的时候也不是要拼多少小时,而是每天坚持做一点,做最要紧的,选择最高效的途径。

前几天参加一个小活动,有个大叔说,“Do not fall in love with what you are doing.”意思是说要灵活变通,最后做成的事,不总是和初衷完全一致的。

看着一点点积累了这么多,有点小开心。感谢玥辛和小童。我们这三个人好像都不够聪明,不是特别勤奋,也没啥经验。只是一直在慢慢往前走。

毕业临近,稍有紧迫之感。同一届的学生,都还没有毕业。有的在忙毕业设计,有的则在实习。在芬兰,人们已经习惯了按照自己的节奏规划生活。社会也有足够的包容性,不会计较你是否早一年或晚一年毕业。

好好学习,好好玩耍。