也说 Mac 的不好

年后在新团队弄到 MacBook Pro w/ retina 一台, 开始了从 Windows 阵营投奔 OS X 的路程, 到现在用了也有三个多月了, 也说下 Mac (包括 OS X, rMBP 等) 的一些奇葩问题和解决方案

字体渲染

我没用 Mac 前就老看到不同的地方有各种果粉吹 Mac 下的字体渲染, 比如 Windows 的 TureType 会导致缺笔画啦, 微软雅黑其实是破坏了字的逻辑结构啦, 但是曾经借到一台 MacBook Pro 怎么看这字都很糊啊, 换字体也一样, 难道是睡眠不足导致视线模糊?

今年拿到 retina 屏的新本, 顿时觉得世界美好了好多, 插上外接显示器, 果然字又糊的一塌糊涂. 这时才明白, 苹果的字形确实如果粉说的是尊重字的本身, 但是这只有普通分辨率下的大号字体或高分屏下才能看的出来, 普分下字糊成那样果粉们你们都眼瞎了么

Windows 那套渲染技术和微软雅黑等字体是为液晶显示器专门优化过的, 保证在普通分辨率下也能做到笔画清楚, 不知道果粉们的优越感是不是建立在那个年代微软还没出雅黑以及 Mac 渲染技术在 CRT 显示器下可能确实更好的基础上. 没接过 CRT 显示器也没再回到以前的 Windows 系统, 反正现在用外接的 U2312 或 U2412, 从 Mac 切到 Win 下, 都觉得字体锐利清晰了好多

解决办法: 无解, 只能换 4K 显示器看看在能到 retina 级别的分辨率下的表现吧, 不过这样的话 4K 显示器也还是只能放 2K 显示器能容纳的内容了

MBP 笔记本键盘缺物理按键

这里指的是 delete (非 backspace), PageUp/Down, Home/End, PrintScreen 等, 用组合键可以实现但是真的很麻烦. 现在越来越多的笔记本都学这个, 真是好的不学坏的学挺快

解决办法: 用各种组合按键, 或外接键盘来实现

  • Fn+Backspace: Delete (Mac 键盘上 Backspace 处印的是 delete, 但逻辑是 Bs)
  • Fn+Up: PageUp
  • Fn+Down: PageDown
  • Fn+Left: Home
  • Fn+Right: End
  • Cmd+Shift+3: 截全屏并保存截图文件到桌面, 如果有多个显示器则每个显示器一张图
  • Cmd+Shift+4: 截屏幕上选定区域并保存截图文件到桌面

关于截图, 如果同时按下 Ctrl 键, 则不保存到桌面只保存到剪贴板, 可以在其他地方粘出来. 不过实测 Cmd+Ctrl+Shift+3 保存到剪贴板的只有笔记本上的主屏, 外接屏没有, Windows 下 PrintScreen 多屏的话会默认成拼接的大图

另外 Windows 有 Alt+PrintScreen 截当前活动窗口图的快捷键, Mac 下我没找到原生的快捷键, 用 Cmd+Shift+4 的方式还要自己小心拖动, 而且一松手就截出去了, 没有调整空间. 所以不是截全屏的话我一般还是用 QQ 等自带的截图工具, 会识别活动窗口自动适应大小, 选完框还能拖动调整大小, 能加框加箭头等标注

奇怪的 Home/End 键逻辑

外接键盘下 Home/End 键逻辑和 PC 的不一样, 我想的是移动到行首或行尾, Mac 默认的逻辑是移动到可编辑区域的开头和结尾 (比如一个大文本框, 是移动到最开始和最末尾, 而非当前行的开始和结尾). 一般用到这个是我写东西的时候要从当前光标选到行首或行尾, 就算用触摸板连续单击选词或整行这个效果很赞, 但依然不是我要的效果

解决方法: 自己重新做键映射, 我参考的 http://mwholt.blogspot.com/2012/09/fix-home-and-end-keys-on-mac-os-x.html 这篇文章, 摘录主要部分如下

编辑 ~/Library/KeyBindings/DefaultKeyBinding.dict 这个文件 (如果没有就新建一个, 如果目录都没有就连目录也新建), 添加如下代码 (我只选了这几个我要的), 保存后重启

{
    /* Remap Home / End to be correct :-) */
    "\UF729"  = "moveToBeginningOfLine:";                   /* Home         */
    "\UF72B"  = "moveToEndOfLine:";                         /* End          */
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";       /* Shift + End  */
}

过于霸道的全局快捷键

比如 F11, F12 这种正常码农多半会配成 Vim 或 Screen/Tmux 快捷键的功能键, 居然都有系统默认全局快捷键映射上去, 一开始还以为我在 Mac 下配置文件工作不正常, 怎么就识别不出来 F11 和 F12 呢

解决办法: 改掉就是了. 在 系统偏好设置键盘 里, 把 快捷键 标签页里的所有设置都浏览一遍, 觉得有用但是不会的去学一下, 觉得有用但是想改按键的自己改下 (比如可以把截全屏保存到剪贴板的快捷键改成 PrintScreen, 也就是 F13), 觉得没用且会影响自己的关掉 (比如 F11 显示桌面, F12 显示 Dashboard), 其他没用的留着也行 (比如 F14/F15 调屏幕亮度, 实际这两个键是 PC 键盘上的 ScrollLock 和 PauseBreak)

缺失的全局快捷键

习惯了 Win+L 锁屏结果在 Mac 上没找到

从 Win7 开始习惯了按 Win+Left/Right 来对窗口分屏, 结果 Mac 也没有相关实现, 搜的时候还看到知乎上有脑残果粉说为什么要分屏啊, 苹果使用的多桌面模式是多么优雅一定是你不会用而且要真的好苹果为什么这么多年还不跟进呢, 我去你二大爷的知乎脑残果粉, 你到底用了多久的 Mac 啊, 你试过外接一个超过 1440 分辨率宽的显示器么, 你试过码农至少要三个窗口才能好好干活么 (一个放搜索结果或参考资料用于抄, 一个是自己写的, 还有一个是运行和看结果的), 这样把外接显示器左右对半各放一个窗口连抄带写, 笔记本原生屏幕放运行环境和查看结果的浏览器才最好吧

找类似 Win+Left/Right 把窗口调整成占据屏幕一半的第三方软件, 多倒是很多, 不过要么收费 (我都没去找破解尝试), 要么在有外接显示器的情况下工作不正常

解决办法: 锁屏的快捷键上一篇博文 Mac 锁屏的各种方法已经搞定了, 一句话解决就是 Ctrl+Shift+Power

分屏的软件最后通过 Spectacle 很好达到我要的效果, 下载地址在 http://spectacleapp.com/, 作者官方开源在 https://github.com/eczarny/spectacle

软件清理

OS X 那种把单个应用都打包到一个 .app 里的设定在安装和卸载时确实很方便, 但也有一些奇葩残留, 比如右键菜单里的打开方式经常会有重复的, 比如删除个 Office 太麻烦了以至于我彻底断了去装个盗版的念头 (微软官方的删除 Office 流程: http://support.microsoft.com/kb/2398768/zh-cn)

解决办法: 能不乱装的就别乱装吧, Mac 上我还不想用类似 360 或腾讯电脑管家之类的东西去清理顺带被这些流氓不知道在电脑上干了什么. 至于右键菜单里打开方式有重复, 隔断时间清理一下, 参考自 http://www.zhihu.com/question/20599306, 摘录如下

终端下执行如下命令, 然后重启 Finder (Ctrl+Opt 点 Finder 图标)

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local\ -domain system -domain user

漏电

新 MBP 拿回来时手放笔记本上各种酥麻, 尤其是靠近电源接口那个地方, 当时心里就骂都漏成这样了这接口还好意思叫 MagSafe?

试过把电源适配器插头换成延长线的三脚插头, 无效, 试过在不同的地方用避免电压波动过大或接地不好的情况, 无效. 搜解决方案, 答案除了前面两个我试过的方法, 就是劝还是默默忍受好了, 当然也不排除我这样的果黑反讽 “这是苹果为了让用户保持清醒故意弄的” 或 “这么高大上的按摩你们居然还嫌弃”

解决办法: 无解. 不过我用了几个月后好像几乎没漏电了, 还是一样的在家和在办公室用, 不知道跟我把线卷来卷去卷多了有关

一些个人推荐的好东西

X-mirage

将 Mac 当作一个 AirPlay 的 Server, 有时候想把手机上的内容播放到大屏幕上这货就有用了 (最近看舌尖上的中国我就是先在手机爱奇艺上离线, 然后投到显示器上看, 一是没广告, 二是屏幕大看着才爽吧), 或者要给人演示手机上的功能或录像, 在手机上操作太蛋疼, 还是投到大显示器或投影仪上看才好

搜类似解决方案之前很多建议都是 AirServer, 但是这货要钱, 我又想矜持点不用盗版, 试过免费实现又各种不靠谱, 然后才发现 X-mirage 这货也挺好用, 官网是 http://www.x-mirage.com/index.html. 在 stacksocial 上偶尔有限免, 我是上次限免直接免费弄到的, 最近又有, 还有三天结束, 欲购从速: https://stacksocial.com/sales/the-mac-freebie-bundle-3-0

Alfred

据说一定要用带 Powerpack 的 2.x 才爽, 不过自己找破解试了下对 Powerpack 好像也没太大需求, 就还是用的免费版. 此等神器的各种教程网上一搜一大把, 我就不班门弄斧了

看到不少地方有组织几个人一起团 family license 省点钱, 但实际上非 family 成员使用 family license 还是违反协议的, 只是大家觉得自己付钱了相对心安理得一点吧

Chrome 的豆瓣电台应用

懒得再开个浏览器窗口, 用的也很方便, 安装地址 https://chrome.google.com/webstore/detail/%E8%B1%86%E7%93%A3%E7%94%B5%E5%8F%B0/pildlfoeifnhlckepgfiphlnaphcfhfh

Mac 锁屏的各种方法

2018-06 更新:从 macOS 10.13.x 开始,苹果官方提供了 Ctrl+Cmd+Q 的快速锁屏快捷键,可以通过点菜单栏左上角苹果小按钮,在下拉菜单关机下面看到


之前用 Windows, 习惯了 Win+L 的快捷键锁屏, 暂时离开电脑时可以很方便的锁定机器避免被人恶搞, 最主要还是一个安全的习惯. 但是换 MacBook 后遇到的大问题之一就是没找到锁屏快捷键… Cmd+L 啥都不是, 尝试过的方法包括

合上盖子

如同 Windows 的笔记本, 合上盖子实际上并不是锁定 (Lock screen), 而是进入睡眠 (Sleep), 这样会断网, 直接后果就是下载会断, 远程连接也会断掉, 如果有持续跑的程序也会挂掉. 我在 Windows 下会把合上盖子的默认操作换成什么都不做, 就算是去开会或临时把本带到别的地方, 一合盖子就走到了打开还是之前的状态, 如果需要锁着电脑跑程序或下载, 就按 Win+L 再合盖, 方便快捷

合盖子的另一个问题是, 如果开机状态下接了外接显示器, 合上盖子只是把笔记本自己的屏幕输出给关掉, 其他什么都没影响, 完全没起到锁屏的作用, 不管是 Mac 还是 Win 都一样

短按电源键 (Power)

去搜索 OS X 怎么锁屏, 很多地方会提到短按电源键, 可惜这个也是睡眠, 问题同上

设置触发角进入屏保

不少教程也是教的这个, 大致流程如下

  1. 进入 系统偏好设置
  2. 安全性与隐私 设定页, 通用 标签卡里将 进入睡眠或开始屏幕保护程序后要求输入密码 的时间改成 立即
  3. 桌面与屏幕保护程序 设定页, 屏幕保护程序 标签卡右下角设定 触发角, 行为选 将显示器置入睡眠状态

注:

  • 第 2 步也可以在 Mission Control 设定页的左下角找到 触发角 的设置
  • 第 3 步的触发行为也可以选 启动屏幕保护程序, 但是这样就不是我想要的完全黑屏那种锁法

设定好后, 把鼠标移动到屏幕上对应的角落, 停留一下就会触发设定的行为. 不过触发角的误触发概率远高于正常期望行为, 超级坑. 如果设定触发行为时按住 Cmd, 让触发行为变成鼠标停留角落且按 Cmd 才起作用, 这样似乎又有点反应迟钝. 反正我是试了下就放弃了触发角的方式

使用钥匙串

这个方法的出场率一点也不低于触发角

钥匙串访问 的偏好设置中, 通用 标签卡里将 在菜单栏中显示钥匙串状态, 然后在菜单栏就可以看到一把锁的图标, 点击那个锁就有 锁定屏幕 的选项

这个方式相比较触发角确实误操作率下降了, 但是要用鼠标移动到一个特定位置再点击, 复杂度又上去了, 不爽

用脚本/命令

在各种搜索 “lock mac” 的过程中居然还找到可以用脚本锁屏, 大体参见 http://apple.stackexchange.com/questions/73995/how-do-i-lock-the-screen-using-a-keyboard-shortcut-on-os-x-mountain-lion-with-a 里的说法, 我试过脚本可以运行, 但是触发出来是 Windows 下快速切换用户而不是锁屏的效果, 即屏幕还有显示且是选择登陆用户的界面. 不过怎么触发脚本运行太麻烦了, 没继续尝试

http://apple.stackexchange.com/questions/111485/how-to-lock-screen-on-macbook-air 里还提到了另一个在 OS X 10.9 下的 pmset displaysleepnow 命令, 亲测可用且是锁屏, 不过还是触发麻烦的问题没法解决

用 Alfred

Alfred 这个神器默认带了 Lock 这个系统指令, 唤起 Alfred 后输 Lock 就可以在 PC 键盘上也唤起锁屏了, 可惜这个一是操作略麻烦, 二是实际效果还是快速切换用户而不是锁屏

如果有土豪买了 Alfred 的 Powerpack, 可以试试看在 Powerpack 里设置用快捷键触发上面的脚本或命令

真正的快捷键

http://apple.stackexchange.com/questions/28164/keyboard-shortcut-to-sleep-a-mac 这个帖里比较完整的提到了各种快捷键 (老键盘上把 Power 换成 Eject 键):

  • Ctrl+Shift+Power: 关闭屏幕
  • Cmd+Opt+Power: 睡眠 (sleep)
  • Cmd+Ctrl+Power: 重启 (restart)
  • Cmd+Ctrl+Opt+Power: 关机 (shutdown)

通过 Ctrl+Shift+Power 终于搞定了怎么键盘快速锁屏, 不过三个键还是不如 Windows 下两个键来的方便, 而且 Mac 键盘没有右 Ctrl, 不像 Windows 就算键盘没有右 Win 键, 手掌张开拇指和小指一个按左 Win 一个按 L, 左右手也都不会很麻烦

映射键

如果用外接键盘, 一般是没有 Power 键的 PC 键盘布局, 不过没关系, 我们有一个在差不多位置但是几乎没人用的 Pause/Break 键, 用 KeyRemap4MacBook (下载地址: https://pqrs.org/macosx/keyremap4macbook/) 里搜 “Pause/Break”, 把这个映射成 Power 就可以了

为了给菜单栏 (menu bar, 也有叫状态栏 status bar 的) 省点空间, 在设置的 MenuBar 选项页把 Show icon in menu bar 关掉就行, 以后想用了再通过各种唤起应用的方式把 KeyRemap4MacBook 找出来就是

客服趣事

团队里有一个客服妹子这周回学校去了, 我们技术团队每天出一个人去代班, 加上周末技术轮值, 还是能接触到不少客户, 其中奇葩欢乐也很多, 摘取一点大家娱乐下

0x00. 有个客户一上来就问 “阿紫吗”, 脑子里第一反应是这货看天龙八部走火入魔了吧, 然后在想下应该是想打 “在吗” 打岔了… azima, zaima 傻傻分不清楚

0x01. 有个天猫店价格标签显示有问题, 我们这边活动已经结束了但淘宝还显示, 网络上讲不清楚非要打电话过来问, 电话里再 blahblah 跟她解释半天, 挂了后对面在旺旺上默默的来了一句 “你明明是个帅哥, 为什么要叫美艳艳”, 我也只能默默的回了一句 “客服妹子今天有事没在, 我是技术临时来代班的…”, 然后对面又是默默的一句点点点

0x02. 插句话, 到底一开始是怎么想的客服号都叫 “美xx” 了呢… 连带着做客服的时候只能顺着这个名字去装傻卖萌, 客户们知道对面不是萌妹而是抠脚大汉时会不会心都碎了

0x03. 淘宝卖家大多很傻很天真, 经常出现你根本看不明白他想要什么的情况, 跟他解释个东西半天也不明白 (也可能聪明的都不用找客服自己能搞定, 来找客服的要么是疑难杂症要么智商堪忧, 所以这时候只能装傻卖萌, 不然完全说不下去). 有时候终于达成一致了对面突然来一句 “我不信, 你截图给我看!”, 这种… 都是能直接上淘宝刷一下就能看到的, 何苦呢. 更狠的是有的商品显示了折扣价, 对面还不放心, “你拍个给我看”, 都把提交订单的页面截图给人看了后还有不信的, “你拍下来, 我看下实际订单是不是”, 这时候最简单的还是老老实实给人拍一个… 为了自身安全, 还是把地址和收货人随便乱写个的好

0x04. 鸟多了, 什么林子都会有, 比如昨天碰到一个疑似 Win2000 用户, 说他在浏览器里提交某个页面失败, 提示时间格式不对, 看了下截图那个窗口的样式, 记得从 WinXP 开始就不长那样了, 经典模式也不长那样, 而且还是个 IE, 很怀疑这 IE 有没有到 6, 只能弱弱的跟对方说, “看看是不是您浏览器太老了, 换个试试看?”, 过了会回话说果然换了个就好了, 然后对面还嘀咕 “浏览器怎么会老呢?”… 怎么会老呢… 我也想知道啊, 话说大哥你这什么电脑装的 Win2000 开淘宝页面真的没问题么? 装个旺旺或者千牛能跑的动么? 怎么接客户怎么接单啊

0x05. 淘宝有很多奇怪的商品类目, 比如生鲜, 比如机票旅游, 比如虚拟物品 (话费点卡什么的), 比如成人用品 (各种羞羞的东西)… 成人用品类目因为比较敏感, 所有的图都要淘宝小二审核过才能贴出来, 然后我们给人做的活动就插不进去内容了, 卖家就找过来说 “哎你们这个怎么做了活动页面不显示呢”, 我们为了给人分析原因都是 “您发个宝贝链接我打开看下”, 然后… 如果你来我们办公室参观, 看到屏幕上都是羞羞的东西, 不要咂舌这伙人怎么这么没节操在办公室看这个, 那真的是在给客户分析解决问题…

0x06. 淘宝的系统和规则各种黑盒, 跟某朝的法律文书有异曲同工之妙, 你说他没说, 好像某一条某一款提了, 你说他说了, 规定里都是各种含糊其辞根本没法操作. 于是各种规则没说清楚的灰色地带, 大批卖家每天闲的蛋疼各种钻研看能不能发明黑科技, 有一次碰到一个爱钻研而且有真才实学的跟我分析他们一个竞争对手的商品, 说 “你看, 他这个宝贝外面显示是价格 A, 然后你点进去一看, 没有了! 只有 B 和 C, 你说他这是怎么做到的, 我们研究了快一个星期了都没搞明白”, 虽然最后也没研究清楚这个黑科技怎么实现的, 估计多半是淘宝的系统 bug, 数据更新不一致啥的, 但是那天跟那个卖家讨论的时候我感觉自己就像对口相声里的捧哏, “一打开, 你猜怎么着?” “怎么呢?” “没有了!”… 大家脑补下画面…

0x07. 做客服还有碰到对面挖角的, 说 “我们这是个另外新开的店, 缺客服, 待遇很好的, 你来不?”, 某次刚好赶上壕值班, 加上那会儿人不多, 壕就各种顺杆上爬调戏对面, “呀你们是海南的, 那边离家好远的呢, 你们那边热不热”, 对面也乐呵呵的各种热情, “是呀是呀, 这边很多好吃的哦, 离家远没事啦我们每年报销回家机票, 现在才三月份就三十多度了你说热不热”, 等第二天客服妹子正常上班结果这个号, 那人还念念不忘的找过来说昨天考虑的怎么样了要不要来, 顺带调戏下, 弄的客服妹子不知道状况莫名其妙, 看聊天记录才明白怎么回事

0x08. 另一个对面系统奇葩的事… 字库缺字, 不知道是他电脑哪里设置有问题, 反正发过去一句话, 对面看到的字总有那么一小半都是方框, 然后我没办法, 每发一句还要截个图, 对方还不依不饶 “你字显示不出来啊, 你不要用繁体换简体好不好”, 简你妹夫啊这都不是简体那什么是简体, 差点就想说少上点少儿不宜的网站, 中毒了字显示不全事小, 万一店里东西被人黑了那就亏大了

0x09. 淘宝上确实很多妈妈卖家, 因为我们就经常跟人聊着聊着对面突然来一句 “等会再说吧, 娃快放学了我先去做饭”, 要不就是 “过会哈, 儿子醒了我去喂下奶”, 这种完全接不上话茬啊… 咱们客服总不能说是啊是啊我也做饭去, 更不可能说你家娃多大了是母乳喂的不现在奶粉都好不放心呢

炒股半年

本文记录笨狗过去半年跟进美股的经历

很久以前就开始关注美股市场, 主要是所在的互联网公司都在美帝上市 (NASDAQ 居多), 股价也反映着市场对公司的前景态度. 后来去 RENN 后公司给了点期权, 更加有动力去关注下美股市场, 不过期权在可行权的时间内多数时间是负值, 所以也没投入去看. 倒是 QIHU 的股价真的一直在往上走, 不喜欢这个公司可以, 但是没必要跟钱过不去, 就想能不能去分点羹

综合各种原因, 在 2013.9 开始去办招行香港一卡通, 当时还是阿里员工, 办理时似乎有个啥优惠 (免一年年费?). 具体过程在招行的网点找相关表格, 提供资料弄就可以了, 印象中只需要提供身份证, 有效期够的港澳通行证或护照, 居住证明

从这开始发现有个居住证明太重要了, 非天朝地区都是认为你有固定居住地点才算靠谱. 对我等租房的穷鬼来说, 显然没有自己名字的房本, 天朝的水电费账单都是房东的名字, 只有信用卡账单才能证明自己有居住地. 而偏偏公司地址的信用卡账单别人是不认的, 租的房子有邮箱且能收到信这也是很幸运的一件事, 还好招行靠谱, 给我寄了两个月的纸质账单而且都收到了, 交行就似乎从来没寄到过. 顺便提一句虽然电子账单节能环保, 但算到居住证明这个上来, 隔一段时间收一份纸质账单还是很有必要的

等搞定香港一卡通后再去弄美股帐户开户, 我找的是 SogoTrade, 原因是几乎没门槛, 而且教程众多, 短期内笨狗好像也不会去搞期权或买空等高级玩法, 这样就够了. 那时候住院耽搁了下, 到十一后终于走完了线上流程, 线下为了省钱没直接把资料寄到美国, 而是挂号信到 SogoTrade 上海的办公室等他们统一把 W-8BEN 发去美国总部, 然后大概是十月中旬帐户可用. 再次感慨都信息化时代了, 很多能用复印件/扫描件甚至拍照的文件, 真心没必要搞原件啊, 好多地方因为这个搞的好麻烦

自己激活香港一卡通转了 1000USD 过去, 然后跟小强换了点钱, 他从 HK 转给我 HKD, 我在大陆转给他 CNY, 这样两个人都比较省手续费, 最后转到 SogoTrade 帐户里是 6100USD 的本钱

去年十月那时候, 自己了解的几家公司股价都很坚挺, 也没急着入手. 听小道消息 YY 快要发财报, 可以到 80, 于是 48 入了 YY. 当时太贪心, 56.x 没卖, 想着够 60 就行了, 结果跌到 42. 后来涨回 49.5 时仓促出手想着不亏就行了, 结果现在回头看看, 要捂小半年就妥妥的 50%+ 的回报. 不过这个股个人不了解, 当时也就是凑热闹上了下, 现在跌回去了, 还是看不懂

后来看 RENN 跌到 2.9 左右的时候入了一点, 自己对 RENN 的定位是 3.3 的目标价, 过了几天快到 3.1 忍不住出了, 落袋为安. 后来看居然还能到 4.x, 真奇葩, 现在又跌到 3.3 左右, 也算符合我的目标. 我对 RENN 价值看法是, 其单股资产都有 3.x, 所以低于 3 的股价是非常不正常的, 可以入, 又考虑到外界不看好他和陈一舟, 按内部执行过一段时间的 3.3 行权价来看, 高于 3.3 又可能有风险 (现在内部新发的期权行权价应该比这个低了)

然后就是 QIHU 这个我不喜欢的公司但是又觉得还可以的股票, 去年十二月玩过一次短线 82 入 86 出, 然后今年四月弄了一次 87 入 92.4 出, 算是在这上面赚的最多. 不过春节前后两拨大潮都错过了, 当时没空关心这个, 也没时间半夜守着玩波段, 看了下现在也跌到去年入场时的水平, 不用感慨错过了好事, 毕竟风险也避开了嘛. 个人感觉 QIHU 目标价在 100 的样子, 不过他家受各种外界因素影响也还挺大

其他随便扯几家还看过下的
WUBA 完全就莫名其妙么, 真的不是一群人在乱炒? 不过不懂业务不瞎指挥
GOOG 还是值那么多钱的, 不过拆股才 1:2, 要按度厂那个 1:10 的拆法估计市场上的小白们会把单股价推的更高?
AAPL 也就现在那样了, 一个月前写本文草稿时是 ~500, 现在 ~600, 感觉估值偏高, 毕竟没看出特别的发展前景, 算过气了吧
TSLA 多半是炒作, 过山车一般上下, 都是些不懂行的在装懂
BIDU 四年前就说他该到 140, 现在也没高多少, 物是人非, 当时说这话的人都不在 BIDU 了, 也没见有太多好的发展
0700 那一拨上 600 的绝对是疯了, 现在这样还比较理性, 除非真有新的大招, 不然凭什么支撑?

上一张自己的回报状况, 以及和买过的几家的对比图

Finance Performance from Oct.2013 to May.2014

Finance Performance from Oct.2013 to May.2014

上图还是可以看出笨狗是完全随性而为玩票性质的搞, 总共买卖次数两只爪就能数过来, 白瞎 SogoTrade 的首月多少次免费交易的优惠了. 未来估计也不会频繁操作, 就每天会关注下市场, 也算是关心互联网了解大趋势, 有大的利润空间时会出手去捞一点, 保本跑赢 CPI 就是目标. 只要不出现非常大的不可控变故, 这种小赚一点就跑的玩法还是会很稳健的, YY 那次没赚到太多就是因为想贪大, 但是自己没有足够的消息和分析能力来支撑自己的贪欲, 后来几次就好很多

最后, 股市有风险, 入市需谨慎. 笨狗投钱进去只是为了让游戏变得刺激点, 让自己真心从另一个角度来关心下自己所在的行业, 赚钱这个目的暂时就算了. 祝那些真心投入且相信自己内幕消息或分析能力的朋友们财源广进

OS X 支持 NTFS 读写

苹果的 OS X 明明已经支持 NTFS 分区读写, 但是默认情况还是按只读挂载, 查了些资料小修改了下, 就可以开启原生读写了

# 用 root 身份做如下操作 (高危! 请切记自己在干什么)
sudo -s

cd /sbin
# 将系统自带的挂载程序改名
mv mount_ntfs mount_ntfs_orig
# 新建我们要的挂载脚本并编辑
vim mount_ntfs
#!/bin/sh
/sbin/mount_ntfs_orig -o rw "$@"
# 保存退出后改一下权限
chmod a+x mount_ntfs
# 都搞定了, 退出 root 身份
exit

不过这个方法还有几个小问题要注意

  1. 分区最好有卷标, 默认的 “未命名磁盘” 可能无法挂载. 如遇无法自动挂载可以先在终端下改个名再试
# 获取对应分区的 DiskIdentifier (类似 disk1s1 这样的)
diskutil list
# 分区重命名
diskutil rename disk1s1 newname
  1. 网络上其他方法经常会让把脚本里的挂载参数加上 nobrowse, 这个参数就让挂载的分区不显示成新的移动磁盘, 然后又有一堆方法教怎么在 finder 侧边栏能快速访问这样挂载的 NTFS 分区. 其实 man mount 看明白 -o 参数后面的设定就明白了, 去掉那个画蛇添足的 nobrowse 吧

// 最后这个 nobrowse 的参数, 似乎加上后又是只能在 finder 显示但是不能写, 搜了下也没有合理的解释, 如果不行还是先加回去吧
// 为了方便访问, 可以在 finder 里用 cmd+shift+G 打开跳转, 输 /Volumes 进入所有磁盘目录, 然后在用 cmd+shift+T 将 /Volumes 保存到边栏

驾照换证

六年前在武汉考的驾照今年夏天就该到期换证了, 本来想的刚好夏天回一趟武汉去整下这事, 刚好也去纪念下入学十年, 顺带自驾回家玩一圈

在网上查了下相关的信息: 武汉交管局有效期满换证, 看起来还挺简单. 然后考虑到现在户口档案都不在武汉, 身份证上的地址也不是武汉, 别被抓暂住证, 虽然可能车管所门口一般都有黄牛帮搞, 但是还是确定下好, 于是在 武汉市公安局警务咨询台 又问了下, 说可能要暂住证, 以办理的车管中心答复为准, 又查了下 武汉市交管局交通大队车管中心 各办事点地址, 好像有很多地方都认识的嘛, 那就夏天回去好了

杭州公司办公室旁边就是杭州古墩路车管所, 闲的没事也去问了下外地证能不能迁过来, 当时的答复是去体检, 然后在指定地点免费重考一次科目二科目三, 然后带着身份证暂住证原件复印件和原来的驾驶证就能办了. 听起来好像也不麻烦, 但是重考科目二科目三这个太蛋疼了, 虽说自己实际上手也开了大半年, 但是现在科目二和科目三的考试标准和以前不一样了? 而且开习惯了自己的车, 考试车万一有坑爹状况考挂也忒丢人了吧. 看起来还是回武汉搞算了

但是, 杭州这个城市向来有对大学生各种特殊关照的奇葩传统, 我去十九楼 (杭州最大的本地论坛) 问了下, 人家说如果是杭州户籍, 大学期间在外地考的驾照就能免考转入, 办的时候带上大学毕业证原件复印件就可以 (十九楼原帖), 等会… 这个地方好像还是有哪不对… 杭州户籍… 好吧, 还是断了这念想

过了几天贼心不死的笨狗想着天朝反正各项规定都是以办理处答复为准, 这车管所就在咱旁边, 吃完饭溜个弯就到了, 干脆去装傻问非杭州户籍的能不能转. 在导办台的工作人员表示, 你这个情况有点复杂, 在武汉上学户口又在北京, 我要问问其他人, 旁边一个说你有暂住证么, 有的话就可以. 为了避免过两天土政策又变, 当场笨狗就决定去找个医院体检把这事办了免得夜长梦多, 结果凡事还是急不来, 虽然回家找到了足够的一寸白底彩照, 但是开车回家兴冲冲的居然屁股往墙上刮了一下, 然后骑车去省立同德 (就是去年住院的那家…), 人说每周一到周五上午弄体检, 下午没有. 开百度地图发现同德和古墩路车管所中间还能经过绿城医院, 好歹也是三甲应该也是满足要求, 等我哼哧呼哧骑车到了一问, 人家说我们这没有驾照体检的业务

那就再等一天咯, 早上送完喵上班回来, 骑车去省立同德弄体检, 半路上差点被一电动车撞, 体检项目居然还要有序, 白排了两次队. 弄完体检开车到公司, 然后骑车去车管所, 车管所门口那个坑爹的租车点果然常年满的还不进去, 我骑过去那车又没钥匙还没法锁门口, 等了一会不像有好心人会骑走一辆救我一马的样子, 又把车骑回来再走过去 (早干嘛去了… 还不如直接走的). 拿号排队办业务, 柜台对面的协警表示你这个好奇怪啊, 湖南人在武汉上学考的驾照然后身份证怎么又是北京的地址, 那你户口在哪里? 北京? 那你是在北京工作? 现在不在了? 现在不在户口还能留着的么? 对了你说你是湖南人你怎么证明啊, 这一堆材料上没有一个地址是湖南的. 笨狗表示你可以看我身份证号的, 前面是地区码啊, 43 是湖南没错吧, 而且好像咱们这个业务不用管我是哪里的吧. 后面就很顺利的签个字, 把旧证还回去, 交钱拿证, 杭州签发的十年证到手. 从车管所回来租了自行车又没在离公司最近的租车点还进去, 快走到浙大门口还好车想着走侧门进公司园区, 但是侧门两个入口都封了, 绕了一大圈才从后门进来… 一定是出门没看写了今日不宜骑车的老黄历才这么悲剧

最后来个不啰嗦的简洁版外地驾照迁入杭州办事指南:

自备身份证原件, 身份证双面复印件, 驾照原件, 近期一寸彩照三张 (一张贴体检表, 一张贴申领表, 一张在新驾照上)
— 如果是外地户口还需要杭州暂住证原件复印件
— 如果是大学转入的还需要和驾照核发时期能对应上的毕业证原件复印件

去车管所要一张机动车驾驶人身体条件证明表 (就是体检表), 或自己上网下载打印一份 (杭州交管局官方下载地址), 贴一张照片, 去市级以上医院体检

如果是需要考科目二科目三的情况, 去车管所拿号要一个预约条, 联系考点考试 (这个我没弄过, 详情以车管所答复为准)

材料备齐后车管所导办台拿个综合号, 把所有材料给办理的工作人员, 除原驾驶证的原件被收走, 其他的原件还回来, 复印件留下. 去窗口交费 (10 块), 然后拿着发票等叫号取证, 等几分钟就好了

另: 省立同德医院体检流程

周一到周五早八点到十一点半可以做对应体检, 大门进去导医台背后电梯上六楼体检中心, 跟前台说驾照体检, 会给你一张缴费单, 拿着左转走楼梯下去交钱 (15 块), 拿着缴费单和发票回到六楼体检

按眼科 (色盲), 耳鼻喉科 (听力), 视力 (一个没有贴牌的屋子, 护士给做), 外科 (四肢健全活动正常) 的顺序做, 最后在预约办公室盖章

Windows 7 USB 设备插入后识别过慢的解决

最近给新公司弄了一批客服机, 键鼠或 USB Hub 插上去后要非常久才能用, 看了下是因为在从 Windows Update 找驱动, 而杭州联通连微软服务器延迟高速度慢 (还是最近海底光缆问题?), 这个过程只会慢的让人想死

在公司首席 IT 工程师伞破驴的指导下, 关闭默认找驱动就可以了, 具体步骤如下

1. [计算机] -> (右键) -> [属性]
2. 左侧 [高级系统设置] -> (点击打开) -> 上方 [硬件] 标签
3. [设备安装设置] -> (点击打开) -> 选 [否, 让我选择要执行的操作]
4. 选 第二个 [在我的计算机上找不到驱动程序软件时从 Windows Update 安装] 或 第三个 [从不安装来自 Windows Update 的驱动程序软件] -> [保存更改]

应该其他 Windows 版本也有类似问题, 在遇上中美网络连接出问题的时候也可以改下. 平常改掉也可以让插 U 盘/移动硬盘/鼠标等设备时更快用起来

换位思考

有个很有意思的现象, 就是说不管是怎样的人, 温文儒雅的男生或是温柔知性的女性, 一坐上驾驶位, 立马就会变成悍匪和泼妇, 另一个说法是司机们眼里其他司机只有两种, 比我慢的傻逼和比我快的二逼

我自己开车几个月了, 感觉大部分情况确是如此. 当我们是行人或骑行者时, 经常会抱怨车不让我, 车乱开, 雨天溅人一身水等等, 而在驾驶位上的时候, 经常痛恨的又是那些不按标线和信号灯过马路的非机动车, 随时可能乱冒出来的行人. 其实多去换位思考下, 可能就没那么多问题和纠结. 自己还是尽量做到以下内容, 希望诸位司机和行人共勉

司机角色

多看行车标线, 不随便变道, 特别是去不熟的地方, 提前在导航上做下功课, 提前看好各种路牌, 要变道事先准备, 避免急匆匆变道被人滴甚至被人撞上

不野蛮开快车, 也不开太慢挡住其他人, 高速或快速路上开慢了挡住后面人一是让人烦心, 二是其实反倒不安全, 自己如果慢, 自觉去右侧道, 把左边留给要超车的人

绿灯了赶快起步给后面人拉开空间, 杭州大部分交通灯都有倒计时, 提前挂档准备松离合走人, 节省宝贵的绿灯时间, 提升通行效率

停车时多考虑下经过的车和前后左右别的停着的车, 不要让其他车以非常难受的姿势从你身边擦过去, 另外也考虑下停车位置旁边车经过的速度, 速度快的地方多留点空, 后视镜能叠起来就叠起来给其他人省空间

尽量让行人, 经过时减速, 在路口和公交站附近多留意随意乱穿马路的人, 特别要注意小朋友和女性, 尤其是还在打电话或玩手机的, 切记不要用常规思路去理解还在吵架的情侣 (最后这一条是开车以来唯一一次差点撞上人, 一对吵架的情侣从公交站前非斑马线横穿, 走到一大半又突然折返, 防不胜防)

行人和骑行角色

行人走路边的人行道, 骑车时走非机动车道, 别跟汽车去抢. 骑车如果被逼的走机动车道了, 尽量靠边让车能从你旁边安全经过, 不要非得让车需要擦着你过, 有能转进非机动车道的机会立马转进去, 命比速度重要多了

过马路走斑马线, 看自己的灯, 并留意机动车的绿灯情况, 红绿灯还分左右转等方向性的, 不要随意看到个绿灯就过

多左右看, 保持自己是匀速直线运动, 不要突然冒出来或停下来, 汽车其实没法很快刹住, 而且突然加减速会让车很难受, 司机一般不会喜欢在你面前玩个急刹然后烧胎起步的

不要站路上让车很难受的位置, 比如支路路口的正中间, 让车从你左边或右边过都很不爽, 没事往旁边站一点, 方便他人, 也让自己处于更安全的位置

路上就尽量别低头玩手机了, 打电话也长话短说, 多注意看四周环境, 雨雪天时司机的视野下降很厉害, 自己打着伞也多回头看看, 新交规更保护行人, 但最好也别被用上相关条款, 用上一般都是出事了

饭团性能优化记

缘起

前年冬天在人人时, 为了方便组里一起吃饭的同学们互相算账, 参考以前度厂的饭团设置, 在团队里拉起一个饭团, 然后写了个小系统来记账

设计

一开始的想法是这样的

1. 饭团设置一个团长, 团长管饭团的钱, 出去吃饭时由团长付钱
2. 每顿饭按人均消费额, 扣除参团人的余额
3. 每个人把钱交给团长, 余额不足时由团长催促交钱

所以设计的数据模型是

    人 {
        id,
        姓名
    }
    饭 {
        id,
        付款人,    # 外键, 多对一
        参与人,    # 外键, 多对多
        消费额
    }

吃饭就在饭那个表里加一条记录, 充值也算一顿特殊的饭. 每顿饭后的账面和最终余额按时间遍历所有记录实时算, 这样一是省了记每顿饭后余额的存储开销, 二是避免有历史修改而需要更新余额表一堆数据的麻烦事. 考虑到饭团也就十来个人, 在可预见的未来数据量人最多到百级, 饭撑死也就是千级, 每次遍历的代价应该也不大 (事实上在我写本篇文章的时候, 饭团历史总人数不到 20, 算上充值转账等总共也不到 500 顿饭)

这个余额实时计算的思路和 BitCoin 的余额判断方法也挺像的, 正是因为我写饭团踩了不少坑, 所以我觉得 BitCoin 某些方面还是有很大问题的, 这个回头另外讨论

另外为了统计方便和可追查, 希望记录每顿饭是哪天在哪吃的, 新增和修改数据

    饭 {
        ...
        日期时间,
        店        # 外键, 多对多
    }
    店 {
        id,
        饭店名
    }

后来考虑未来可能有人因为转岗或离职离开饭团而饭团里还有余额需要退款, 新增两个特殊的店来记录充值退款操作, 自此数据模型设计完毕. 最终的 sqlite schema 如下

    CREATE TABLE "ft_people" (
        "id" integer NOT NULL PRIMARY KEY,
        "name" varchar(200) NOT NULL
    );

    CREATE TABLE "ft_deal" (
        "id" integer NOT NULL PRIMARY KEY,
        "restaurant_id" integer NOT NULL REFERENCES "ft_restaurant" ("id"),
        "pay_people_id" integer NOT NULL REFERENCES "ft_people" ("id"),
        "deal_date" datetime NOT NULL,
        "charge" real NOT NULL
    );
    CREATE INDEX "ft_deal_75ae3b0c" ON "ft_deal" ("pay_people_id");
    CREATE INDEX "ft_deal_be4c8f84" ON "ft_deal" ("restaurant_id");

    CREATE TABLE "ft_deal_peoples" (
        "id" integer NOT NULL PRIMARY KEY,
        "deal_id" integer NOT NULL,
        "people_id" integer NOT NULL REFERENCES "ft_people" ("id"),
        UNIQUE ("deal_id", "people_id")
    );
    CREATE INDEX "ft_deal_peoples_1a9336ea" ON "ft_deal_peoples" ("deal_id");
    CREATE INDEX "ft_deal_peoples_3cff102f" ON "ft_deal_peoples" ("people_id");

    CREATE TABLE "ft_restaurant" (
        "id" integer NOT NULL PRIMARY KEY,
        "name" varchar(200) NOT NULL
    );

因为懒得自己去管理数据的写和更新操作, 刚好那段时间看了下 django, 感觉自带 ORM 和 admin 组件的 django 会是开发的好选择, 于是对着 tutorial 学过去后就开工了. 很快写完, 框架用的 django1.5, 数据库用 sqlite, 页面是裸写的 html, 没有任何 javascript, 仅有的一点 css 也硬编码在 html 文件里了

功能和美化

用了一段时间后发现离一开始的设定有一些变化, 比如团长不一定每顿饭都出席, 那需要有另外的人付账, 然后团长又要给付账的人团费, 还不如直接让付账人的钱直接进饭团余额. 这个功能用最初的功能也可以做到, 只是让团费的作用没那么清晰了. 用到后来, 发现其实是不需要有饭团团长这个设定的, 每顿饭谁付钱就算谁的, 反正饭团记录的是每个人的帐户余额, 团费其实就是团长的帐户余额. 需要交团费或互相转账时直接添加一顿转出人付款, 参与人只有收款人的特殊虚拟饭就可以了, 于是又加了个叫转账的虚拟店来记录转账操作, 自此充值和退款两个虚拟店就变得毫无用处了

一开始所有饭团记录都只有一页, 后来应大家的统计需求, 按参与人/付款人/店分别做了个过滤器, 这个实现的很简单, 就是对不符合过滤器的记录, 只计算不输出就行了

当饭团运作了半年多后, 单页的饭团太长, 又将默认页面改成只看最近一个月的, 另外提供了个翻页的按钮和查看全部的选项. 另一个问题是饭团成立时的团员有人转去了其他团队不再一起吃饭, 这些人最近的记录都是空的, 放着一是不好看, 二是人多了页面宽度超过很多人显示器的大小, 于是给人加了一个 “是否活跃” 的属性, 默认不显示那些不活跃的人

前不久回头去看饭团的前端, 觉得虽然算不上丑死人, 但是也没好看到哪去, 刚好就用 bootstrap 套了下, 并把各种过滤器提供表单输入的功能弄成一个查询表单. 本打算把表单直接塞导航栏, 结果发现 bootstrap 原生的 select 什么的真心太丑, 放导航栏严重破坏美感, 后来找了个 bootstrap-select 的插件来支持, 这个就很赞了

用上 bootstrap 时一嫌自己管理 css/js 麻烦, 二怕又扯上被人盗用跑流量的狗血, 直接用了国内大公司的 cdn 内容. 后来用 bootstrap-select 时, 发现国外的 cdn 太慢, 国内又没找到靠谱的, 就只能在自己项目里拷贝了一份, 结果测试环境都 OK, 在线上的 fastcgi 环境里总显示有问题, 提示找不到文件, 怒了在 nginx 里对自己的 static 文件夹又加了一条 alias 才行. 后来想这么弱智的事情不会是 django 的问题, 就去找官方文档, 在 https://docs.djangoproject.com/en/dev/howto/static-files/ 里来回看了几次才发现最后有一段关于怎么 Deployment 的, 原来还要收集一次, 也还是要加 static alias 的嘛, 只是解决了为什么之前要给 static/admin 单加一条的问题. 从这个角度来说, django 还是略复杂蛋疼, flask 就简单的多, 完全交给你自己去弄, 而且 templates 和 static 都汇集放好管理, 或许 django 是为了给每个 app 单独的分发权?

性能优化

饭团弄好后先是架在了公司我跑 Ubuntu Server 的台式机上, 直接就用 runserver 的模式跑的. 后来因为台式机偶尔会掉电, 饭团没设开机自动启动, 偶尔也会忘了开, 加上内网 IP 不一定固定, 用起来还是有点小烦, 于是迁移到我的 VPS 上

我贪便宜 15$/yr 买的 buyvm VPS, 内存只有 128M, 之前曾经写过一篇各种压榨内存的优化记录, 饭团丢上去就发现这货居然还是内存大户, 搜了下改成用 flup 以 fastcgi 的模式跑, 并把实例压到只有一个, 反正访问也不频繁, 不用处理啥并发. 用了小半年后觉得偶尔有点卡, 不过一直认为是 buyvm 的机器烂加上服务器在美国多半是网络延迟, 就没再管他

等到去年冬天的时候, 发现这慢的已经完全不成样子了, 而且有报页面超过返回大小, 将默认页面改成只看最近一个月这也是个主要原因, 当时还以为是网络的问题导致卡 (我那个 vps 走联通线路只有不到 50KB/s 的速度)

今年过完年, 在想在新团队是不是也能搭个这货玩, 把之前的数据拷贝到本地去测试了下各项功能, 发现打开首页需要接近 10 秒, 这都是本地了, 不能再赖网络, 于是加各种 Debug 信息去看到底慢到哪里. 实时的余额计算流程大概是这样

    遍历所有饭:
        获取饭的信息, 包括关联的餐厅和付款人等
        遍历所有人
            判断是否参加了本顿饭, 如果没有
                直接沿用上条记录
            如果有
                判断是否是付款人, 如果是
                    增加本顿饭总额扣掉自己那份的进余额
                如果不是
                    从余额里扣掉本顿饭钱
        添加输出信息

这里面的参团判断是用 O(n^2) 遍历实现的, 一开始就十来个人, 就算是平方复杂度也能慢到哪里去, 结果一堆 debug 信息放下去那个地方还真是特别慢. 仔细想了下估计是那个遍历所有人做判断的地方, 每次都新做了一次 SQL 查询, 好吧, 把判断用的表先遍历一次提出来做个 dict, 果然快了一些. 经过这步后耗时从 10s 降到 1s, 感觉再快也快不过跨太平洋的网络耗时, 就没再继续压榨性能

上一个改动做完没几天笨狗折腾了个 digitalocean 的 VPS 玩, 这个延迟又低速度又快, 于是有想着对那个 1s 的性能做优化, 按说这么点数据要 0.1 秒都不正常. 继续琢磨, 猜是每次取一顿饭, 都做了若干次 SQL 查询去取外键数据, 于是把人和餐厅的数据都预先提取出来构建 dict, 然后查询的时候使用就好, 这样又能快一点. 再回头去看那个多出来的辅助表, 猜是那个表每遍历一顿饭又去做了一次查询, 干脆自己把 view 里的查询都裸写, 每次页面请求都把四个表数据都 select * 出来, 然后自己去拼, 反正数据也不复杂, 这样一次页面请求只用四次 SQL 查询, 果然速度就降到了 0.01s 内. 因为数据量不大, 对内存压力也几乎没有, 而且 digitalocean 的内存有 512M, 也不用那么抠内存

问题感想

我中间曾经想要不要换 flask 重写一次, 自己管数据库, 后来找到性能瓶颈后还是留在了 django 那, 能用就懒得去动, 而且自己写个 admin 还是略麻烦

跟熊吐槽 django 的 ORM 怎么这么烂, 深度插件控的熊表示你这个一定有合适插件来帮你干这事而不是靠自己裸写 SQL 的, 不过笨狗表示有找插件和配置的时间, 我裸写的东西早搞完了. 果然笨狗还是又笨又懒, 还好目前看也还没太多篓子

对了, 饭团的 github 开源地址在: https://github.com/whusnoopy/fantuan, 欢迎 fork 帮忙优化

最后挂个 DigitalOcean 的邀请链接: https://www.digitalocean.com/?refcode=8a3c1464993e 如果你通过这个注册并付款, 我会有返点支持我继续用 DO