<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Out Of The Office</title>
	<atom:link href="http://ryanye.72pines.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ryanye.72pines.com</link>
	<description>A Ryan &#38; Lilian's Blog</description>
	<pubDate>Sun, 13 Sep 2009 03:42:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SSH Forwarding</title>
		<link>http://ryanye.72pines.com/2009/09/13/ssh-forwarding/</link>
		<comments>http://ryanye.72pines.com/2009/09/13/ssh-forwarding/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 03:42:31 +0000</pubDate>
		<dc:creator>Ryan Ye</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[perforce]]></category>

		<category><![CDATA[port forward]]></category>

		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://ryanye.72pines.com/?p=19</guid>
		<description><![CDATA[其实这实在是一个老得掉牙的技术了，但因为它实在太酷，所以忍不住在这里再介绍一下。
从一个实际的问题出发，有一个MySQL的Server在远程的主机coolserver上。而我本地只能通过ssh来访问该主机，也就是用直接用mysql &#8211;host=coolserver是无法从本地直接访问那个database的。Ok，这样一来我只能很悲惨的用ssh连到coolserver，然后在server上用mysql的命令行来做数据库操作了（假设没有VNC或是X11 Forwarding）
现在我们来用ssh forwarding，假设那个数据库的端口是4001，在本地执行下面这条命令
ssh -L 4001:localhost:4001 coolserver
这时就有了一个本地4001端口到coolserver:4001的端口映射，这时在coolserver的MySQL Server就会如同运行在你本地机器上。
在本地启动任何的MySQL GUI Client，例如我用Sequel，在Connection的host里键入127.0.0.1，端口设为4001，直接connect就OK了。
再举个例子，有一个Perforce Server运行在远程的主机上，而你想把所有的文件都Sync到本地，用SSH Forwarding一样轻松完成，呵呵，具体步骤就不说了&#8230;
]]></description>
			<content:encoded><![CDATA[<p>其实这实在是一个老得掉牙的技术了，但因为它实在太酷，所以忍不住在这里再介绍一下。</p>
<p>从一个实际的问题出发，有一个MySQL的Server在远程的主机coolserver上。而我本地只能通过ssh来访问该主机，也就是用直接用mysql &#8211;host=coolserver是无法从本地直接访问那个database的。Ok，这样一来我只能很悲惨的用ssh连到coolserver，然后在server上用mysql的命令行来做数据库操作了（假设没有VNC或是X11 Forwarding）</p>
<p>现在我们来用ssh forwarding，假设那个数据库的端口是4001，在本地执行下面这条命令</p>
<p>ssh -L 4001:localhost:4001 coolserver</p>
<p>这时就有了一个本地4001端口到coolserver:4001的端口映射，这时在coolserver的MySQL Server就会如同运行在你本地机器上。</p>
<p>在本地启动任何的MySQL GUI Client，例如我用Sequel，在Connection的host里键入127.0.0.1，端口设为4001，直接connect就OK了。</p>
<p>再举个例子，有一个Perforce Server运行在远程的主机上，而你想把所有的文件都Sync到本地，用SSH Forwarding一样轻松完成，呵呵，具体步骤就不说了&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ryanye.72pines.com/2009/09/13/ssh-forwarding/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Better Vim (Continue)</title>
		<link>http://ryanye.72pines.com/2009/08/08/a-better-vim-continue/</link>
		<comments>http://ryanye.72pines.com/2009/08/08/a-better-vim-continue/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 07:34:29 +0000</pubDate>
		<dc:creator>Ryan Ye</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://ryanye.72pines.com/?p=11</guid>
		<description><![CDATA[许多人使用vim是迫不得已，因为当ssh到远程机器或是只有terminal的情况下，基本没有什么别的选择。他们无法理解为什么有人在自己本地的windows, linux或是mac上也使用vim，而不去用功能强大的IDE。
我对自己使用的工具非常在意，在本地使用vim的第一个原因是出于工具的连贯性。同样是进行文本编缉，若是不断在几种工具之间切换，必定不利于提升使用工具的熟练度。另一方面，vim相比目前流行的一些IDE，确实仍然有一些自己的优势。一个好的编缉器是可以大大提升coding效率，而这一提升在我看来又来源于两个方面：
1）针对编程语言的优化以及辅助功能：这其中包括变量、函数名的补全，函数声明与定义之间的跳转，自动缩进等等。虽然vim也提供了这方面的支持，但显然要弱于eclipse, xcode, netbeans, visual stuio这类IDE。
2）通用文本编缉的能力：我这里是指在一个文档中进行快速移动，删除和添加文本的能力，这是一个编缉器最基本的能力，也是vim的核心竞争力之所在。
稍有些vim使用经验的人都会用hjkl来进行移动，使手指不离开home row。也应该常常用w,b来进行word的前后移动，其实还可以用W, B来进行WORD的前后移动。注意在vim里word和WORD定义是不同的。前者可以用iskeyword来定义，而后者则由whitespace来分割。
这些仅是皮毛，不知道有多少用vim的人知道text-object? 我觉得这是vim非常实用，也很有特色的一个功能。很多人会用dw来删一个word，或是用cw来重写一个word，但在用这些命令之前你需要先把光标移动到word的第一个字符。实际上无论你的光标在word的什么位置，你都可以直接用diw, ciw来完成对整个单词的编缉。这里w就是一个text-object (word)，i表示inclusive，使操作对象仅仅为单词本身而不包括单词后面的空格。相对的还有daw, caw，aw不但包括当前的单词还包括它之后的空格。
再看个例子：
var text = &#8220;this is my second po&#60;cursor&#62;st about vim&#8221;
假设当前处于normal mode，光标在&#60;cursor&#62;位置，而你想把整个字串(this is my second post about vim)选中yank到clipboard中去。
Level 0：使用鼠标选中这个字串，然后按y(记得在vimrc里设置set mouse=a)。纯键盘则是按两下w一下e，到vim的最后一个字符，按v进入visual mode，再按7下b回到this的开始，然后按y。keystroke = wwevbbbbbbby
Level 1：keystroke = T&#8221;v,y （我很早就知道用f,F来查找字符，但t,T则晚许多，t是until的意思，也就是说会把光标移动到目标字符前一格。逗号则是反向进行上一次f,F,t,T的查找）
Level 2：keystrok = yi&#8221; (这里i&#8221;就是一个inclusive text-object，操作对象为整个双引号之内的所有文本）
vim有很多内置的text-object，除了word，单引号内文本，双引号内文本，括号内文本(包括小括号，中括号和花括号），还有tag内文本（在html/xml编缉时特别有用）。熟练的使用这些text-object绝对可以有事半功倍的效果。更有趣的是，你可以自己定义text-object，比如我就在python和javascript文件里定义了function text-object，按vaf就可以选中整个function，当然同样支持yaf, daf这些操作。
写到这里，有兴趣的话可以在vim里打:help text-objects
]]></description>
			<content:encoded><![CDATA[<p>许多人使用vim是迫不得已，因为当ssh到远程机器或是只有terminal的情况下，基本没有什么别的选择。他们无法理解为什么有人在自己本地的windows, linux或是mac上也使用vim，而不去用功能强大的IDE。</p>
<p>我对自己使用的工具非常在意，在本地使用vim的第一个原因是出于工具的连贯性。同样是进行文本编缉，若是不断在几种工具之间切换，必定不利于提升使用工具的熟练度。另一方面，vim相比目前流行的一些IDE，确实仍然有一些自己的优势。一个好的编缉器是可以大大提升coding效率，而这一提升在我看来又来源于两个方面：</p>
<p>1）针对编程语言的优化以及辅助功能：这其中包括变量、函数名的补全，函数声明与定义之间的跳转，自动缩进等等。虽然vim也提供了这方面的支持，但显然要弱于eclipse, xcode, netbeans, visual stuio这类IDE。</p>
<p>2）通用文本编缉的能力：我这里是指在一个文档中进行快速移动，删除和添加文本的能力，这是一个编缉器最基本的能力，也是vim的核心竞争力之所在。</p>
<p>稍有些vim使用经验的人都会用hjkl来进行移动，使手指不离开home row。也应该常常用w,b来进行word的前后移动，其实还可以用W, B来进行WORD的前后移动。注意在vim里word和WORD定义是不同的。前者可以用iskeyword来定义，而后者则由whitespace来分割。</p>
<p>这些仅是皮毛，不知道有多少用vim的人知道text-object? 我觉得这是vim非常实用，也很有特色的一个功能。很多人会用dw来删一个word，或是用cw来重写一个word，但在用这些命令之前你需要先把光标移动到word的第一个字符。实际上无论你的光标在word的什么位置，你都可以直接用diw, ciw来完成对整个单词的编缉。这里w就是一个text-object (word)，i表示inclusive，使操作对象仅仅为单词本身而不包括单词后面的空格。相对的还有daw, caw，aw不但包括当前的单词还包括它之后的空格。</p>
<p>再看个例子：</p>
<p>var text = &#8220;this is my second po&lt;cursor&gt;st about vim&#8221;</p>
<p>假设当前处于normal mode，光标在&lt;cursor&gt;位置，而你想把整个字串(this is my second post about vim)选中yank到clipboard中去。</p>
<p>Level 0：使用鼠标选中这个字串，然后按y(记得在vimrc里设置set mouse=a)。纯键盘则是按两下w一下e，到vim的最后一个字符，按v进入visual mode，再按7下b回到this的开始，然后按y。keystroke = wwevbbbbbbby</p>
<p>Level 1：keystroke = T&#8221;v,y （我很早就知道用f,F来查找字符，但t,T则晚许多，t是until的意思，也就是说会把光标移动到目标字符前一格。逗号则是反向进行上一次f,F,t,T的查找）</p>
<p>Level 2：keystrok = yi&#8221; (这里i&#8221;就是一个inclusive text-object，操作对象为整个双引号之内的所有文本）</p>
<p>vim有很多内置的text-object，除了word，单引号内文本，双引号内文本，括号内文本(包括小括号，中括号和花括号），还有tag内文本（在html/xml编缉时特别有用）。熟练的使用这些text-object绝对可以有事半功倍的效果。更有趣的是，你可以自己定义text-object，比如我就在python和javascript文件里定义了function text-object，按vaf就可以选中整个function，当然同样支持yaf, daf这些操作。</p>
<p>写到这里，有兴趣的话可以在vim里打:help text-objects</p>
]]></content:encoded>
			<wfw:commentRss>http://ryanye.72pines.com/2009/08/08/a-better-vim-continue/feed/</wfw:commentRss>
		</item>
		<item>
		<title>my first iphone app</title>
		<link>http://ryanye.72pines.com/2009/08/06/my-first-iphone-app/</link>
		<comments>http://ryanye.72pines.com/2009/08/06/my-first-iphone-app/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 15:55:48 +0000</pubDate>
		<dc:creator>Ryan Ye</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://ryanye.72pines.com/?p=6</guid>
		<description><![CDATA[自己的第一个iphone app，今天终于在app store上线了(free app)！多谢Damien的鼎力相助！
IceMetro Shanghai Subway Map Lite on iTunes Store!
说来惭愧，其实这个app早在五月份就写完了，一直拖到现在才发布，以后效率有待提高。当前发布的是一个简化版本，正式版其实code也基本写完了，希望月底前也能发布上去。大家有空也可以去看看Icecodez Blog，这个是将来是Damien和我发布软件的Offical Blog。
]]></description>
			<content:encoded><![CDATA[<p>自己的第一个iphone app，今天终于在app store上线了(free app)！多谢Damien的鼎力相助！</p>
<p><a title="IceMetro" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=325339593&amp;mt=8" target="_blank">IceMetro Shanghai Subway Map Lite on iTunes Store!</a></p>
<p>说来惭愧，其实这个app早在五月份就写完了，一直拖到现在才发布，以后效率有待提高。当前发布的是一个简化版本，正式版其实code也基本写完了，希望月底前也能发布上去。大家有空也可以去看看<a href="http://icecodez.com/" target="_blank">Icecodez Blog</a>，这个是将来是Damien和我发布软件的Offical Blog。</p>
]]></content:encoded>
			<wfw:commentRss>http://ryanye.72pines.com/2009/08/06/my-first-iphone-app/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Better Vim</title>
		<link>http://ryanye.72pines.com/2009/07/29/a-better-vim/</link>
		<comments>http://ryanye.72pines.com/2009/07/29/a-better-vim/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 11:42:48 +0000</pubDate>
		<dc:creator>Ryan Ye</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://ryanye.72pines.com/?p=3</guid>
		<description><![CDATA[自己用vim也有两年时间了, 现在我所有的coding和文本编缉都是在vim下完成的。由于几乎所有的unix/linux based OS都会预装vim，而且这个编缉器可以通吃所有的文件类型，所以个人感觉即使不用来做主力编缉器，学习一下还是很有必要的。vim有一个很陡峭的学习曲线，高手与菜鸟的编缉效率会有天壤之别。自己对学习vim很有兴趣，也跟大家分享一些我的经验。
今天说一下多文件编缉，编缉大项目时最麻烦的就是文件之间的切换。以前用Notepad++或是一些IDE的时候都是顶部一字排开10几个tab。常常看得自己眼花，从一堆tab中找个目标真是非常痛苦。刚开始用vim时我也是用tab的，同样低效。但后来发现vim的原生多文件编缉是用buffer的，tab是在7.0之后才加入。用buffer有什么好处呢？关键是切换速度，buffer的切换是用:b &#60;buffer_name&#62;来完成的，而buffer_name可以很方便的用&#60;tab&#62;补全。比如一个buffer的名字是foo_bar.txt，你既可以用foo&#60;tab&#62;也可以用bar&#60;tab&#62;来进行补全。所以往往用2,3个字母就可以准确的定位一个buffer了。
这里再向大家推荐一个vim的plugin，fuzzyfinder (http://www.vim.org/scripts/script.php?script_id=1984)。绝对的强大，它有点类似textmate的ctrl+T来寻找文件，有动态的popup menu提示匹配的buffer。它除了快速定位buffer以外，还可以快速的查找当前目录及子目录下的文件，tag以及tag检引的文件。我现在所有的文件切换几乎都是用fuzzyfinder完成的。让我列一个vim plugin top10，这个plugin肯定名列第一。
]]></description>
			<content:encoded><![CDATA[<p>自己用vim也有两年时间了, 现在我所有的coding和文本编缉都是在vim下完成的。由于几乎所有的unix/linux based OS都会预装vim，而且这个编缉器可以通吃所有的文件类型，所以个人感觉即使不用来做主力编缉器，学习一下还是很有必要的。vim有一个很陡峭的学习曲线，高手与菜鸟的编缉效率会有天壤之别。自己对学习vim很有兴趣，也跟大家分享一些我的经验。</p>
<p>今天说一下多文件编缉，编缉大项目时最麻烦的就是文件之间的切换。以前用Notepad++或是一些IDE的时候都是顶部一字排开10几个tab。常常看得自己眼花，从一堆tab中找个目标真是非常痛苦。刚开始用vim时我也是用tab的，同样低效。但后来发现vim的原生多文件编缉是用buffer的，tab是在7.0之后才加入。用buffer有什么好处呢？关键是切换速度，buffer的切换是用:b &lt;buffer_name&gt;来完成的，而buffer_name可以很方便的用&lt;tab&gt;补全。比如一个buffer的名字是foo_bar.txt，你既可以用foo&lt;tab&gt;也可以用bar&lt;tab&gt;来进行补全。所以往往用2,3个字母就可以准确的定位一个buffer了。</p>
<p>这里再向大家推荐一个vim的plugin，fuzzyfinder (http://www.vim.org/scripts/script.php?script_id=1984)。绝对的强大，它有点类似textmate的ctrl+T来寻找文件，有动态的popup menu提示匹配的buffer。它除了快速定位buffer以外，还可以快速的查找当前目录及子目录下的文件，tag以及tag检引的文件。我现在所有的文件切换几乎都是用fuzzyfinder完成的。让我列一个vim plugin top10，这个plugin肯定名列第一。</p>
]]></content:encoded>
			<wfw:commentRss>http://ryanye.72pines.com/2009/07/29/a-better-vim/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
