Sunday, 10 May 2020

做博客,除了内容,你什么都不应该关心

马自达被誉为「东瀛宝马」的称号,其精髓就是追求「人马一体」的驾控奥义。在我看来,他们就是把车做得存在感极低,才能配合驾驶者的随心所动,就像操控意念一样。我虽然不是马自达车主,但对这种理念深有体会。

多年以前我也是个手机狂,那也是百花齐放的时代(马得暴露年龄),不像现在几乎所有手机都是一个样子,操作也极其相似。我对各个厂家不同造型和操作系统的手机充满新鲜感,所以经常买来一个玩几天就再卖掉再买另一个,频率最高的时候一个星期换了三次手机。直到我遇到Palm。它发布过基于PalmOS的手机,后来换成webOS,我当时用的就是一台基于webOS的Palm Pre Plus,这台手机终结了我频繁换手机的习惯,一用就是两年多。这里我不用说webOS有多好(它当然很好),就是从这里我找到了「人机合一」的体验,也就是说,我已经感受不到它的存在,因为它是我的器官延伸,需要任何帮助几乎都唾手可得,在使用者和手机之间已经不存在机器本身、界面交互、色彩等等,只是很直接地就能给出我想要的信息。

现在开始写自己的博客,就像我以前分享过的一个观点,很多新人会讨论网站设计中的图片、色彩、动效,会讨论域名、主机空间、安全、备份,会讨论SEO、友链等等,这其实都是网站刚出来的时候大家讨论的东西,鲜见有人讨论打算做什么内容,比如如何写出好文章。如果在博主和博客之间还需要花精力去关注网站的主题、域名、空间、安全等等,这可能不能很投入去维护一个纯粹的博客。同样地,在读者和博客之间还需要把关注放在主题、字体等等上面,这可能并不能很直接地向读者传达博主的思想。因为读者的时间很宝贵,他们花费时间点开一篇文章,我们都希望能在最短的时间内直接地向他表达自己的想法,能引起共鸣并产生交流就更难得了,但在传播过程中干扰了读者的思路、不能尽快地、尽简洁地表达自己,那么这个博客对读者就不够友好。

我见过IT行业里面有很多真正的大牛,拥有非常多优秀内容的博客,几乎都是很采用简单的Wordpress或者干脆就记录在像CSDN这样的第三方平台,他们自己不需要去关心哪里的主机快慢、中国能不能访问、稳定性安全性如何、空间域名是否支持银联或者支付宝付款等等问题,只是很执着地做着内容,剩下的全部交给服务商,也许正因为有这种专注才能做出好内容,这也是IT领域中serverless架构要达到的效果。

现在免费资源这么多,想建个网站实在是太容易了,想要静态网站就用 Github Pages,想要动态网站就用Blogger,再绑上一个域名,不论是个人还是企业,一个全世界都可以访问的网站就几乎零成本地诞生了,你不用去考虑主机带宽、磁盘容量、CDN、防火墙等,以及搜索、RSS、评论和统计系统等任何边缘因素,如果有特别偏好可以自定义一下主题,剩下的就只需要专注生产内容了。

本网站目前托管在Github Pages,架构请参考这篇文章。如果想要个后台管理网站的基本信息,可以托管在Blogger,绑定域名之后就不用担心中国无法访问了,配置一下以后还可以通过邮件发布文章。总之方法有很多种,只有把平台本身的存在感降低,专注在内容本身上才能把博客做好。

Tuesday, 17 March 2020

让Github Actions自动构建Hugo博客

自从Github Actions发布之后总想找机会一探究竟,今天花了点时间终于在本站上配置好了,总体上和Gitlab的CI/CD比较相似,顺便记录一下。


准备工作

创建一个repo,或者使用已有的,我这里使用的是top.github.io。在这个项目中新增一个分支,例如名称为hugo,这样做的目的是Hugo源码使用这个分支,最终生成的HTML使用master分支。以后只需要在hugo分支中更新文章,提交之后Github Actions会自动将生成的结果提交到master分支,而master分支是默认托管在Github Pages的,所以就实现了在Github上的CI/CD。

Github Actions配置文件

创建.github/workflows/build-deploy.yml文件:

name: github pages

on:
push:
branches:
- hugo # 让Actions只检测这个分支的提交

jobs:
build-deploy:
runs-on: ubuntu-18.04
steps: # 多个步骤如下表示
- name: Checkout master
uses: actions/checkout@v1

- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest' # 这里可以指定特定版本,我比较随意直接使用latest
extended: true

- name: Build
run: hugo --minify

- name: Deploy to master
uses: peaceiris/actions-gh-pages@v2 # 我试过使用@v3版本,过程总是报特殊字符错误,所以使用@v2版本
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} # 大写的这个名称记下来,后面会用到
PUBLISH_BRANCH: master # Github自动托管这个分支
PUBLISH_DIR: ./public

配置Repo

使用以下命令生成Deploy Key和Secret:

ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f secret -N ''

将secret.pub的内容配置到项目设置中的Deploy keys中,名称无所谓,勾选允许写入。再将secret的内容配置到项目设置中的Secrets中,名称须与以上配置文件中的大写字母相匹配。配置完之后这两个文件就没用了,删之。

设置自动更新ie9.org

在ie9.org的服务器上设置一个webhook,同样配置在repo的设置中,这样每次提交代码之后,Github就会自动和webhook server通讯,激活配置的脚本间接运行git pull origin master就可以实现更新网站了。

至于为什么不在Github Actions中直接远程更新网站,主要的考虑还是安全问题。从合理性的角度看,虽然webhook server依然必须存在,但低耦合的设计保证了有限的权限开放和灵活的配置方式,这样做还是值得的。

2020-03-26 更新

晚上把域名ie9.org绑定在Github Pages上,这样我的主机就彻底用不上了。整个架构更加简洁——在hugo分支更新内容,提交之后就自动更新到主站上,和带后台的管理系统没有区别了。

参考
  • https://github.com/top/top.github.io

Friday, 6 March 2020

应该成为什么样的技术人

前几天逛论坛看到这个帖子,楼主分享了人脸识别的技术,并给出效果演示在一定有效面部信息的情况下还能精确识别对象的身份。但是跟贴就很有意思了,大体上分成了清晰的两派,一部分人认为技术无罪,另一部分人认为这个涉及伦理和隐私不应该研究,我倾向同意第二种观点。

在中国隐私侵犯的事无处不在,以前做数据开发的时候会抓一些app的流量数据作分析,发现中国几乎所有app都存在隐私侵犯的现象,比如都会额外采集无线网络数据和设备唯一编号等信息。再想想无处不在的治安摄像头和高铁和机场的人脸识别应用等等,去年百度CEO李彦宏就说过中国人民愿意为便利牺牲隐私。所以可以看出在中国从官方到民间几乎就没有愿意为保护隐私牺牲利益的氛围。

我始终认为技术人首先是人,人应该首先具备基本的是非观念和伦理,其次才是这个人做什么技术工作。但是结合我过去的工作经历,我并不认为有很多技术人是这样。跟贴中有很多人说楼主只是分享个技术而已,楼主也说一个卖菜刀的人不需要为谁买了菜刀干什么事负责。看来面向对象的抽象思维已经深入人心,低耦合是技术思维,人不是没有伦理和感情的机器,不要这么单纯。

我看到一个回帖提醒得很好,所有人都知道菜刀可以做好事也可以干坏事,拿菜刀来比喻人脸识别技术不合理,因为人脸识别技术只会被用来干/或者助长侵犯隐私的坏事,所以可以相提并论的比喻对象是毒品,毒品也只会被用来干坏事。我想,如果我卖了一把可以做好事也可以干坏事的菜刀,有人拿它干了坏事,我肯定会有愧疚感。同样地,可以想像有人拿自己开发的技术去干了坏事,谁都应该有愧疚感。这是为人之基本伦理。

中国的技术人大多不信仰任何东西,甚至简单地认为信仰是宗教的事,这是错误的,是人就应该有信仰。信仰不是放弃相信科学转而信神,它带来的应该是敬畏之心——敬天敬人敬自己。敬天就是要尊重自然规律,不会盲目地战天斗地;敬人就是要尊重人伦社会的基本规律,不会自私和目中无人;敬自己就是要自律和自省,不会贪婪和放纵。

技术人首先要做个明白人,应该清楚知道自己创造的东西有社会价值在哪里,而不应该是一个工具,要不然和一颗螺丝钉或者一把扳手有什么区别,只能被人利用,除了增长的年龄和技术水平一无所获,不论什么时候、还做不做技术工作,脑子里面少点技术思维,多点人伦观念,会显得更像个正常人,不是很好吗?

Monday, 2 March 2020

拿到加拿大驾照了

今天第二次参加驾照路试,满分通过了。几个星期前通过了驾照的笔试之后,上个月又参加了一次路试的考试,由于东西方观念不一致没有过,很可惜但也意识到每一位驾驶者都关系到公共安全,所以驾驶者需要和当地人一样具备足够的安全意识才能参与公共交通。

笔试

笔试相对比较简单点,因为省公共保险机构(以下称机构)提供了免费的驾驶员完全手册,任何人可以在图书馆或者网上找到,考试的题目都是出自这本手册,只要够认真地学习一次,都不大有问题。试题还可选中英文,这对英语不够利索的考生也是个便利。我直接对着网上的试题复习了几遍,又粗略地翻了下书,最后顺利通过笔试。

考试的时候提前到达指定的机构并在前台报到,接下来就是等叫名字,排到之后会被请入一个透明的小房间,里面有三台电脑,我进去的时候已经有两个印度小哥在考了,好像很难,他们一直在皱眉头。打开电脑输入自己的预约信息就可以开始答题了。完成后会页面会出来结果,并且把前面做错的题目都列出来,并给出正确解答,留心的话可以看看前面错哪了。

答完题出来会被叫到一个简易的机器前面,通过透镜看里面的颜色的数字,这是为了检测考生是否有颜色识别困难,顺便也测了眼睛的视力。到了这里笔试就算基本上结束了。

驾照

通过笔试之后不用着急领取初学者驾照。因为所有人都有权在入境后的90天内使用原驾照(部分国家地区的驾照可能需要翻译,翻译件只能由本地指定机构提供),而不用换取本地驾照。初学者驾驶时身边必须有一个三年以上驾龄的人作为监督者。所以如果一旦选择更换交领取本地驾照,机构就会回收原驾照,我要是找不到天天陪我的监督者也就不能再单独开车了,所以我暂时继续用原驾照,直到考路试前再换成本地驾照,用于参加考试。

这样也有一个风险,如果通过考试就没有任何问题,机构会现场提供一张临时的全驾照,以后就可以正常开车了,正式的驾照是一张卡片,会在接下来的两到四周寄到家庭地址。但万一没有通过考试,就意味着接下来的一段时间既没有全驾照,换到手的初学者驾照也不能再让我再单独驾驶,除非十五天后再次报考并通过考试。我现在面临的就是第二种情况。

路试

这一部分曾经让很多人紧张,因为上路之后要考察的细节非常多,还要同时处理复杂的路况。这部分容许考生犯10个以下的小错,且不能有大错,否则就算挂了。小错通常是走错车道或者灯光使用或者观察不够等,大错包含严重的小错,或者超速、闯红灯等严重的行为。

路试大概的流程是这样的。考官会介绍自己,并在上车前检查车前后几个灯和喇叭是否正常,然后就可以启动出发去侧方停车了。侧方停车允许在四分钟内最多尝试三次,并且考察的细节非常多,最多的是灯光的使用和前后左右的安全检查,一项没做到就是一个小错,所以很多人失利在这个环节,不一定是停车技术不好,而是细节失分过多导致。比如倒车前要检查前后左右都足够安全,出停车位要配合灯光和左右检查等。如果通过这个环节就可以正式上路了,如果没有,就要原地直接开回停车场,我考前在现场观察了几次,有几个考生是停完车直接回来的。

一般来说,必经的考点是学校,其次是一段高速。学校主要的考点是速度控制和避让校车等,这里出现的问题通常都是致命的,比如超过30km/h或者没有让行人就直接挂了。高速考察的主要是速度控制和变道,对于很多新手而言融入较高速的车流中是一个心理挑战,要在融入前提到和车流相同的速度,然后时机要把握好。在车流中变道也是个挑战,以前在国内遇到这种情况教练一般会说要放慢速度保证安全等等,在这边完全相反,太慢的速度在高速会很容易造成追尾事故,所以这边会教育考生变道可以加速,只要不超过限速的10%,看准机会就可以变了,第一次在这里我习惯性地犹豫了一下,并放慢了速度,后车马上按了下喇叭,我不得不赶紧再把速度提上来,但于事无补,考官当时就批评这样做不对,又在旁边解释了很久,然后就是打道回府的路线了。他对此的解释是,其他的车按了喇叭就表示你的行为已经明显影响到他人的安全,影响安全的行为是最无法被接受的。

至于市区里面,没有太多考点,主要是注意速度、行人、转弯。市区限速通常在60km/h以下,一般低于50km/h或者超过限速都不行,太慢一般算小错,太快就挂了。行人比较好处理,只要有行人要过马路就停车等待就行了。转弯和并线也是一个细节比较多的环节,特别是绿灯时需要进入交叉路口,黄灯转红灯前果断完成转弯。

还有一些机率比较低的状况也有可能遇到,比如紧急车辆和校车的处理方式,这个要看运气,因为考前上午我去考点附近转了一圈,遇到两次紧急车辆,自认为处理还是很合理的,但考试时并没有遇到。

总结

跟本地待过很久的朋友聊起这件事,她说的那句话我体会最深:司机要处处表现出你的尊重,尊重法律(交规),尊重行人,尊重其他司机,尊重考官,这可能就是当地人这么文明和友好的精髓吧。

Wednesday, 26 February 2020

2020创业阶段汇报

说来惭愧,由于家庭和个人等多方面原因,创业的过程进展得非常缓慢。但既然选择了这条路,就应该坚持到底。

在中国的时候和同事一起办过一段时间公司,不过很快就关掉了,所以并没有积累到很多非技术层面的管理经验,比如商务、财会等,来了之后一切都要从头学起。好在加拿大的法律和商业环境比较规范和清晰,也很单纯,官网提供的文档能看完基本也就没什么太多问题了。

按道理我作为创业者登陆加拿大之后就应该立即开展工作,但实际操作上官方并没有这么“不近人情”,还是给海外工人留了不少时间settle down,这个时间多少可以和孵化器协商。我希望把家人安顿好,小孩送到daycare之后才能放心一点全职投入,也得到允许,但在这之前并不能完全让项目停滞,所以我估计我现在的状态和中国国内的人是一样的,自我隔离在家办公中。

目前这个阶段首先要解决的是公司的问题,公司包括商务注册和财务管理。注册方面比较简单,可以委托律师办理,只要公司名没有重复,大概一两周就批复了,最后会收到公司的business information表。接下来就要准备公司开户的事,以后的所有投资、收入和支出都要经过这个账户。关于公司开户可以参考这篇文章最后一段:HSBC Canada 近期活动汇总。大概流程就是需要所有的股东签一份文件,在HSBC开户的好处就是即使股东不在加拿大,也可以利用其global bank的便捷属性在全球任一HSBC网点见证签字。完成之后收到账户信息就可以使用了。

另外在管理方面,为我们提供咨询服务的公司建议使用敏捷方式管理项目。以前在工作中也使用过,但自己认为还是不够专业和规范,所以最近在学习这个项目管理方式。如果有一些PMP或者ITIL的知识储备,肯定是会有一些帮助的。我知道中国的很多公司在项目管理中并不够注重配置管理,而在规范化的要求下,这个几乎是必须的。因为项目的开发通常是需要协作的,不止是技术范围内,也有需要跟孵化器或者移民局定期沟通项目进展,如果有需要也要和咨询公司沟通以制定后续的协作计划,当然最重要的是自己也需要用来报告和监控当前的项目进度以及调整项目计划。

最后是项目的开发反而不是最重要的方面,因为作为一个非技术驱动的公司,或者说不是靠专业技术攻市场的公司来说,技术就只是一个储备和基础,需要的时候能随时拿出来干活,而不需要聚焦在技术本身。对于目前我们在用的一个针对特定人群的通用性的平台说讲,现阶段用PHP就能很好很快地构建了。如果未来有需要,可以再考虑服务化和自动化运维,没有什么难度可言。

至于其他方面,比如税务和法律等领域,对于创业公司来讲实在没有必要都去弄懂,因为它们各自都是一个很大的体系,需要的时候孵化器会提供帮助。当然,虽不必深究,但这些领域里的一些common sense还是应该知道的。

如我之前的计划,这是很好的一次体验北美创业过程的机会。特别是与我合作的咨询公司的同事Robert,是非常资深的Business & Marketing和敏捷项目管理专家,同时也是冰球和足球教练,知识全面,精力充沛,这让我对与更多领域的人合作充满了期待。