My Apps List

前言

子贡问为仁。子曰:“工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。”

——孔子(春秋)《论语·卫灵公》

平时在工作生活中,特别注意对工具的选择和使用,无论是在PC、MAC、iPhone、iPad以至vim和shell中都是如此。 探索和体验新的工具是平时的一个小爱好。

开始前,说几个也许有点扯的前提:

  • 本人是极简主义者,不喜欢功能和UI特别复杂的app
  • 本人略有强迫症,图标非常不搭的app有点受不了,所以同等情况下会选择图标好看的,实在不可替代就丢到Folder中 :)
  • 有娱乐但没有游戏,本人爱玩游戏但对手机游戏完全无爱
  • 要装B,但不要为了装B而装B

正文

Chrome 速度快,自带同步,全平台支持,还可以不同类型终端之间访问书签和打开的页面。 强大的插件支持,去优酷广告、JSON格式化显示和HTTP代理都很需要。 此外,iPad Chrome用起来真心很舒服。

Why not Safari?

  1. 对Chrome的插件有强需求

  2. 本人偶尔会开发Chrome插件

  3. 在Windows上肯定会选择Chrome

  4. 喜欢Chrome的设计

Sublime Text Sublime不是真的免费软件,但免费就可以使用全功能,只是会不定期提示你购买。 当时刚回国,卡里有几十澳元,因为很喜欢这个软件,也就付费了。 其实用的并不熟,大部分情况下只用到他自带的语法高亮、主题、语法提示、缩进调整和代码自动格式化相关的一些功能,这些功能都很nice。 Sublime也支持"插件"(叫做package)。比如写Markdown时可以用MarkdownEditing即时预览。 近期,我打算对Sublime的高级用法进行下探索,以后会单独发文介绍的。

ps: Sublime有一个很吸引人的特性,就是多行编辑。不过,在我一次进行了一次选择了两万行再结尾加逗号的尝试后,发现这个功能在量大(其实两万真不能算量大)的时候完全没法用。

Dash API文档查询工具,收录了各种编程语言、框架和工具之类的API Documentation、User Manual和Cheat Sheet什么的。从此查文档不用现场Google了。

Apple Mail 并不喜欢在手机上看工作邮件,使用iPhone自带收一些私人邮件完全满足需求。

Reeder 售价RMB30,绝对物有所值,免费可以选Feedly,但收费的话我推荐Reeder。 Feedly不挂VPN实在会经常刷不出来,挂了VPN速度也不快。 反观Reeder可以直接登录Feedly帐号,速度还飞快,UI设计也更有阅读感,没Feedly那么炫。

Pocket 传说中的Read it later,Reeder中的RSS源比较多,希望深度阅读的认为,可以从Reeder中share到Pocket。 从阅读体验来说,其实Reeder更好些,但Pocket也逊色的不多。 最近刚出了Premium版,就是太贵了点,价格跟Evernote完全一致。 可以离线存储文章,从此不用再担心出现死链了。 不过,我们也可以选择把需要永久保存的内容直接再share到Evernote上。 因此,这就形成了一个阅读链

阅读链

  1. Reeder订阅RSS

  2. Reeder初步阅读,把感兴趣的share到Pocket

  3. Pocket上深度阅读,把有用的永久保存在Evernote

PS: 真的书籍就不在手机或平板上阅读了,有Kindle和实体书。

Wunderlist 德国出品,wunder是德语wonder的意思。 简洁易用的TODO list类app,平时自己要做的事情都记在上面。 UI设计不跟风,至今还不是扁平化但却仍旧觉得很美。勾选操作也很有快感! 缺点是iOS上同步极其不稳定。

Evernote 强大印象笔记!免费基本可以用的很滋润,对于一些数据量比较大的同学可能每个月60M比较不够,VIP可以1G。 个人最喜欢的VIP功能是Presentation Mode,平时工作时用印象笔记当Office用,可以记事、可以做表格、可以展示note。 参加买一送三买了VIP,其实用不上绝大多数功能,主要用到就是Presentation Mode以及iPhone上的密码锁。 至于iPhone上的名片扫描功能之类的,感觉略鸡肋。

百度云 2TB真心赞,离线下载可以省去用迅雷。之前有一个像素的解锁瑕疵,iPhone上至少已经修复了。况且目前还是内网用户,没有不用的理由,唯一缺点就是Mac上没有客户端只有同步盘。

Dropbox 对于本人来说,算是百度云的冷备,毕竟墙外数据安全性强点。但又毕竟在墙内会比较卡,而且Dropbox容量只有2G,所以用于备份一些重要数据。

欧陆词典 EuDic 之前用Google Translate,毕竟不是专业词典,精确性不太好。欧陆词典检索速度很快,功能简单够用,支持各类终端平台,名气虽不大,但极为好用。

Instragram 比较文艺范的图片社交软件,可以围观各种文艺妹子,就是加载速度什么的略慢。 不过后来一想,能看到就不错了,这货用的是facebook的CDN!

VVebo 官方微博客户端功能好多,体积好大,完全用不上。 买了WeicoPro但是近期的版本质量好差很容易crash,而且页面排版也不是很满意。 VVebo简洁功能够用,阅读感觉好!要是能iPad适配就更加完美了。

Weather Dial 极简主义设计的天气app,价格要12元,限免时拿下。 不支持多城市,只支持地理定位当前城市。 平心而论,这个app卖的就是设计,功能上真算不上值得。

WeChat 主要沟通工具。虽然很臃肿了,但真心不能不用。

QQ 只在iPad上用,HD版本体验极好,iPhone上功能比较杂。

支付宝 很实用的app,移动支付必备,AA也很方便,而且还可以当作支付Token用。 ps: 千万别安HD版,就是一废品。

招商银行 其中装了两个,一个是招商银行客户端而另一个是掌上生活。前者主要功能是查询和管理工资卡,后者是处理信用卡事宜。 当然,作为用户体验最好的国内银行之一,招商银行的客户端在银行界那也是没得说!

foobar2000 这是一款以音质著称的免费音乐播放软件,由前Winamp成员Peter Pawlowski编写。 本身界面很朴实没什么任何酷炫的效果,但本身支持各种扩展,这点有点类似魔兽世界的感觉。 限于精力有限,并没有深入钻研其SDK开发扩展程序,不过着实花了不少时间用在配UI上。

网易云音乐 比起国内其他音乐软件,更喜欢它的风格。不过,如果在外国,我想我会用Spotify。

Updated on July 20, to be continued.

Mac OSX 10.9 Mavericks清除DNS缓存

不说废话,正确的清除DNS缓存方式为:

dscacheutil -flushcache
sudo killall -HUP mDNSResponder
YouCompleteMe Installation Guide on Mac

What is YouCompleteMe

YouCompleteMe 是一个vim插件,简称为ycm,支持基于语义的代码补全和代码语法检查功能。

常用的补全插件如ctags和AutoComplPop等是基于文本的,类似于搜索时的suggest功能。不过,前者是事先扫描文本生成tags文件,后者是对当前打开的文件内容进行扫描。 如果tags或者打开的文件重不存在的内容,那就无法进行补全。此外,这种补全是基于单词的,所以补全的提示可能是变量、关键字、注释甚至是字符串里的内容。

所谓的基于语义的代码补全,简单的说就是通过对代码的语义进行分析。举个例子,对于对象或结构操作时,在输入.之后ycm可以补全提示对象的成员变量和成员函数等。 一般的成熟IDE如Visual Studio和Eclipse都具有这种能力。

目前ycm支持5种程序语言: C/C++/Objective-C(基于clang),Python(基于Jedi)和C# (基于OmniSharp)。

至于其他语言,ycm会调用vim omnifunc来匹配,因此不是很有必要使用ycm。

ycm虽然功能十分强大,不过编译安装较为复杂,本文基于Mac OSX 10.9 Mavericks介绍一下如何安装成功爽上ycm。

Dependencies

  • vim 7.3.584+

  • cmake,建议使用homebrew安装

  • vundle,安装起来很容易,按照github上面的介绍来就行

  • Python 2.6+

Installation

安装完vundle后,修改.vimrc

vim ~/.vimrc

加入

Bundle 'Valloric/YouCompleteMe'

保存重启vim后:BundleInstall,就开始安装了。这个安装并没有包括编译,只是把ycm的vim、python以及C++代码下载下来。

然后进入YouCompleteMe的目录开始编译,_--clang-completer_是启用C family languages提示(为的就是这功能,果断要加上)

cd ~/.vim/bundle/YouCompleteMe
./install.sh --clang-completer

到此,插件已经编译完毕,基本上可以使用了。不过此时进入编辑cpp文件,发现代码提示怎么还是基于omnifunc呢?原来缺少了一条配置。

Configuration

编辑~/.vimrc文件,加入

let g:ycm_global_ycm_extra_conf = '/Users/crisp/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py'

重新进入vim,已经可以正常对代码进行提示。

In The End

Congrats to myself!

ycm提示出了对象md的成员函数(f标识)和成员变量(m标识)等信息。

对于Mac来说,由于作者(据我观察)就使用Mac,而且Mac OSX版本比较统一,因此按照作者的Mac OSX Super-quick installation步骤基本可以顺利安装。

不过在其他Linux上可就不一样了,我在公司的开发机上编译clang-completer就一直没成功,等到有空的时候再去折腾下。

Good luck to everyone!

Fiddler网络调试工具

什么是Fiddler

Fiddler官方给Fiddler的描述语是Web Debugging Proxy,也就是web调试代理工具。

主要功能有:

  • 截取HTTP/HTTPS请求

  • 修改Session

  • 网络调试

  • 安全测试

  • 性能测试

本文,主要讨论前三项功能的使用方法,包括Fiddler的基础配置和功能以及使用内置FiddlerScript脚本进行复杂功能调试。

准备和配置

Fiddler使用C#开发,支持Windows XP以上版本。对于Linux和Mac用户,有一个基于Mono的Alpha版本,经本人Mac实际测试,基本上算是不能用的状态。因此,不建议使用。

下载地址:http://www.telerik.com/download/fiddler

安装完毕后,为了使用后续功能,建议安装FiddlerScript Editor插件,否则修改FiddlerScript会比较麻烦。

准备完毕后,请打开Fiddler进入Tools->Fiddler Options,在Connections中勾选Allow remote computers to connect,并重新启动Fiddler。

网络请求抓取

完成了上述设置后,Fiddler就已经可以抓取本地的网络请求。如果需要对手机app进行调试,则需要设置手机代理。

iPhone  
进入Settings -> WLAN,单击你连接中的WIFI,在HTTP PROXY下选择Manual,然后Server填写Fiddler所在机器在此WIFI中的IP地址,Port是默认的8888。

Android
进入设置 -> WIFI,长按你连接中的WIFI,点击修改网络网络,勾选高级选项,在HTTP代理中填写主机名和端口。

PC本地  
用ProxySwitchy一类的插件,代理到localhost:8888

选中请求后,可以查看Headers、Cookies和多种模式的(TextView/WebForms等)请求参数。

如果想查看Response,则可以选中请求后点击Inspectors或者直接双击请求查看响应Headers和多种格式的响应内容。对于常见的数据结构,可以格式化展示JSON或XML。

Web Debugging

在进行调试时,我们可以使用Fiddler的几种调试功能:

  • HOSTS,等同于操作系统的HOSTS文件。

  • Filters,可以修改Request或Response的包体。

  • AutoResponder,可以截获请求,直接将请求代理到指定URL进行响应。

  • FiddlerScript,以FiddlerScript(C#)形式,实现Filters和AutoResponder的所有功能,并且可以定制UI界面。

HOSTS

Fiddler自带有HOSTS功能,跟Windows自带的HOSTS应该是一回事,不过在Fiddler中操作比较方便。

而是直接从菜单进入Tools -> HOSTS...,勾选Enable remapping of requests(此处省略数十字),就可以把请求线上服务通过HOST方式,代理到沙盒或者测试机。

Filters

很多时候,客户端一次行为可能会产生多次HTTP请求,会造成很大的干扰,Filter功能就可以选择性截取

首先进入Filters标签,勾选Use Filters

在Request Headers中,勾选Show only if URL contains,并在后面的输入框中填写希望截取的URL。同理,也可以勾选Hide if URL contains,隐藏特定的请求。

除此之外,还可以直接修改Request或Response包体。

AutoResponder

AutoReponder可以截获Request URL,并用其他URL进行Respond。利用AutoResponder,也可以实现将请求引导到指定机器的功能。

将原URL截获后,甚至可以直接修改URL。截图请求时也可以有很多方式,包括URL正则匹配、包体匹配和Headers匹配等。

此外,AutoResponder支持设置断点。可以在截获请求后,在断点处修改请求或者响应。

FiddlerScript

FiddlerScript就是通过JScript.NET语言(可以约等于JS),直接修改Request和Response,能够实现上述各种功能。对于熟练的专业用户来说,会更加方便灵活。

使用FidderScript建议安装第一节所说的插件,安装后就可以直接打开FiddlerScript标签,直接修改代码。

在OnBeforeRequest函数中修改:

添加Headers

oSession.oRequest["http_net_type"] = "1";

添加Cookies

// 增加预览机标识
oSession.oRequest.headers.Add("Cookie", "pub_env=1");

匹配URL,防止添加的字段干扰到其他网页

if (oSession.uriContains("c.tieba.baidu.com")) {  
    // TODO
}

更多用法,请参考Fiddler Documentation

Macbook合盖子或者休眠后没声音

在安装有OSX 10.9 Mavericks的Mac中,包括升级或者直接购买的Mac,在合上盖子或者休眠重开后,经常会遇到没有声音的情况
忍了很久后,今天终于找到解决方法

简单的说,就是在Terminal执行下面两条

sudo kextunload /System/Library/Extensions/AppleHDA.kext  
sudo kextload /System/Library/Extensions/AppleHDA.kext
Mac Mail无法退出

Mac Mail在国内网络状况下,和gmail一起总是会有点问题。 收件箱里选择删除一封gmail邮件,并用command+q关掉Mail。 如果删除gmail失败的话就会报错,之后Mail就会处于一种卡死的状态,退不出来也进不去。 只能选择:

ps aux|grep Mail
kill -9 xxxx

这个事情遇多了,搞了个更简单粗暴的shell脚本

#!/bin/bash
PID=$(ps aux|grep $1|grep -v grep|tail -1|awk '{print $2}')
kill -9 $PID

直到后来,我试了下zsh的自动补全参数功能,输入kill -9之后再输入Mail就会自己智能获取PID,因此这个脚本瞬间没意义了。