改用Pelican重建这个博客

这里简单发一篇博客,讲一下我在使用了Pelican来重建这个博客。至于回归博客的感言什么的,回头再说了。

之所以不再使用Jekyll,主要是不想在电脑上安装过多的开发环境了。而且Github Pages会是不是升级Jekyll环境,我还得跟着升级,太麻烦了。

Pelican的好处是非常简单,很容易生成静态页面,且我会用到Python。

Pelican的用法网上很多,这里主要记录一下特别的地方。

首先是图片等涉及静态路径的,需要在pelicanconf.py里设置STATIC_PATHS

STATIC_PATHS = [
    'images',
]

并且Markdown中,引用图片需要这样:

![JUSE FUCKING DO IT]({static}/images/just_fucking_do_it.png)

然后是favicon,我是这么设置的,并且把favicon.ico放在/content/extra/目录下:

STATIC_PATHS = [
    'images',
    'extra',
]

EXTRA_PATH_METADATA = {
    'extra/robots.txt': {'path …

Continue reading »

另一种在Windows10下使用Jekyll的方法

最近准备继续记博客,需要安装Jekyll环境。

手头既有Mac也有PC,考虑到上班期间带的是PC,所以还是要在Windows下配置一个Jekyll环境。

按照Jekyll官网的方法,是去安装RubyInstaller。但是,RubyInstaller本身是基于MSYS2的,我的PC已经装了MSYS2,不想再多搞一套,于是决定基于MSYS2安装Ruby和Jekyll。

MSYS2类似Cygwin(其实就是一个Cygwin分支),可以让用户在Windows下使用UNIX环境的套件。这里先介绍一下相关概念:

  • Pacman是一套流行于Arch Linux下的软件包管理软件。

  • MinGW是一套在Windows使用的GNU工具链,MinGW-w64是新一代MinGW,同时支持32位和64位。

  • MSYS是为帮助MinGW在Windows下使用,随MinGW提供的一套基本的POSIX操作环境。它是基于较旧的Cygwin项目创建的一个分支。MSYS2和MSYS并不是同一个项目的不同版本,它们各为独立项目。

MSYS2集成了Pacman和MinGW-w64。

我们在中国使用MSYS2,最好设置一下国内的镜像,网上的文章基本都是让用中科大的镜像,但目前他们的东西有点问题,只好改用清华的镜像。可惜了,实际上中科大离我很近。

按照页面上的说明设置好镜像,并执行:

pacman -Syu

在最后提示关闭MSYS2时,点窗口的X进行关闭,再去MSYS2安装目录里运行一下autorebase.bat。然后打开MSYS2,执行一下更新:

pacman -Su

之后就安装一系列软件,我这里是 …

Continue reading »

“你是如果管理内存的?”

还没找到工作,面了几家,都没下文。我脸皮厚,写点总结发博客。

像标题这样的面试问题,这些天遇到不止一两次。第一次我略懵,毕竟好久没被面了,没什么准备,所以没做出全面的回答。不过,就算到现在,我也没能在面试时把这个问题回答得很到位。可能这个问题对我来说已经不是什么困扰,平时想得也不多,遇到了我也能解决。这里做一下笔记,这样再遇到这个问题,我可以表现得好一些。

首先破题,为什么需要考虑管理内存的事,因为C/C++主要提供的是一种很原始的手工释放内存的方式。人难免出错,如果申请了内存,最后忘记释放,就会造成内存泄漏。此外,对于那些在好几个模块之间共享的内存,怎样才能做到正确且合理地释放,也是个问题。如果其中某个模块做了解引用(dereference)操作,还要专门去通知别的模块,再根据情况的不同决定是否需要真的释放内存,那模块之间必然是紧耦合的。所以,并不是小心谨慎就能解决好内存管理问题,好的内存管理一定要借助合适的方法和工具。

我这里第一个要谈的工具,是内存池。内存池实际上是在一开始申请一大块内存,再将这大块的内存按照一定规则划分成几个尺寸的小块内存集合。同一尺寸的小块内存用一个叫FreeList的东西串起来,有几种尺寸就搞几条FreeList。当我们需要内存时,根据需要的尺寸 …

Continue reading »

✔ JUST DO IT

最近辞职了,准备回游戏业,在找工作。

其实游戏业给我的,是一种失败感,尤其最近。比如斧子的惨状。再如手游审批这事,其实我对这块不感冒,但也有殃及池鱼的感觉。总结起来,就是一个没劲。主机解禁没带来多少改变,现在又闹这一出,一代又一代的人深陷魔掌无法脱出。

特佩服也特感谢一些没心没肺的观点——自己做好了不怕外界环境恶劣。这话是对的,比如放在斧子游戏机这事上,不是大家不挺你,是有些事你自己作死。能这么想的人,都是内心坚毅的人。而且,作为弱者,不干了这碗鸡汤,还能怎样。

以前老大批评我想太多,我很认同。业内如何,轮不上我这样的去想,想了也没用。我是程序员,不专注在自己手艺上是不行的。你看老罗,虽然手机做得还行,至少做出来了,但是总给人一种只会耍嘴炮的感觉,间接也耽误了锤子的行情。所以呢,我还是只专注于技术,不然哪一天风云幻变,做出中国巫师、中国神海的人里就没有我了(笑)。

十岁想做游戏,二十岁在做游戏,三十岁再回来。觉得对的事,就去做吧 …

Continue reading »

如何在OSX El Capitan下使用基于CH34x芯片的USB串口适配线

淘宝上有很多廉价的USB转串口的适配线,这其中不少使用的是南京的沁恒公司的CH34x芯片。

我们可以在“关于本机”-“系统报告”-“硬件”-“USB”里查看适配线的VID(厂商ID),来确定适配线是否基于CH34x芯片。CH34x的VID是0x1a86,我这根的PID(产品ID)是0x7523,你的PID可能不同,0x5523也是一个可用的PID。

确定芯片后,就可以去找驱动程序了。沁恒的网址是http://www.wch.cn,我们可以从上面找到我们需要的驱动。Mac的驱动也是有的,不过太老了,未经签名,所以通过不了苹果在OSX 10.11上加入的SIP1保护技术。如果直接安装这个驱动,肯定是用不了的。必须屏蔽SIP对kext2的保护。

设置SIP,我们需要用到csrutil,它就是SIP的配置修改工具。使用csrutil,必须进入恢复模式。恢复模式的进入方法是:开机(重启)时,同时按CMD键和R键。进入恢复模式之后,在“实用工具 …

Continue reading »

如何背单词

我是个英语很烂的人,所有关于英语的能力,都来自于技术工作中对英文的不得不进行的接触。因为英语太烂,也失去了一些不错的机会。怎么学英语,我是不懂的。至于背单词,大多数英语好的人,应该都去尝试过。我也尝试过,但一直不得其法。

现在,为了完成学业,我又准备拿起单词书,再次尝试一下。在开始做这件事时,我想了一下,到底是什么阻碍了我之前在背单词上的持续努力?

我不是没有目的的去学习一个东西,相反,学好了英语对我来说有很多积极的意义。在我内心里,是有学习的冲动的。所以,之前的不顺利,应该是方法上出了问题。

背单词是一种记忆活动,在记忆领域,人们有一个普遍的共识,就是人脑记忆新事物遵循着“艾宾浩斯记忆曲线”。我之前也采用了遵循这种规律的记忆复习方法,相信在这类方法的应用上,没有什么问题。

在还没有想清楚这个问题的时候,我还在找背单词的工具。幸运的是我找到了一个叫墨墨背单词的手机应用,帮助我弄清了这个问题。

人有一种既贪婪又懦弱的通性。人做一件事情,是由欲望驱使的,欲望总是使人在得到的同时还想得到更多。人的能力有限,无法驾驭所有,当欲望发展成贪婪,无法得到完全的满足时,人的懦弱的本性就开始产生作用 …

Continue reading »

如何正确编写苹果健康程序

苹果健康使用HealthKit接收数据的提交和读取,很多时候,我们从程序编写的角度,把两者看做同一个东西,下文简称HK。

HK在权限管理方面,有个很特(guai)别(yi)的地方,也是一个坑,即:读权限和写权限是完全分离的,存在可写但不可读的情况。由于权限控制权完全在用户手中,即使程序同时请求读写权限,也可能只是获得到写权限,而无读权限。这就造成一个问题:程序无法直接知道HK里已经存有哪些数据,如果不想办法规避这个坑,同一条数据有可能被重复写入HK。

为了避免重复写入数据,我们需要在APP端甚至云端的数据存储中,对每条需要同步到HK的数据,进行标记。这样,才能将HK的数据同步做到最佳。

我个人对HK本身的设计有个想法:HK应该自动把同一个数据源提交来的相同数据进行合并。如果几个数据,它们的起止时间,数值等,都是相同的,把它们看做同一个数据,是完全合理的。其实HK对于重复数据,是有一个融合算法的,并不会把数据进行累加。但是,用户点开“显示所有数据”时,看到有数据重复的情况,多多少少心里会有些膈应,会怪罪APP端。苹果对HK的数据隐私,看得格外重要,才设计出如此怪异的权限机制 …

Continue reading »