知道番茄工作法这个概念一段时间了,但是一直没有找机会真正了解一下。前几天借着买书凑单的机会买了一本「番茄工作法图解」,花了2个小时阅读了一下。
试用 Zotero
Zotero 简介
[Zotero][1] 在其主页上是这样介绍自己的:
Zetero 是一个自由且易用的工具,可以帮助你收集、整理、引用和分享你的研究源。
Zotero [zoh-TAIR-oh] is a free, easy-to-use tool to help you collect, organize, cite, and share your research sources.
首先,Zotero 是一个活跃的开源软件,代码托管在 [Github][2] 上;其次,它是一个文献管理软件,可以导入 PDF 文件。导入 PDF 时,具有神奇的 PDF 元数据搜索能力,对于已经出版的论文,结果很令人满意;最后,它是一个知识管理软件,你可以:
- 收集信息。
- 使用 Firefox、Chrome、Safari 插件,随手收藏喜欢的网页,包含网页的快照(个人非常喜欢这个功能)。
- 对于配置了 Translator 的网页,可以抓取网页中的信息添加到 Zotero 的数据库中。
- 组织信息。
- 为条目增加分组。
- 为条目增加标签。
- 在线同步。
- 多用户协作。
插件 Zotfile
[Zotfile][3] 是针对 Zotero for Firefox 的一个插件,可以添加附件、重命名 Zotero 库中的 PDF 文件以及将附件复制到指定的文件夹。
根据条目信息重命名 pdf 文件的功能非常实用
注意: Zotfile 暂时还不支持 Zotero 4.0,想要使用 Zotfile 得下载 Zotero 3.0 for Firefox。
与 Evernote 的对比
月初因为 Evernote 的流量超了,所以购买了一个月的高级用户。对于高级用户的各种功能整体上非常满意(特别是每日都有很多笔记进账的成就感),所以打算继续购买。但是在使用了 Zotero 之后,不禁要重新考虑一下。以下是我对两者进行的比较:
比较方面 | Zotero | Evernote |
---|---|---|
采集 | 支持 Chrome、Safari 和 Firefox;</br>针对[部分网站][4]有数据收集功能;</br>针对文献,可以下载 PDF 全文; | 支持 Chrome、Safari 和 Firefox;</br>[悦读][5]插件好用; |
使用 | 只支持标签的搜索,全文搜索需要借助其他工具; | 提供全文搜索;</br>高级版提供 PDF 的 OCR 功能; |
费用 | 100M的免费空间;</br>可以将文件保存到 Dropbox; | 免费用户每月提供 60M 免费上传流量;</br>高级用户每月 5$( 年费为 45$):</br><li>上传流量增加为 1G;</li><li>移动端离线查看;</li> |
问题 | 需要使用第三方的同步工具,比较麻烦;</br>同一个网站的多个快照不能共享相同的文件,相同的文件被保存了多份,占空间;</br>笔记的编写不能定制字体; | 无法编辑 HTML 文件,导致收藏的网页有时不够美观;</br>不能使用 Markdown;</br>需要每月 5$ 的费用; |
在比较之后的感受是,Zotero 和 Evernote 是两个侧重方面不同的软件:
- Zotero 更侧重于文献和网页的采集,而 Evernote 则更侧重于用户的自由编写。
- Zotero 专注于信息的整理,做好一个辅助研究的工具,而 Evernote 则更倾向于成为使用者输出内容的主力。
结论是:在网页和文献的收集方面可以侧重于使用 Zotero,在输出信息或者策划活动时还得依靠 Evernote。
结论
作为一个开源软件,Zotero 竟然能做到如此贴心好用,非常值得一试,也许你也会像我一样,对它爱不释手。
更多信息
关于软件的介绍总是写得不够具体,不够明白,自己还需要多加练习才行。更多信息可以参考 [阳志平][6] 的几篇博客以及其中提到的一些链接:
- [Zotero(1):文献管理软件Zotero基础及进阶示范][7]
- [Zotero(2):作为知识管理工具的Zotero][8]
- [Zotero(3):平板与社交:再谈研究辅助工具Zotero兼配套APP][9]
- [Zotero(4):Zotero之Zotfile插件的使用][10] [1]: http://www.zotero.org/ [2]: https://github.com/zotero/zotero [3]: http://www.columbia.edu/~jpl2136/zotfile.html [4]: https://github.com/zotero/translators [5]: http://www.yinxiang.com/clearly/ [6]: http://www.yangzhiping.com/ [7]: http://www.yangzhiping.com/tech/zotero1.html [8]: http://www.yangzhiping.com/tech/zotero2.html [9]: http://www.yangzhiping.com/tech/zotero3.html [10]: http://www.yangzhiping.com/tech/zotero4.html
OS X 10.9 Mavericks 下使用 rbenv
rvm 换到 rbenv 的原因
使用 Octopress 一段时间了,一直使用 rvm 进行 Ruby 和 gem 的版本管理。直到最近了解到 rbenv ,才知道 rvm 不是唯一选择。
rbenv 的实现非常简洁(没有搞懂 rvm 是什么原理),简洁到作者在用几段话就说明白了。
删除 rvm
使用这条命令删除 rvm 相关的文件:
$ rvm implode
如果有文件因为权限的问题无法删除,就 sudo 删除一下。
$ sudo rm -rf .rvm
在 OS X 10.9 Mavericks 下如何安装和使用 rbenv:
因为从 Xcode 5.0 开始,不再默认将头文件放在 /usr/include 中,所以在编译的过程中需要特殊指定头文件的位置,或者安装 Command Line Tools。这里推荐安装 Command Line Tools:
``` sudo xcode-select --reset ```安装 rbenv:
``` brew update brew install rbenv ```将 rbenv 初始化命令放入 .zshrc 或者其他终端启动执行的文件:
``` echo 'eval "$(rbenv init -)"' >> ~/.zshrc source ~/.zshrc ```安装 ruby-build 和 rbenv-gem-rehash:
``` brew install rbenv-gem-rehash brew install ruby-build ```安装指定版本的 ruby:
``` CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --without-tcl --without-tk" rbenv install 2.0.0-p195 ```
__注意:__如果你需要安装 1.9.3 以前版本的 Ruby(比如说 1.9.3-p0),可能需要安装 apple-gcc42:
brew tap homebrew/dupes
brew install apple-gcc42
然后建立软连接之类的,自行搜索吧(不知道具体从 1.9.3-p 多少开始可以使用 llvm 编译,尝试 install 就会有相关的提示)。
参考链接
PPI vs. DPI: 有什么区别?
Photoshop 新建图像窗口中 Resolution(解析度)这个参数我一直不明白,刚好又被问到了这个问题,所以就搜了一下。搜索到的中文内容看得我一头雾水,倒是这篇英文,通读了几遍,觉得自己搞清楚了,顺带就翻译了一下,搞清楚文中的更多细节。
翻译的文章:PPI vs. DPI: what’s the difference?
如果你制作过打印出来的设计,使用过 Photoshop 或者其他修图软件,你一定遇到过这两个名词—— DPI(dots per inch)和/或 PPI(pixels per inch)。更有可能的是,你被不懂这些名词意义的客户问到过一些让人疑惑的关于 DPI 或 PPI 的问题。在你抱怨之前,不妨停下来发问:你自己对这些名词了解多少?
Adobe Phtoshop(左侧)提到 PPI 时使用的是 “pixels per inch”,但是在接下来的内容里我们会看到,“Resolution”这个词的用法仍然让人误解;Apple Preview(右侧)使用 DPI 来代表实际上的 PPI,让人误解。
在 DPI/PPI 问题上感到不知所措一点也不难堪;因为这个世界正在尽人类想象所能地使其变得难懂。在众多原因中,有一个原因起了主要的作用,那就是有一些人在使用这两个名词时,实际上指代的是完全不同的东西。但是,不必担心:在这个短文的结尾,你就能完全理解这两个名词,并让你感到足够来回答将来的客户。
Pixels Per Inch(PPI)
我们从这里开始是因为,如果你是一个设计师,你首要关心的内容将是 PPI。DPI,我们在后面会讨论,指的是打印设备的一个技术指标,这并不直接关系到你——这是打印店的领域。现在,可以这样说吧,当人们提到“DPI”时,他们实际上指的是“PPI”——实在是太多了,所以这就变成了一种你必须容忍的约定俗成(Apple,Microsoft 和 Adobe 对于这种误用都有责任)。重要的是,当别人使用 DPI 时,你能够分辨指的是真正的 DPI 还是 实际上的 PPI。阅读接下来的内容,你就会明白。
PPI 的数字基础
首先,什么是 pixel?这看起来是个原始的概念,但是很多误解都是从这里开始的。Pixel 表示的是“图片的元素”。它是人眼可分辨的电子显示设备的最小物理组成部分。足够靠近你显示屏上的图片你就会看到他们:一排一排的小方块。换句话说,他们也是一个电子图片的最小可寻址单元。
这张图中的方块代表 pixel。当你足够靠近相当低像素的图片时,你可以看到类似的东西。图片来自 PistoCasero
实际上,这些 pixel 是由一些“sub-pixel”组成的——红色,绿色和蓝色的光学元件。肉眼无法看到这些元素是因为累加颜色的过程将这些“sub-pixel”混合为一个单一的色调,并呈现为一个 pixel。但是这些内容并不和设计师直接相关。
__困惑点:__可悲的是,一些生产厂商将这些 sub-pixel 描述为“dot”,因为这些 sub-pixel 和打印机中的 CMYK dot 相似,工作方式相同,但是是抵消光源的过程(后文详述)。然后,这些厂商开始吹嘘他们显示屏幕的“DPI”。如果你看到这些,请无视!这是一种令人恼怒的名词误用,也很有可能“击倒”你。
这两张图给你了一个物理或者机械上对于 pixel 本质的认识,向你展示了红色、绿色和蓝色的 sub-pixel 的光学元件。左侧是一个巨大 LED 显示屏的 pixel 阵列(来自 BruceTurner);右侧是一个 iPad 4 屏幕的超近距离照片(来自 citoki0815)
需要注意的是,pixel 是一个固定大小的物理物体(尽管还没有一个标准;不同的设备的 pixel 有着不同的形状和尺寸,已知最小的只有11¼ μm)。因此,一个屏幕上的 PPI 是固定的——不是你在某个地方输入一个新的数字就能够更改的。大部显示器都是 66 - 130ppi。
上面所示的方块是在被缩放为 100% 时的 200 x 200 pixel 的方块。查看你显示器的 PPI,可以把你的显示器也缩放为 100%, 然后量正方形的长和高。用 200 除以长和高就是显示的水平和垂直 PPI。
这是什么意思?__如果你只是在一个屏幕上看图片,屏幕的 PPI 并不重要,因为你屏幕的 PPI 已经是确定的了。__所以,下一次有人告诉你向一个网站上传一个 72ppi 的图片(因为 72ppi 是“网络的解析率”)时,你可以告诉他们,他们增加了一个可笑的额外步骤。除非他们关心网站的访问者可能将图片拷贝出去并打印出来,否则 PPI 无关紧要。一个 72ppi 的图片和一个 3000ppi 的图片在屏幕上是一样的。
需要了解的内容:PPI 和打印的目标
所以我们现在知道了:只有要打印出来时,设定 PPI 才有效——将数字化的图片转化为非数字化的图片的转变过程。“但是,等一等”你说,“我们讨论的是每英寸有多少个 pixel,但是打印纸没有 pixel 啊!”对,这很让人困惑。请继续读。
在打印的过程中,所有在屏幕上组成图片的物理 pixel 都被转换成不同色调的小正方形。显而易见的是,纸上没有发光设备意义上的 pixel,而是更加抽象意义的一个方块形元素的“pixel”(这里为了以示区分,这种“pixel”以引号标注)。
Yuriy Babich 的艺术品使用一种粗糙的、打印出来的“pixel”样式的来显示出抽象的效果(来自 Укларочить)
这是什么意思?纸上的“pixel”没有固定的大小。如果你增加图片的大小 300%,那么纸上的“pixel”就会增大三倍,结果就是一个更大,而且看上去更加模糊的图像。
你要如何增加或者减小输出图像的大小呢?通过调节 PPI 的数值。
假设你有一个 300 x 300 pixel 的图像。如果你设定 PPI 为10,那么图像将会相对非常大:将会是 30 x 30 inch。如果你设定 PPI 为 300,那么打印出来将会非常小:每英寸 300 个 pixel,纸张将会是 1 x 1 inch。这回合理了?
__简单来说: 对于最终的打印输出而言,将 PPI 输入认为是一种调节物理大小的方式,而不是分辨率。__减少 PPI,相应的就增大了打印出的大小,输出的图片看上去质量也比较差,因为“pixel”也更大更可见。到那时记住,这只是一种相对的标准;如果你站的足够远,图片又会和原来一样清楚。图像的绝对分辨率并没有改变;还是有和原来一样多的“pixel”。所以,增加一个图像的分辨率的方式是让图像拥有更多额外的 pixel,而不是增加 PPI。
__注意:__简单地扩大一个图像的 pixel 数目通常不是增加质量的一个好方法,因为计算机将会用奇怪的像素塞满整幅图像。
凑近仔细看这个广告牌,像素清晰可见(上面的 dot 也一样,接下来会进一步讨论 dot)。但是在一定距离之外的路人看到它时,会觉得这张图片很清楚(来自 Friction NYC)
Dots Per Inch (DPI )
这个章节会很短,因为如果你是一个设计师,DPI 基本上不会困扰到你。但是,这也是一个需要理解的重要概念。
这是来自 Nick Sherman 的一张图片,其标题为 “Bits of Bits”,展示了一幅使用了低 DPI 的低分辨率的图片,很好的说明了 PPI 和 DPI 的概念。
打印机不能通过纸上通过叠加像素的方式重现一张图片。取而代之的方式是通过散出4种颜色(青色,品红,黄色和黑色,即Cyan, Magenta, Yellow and Black,简称为CMYK)组合(通过减色模型可以得到一定范围的色调)的 dot 来重现一幅图像。这些 dot 之间一定会有空隙,而这就是 DPI 所描述的:它们的密度。
左侧的图片说明了一个打印机是如何使用 dot 重组一幅图片的;右侧的图片是打印出的 dot 的近距离观看,很有可能是在很低的 DPI 的情况下(两幅均来自 Wikipedia)。
比如说,你以 600 dpi 来打印一幅 150ppi 的图像,那么每个“pixel”将会包括16个 dot(600 dot/150 “pixel” = 4 x 4 / “pixel”)。
客户关心这个是因为,根据经验来说,DPI 越高,图像的色调和颜色混合的平滑程度就越好(但是同时也需要使用更多的抹灰和花费更长的时间打印,所以在家庭打印的时候要注意这一点)。150dpi 通常被认为是图书杂志这类高质量摄影制品的最低标准。报纸通常使用 85dpi 并且结果也很明显:独立的 dot 可见,而且丢失了一些细节。广告版通常使用的是 45dpi,因为你通常在很远的地方看,所以无法分辨。通常来说,dot 矩阵打印机可打印的 dpi 范围为 60 - 90,喷墨打印机的 dpi 范围为 300 - 600,而激光打印机为 600 - 1800。
__注意:__更高的 dpi 也不一定等统一更好的质量,因为 dot 的大小和形状并没有标准,这几意味着一个厂商的 1200dpi 可能和另一个厂商的 700 dpi 效果相同。但是总之,这不是你的问题。
__简而言之:__DPI 只是打印机的技术参数,就像是你电脑显示器的 pixel 分辨率。作为一个设计师,你无法控制这个参数。你所能只的就是向你的用户推荐一个专业的打印店,并且了解这个店设备的参数,并使用这些参数。
关于 PPI vs. DPI 是否还有其他的问题或者指点?
相关文章:
History of the polka dot: art, the cosmos and graphic design
新相机 —— GF5
今年的7月24日是我的24岁生日,买了我人生的第一部相机—— GF5。
记录生活
人是很健忘的,昨天去家附近很久没有去的游泳馆,只是感觉到一点点熟悉,曾经这里发生的故事和结识的朋友都已经完全模糊了。
如果生活缺少了记录,我们要如何知道自己是谁,曾经做了些什么,有过什么样的梦想,将要去向何方?记录生活就像是为岁月刻下印记,记录过了,你才终于可以完全放下遗忘的包袱,尽情地出发。
年初换手机很大一部分原因是想要一个好用的摄像头,能随时随地地记录我的生活。一直向往一台单反,但是心里也有诸多的抵触,向往是因为对于物的喜爱,抵触一部分是因为个头太大,携带不方便,还有被认为装B的嫌疑,另一部分是因为害怕本末倒置,本该注重生活本身,却过于追求记录。
买 GF5 我也没经过太多的比较,一方面预算比较有限,一方面对于参数的比较也有点疲了,买最新款的肯定没有错,如果天天盯着性价比,盯着这个功能,那个功能的,就又沦为了比较的奴隶,忘了自己为什么要买个相机。作为一个微单,它还是可以换镜头的,待学习一段时间的摄影,有了一些预算,可以再买几个实用的镜头。
学习摄影
想要拍出好的照片,甚至是清晰的照片,都需要学习摄影的知识,了解基本的成像原理。学习的过程中我发现,学习摄影和计算机有些不同,计算机方面的知识很容在实践中掌握内在的规律,但是相机是个不能拆开的黑盒子,想要轻易地知道咔嚓一声的背后发生了什么有点困难。
作为一个喜欢刨根问底的程序员,找不到一本说得特别明白的摄影书很让我苦恼,大部分我看到的书都在讲怎么构图之类的高级的主题,而对于成像的原理说明得很少,大概是写书人觉得这些内容太过于简单了吧。但是同时,摄影中的名词和规律相比计算机要少,哪怕一个名词理解个几天,个把月也都弄清楚了,而且进步立竿见影,拍出来就看到了,不必等待用户的反馈。
美不要理论
虽然摄影需要学习技巧,但是好照片居然是不需要任何理论和技巧的。一张好的照片给人的冲击就像是一则寓言,久久凝视,就能给人感动,让人好奇,渴望追随,找回初心。
人与人成长的环境不同,资质也有所差异,所以在面对我和别人取得成绩上的差距时,我也多了一份从容。
Mike Matas 的照片实在是太美了,值得去看一看。
PS: 附上两张在北京海洋馆拍的样张
- EOF -
常用的 Chrome 插件
我爱折腾
和一些程序员一样,我喜欢折腾。面对不断变化、让人眼花缭乱的新软件,我总结自己的折腾分为两个阶段:
- 要折腾!首先,好的工具可以提供生产力。其次,拒绝画地为牢。最后,接触新鲜事物可以开拓自己的眼界。
- 不折腾。折腾了一段时间后,发现自己迷失在追求更新更快的工具的路上,磨刀误了砍材工。觉得得不偿失,于是删掉自己用过的大部分软件,只留下最好用,最喜欢的工具,一切又变得清新了。自己美其名曰:返璞归真。
这样不断折腾的过程虽然花费了很长时间,但是留下了一些好用软件的使用经历,算作是花费时间的回报。
浏览器使用历史——我爱插件
浏览器就是一个真实的例子。
最初我喜欢使用 Chrome ,想到什么功能就搜相应功能的插件安装,结果安装了一大堆插件。慢慢地,不知道是不是插件的问题, Chrome 变得越来越慢(可能也和电脑的硬件性能有关),再加上我结识了 Vimperator,我就放弃了 Chrome,改用 Firefox。使用有 Vimperator 插件的 Firefox,一切键盘操作,方便快捷。但是随着 Safari 的不断进化、iOS 设备同步需求的增强以及升级后 Firefox 对插件兼容性的长时间检查的不耐心,我逐渐放弃了 Firefox,投奔了 Safari 的清爽世界。
上面的描述是我不断折腾更换浏览器的一个循环。很快我进入了下一个循环,渐渐地,我又回到了 Chrome 阵营,原因如下:
- Mac 下的 Chrome 表现日趋好转,特别是在retina屏幕上页面滑动的流畅性达到了可用的程度。
- Ubuntu 下表现不错。
- 最主要的原因,有几个特别好用的插件让我用得很爽。
现在想想,除了浏览器本身的功能之外,影响我选择浏览器的重要因素只有一个:插件。
正在使用的插件
Chrome 商店里的插件实在太多,淘到自己喜欢的插件一定要记录一下,免得以后想用的时候又找不到。
一翻
什么 VPN、GOAGENT,统统不喜欢,这个插件的翻墙模式才是我最喜欢的。
任何好用的设计都应该是让人感觉不到,却又踏实工作的。我最早在使用的 GOAGENT,需要打开终端,输入一行命令,看着一行行的 LOG 不断输出,然后才能访问喜欢的网站。这个过程总是给我不舒服,很慢很费电的感觉。当然,也不指望免费的 GOAGENT 能提供多好多快的网络连接。
购买过 MxVPN 的收费服务,每次都打开那个客户端等待刷新,一大堆服务器列表,一个一个去尝试,在校园网环境下有些无法访问,有些验证出错,真是很不爽的体验。
虽然一翻是个服务收费的插件(难道你认为不应该收费吗),但是使用这个软件让我自由地右键-〉GOOGLE搜索带来的效率的提高远远超过付出的费用。其安静省心的工作方式,让任何小白用户无须配置,就可以立刻使用。
推荐购买使用。
下载地址:一翻
截图:
One-Click Extensions Manager
打开 Chrome 插件管理的界面是一件麻烦的事情,这个插件可以快接地启用和禁用插件,避免 Chrome 变得越来越慢。
下载地址:One-Click Extensions Manager
截图:
WhatFont
可以方便地查看网页上的文字到底使用的是什么字体。(查看作者的网站才知道,作者是个中国人,做了一些很牛X的事,值得进一步关注。)
下载地址:WhatFont
截图:
Hover Zoom
鼠标放在小图片上就能显示大图的神奇插件。
下载地址:Hover Zoom
截图:
Evernote Web Clipper
任何使用Evernote做整理的人都需要的软件。
下载地址:Evernote Web Clipper
截图:
Clearly
有的博客的字体和配色实在不适合阅读,使用 Clearly 可以轻松地阅读,并且保存没有乱七八糟格式的内容到Evernote。
下载地址:Clearly
截图:
cookie.txt export
如果有什么内容必须登录才能下载,而你又不喜欢使用 Chrome 的下载功能,使用这个插件配合 wget 是你的另一个选择。
下载地址:cookie.txt export
截图:
json tool
遇到 JSON 内容就靠它了。虽然有很多相似功能的插件,但是还是这个插件的功能最实用。
下载地址:json tool
截图:
Better History
比 Chrome 自带更好用的历史统计和搜索。
下载地址:Better History
截图:
妈妈再也不用担心我的macbook发烫计划2.0
没有广告看 youku ,如果你使用的是 Mac 系统,还能让你的笔记本安静一些。
截图:
Tmux 快速教程
翻译的文章:A Tmux Crash Course
译文
我已经使用 Tmux 近 4 个月了,它和 vim 一样成为了我工作流中不可或缺的部分。Pane 和 windows 的管理,在输出信息中可导航的复制模式以及 seesion 的管理让 Tmux 成为了命令行爱好者(特别是 vim 使用者)毫不费力就能使用的工具。我收集了一些我日常使用的 tmux 命令,这些命令让我的工作更加高效。
如果我提到的 tmux 命令不是默认的快捷键, 我会在介绍的间隙说明。
Session 管理
Seesion 可以有效地分离工作环境。我有一个“工作” session 和一个“娱乐” session;在“工作”中,我打开所有日常开发需要的内容,而在“娱乐”中,我只打开当前开源的 gem 或者在家 hack 的一些东西。
- tmux new -s session_name <p>创建一个叫做 session_name 的 tmux session</p>
- tmux attach -t session_name <p> 重新开启叫做 session_name 的 tmux session </p>
- tmux switch -t session_name <p>转换到叫做 session_name 的 tmux session</p>
- tmux list-sessions <p>列出现有的所有 session </p>
- tmux detach (prefix + d) <p>离开当前开启的 session</p>
Windows
Tmux 有一个含有标签的界面,但是它命名这些标签为 “Windows”。为了保持有序,我重新命名了所有我使用的 windows;如果我正在编写一个 gem,我会使用这个 gem 的名字来命名 window。客户端的应用程序也一样。这样,我就能通过名字而不是运行的程序找到相应的 window。
- tmux new-window (perfix + c) <p> 创建一个新的 window </p>
- tmux select-window -t :0-9 (perfix + 0-9) <p>根据索引转到该 window</p>
- tmux rename-window (perfix + ,)<p>重命名当前 window</p>
Panes
Panes 让我的开发时间从平淡变为棒极了。它们也是我卸载 MacVim 并且单独使用 iTem2 开发的原因。我无须切换应用程序以变换上下文(编辑,浏览 log,使用IRB,等)。任何我想做的事情,我可以在一个终端中完成。有人认为 OS X 的 Cmd + Tab 很快,我不这么认为。
- tmux split-window (perfix + “) <p>将 window 垂直划分为两个 pane</p>
- tmux split-window -h (perfix + %) <p>将 window 水平划分为两个 pane</p>
- tmux swap-pane -[UDLR] (perfix + { or }) <p>在指定的方向交换 pane</p>
- tmux select-pane -[UDLR] <p>在指定的方向选择下一个 pane</p>
- tmux select-pane -t :.+ <p>选择按数字顺序的下一个 pane</p>
其他有益的 TMUX 命令
- tmux list-keys <p>列出所有可以的快捷键和其运行的 tmux 命令</p>
- tmux list-commands <p>列出所有的 tmux 命令及其参数</p>
- tmux info <p>流出所有的 session, window, pane, 运行的进程号,等。</p>
- tmux source-file ~/.tmux.conf <p>重新加载当前的 tmux 配置(基于一个默认的 tmux 配置)
必须用到的几条配置
这是几个我必须用到的配置:
# remap prefix to Control + a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# force a reload of the config file
unbind r
bind r source-file ~/.tmux.conf
# quick pane cycling
unbind ^A
bind ^A select-pane -t :.+
工作流程
在白天,我的工作包括编码一个或者两个 Rails 应用,修改我的 dotfiles,运行 irssi,还有可能在另一个窗口打开一个 vim 来做笔记。如我提到的,我会运行所有这些在一个 tmux 的 session 中, 并且在不同的 windows 中来回切换。
特别是当我在做 Rails 工作时,我必须用一个 75% / 25% 的垂直分割放置 vim 和一个终端,并在其中运行测试,和 git 交互,以及写代码。如果我在运行测试或者使用 ‘git diff’,我想要看到多余 25% 的输出,我会使用 tmux 来交换 pane 并切换到复制模式来查看我想查看的东西。
最后,我在全屏模式运行 iTems2。为了一个编辑器和终端而切换 OS X 的应用实在是太愚蠢了。
更多学习的链接
试用 Farbox
Hi, Farbox Editor.
在使用 Octopress 和 Github Pages 作为自己的 Blog 系统,种种原因,好久没有更新。
前阵子在 V2EX 上就看到了这个 Farbox 的项目,当时还不记得名字,只知道视频和文案做得很好,但是也没好到想让我试一试的程度。今天在 V2 上又看到发布了工具,遂觉得这个项目很有爱,就尝试了一下,结果一发一个中午都不可收拾。
但是,折腾的过程中有两点让我很不开心:
- 没有类似 Octopress 本地测试的程序。这导致我修改一个参数,等 Dropbox 同步成功以后,一个劲地刷页面,刷到有效果为止。期待有一个可以在本地用于调试 Theme 的程序,这样既可以方便Theme的开发,又能打破程序员心里对这个服务器里“黑盒子”的结缔。(试了一下发现,试用Farbox Editor的发布按钮可以很快地查看文章的变化。)
- 文档不够健全,比如说我想修改 Theme 中指示的 site.title 变量,于是在 site.md 中设置的 title 变量,但是没有效果。这是因为 site 中的 title 是 site.config.title 变量,我搜了半天才发现是这个问题,修改 Theme 中的变量了事。
吐槽归吐槽,用 Dropbox 来写 Blog 这个点子是好的,工具也做得简介明了,希望 Farbox 能发展得更好。
使用的地址
使用的主题
主题来自《衣不如新》,未经过修改,直接试用,感谢他。
豆瓣图书和电影列表
一年以前写的抓取自己豆瓣电影和图书列表的脚本。
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
# auther: jeswang
# finished time: 2012.2.4
import os
import stat
import urllib2
import urllib
import time
import datetime
import threading
import string
from time import sleep
from BeautifulSoup import *
BOOK_HEAD = '''---
layout: page
title: "Book"
sharing: true
footer: false
---
'''
MOVIE_HEAD = '''---
layout: page
title: "Moive"
sharing: true
footer: false
---
'''
def getList(base_url, list_kind):
c = urllib2.urlopen(base_url + list_kind +
'?sort=time&start=0&filter=all&mode=grid&tags_sort=count')
soup = BeautifulSoup(c.read())
c.close()
totalNumber = soup.find('span', {"class": "subject-num"}).contents[0]
separator = "/"
# print totalNumber
totalNumber = totalNumber[totalNumber.find(separator) + 7:]
totalNumber = string.atoi(totalNumber)
# print totalNumber
bookList = soup.findAll('a', {"class": "nbg"})
# print bookList
beginNumber = 15
while totalNumber - 15 > 0:
c = urllib2.urlopen(base_url + list_kind + '?sort=time&start=' +
str(beginNumber) + '&filter=all&mode=grid&tags_sort=count')
soup = BeautifulSoup(c.read())
c.close()
bookList = bookList + soup.findAll('a', {"class": "nbg"})
totalNumber = totalNumber - 15
beginNumber += 15
return bookList
if __name__ == "__main__":
book_file = file('../octopress/source/book/index.markdown', 'w')
book_file.write(BOOK_HEAD)
print "获取正在读的书籍列表"
base_url = 'http://book.douban.com/people/dowang/'
book_file.write('''## 在读的书
''')
for book in getList(base_url, 'do'):
book_file.write(str(book).replace('spic', 'mpic') + ' ')
print "读过的书籍列表"
base_url = 'http://book.douban.com/people/dowang/'
book_file.write('''
## 读过的书
''')
for book in getList(base_url, 'collect'):
book_file.write(str(book).replace('spic', 'mpic') + ' ')
print "想要的书籍列表"
base_url = 'http://book.douban.com/people/dowang/'
book_file.write('''
## 想要读的书
''')
for book in getList(base_url, 'wish'):
book_file.write(str(book).replace('spic', 'mpic') + ' ')
movie_file = file('../octopress/source/movie/index.markdown', 'w')
movie_file.write(MOVIE_HEAD)
print "获取正在看的电影列表"
base_url = 'http://movie.douban.com/people/dowang/'
movie_file.write('''## 在看的电影
''')
for book in getList(base_url, 'do'):
movie_file.write(str(book).replace('spic', 'mpic') + ' ')
print "看过的电影列表"
movie_file.write('''
## 看过的电影
''')
for book in getList(base_url, 'collect'):
movie_file.write(str(book).replace('spic', 'mpic') + ' ')
print "想要的电影列表"
movie_file.write('''
## 想要看的电影
''')
for book in getList(base_url, 'wish'):
movie_file.write(str(book).replace('spic', 'mpic') + ' ')
print "Finish!"
使用方法:
- 要把文件保存在和Octopress同级的另一个目录下
- 修改代码中的dowang为你的豆瓣名字。
- 给Octopress加上两个链接,方便访问。
定期运行一下,就可以让Octopress有你自己的豆瓣列表了。
我的 VIM 配置文件
这学期的课都上完了,终于有时间和代码相处了。
好久没有使用vim,有些快捷键的淡忘了。
整理一下配置文件,重新来过。
inoremap <C-e> <END>
inoremap <C-a> <HOME>
inoremap <C-f> <Right>
inoremap <C-b> <Left>
nmap <Left> :bp<CR>
nmap <Right> :bn<CR>
nmap <F4> :bd<CR>
set nocompatible
syntax on
filetype off
colorscheme desert
set nu
set mouse=a
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'
filetype plugin indent on
Bundle 'Lokaltog/vim-powerline'
set nocompatible
set laststatus=2
set t_Co=256
Bundle 'ZenCoding.vim'
Bundle 'a.vim'
Bundle 'mileszs/ack.vim'
Bundle 'cocoa.vim'
Bundle 'FencView.vim'
Bundle 'Markdown-syntax'
Bundle 'unite.vim'
Bundle 'Syntastic'
Bundle 'Tagbar'
let g:tagbar_ctags_bin='/usr/local/bin/ctags'
let g:tagbar_width=26
Bundle 'taglist.vim'
Bundle 'taglist-plus'
let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=1
let Tlist_Ctags_Cmd='/usr/local/bin/ctags'
Bundle 'The-NERD-tree'
let NERDTreeShowBookmarks=1
Bundle 'altercation/vim-colors-solarized'
" set background=dark
" colorscheme solarized
Bundle 'neocomplcache'
let g:neocomplcache_enable_at_startup=1
autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
Bundle 'pyflackes'
Bundle 'python_flod'
if has("gui_running")
" set guifont=Microsoft\ YaHei\ Mono:h16
set guifont=Monaco:h14
set guifontwide=Microsoft\ YaHei:h15
set linespace=2
set guioptions-=T
set guioptions-=r
set guioptions-=L
set showtabline=1
set noimd
endif
- EOF -