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或者超过限速都不行,太慢一般算小错,太快就挂了。行人比较好处理,只要有行人要过马路就停车等待就行了。转弯和并线也是一个细节比较多的环节,特别是绿灯时需要进入交叉路口,黄灯转红灯前果断完成转弯。

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

总结

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