vimdiff

vimdiff a.txt b.txt

  • ]c - 跳到下一个差异点
  • [c - 上一个差异点
  • dp - diff put, 将差异点的内容从当前文件复制到另一文件
  • do - diff get, 相反,从另一文件复制到当前文件

Monthly Review 2015-09

  1. 新项目管理后台开发,依然是 Angular+Material,npm+browsersync+jshint+tern,这套组合目前很对我的胃口,开发效率不错。
  2. 感叹前端的飞速发展,一下发现新东西,比如 tern,tsd,再一下发现在用的东西已经过时,比如最近在流行 React+Alt+Flux,Angular 2 再不出来真的连汤都没了。
  3. 社区项目维护开发,居然也有小 30 commits,服务性能上有一些提升。
  4. 苹果出新手机,然并卵,毕竟穷。电脑升级新系统,看起来可以再战一年,如果不开 XCode 的话。
  5. 十一回家,最高兴的是,刚到家的时候六六自己跑过来抱抱,那一刻心都化了。

Growth hacking

Growth hacking 是市场运营通过技术形式获取用户的方法,包括数据分析,社交网站,EDM 等,据说 Facebook 还有专门的 Growth Team。今天见识了这种方法的力量。

起因是乌云的这篇文章:XCode编译器里有鬼 – XCodeGhost样本分析,Xcode 被挂马,网易云音乐中招,看后顺手测了自己常用的应用,发现另外几个中招,在群里吐槽后就没再继续关注,之后又看见微博有人在转,就发了 Twitter:

通过 Charles 抓包,会向 http://init.icloud-analysis.com 发请求的有网易云音乐,中信银行动卡空间,12306,滴滴打车 #XcodeGhost 13:41

发之前就在想这个肯定会爆掉,但没想到有这么火爆:

  1. 迅速被 RT,涨 fo。
  2. 约十五分钟后被转发到微博,包括 @Fenng,@onevcat 等大 V 二次转发。
  3. V2EX,知乎,36kr,iApps,虎嗅等科技网站发帖,有引用 Twitter 链接/截图 1 2 3 4 5
  4. 15:10 腾讯科技 App Store遭病毒入侵 网易云音乐等中招,而且他们应该是有通过 Linkedin 查看我的工作信息,之后该文被其他多家引用。

根据 Tweet Activity 统计,原推一共 impressions 14000+,engagements 1300+,RT 170+,followers 增长 100+,考虑到访问 Twitter 的困难,这个数据还是非常恐怖的。微博的量应该更大。

这是 Growth hacking 的一次直观感受,如果产品推广也能有这样的效果该多好 :D


作为开发者,#XcodeGhost 要引起重视:

  1. 正当渠道下载应用,不限于 Xcode,检查签名/checksum。
  2. 用到的第三方 SDK 也要检查来源,设想微信 SDK 被调包?!
  3. 重视安全,一旦被人发现没穿裤子,负面信息足以摧毁一个产品。

Conway's Law

M.Conway:

organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations.

软件系统的架构反映了公司内部的组织结构、团队间的通讯结构。

Go Big or Go Home

Go Big or Go Home

CtrlP.vim

ctrlp.vim 是个非常棒的 vim 插件,可模糊搜索文件、buffer、mru 等等,原生 vim-script,相比 Command-T 更为友好的安装,速度上也没有差多少,所以几年前知道这个插件就一直在用,最近才发现原作者从 2013 年就不再维护更新,另一个社区版更为活跃,也加了不少新功能。

社区版地址 ctrlpvim/ctrlp.vim,支持扩展功能,也就是 vim 插件的插件,其中 ctrlp-funky 可以在当前文件内定义的方法之间跳转,类似 Tagbar/Taglist,但不依赖于 ctags,算是个精简版。

Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'tacahiroy/ctrlp-funky'

let g:ctrlp_extensions = ['funky']
let g:ctrlp_funky_syntax_highlight = 1
:com! -n=0 D CtrlPFunky
nnoremap <Leader>fu :CtrlPFunky<Cr>
nnoremap <Leader>fU :execute 'CtrlPFunky ' . expand('<cword>')<Cr>

Monthly Review 2015-08

  1. 新项目紧紧的进行,客户端赶在月底上线了第一版。
  2. 项目进度很快,甚至有点过快,快到很多地方考虑不周,加上测试不到位,运营又急于推广,导致上线后问题一一出现。
  3. 所以说开发时候配上单元测试是很有必要的,可是完全的 TDD 时间上根本不允许。
  4. 现在我自己的开发测试模式是 httpie: http :3000/api < data.json --session=fann,严格意义上来说只能算开发辅助,很难 cover 到全部。

  1. 六六在北京一共呆了 40 天,每天回家能和孩子在一起真好。
  2. 婆媳关系是个永恒不变的话题,作为丈夫+儿子,大多时候都很无力,只能依靠时间来淡化解决问题。
  3. 又一次搬家,不对,搬宿舍。

根据时间自动切分 Nginx.log

之前是用脚本配合 crontab 来做日志切分:

#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path="/usr/local/webserver/nginx/logs/"

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`

最近发现可以直接在 nginx.conf 里通过 $time_iso8601 提取时间进行设置:

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
    set $year $1;
    set $month $2;
    set $day $3;
}

access_log /var/log/nginx/$year-$month-$day-access.log;

时间粒度可以更为精细:

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
    set $year $1;
    set $month $2;
    set $day $3;
    set $hour $4;
    set $minutes $5;
    set $seconds $6;
}

via Log rotation directly within Nginx configuration file

28

28.

六六陪爸爸过的第一个生日,妈妈代笔写了贺卡,我 28 了。

Monthly Review 2015-07

  1. 长岛休假半个月。圈个海岸就收钱,沙滩特别差,不推荐去玩。
  2. 第一次带老婆去海边,所以尽管环境不行,前几天玩的还算开心。
  3. 按老家习俗给六六过了一岁生日,农历。
  4. 接六六来北京,尽管很难,尽管很多阻力,至少走出这一步,希望一切向好的方面发展。