又开始学习新玩意:双拼输入法

多年来,我的个人兴趣呈发散状,遍布互联网的各个小众圈子。从电脑硬件到刀具弹弓、从桌游万智牌到开源硬件、从写代码到拆解机械表、从音响到尤克里里爵士鼓……兴趣爱好太多会带来一些问题,例如习惯了浅层学习、对深度学习有障碍,几乎所有爱好的领域都不算什么专家,都是票友水平。然而真的停不下来……
今天就新增加了一个小小的兴趣——双拼。
早就听说双拼能提高打字效率,一直没兴趣学,今天看了篇文章说学习时间很短,对输入速度提高很大,就用了一下午学习了一下。目前大概使用了两个小时,基本键位差不多记住了,打字速度还比较缓慢,但可以初步感受到双拼效率较全拼更高的原因了。
双拼的原理很简单,就是汉语拼音,其编码规则是把三个双声母 zh、ch、sh 和 35 个韵母安排到键盘的 26 个字母键位上,将所有汉字简化为『1个声母+1个韵母』,这样任何一个汉字都可以用最多2个按键来,而不必像全拼一样必须输入每个汉字的拼音的全部字符。双拼的缺点是,由于键位并不对应键盘字符,所以需要记忆键位(有点像五笔),那种『几个小时的学习让你秒杀全拼』的说法是不现实的。
双拼有多种布局,使用最广的自然码布局如下图。
自然码
举个例子,全拼输入『民主自由』的按键顺序是『min zhu zi you』,而在双拼中则是『mn vu zi yb』,从11次按键降低到8次;全拼输入『共产党』是『gong chan dang』,双拼则是『gs ij dh』,按键次数从12次降低到6次,输入效率竟提高了一倍。在我磕磕绊绊使用双拼的这两三个小时中,自己的输入速度已经在逐渐提高(虽然还不能达到最熟练的全拼的速度),相信随着练习时间的延长,会提高的越来越快。
可惜认识的人中没听说有人使用双拼输入法,否则可以交流下学习心得了。
(大半个月没更新博客,是自己懒惰了,最近代码也没写几行,非常内疚。)

完成《Flask Web Development》纪念

DSC_0129-01_meitu_1
(上图为计划中的下一本书《Web Scraping with Python》)
这本 Flask 教材抱着啃了一个月,终于搞定了。标题里之所以说是『完成』而不是『学完』,是因为实际上我确实只是完成——所有的代码都手打了一遍。但是到底学没学会,对自己持悲观态度。这本书内容比较集中,但是细节很多,我又是第一次接触 web 框架甚至是第一次接触 web 开发,读完全书、打完全部代码,实际上也只是盲人摸象的对 web 开发有了大致印象,远远不能算『学会』。(Ps.本书中有若干小错,例如代码文件的路径等等,但是辨识后不影响学习。官方提供的代码有一些教材内的功能没有完成。)
不过我对这种感觉也并不陌生。在完成《笨方法学 Python》的时候,也有类似的体验,书中内容都学了,但合上书后并不知道自己能实现什么,深深的『啥都不会做』感,只是后面接触了更多的 Python 知识后,这种不安才慢慢消散。有了那一次的经验以后,我就不再担心这种『无力感』。相信这种感觉在短时间内可能还会重现多次,但并不代表我真的『啥都不会做』。
回顾一下从去年11月开始至今的学习,自己的速度并不快。学习过的书有:

除了笨方法以外,其余都是英文。所以读这些技术书,对自己的英文阅读也有一些帮助。从《Automate》一书开始,我习惯将原书 PDF 下载后通过淘宝打印。并且多亏了朱老师的全程指导,才能在转行程序员的道路上坚持走下去。
目前写过的一些小工具:

  • 桌游《阿瓦隆》——基本使用 python 语法把规则写了一遍,当时完全不知道数据库,也不懂部署。
  • 基金净值统计——用爬虫抓取自己的基金现价,然后计算目前自己的持仓市值
  • 给基友用 pandas 做的数据处理脚本——这个代码最少,但是我最喜欢,因为解决了原本很麻烦的实际问题。
  • 其他的都是一些跟着教程做出来的东西。

在 Python 的各个用途中,最让我感到神奇的是爬虫和数据处理,也是我曾经实现过的两个脚本的功能。爬虫可以自己阅读、解析、抓取、统计网络上的各种数据、甚至可以跨过 JS 像真实用户一样去操作页面;而 pandas/numpy 这些工具居然可以以远超过我想象的速度处理惊人的数据。我希望自己能够在这两方面加深一下学习。
后面我为自己规划的学习路径是这样的:
1、完成实验楼的 Flask 轻博客项目(已完成)
2、开发一个自己的网站(还没想好需求)
3、完成《Web Scraping with Python》
将这三个任务完成,目测应该已经起码到达八月中旬了。届时找一份 junior developer 的工作应该问题不大。如果在工作之余仍有时间学习,会继续在爬虫和数据处理方面钻研,然后看看自己更喜欢哪方面。

Tagged : / / /

用 python + pandas 帮朋友处理数据

郭老师发小的老公,在一家 Apple 手机电池供应商工作。这天在朋友圈抱怨,用 Excel 处理几十万条数据,i7 处理器 5 分钟进度 1% 。我一下反应过来,这玩意用 Python 处理起来应该很快啊!
于是留言给他说,用excel跑最起码几个小时,让他把文件和处理要求发给我。
过了一会,邮箱收到。其实比较简单,文件 A 有40万条电池数据,文件 B 有30万条良品电池数据,要用 A 减掉 B,剩下来的就是不良电池的数据。数据处理的目标即得到汇总了不良电池数据的文件 C 。
这里有个小插曲:文件 A 有40多万行数据,我用 Mac 的 Number 打开,仅能显示 65535 条。看来 Numbers 处理稍大一点的数据就完全不行了。为了能顺利检视数据结果,又下载了 OpenOffice。
虽然之前没接触过 Python 的数据处理,但是学习过用 Python 的 openpyxl 处理 Excel 表格,所以我的第一反应就是用 xlrd 这种第三方库来处理 Excel 无法快速处理的文件。但是在学习 xlrd 的过程中,发现 xlrd 可以比较好的读取文件,却不能很好的写入文件,于是 又下载了对 Excel 写入支持较好的 xlwt 。
折腾了半天,虽然实现读写,但是对表格的处理还是不满意。随便搜一搜,发现 pandas 也可以做这个工作。于是转向 pandas 。
pandas 支持读取/写入 XLSX 和 CSV 格式,由于我用的是 Mac ,因此将文件先统一转换成了 CSV 。
首先用 pandas 读取 CSV 文件并转化为 DataFrame:

df = pd.read_csv(workbook, low_memory = False)

然后将文件 B 复制到文件 A 需要去重的列下方(这里可以用代码操作,但是我没有查操作函数,因为感觉手动复制粘贴也很方便)。再用 drop_duplicates 函数去掉重复的项(这里需要注意,drop_duplicates 有好几个参数,可以选择留下重复项中的第一项、最后一项、或者全删掉,视需求而定)。

new_df = df.drop_duplicates(subset = '要去重的列名称,必须英文', keep = False)

最后用 to_csv 函数保存成新的 CSV 文件即可。脚本一共 5 行代码,运算处理时间只有几秒钟。
为了减少朋友以后的工作量,我把脚本写好发给他,并将『文件名』等可自定义的部分留空了。有兴趣请点 这里 看我写的脚本。
这个 5 行代码脚本我大约写了三个小时,主要时间都在学习。在帮了朋友的忙时,也实现了我 Python 学习史的好几个第一次:
第一次现学现卖,当天下午就用陌生的知识完成任务。
第一次帮朋友解决了实际问题。
第一次完成了一件数据处理工作。
非常开心,非常值得纪念!

Tagged : / /

Poker 键位调整

DSC_0100_meitu_1
因为昨天上午刚刚收到 Poker 键盘,因此没来得及进行键位调整。昨天用了一下午加一晚上,感觉还有些地方比较别扭:

  • 『~』的输入较麻烦。不过昨天已经微调解决了,将键盘后面的2号开关打开,将『·~』换到右下角的Ctrl。
  • 代码过程中,经常会需要用上下左右的方位键,然后Poker将四个方位精简到了WSAD上,每次进行调整光标位置,都需要 Fn + WSAD,而 Fn 在键盘的右下方,所以需要两个手才能调整,比较麻烦。
  • 由于 Poker 使用了标准 Windows 键位,因此 Win 键与空格键之间有一个 Alt,这与 Mac 的键位不太一样,我想将 Win 键作为 Cmd 键使用,并将 Win 与 Alt 切换位置。

第一个问题比较容易解决,但是第二个问题有点麻烦,我尝试用 Poker 进行键位编程,想将左侧的 CapLock 键换成 Fn,但是搞了半天没成功,看说明书才发现 Fn 和 Pn 是不能进行编程的。看来只能通过软件修改键位映射。
小小研究了一下,发现也不用第三方的工具,仅依靠 Poker 的背后开关加上 Mac 自带的键盘修饰键功能即可实现 Cap 与 Fn 的交换。具体方法如下:

  1. 将开关 1 和 3 都拨到 ON 的位置,使 Caps 变成 Fn,左 Win 变成 Caps,右 Fn不变
  2. 打开 Mac 的系统偏好设置 – 键盘 – 修饰键,选择 Poker
  3. 更改修饰键:
    Caps Lock -> Option
    Control -> Control
    Option -> Command
    Command -> Option
  4. 最后用拔键器,将 win 和 alt 两个按键切换位置,就可以完美实现 Mac 的键位布局。

另外有个小技巧,如果需要连续大量使用方向键,一直 Cap + WSAD 也不是一个好方法。此时可以 Fn + 空格,将 WSAD 切换为方向键,然后再 Fn + 空格 又可以切换回来。
总的来说,小键盘的使用肯定不如大键盘方便,毕竟 60% 的空间却承载了 100% 的功能。但是通过一些定制,可以在一定程度上缓解小键盘局促的面积带来的琐碎操作。为了随时随地能够使用机械键盘,这点牺牲是值得的,只是需要几天的适应时间。另外可能还有更好的键位方案,期待未来能将小键盘改造的非常贴合自己的需求。

Tagged : /

新键盘测评:Poker升级版白色红轴,爽爽哒

上回说到,旧键盘因为苹果的安全策略升级而无法在Mac上正常使用,我急需一个新键盘来替补。于是昨天下单,今天上午送货上门,389元入手iKBC在2016年4月11日新发布的Poker新品——Poker升级版。
1
Poker升级版其实是以Poker2为蓝本,修正了Poker2的USB口松动等小问题,同时将升级了芯片(我觉得没个鸟用,反正只有一层编程层)。在C87/C104发布之后,Poker系列的更新是出乎意料的,相当于iKBC将全部产品线都进行了升级。原来的Poker/Poker2已经从官网删除,Poker系列仅剩Poker(即升级版)和Poker3。
我入手的是红轴版本,包装盒上用扑克牌表示轴的类型,红桃即红轴。
2
开箱后内容比较精简,键盘纸箱+线缆+赠送的6枚 RGB 键帽+一个拔键器+说明书。
3
白色键盘若隐若现,看得我非常动心。
4
6枚 RGB 键帽非常美貌,在各式开箱文中已经见识过了,白色键盘配上饱满鲜艳的亮色,绝对是无法抗拒的漂亮,我估计果粉们都会喜欢这样的配色吧。
6
虽然已经有了心理准备,且我上一把键盘是80%的小键盘,但刚把 Poker 掏出来的时候仍能被其小体积震到。下图是键盘全貌,非常小巧。我与 Victorinox 的猎人军刀(91mm)做对比,可知这键盘尺寸有多袖珍。
5
一些测评提到,Poker升级版的超低价格牺牲了做工,导致键帽边缘有毛刺。我看了一下,确实有一些毛刺,但是恐怕对 99% 的用户来说都是无所谓的,因为如果不仔细查找,你是完全不会注意到这些细节的。所以针对 399 元的价位,这个键盘绝对是超值的。
7
背部的四个开关是调整键位用的,其中 4 号开关是对编程层写保护,我因为并不需要进行编程,因此到手就打开了写保护。另外因为在命令行中会经常使用『~』,所以打开了 2 号开关、将左上角的『`~』调整为右下的 Control 键(如果不打开这个,输入『~』会很极麻烦—— Shift + Fn + Esc……)。
8
下图为左 Shift 的卫星轴。区别于 Noppoo Choc Mini84的平衡杆,Poker 的大键全部使用卫星轴。手感上,平衡杆更加干脆,也更加松动;而卫星轴略显肉,却有更好的反馈力度。说实话,如果选择青轴键盘,可能还是平衡杆更加爽快,但红轴则搭配更加温柔的卫星轴比较好。
9
测试了一下手感之后,我马上更换上了 RGB 键帽。据郭老师反馈,加了彩色键帽之后,Poker 的美貌可爱异常出众。顺便一提,Poker 已经为改灯留好了空间、无需飞线(从 Poker2 开始就这样)。但是我个人对灯毫无感觉,跑马灯容易把键盘整体搞的奇 Low 无比,浓浓的杀马特气息。
11
在 Mac 上折腾了一下,完美适配,多媒体按键也无压力。简单看了一下别人对键盘的编程方案,似乎对我没什么用,于是不再更改映射,可以直接上手用了。Poker 还支持固件升级,现在还没搞懂咋弄,这两天研究一下。
12
午饭后,把写字的家伙们带到咖啡馆,开始一下午的工作。顺便再推荐一下我这几个月的工作场地——『格啡咖啡 Gaffe Pro』,我一直呆在二楼,偶尔生意好会比较人多,但大多数时候还是很适合一个人默默的写代码的。下图中的设备:2013年的 Macbook Pro,富勒 X100 游戏鼠标,比目鱼笔记本支架,卡西欧 GWM-5610 电波表,iKBC Poker 升级版樱桃红轴机械键盘。
13
目前在我的几个小时的 Poker 使用时间过程中,还没有产生任何不好的体验。以我目前的上手经验,这款键盘非常值得买,如果代码或写字较多,可以考虑像我一样买红轴,打字舒坦,手指放松,同时可以搭配一块木头腕托(我已下订单,在路上),据说对提升手感有奇效。
另外切记——在公共场合(咖啡馆/办公室)请勿使用青轴键盘。不要问我怎么知道的。

Tagged : / /

Noppoo第三方驱动无法支持Mac 10.11(El Capitan)

半年前,我写了一篇博客,讲解怎样解决 Noppoo 机械键盘不适配Mac的问题。
那么现在问题来了,在 OS X 升级到 10.11(El Capitan) 后,OS X 中负责系统内核扩展的KEXT文件也进行了升级,适配规则更加严格,原来的第三方驱动 iousbhiddriver 已经失效,iousbhiddriver-descriptor-override 的原作者 Andrew Childs 在其 Github 仓库的 Issue 中表示,他早在2015年10月已经向苹果提交KEXT签名认证申请,但是对方不鸟他。目前唯一可行的方法是关掉 SIP,但这有可能导致严重的安全问题。
于是在可见的未来,这个项目应该是要死掉了,Noppoo用户只能使用硬件方法来解决适配问题。显然大多数人并不喜欢这种方式的。
作为一个已经有大约6年历史的老型号,Noppoo Choc Mini84 系列键盘应该从Mac使用者的生活中退休了。于是我也考虑换一个新键盘,完美选项当然是 Filco Minila 蓝牙键盘,但是太贵了,可以退而求其次的选择 Poker。在停产断货了几个月后,我突然发现 Poker2 换了个马甲、变身『Poker升级版』在淘宝大量上架了,399 的价格可以一战!小键盘还是我的爱阿!

Tagged : /

[翻译]《皇舆争霸》卡牌分析之『地窖』

这是我翻译的第一篇《皇舆争霸》的卡牌分析文章,原文出自DominionStrategy.com
『地窖Cellar』:

  • +1个行动
  •  从手中弃掉任意数量的牌,并抽等量的牌

Cellar
和大多数2费的行动卡一样,『地窖』的用法很丰富。在游戏前期,『地窖』可以加速牌库循环,以便能尽快使用到刚刚买入的卡牌。在游戏中期,可以调整手牌、形成更有效的牌组。在游戏后期,则可以用来筛掉手牌中无用的分数牌、凑够更多的金钱来获取更高分数、进而结束整场游戏。
『地窖』的实战效果取决于你的牌库规模。在牌库较大时,使用『地窖』效果最好,例如『实验室』/『炼金术师』组合、或者 +行动/+卡牌 的牌组。在牌库较小时(例如在『义勇军』/『打手』等卡牌出场较多的时候),『地窖』的作用不再是增强手牌,而是更多的体现在维持手牌质量上。
这里需要注意的是,『地窖』并不强制要求弃掉卡牌(即可以仅触发『+1行动』)。这样能够有效降低『小贩』的费用,或者触发『阴谋家』的Combo效果。
『地窖』的最强大能力之一,是可以控制洗牌。假设你抽到4张分数牌和1张『地窖』,且牌库已经没有余牌。此时与其将4张分数牌全部弃置、重新洗牌再抽取新牌,不如仅弃置1张分数牌——此时,玩家触发洗牌,并将手中余下的3张分数牌放入弃牌堆。这样,就在洗牌之前早早将手中的多张分数牌移出牌堆,大大提高了后面回合的抽牌质量(当然,成本就是花费掉了一个回合)。
玩家在抽到2张或2张以上的『地窖』时经常会面临一个选择——要不要使用『地窖』来弃置另一张『地窖』?这取决于你的牌库构成、以及你想一共弃置几张牌。用『地窖』弃置另一张『地窖』能让玩家获得一张新手牌,但是保留这张『地窖』却给了玩家第二次换牌的可能性。一般来说,如果要换2张以上的牌,你应该保留另一张『地窖』;如果只换一张牌,那么就直接把这张多余的『地窖』弃置吧。
如果你不幸被对手使用了『女巫』或者『骗子』,也可以用『地窖』来拯救你的牌库。放弃你手中的一张牌、从而快速循环掉那些坏牌,是非常值得的。
『地窖』最大的缺点是,它不如『仓库』好用。『仓库』可以先抽3张牌,然后再从所有手牌中弃置3张牌。只有在你想一口气要换掉5张或5张以上卡牌时,『地窖』才会发挥更好的作用。
搭配:

  • 能扩充牌库的卡牌:例如『实验室』/『炼金术师』,『大篷车』/『码头』,『战术家』。
  • $5/$2 开局时,『地窖』让你更快的循环整个牌库并再次使用5费的行动卡。
  • 『图书馆』,清除不想要的行动卡而非钱币卡或分数卡。当玩家使用『图书馆』却只抽到分数卡的时候,『地窖』可以出场啦。
  • 诅咒类攻击卡。

冲突:

  • 密度较高的牌组,例如市场类牌组,较低手牌量会对玩家造成阻碍。
  • 对手打出的降低手牌量的攻击卡(『义勇军』,『打手』,『拷打者』,『爪牙』,『幽灵船』)
  • 『仓库』

卡牌中英文名称,及出处:
『地窖Cellar』——《皇舆争霸Dominion》基础
『打手Goons』——《皇舆争霸:繁荣Dominion: Prosperity》)
『小贩Peddler』——《皇舆争霸:繁荣Dominion: Prosperity》
『阴谋家Conspirator』——《皇舆争霸:暗潮汹涌Dominion: Intrigue》
『女巫Witch』——《皇舆争霸Dominion》基础
『骗子Mountebank』——《皇舆争霸:繁荣Dominion: Prosperity》
『炼金术师Alchemist』——《皇舆争霸:炼金术师Dominion: Alchemy》
『大篷车Caravan』——《皇舆争霸:海国图志Dominion: Seaside》
『码头Wharf』——《皇舆争霸:海国图志Dominion: Seaside》
『战术家Tactician』——《皇舆争霸:海国图志Dominion: Seaside》
『仓库Warehouse』——《皇舆争霸:海国图志Dominion: Seaside》
『拷打者Torturer』——《皇舆争霸:暗潮汹涌Dominion: Intrigue》
『爪牙Minion』——《皇舆争霸:暗潮汹涌Dominion: Intrigue》
『幽灵船Ghost Ship』——《皇舆争霸:海国图志Dominion: Seaside》

Tagged : / / /

修正了一个博客插件的语法问题

更新:官方已经在今晚火速更新,虽然我觉得用处不大了,因为这句代码会直接导致网站无法登陆,对于没有技术能力的博主来说,除了重装wordpress并导入备份以外,基本无法恢复。鉴于该插件的广泛应用,这次算是非常严重的技术错误。
1.pic
修改内容只有一行代码,源代码的第703行。修改方法也与朱老师教导的完全相同。

我的博客一直托管在固定的服务器上,这些年没有变动,对我来说很方便,定期付费即可。但是有一个问题,就是php版本较为落后,一旦使用了不向前兼容的新版本语法的代码后,就会出错。
这不,今天就出了一回事。
我照常打开博客,删除了一些垃圾留言(照常没有任何有效留言,我博客上一条真人评论已经是3个月之前的事了),检视了一遍趋近于零的流量,更新了一下对Google爬虫友好的插件『XML Sitemap & Google News feeds』。然后就宕机了。博客无法打开,显示了一串错误信息。

Parse error: syntax error, unexpected ‘[‘ in /home/aliengu/public_html/wp-content/plugins/xml-sitemap-feed/includes/class-xmlsitemapfeed.php on line703

出现了电脑无法读懂的方括号——显然是代码问题,于是登陆几百年不上一次的cPanel,找到文件,下载下来,看了一下703行到底是什么鬼。

$allowed = ['zh-cn','zh-tw'];

问题就出在这句代码上。然而我不懂php啊,看上去似乎是非常正常一个语句,查了半天php的方括号用法,也没什么头绪。最终还是去问了朱老师,朱老师看了下说,修改成以下语句试试:

$allowed = array('zh-cn','zh-tw');

于是改代码,保存文件,上传文件。一系列步骤之后,博客神奇恢复正常。
对此,朱老师做出了经典的评论:

看那么舒服的语法一点也不像php 哈哈

这个问题就这样解决了。各位朋友,有空可以升级以下php,或者研究一下php新老版本之间的语法差别,关键时刻能救命噢!

Tagged : /

解决设置环境变量时的错误 ZSH: BAD ASSIGNMENT

在学些《 Flask Web Development 》Chapter 6 时,因为不可将敏感信息(用户名/密码) 写入代码,因此需要在开发环境中手动设置环境变量,让程序能够从中读取敏感信息。
通用的方法是使用 export ,例如:

$ export MAIL_PASSWORD = XXXXXXXX

然而在命令行中执行这条命令时,会出现错误提示:

zsh: bad assignment

研究了半天没搞明白是哪里出错,Google 了一下才明白,原来是代码编写习惯惹的祸——而我习惯性的在等号前后加入便于阅读的空格,这在 export 语句看来是一个语法错误。删掉空格,问题解决。
所以你看,好的代码习惯偶尔也会带来麻烦!

Tagged :

提高一下写博客频率

一直以来,我写博客其实比较懒惰,因为心里希望每篇文章都有比较强的核心。
这种想法当然没错,但是带来的后果就是写博客过于慎重,文章量偏低,而且也并没有看到文章质量的显著提高。从我2009年3月7日第一篇文章发布开始,至今7年时间仅有274篇文章发布,平均下来,每个月只有3篇博文。
另一方面,博客更新的频率也是影响读者量的一个因子。一般来说,更新频繁的博客,更容易吸引新的读者。
因此今天决定以后开始每周更新三次,更新日期为每周二、四、六。内容不固定,有可能只是生活中的见闻,有可能是技术文章,也可能是时政评论。如果某天错过了,请一定留言骂我一通,真心感谢!