<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.harrspy.com/styles/feedsky8.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.harrspy.com" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/harryblog" type="application/rss+xml"></fs:self_link><lastBuildDate>Wed, 01 Sep 2010 14:30:35 GMT</lastBuildDate><title>harry.blog</title><description>留住往昔的美丽，去开创未来的光明。</description><link>http://blog.harrspy.com</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Wed, 01 Sep 2010 14:30:35 GMT</pubDate><item><title>推荐一个Vim插件 vim-addon-manager</title><link>http://blog.harrspy.com/vim-addon-manager</link><content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2905&quot;&gt;vim-addon-manager &lt;/a&gt; 是一个非常有用的插件，至少对我来说是这样的，看名字就知道是用来管理vim插件的，用它可以在vim里快速的安装其他插件，就像在linux里通过软件包管理工具安装软件那样方便。&lt;/p&gt;
&lt;p&gt;不过我用这玩意的最大原因不是因为可以方便的安装插件，而是它可以让你把vim的每一个插件都放在一个独立的目录下，这样就不会和其他插件的文件混在一起了。&lt;/p&gt;
&lt;p&gt;想想以前，要装个新vim插件，就是下载下来解压后往.vim目录里一扔，然后所有插件都混在一起，什么plugin了，autoload了，ftplugin了等各个目录里混杂着各种插件的文件，时间久了到底装了多少插件都不知道，想干净的删除一个插件要费老大力，因为删除plugin目录里的文件后可能在其他目录还有一些文件。&lt;/p&gt;
&lt;p&gt;现在有了这个工具，我删掉了用了多年的.vim目录，重新整理了一下，每个插件一个单独目录，添加删除非常方便，哈哈。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/ArpxwcMM/pLYOG.png&quot; alt=&quot;&quot; width=&quot;399&quot; height=&quot;590&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这是以前的.vim目录，所有东西都混在一起&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/ArprZXQo/HXQK8.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;现在的，多干净，哈哈&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/Arprz3ZU/JpBZL.png&quot; alt=&quot;&quot; width=&quot;370&quot; height=&quot;409&quot; /&gt;&lt;/p&gt;
&lt;p&gt;所有插件都放在addons目录里，每个插件单独放在一个子目录中，这个addons目录的位置是可以配置在vimrc里的，这样再多插件也不会混乱啦，哈哈。&lt;/p&gt;
&lt;p&gt;插件地址  &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2905&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2905&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;具体如何配置使用可以看这个地址 &lt;a href=&quot;http://github.com/MarcWeber/vim-addon-manager/blob/master/doc/vim-addon-manager.txt&quot;&gt;http://github.com/MarcWeber/vim-addon-manager/blob/master/doc/vim-addon-manager.txt&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/408376646/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/vim-addon-manager&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/408376646/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/408376646/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/vim-addon-manager/feed</wfw:commentRss><slash:comments>0</slash:comments><description>vim-addon-manager 是一个非常有用的插件，至少对我来说是这样的，看名字就知道是用来管理vim插件的，用它可以在vim里快速的安装其他插件，就像在linux里通过软件包管理工具安装软件那样方便。 不过我用这玩意的最大原因不是因为可以方便的安装插件，而是它可以让你把vim的每一个插件都放在一个独立的目录下，这样就不会和其他插件的文件混在一起了。 想想以前，要装个新vim插件，就是下载下来解压后往.vim目录里一扔，然后所有插件都混在一起，什么plugin了，autoload了，ftplugin了等各个目录里混杂着各种插件的文件，时间久了到底装了多少插件都不知道，想干净的删除一个插件要费老大力，因为删除plugin目录里的文件后可能在其他目录还有一些文件。 现在有了这个工具，我删掉了用了多年的.vim目录，重新整理了一下，每个插件一个单独目录，添加删除非常方便，哈哈。 这是以前的.vim目录，所有东西都混在一起 现在的，多干净，哈哈 所有插件都放在addons目录里，每个插件单独放在一个子目录中，这个addons目录的位置是可以配置在vimrc里的，这样再多插件也不会混乱啦，哈哈。 插件地址  http://www.vim.org/scripts/script.php?script_id=2905 具体如何配置使用可以看这个地址 http://github.com/MarcWeber/vim-addon-manager/blob/master/doc/vim-addon-manager.txt&lt;img src=&quot;http://www1.feedsky.com/t1/408376646/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/vim-addon-manager&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/408376646/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/408376646/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>harry</category><category>vim</category><pubDate>Wed, 01 Sep 2010 22:30:35 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/vim-addon-manager#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=236</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/vim-addon-manager</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/408376646/6095385</fs:itemid></item><item><title>一个git管理的小应用 （希望有人来一起开发..）</title><link>http://blog.harrspy.com/gitube-first-meet</link><content:encoded>&lt;p&gt;git是一个非常不错的版本控制软件，如果需要一个可以远程push代码的地方，开源软件可以选择像github这样的网站，如果是自己的私有代码，也可用利用一台比如linux的服务器，几乎不用什么配置，只需要支持ssh就能往上面push代码。&lt;/p&gt;
&lt;p&gt;但是如果是一个小型团队，可能就要涉及到一些权限的控制，还有考虑版本库建立还有查看的易用性。&lt;/p&gt;
&lt;p&gt;之前我用过&lt;a href=&quot;http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way&quot; target=&quot;_blank&quot;&gt;gitosis&lt;/a&gt;，这是个不错的git管理工具，有基本的权限控制，不过所有的操作都是需要登录到服务器后使用命令行进行，对于一个人的东西当然没什么问题，但是如果这个服务器服务于多人，那么其他人想建立一个仓库的时候就必需联系管理员或自己登录上去操作，这样对命令行不熟悉的人不太方便，如果可以像github那样通过web界面来操作的话那就很方便了。&lt;/p&gt;
&lt;p&gt;于是我就基于django框架写了一个小小的应用，可以通过web界面来建立git仓库，并且有一些很简陋的权限设置。&lt;br /&gt;
&lt;span id=&quot;more-231&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;基本的使用流程是&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;登录（通过openid）&lt;/li&gt;
&lt;li&gt;如果是第一次注册，为自己的帐号里添加ssh公钥（用过github应该都知道是什么意思吧）&lt;/li&gt;
&lt;li&gt;建立一个项目（注意，我这个东西的项目并不是一个git仓库）&lt;/li&gt;
&lt;li&gt;进入项目后可以在这个项目下面建立1个或多个仓库&lt;/li&gt;
&lt;li&gt;复制显示出来的仓库地址然后就可以往里面push代码了。&lt;/li&gt;
&lt;li&gt;设置项目成员（也就是与其他人共享了）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基本也就是这些功能，建立项目和仓库的时候，可以写一些描述信息，方便知道这个项目和仓库里放的是什么。&lt;/p&gt;
&lt;p&gt;除了对git仓库的一些基本操作，这个东西还有个要做的就是管理linux用户目录下的 .ssh/authorized_keys ，因为用户提交上来的ssh公钥都是保存在这个文件里，所以运行这个应用必须使用指定的用户权限，之前说的&lt;a href=&quot;http://blog.harrspy.com/apache2-mpm-itk&quot; target=&quot;_blank&quot;&gt;apache下使用指定用户运行虚拟主机&lt;/a&gt;就是为了解决这个问题，不过我现在使用fastcgi+nginx来跑这个东西，所以只要用。&lt;code&gt;sudo su 用户名 -c &quot;./manage.py runfcgi .....&quot;&lt;/code&gt; 就行了，方便许多。&lt;/p&gt;
&lt;p&gt;这个东西我给他起名&lt;a href=&quot;http://github.com/harryxu/gitube&quot; target=&quot;_blank&quot;&gt;gitube&lt;/a&gt;，基于django框架开发的，也使用了&lt;a href=&quot;http://github.com/harryxu/gitube/blob/master/README&quot; target=&quot;_blank&quot;&gt;一些其他的库&lt;/a&gt;，操作git仓库和在push和pull的时候做权限判断使用的还是gitosis的代码。&lt;/p&gt;
&lt;p&gt;代码都放在github上了: &lt;a href=&quot;http://github.com/harryxu/gitube&quot; target=&quot;_blank&quot;&gt;http://github.com/harryxu/gitube&lt;/a&gt;&lt;br /&gt;
这玩意我有段时间没有更新了，不过和几个朋友一直在使用中，目前还算满足我们的需求。&lt;/p&gt;
&lt;p&gt;在已实现的功能中还是有许多需要改进，比如整个目录结构需要调整，加入setuptools的安装功能，权限机制的改进，打算以后用django1.2的&lt;a href=&quot;http://docs.djangoproject.com/en/dev/releases/1.2/#object-level-permissions&quot;&gt;object-level permissions&lt;/a&gt; hook来试试看。&lt;/p&gt;
&lt;p&gt;现在还没有详细的安装配置说明，有空写下，如果需要试用的话需要看下代码或者联系我。&lt;/p&gt;
&lt;p&gt;如果你有兴趣参与一起开发的话，&lt;a href=&quot;http://blog.harrspy.com/about&quot; target=&quot;_blank&quot;&gt;欢迎联系我阿&lt;/a&gt;，哈哈，希望可以做成一个比较完善的东西。&lt;/p&gt;
&lt;p&gt;下面是一些截图：&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;首页，显示自己的所有项目&quot; rel=&quot;lightbox[gitube]&quot; href=&quot;http://pic.yupoo.com/harryxu/087299a4076d/qqhk9gsl.png&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/087299a4076d/medium.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;131&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;仓库列表&quot; rel=&quot;lightbox[gitube]&quot; href=&quot;http://pic.yupoo.com/harryxu/105559a4076d/g62nhqiu.png&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/105559a4076d/medium.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;346&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;项目成员管理&quot; rel=&quot;lightbox[gitube]&quot; href=&quot;http://pic.yupoo.com/harryxu/013009a4076f/uuc3runp.png&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/013009a4076f/medium.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;361&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;ssh公钥管理&quot; rel=&quot;lightbox[gitube]&quot; href=&quot;http://pic.yupoo.com/harryxu/619269a40770/zjemqico.png&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/619269a40770/medium.png&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;239&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466722/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/gitube-first-meet&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466722/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466722/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/gitube-first-meet/feed</wfw:commentRss><slash:comments>0</slash:comments><description>git是一个非常不错的版本控制软件，如果需要一个可以远程push代码的地方，开源软件可以选择像github这样的网站，如果是自己的私有代码，也可用利用一台比如linux的服务器，几乎不用什么配置，只需要支持ssh就能往上面push代码。 但是如果是一个小型团队，可能就要涉及到一些权限的控制，还有考虑版本库建立还有查看的易用性。 之前我用过gitosis，这是个不错的git管理工具，有基本的权限控制，不过所有的操作都是需要登录到服务器后使用命令行进行，对于一个人的东西当然没什么问题，但是如果这个服务器服务于多人，那么其他人想建立一个仓库的时候就必需联系管理员或自己登录上去操作，这样对命令行不熟悉的人不太方便，如果可以像github那样通过web界面来操作的话那就很方便了。 于是我就基于django框架写了一个小小的应用，可以通过web界面来建立git仓库，并且有一些很简陋的权限设置。 基本的使用流程是 登录（通过openid） 如果是第一次注册，为自己的帐号里添加ssh公钥（用过github应该都知道是什么意思吧） 建立一个项目（注意，我这个东西的项目并不是一个git仓库） 进入项目后可以在这个项目下面建立1个或多个仓库 复制显示出来的仓库地址然后就可以往里面push代码了。 设置项目成员（也就是与其他人共享了） 基本也就是这些功能，建立项目和仓库的时候，可以写一些描述信息，方便知道这个项目和仓库里放的是什么。 除了对git仓库的一些基本操作，这个东西还有个要做的就是管理linux用户目录下的 .ssh/authorized_keys ，因为用户提交上来的ssh公钥都是保存在这个文件里，所以运行这个应用必须使用指定的用户权限，之前说的apache下使用指定用户运行虚拟主机就是为了解决这个问题，不过我现在使用fastcgi+nginx来跑这个东西，所以只要用。sudo su 用户名 -c &quot;./manage.py runfcgi .....&quot; 就行了，方便许多。 这个东西我给他起名gitube，基于django框架开发的，也使用了一些其他的库，操作git仓库和在push和pull的时候做权限判断使用的还是gitosis的代码。 代码都放在github上了: http://github.com/harryxu/gitube 这玩意我有段时间没有更新了，不过和几个朋友一直在使用中，目前还算满足我们的需求。 在已实现的功能中还是有许多需要改进，比如整个目录结构需要调整，加入setuptools的安装功能，权限机制的改进，打算以后用django1.2的object-level permissions hook来试试看。 现在还没有详细的安装配置说明，有空写下，如果需要试用的话需要看下代码或者联系我。 如果你有兴趣参与一起开发的话，欢迎联系我阿，哈哈，希望可以做成一个比较完善的东西。 下面是一些截图：&lt;img src=&quot;http://www1.feedsky.com/t1/405466722/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/gitube-first-meet&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466722/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466722/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>git</category><category>harry</category><category>gitube</category><pubDate>Sat, 17 Jul 2010 01:17:09 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/gitube-first-meet#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=231</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/gitube-first-meet</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466722/6095385</fs:itemid></item><item><title>我用过的浏览器</title><link>http://blog.harrspy.com/browsers-i-used</link><content:encoded>&lt;p&gt;最近在twitter上看到有人说起GOSURF浏览器，我一看突然想到这不就是我用过的多标签浏览器么，然后就想到了我用过的所有浏览器，说起来还真是折腾阿。&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Internet_Explorer_6&quot; target=&quot;_blank&quot;&gt;IE6&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;接触电脑比较晚，买的第一台电脑一开始居然装了个windows me，自然也就用上了这个邪恶的东西。。。&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.gosurfbrowser.com/&quot; target=&quot;_blank&quot;&gt; GOSURF&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;之后不久就接触到了只开一个窗口，然后在里面用多个标签来浏览不同网页的浏览器，用的第一个就是GOSURF，用起来挺不错，很轻巧速度也很快。&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.morequick.com/indexgb.htm&quot; target=&quot;_blank&quot;&gt;GreenBrowser&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;自从用上GB后，浏览器的功能对我来说就不再是单一的用于浏览网页了，换用这玩意正是因为GB有着丰富的功能，什么天气预报，下载flash等一堆乱七八糟的小工具按钮，点下就能完成一些常用任务，还真挺方便的。&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.ioage.com/tw/&quot; target=&quot;_blank&quot;&gt;The World&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;换用这个浏览器好像是因为在学校的时候看了某电脑杂志里面介绍了The World开发团队，然后试用了下感觉不错，就用了段时间，其实那时候tw和gb都差不多，tw的界面稍微豪华些，似乎毕业后工作了还在用，一个目录打包就能带走，到其他电脑上解压就可以用了。&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://getfirefox.com&quot; target=&quot;_blank&quot;&gt;Firefox&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这个应该是我目前用过时间最久的一个浏览器了，其实在学校就知道这东西了，当时试用下来感觉也不错，不过似乎速度比较慢，后来换了电脑配置好了些，就逐步的开始用FF了，各种插件真是让我捣腾了不少时间，随着后来转到linux内核的系统下学习，更是完全放弃了基于ie的浏览器。&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.google.com/chrome&quot; target=&quot;_blank&quot;&gt;Google Chrome&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;chrome刚出来的时候我认为基本对我没啥诱惑，我感觉我今后都会一直用ff了，不过随着chrome插件机制的引入，并且安装卸载插件都不需要重启，当然各方面的速度更是完全超越了ff，于是今年的早些时候我又把主浏览器换成了chrome，开ff基本上就是为了用firebug。&lt;/p&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;/p&gt;
&lt;p&gt;这几个是我在一段时间内用过的主浏览器，目前用着chrome，真是太折腾了 哈哈，不知道以后还会有什么革命性的浏览器出来让我再换换。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466723/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/browsers-i-used&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466723/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466723/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/browsers-i-used/feed</wfw:commentRss><slash:comments>4</slash:comments><description>最近在twitter上看到有人说起GOSURF浏览器，我一看突然想到这不就是我用过的多标签浏览器么，然后就想到了我用过的所有浏览器，说起来还真是折腾阿。 IE6 接触电脑比较晚，买的第一台电脑一开始居然装了个windows me，自然也就用上了这个邪恶的东西。。。 GOSURF 之后不久就接触到了只开一个窗口，然后在里面用多个标签来浏览不同网页的浏览器，用的第一个就是GOSURF，用起来挺不错，很轻巧速度也很快。 GreenBrowser 自从用上GB后，浏览器的功能对我来说就不再是单一的用于浏览网页了，换用这玩意正是因为GB有着丰富的功能，什么天气预报，下载flash等一堆乱七八糟的小工具按钮，点下就能完成一些常用任务，还真挺方便的。 The World 换用这个浏览器好像是因为在学校的时候看了某电脑杂志里面介绍了The World开发团队，然后试用了下感觉不错，就用了段时间，其实那时候tw和gb都差不多，tw的界面稍微豪华些，似乎毕业后工作了还在用，一个目录打包就能带走，到其他电脑上解压就可以用了。 Firefox 这个应该是我目前用过时间最久的一个浏览器了，其实在学校就知道这东西了，当时试用下来感觉也不错，不过似乎速度比较慢，后来换了电脑配置好了些，就逐步的开始用FF了，各种插件真是让我捣腾了不少时间，随着后来转到linux内核的系统下学习，更是完全放弃了基于ie的浏览器。 Google Chrome chrome刚出来的时候我认为基本对我没啥诱惑，我感觉我今后都会一直用ff了，不过随着chrome插件机制的引入，并且安装卸载插件都不需要重启，当然各方面的速度更是完全超越了ff，于是今年的早些时候我又把主浏览器换成了chrome，开ff基本上就是为了用firebug。 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212; 这几个是我在一段时间内用过的主浏览器，目前用着chrome，真是太折腾了 哈哈，不知道以后还会有什么革命性的浏览器出来让我再换换。&lt;img src=&quot;http://www1.feedsky.com/t1/405466723/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/browsers-i-used&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466723/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466723/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>firefox</category><category>chrome</category><category>browser</category><category>harry</category><category>ie</category><pubDate>Sat, 17 Jul 2010 00:03:55 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/browsers-i-used#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=230</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/browsers-i-used</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466723/6095385</fs:itemid></item><item><title>今天逛了下Apple Store</title><link>http://blog.harrspy.com/apple-store-shanghai</link><content:encoded>&lt;p&gt;哈哈 下午在外面想起来今天正好是apple store在上海开张，就去逛了下，果然不错阿，人真是非常多，进去还要排队一批一批的放行，赶上s. b.会了 &amp;#8211; -&lt;/p&gt;
&lt;p&gt;不过我其实很想进去看看试用下传说中的ipad和iphone4，不过都没看到，这个有点失望阿。&lt;/p&gt;
&lt;p&gt;玩了下imac和mbp，magic mouse我似乎用的还不怎么习惯，新的mbp真是非常爽， 触摸板的设计非常人性化，基本可以忘记鼠标了，真想抱一台回去阿，不过实在太穷了，只能看看就好。&lt;/p&gt;
&lt;p&gt;由于没带相机，就用手机拍了一些&lt;a href=&quot;http://www.douban.com/photos/album/30117704/&quot; target=&quot;_blank&quot;&gt;*图片*&lt;/a&gt;，基本还是能看清里面是啥东西。。。。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.douban.com/photos/photo/541936589/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/0023999d2a09/gr2y8ups.jpg&quot; alt=&quot;&quot; width=&quot;397&quot; height=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.douban.com/photos/photo/541937030/#next_photo&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/7399299d2a0a/6viasz6k.jpg&quot; alt=&quot;&quot; width=&quot;600&quot; height=&quot;397&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.douban.com/photos/photo/541937249/#next_photo&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/8359999d2a0d/tl8wbiw2.jpg&quot; alt=&quot;&quot; width=&quot;600&quot; height=&quot;397&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
店员非常兴奋，只要有人买了东西出来，他们就会抓狂似的欢呼。。。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.douban.com/photos/photo/541961463/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/6178799d2a0e/id9nz2sk.jpg&quot; alt=&quot;&quot; width=&quot;600&quot; height=&quot;397&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
基本每台机器上都有ps和一些adobe的软件，不过我都不会玩，想找flash没找到，我想就上adobe去下个cs5，顺便看看网速咋样，flash cs5的mac版是1.6G，一开始下载速度达到了1m多每秒，后拉就慢下来了，我就不等了放着让他下载就走了，不知道这算不算恶搞- -&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.douban.com/photos/album/30117704/&quot; target=&quot;_blank&quot;&gt;其他所有图片&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466724/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/apple-store-shanghai&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466724/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466724/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/apple-store-shanghai/feed</wfw:commentRss><slash:comments>4</slash:comments><description>哈哈 下午在外面想起来今天正好是apple store在上海开张，就去逛了下，果然不错阿，人真是非常多，进去还要排队一批一批的放行，赶上s. b.会了 &amp;#8211; - 不过我其实很想进去看看试用下传说中的ipad和iphone4，不过都没看到，这个有点失望阿。 玩了下imac和mbp，magic mouse我似乎用的还不怎么习惯，新的mbp真是非常爽， 触摸板的设计非常人性化，基本可以忘记鼠标了，真想抱一台回去阿，不过实在太穷了，只能看看就好。 由于没带相机，就用手机拍了一些*图片*，基本还是能看清里面是啥东西。。。。 店员非常兴奋，只要有人买了东西出来，他们就会抓狂似的欢呼。。。 基本每台机器上都有ps和一些adobe的软件，不过我都不会玩，想找flash没找到，我想就上adobe去下个cs5，顺便看看网速咋样，flash cs5的mac版是1.6G，一开始下载速度达到了1m多每秒，后拉就慢下来了，我就不等了放着让他下载就走了，不知道这算不算恶搞- - 其他所有图片&lt;img src=&quot;http://www1.feedsky.com/t1/405466724/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/apple-store-shanghai&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466724/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466724/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>harry</category><category>apple</category><category>apple-store</category><pubDate>Sat, 10 Jul 2010 23:52:47 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/apple-store-shanghai#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=228</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/apple-store-shanghai</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466724/6095385</fs:itemid></item><item><title>利用GAE来发送git push的通知</title><link>http://blog.harrspy.com/send-git-push-im-by-gae</link><content:encoded>&lt;p&gt;如果想要在git push后自动通知团队中的其他成员，可以利用git的hook脚本，git源代码里 contrib/hooks/post-receive-email 就可以直接用来发送邮件通知。&lt;/p&gt;
&lt;p&gt;如果觉得邮件还不够即时，可以试试利用gae发送通知到gtalk上，google提供了很方便的&lt;a href=&quot;http://code.google.com/appengine/docs/python/xmpp/&quot; target=&quot;_blank&quot;&gt;api&lt;/a&gt;，可以通过部署在gae上的程序发送xmpp协议的即时消息。&lt;/p&gt;
&lt;p&gt;我无聊写了个这样的小程序，放在&lt;a href=&quot;http://github.com/harryxu/git-sendim-gae&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;上了，用的是Python版的GAE SDK。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;使用方法:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;下载后，先把gae目录中的程序部署到gae上，然后可以访问 domain/sendim/invite 向所需通知的用户发一个邀请，然后可以访问 domain/sendim/demo 测试下消息是否能够正常发送。&lt;/p&gt;
&lt;p&gt;接着将scripts目录中的post-receive-im链接到git服务器里指定仓库的hooks目录中，名为post-receive，post-receive-im这个是我直接在post-receive-email里改的 &amp;#8211; -&lt;/p&gt;
&lt;p&gt;最后修改git服务器仓库目录里的config文件加入下面的内容&lt;/p&gt;
&lt;pre&gt;
[hooks]
    # 要通知到的用户的gmail，如果有多个用空格分开
    jids = xxx1@gmail.com xxx2@gmail.com

    # 就是刚才部署的那个gae的地址
    imurl = http://xxxx.appspot.com/sendim
&lt;/pre&gt;
&lt;p&gt;这样弄完，push后应该就会收到消息了， svn hg等应该都可以用类似的方法实现一个通知，利用gae真的是可以玩出很多花样阿，哈哈。&lt;/p&gt;
&lt;p&gt;目前只弄了一点点，如果谁有兴趣，欢迎加入一起改进阿 &lt;img src='http://blog.harrspy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; 。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466725/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/send-git-push-im-by-gae&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466725/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466725/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/send-git-push-im-by-gae/feed</wfw:commentRss><slash:comments>2</slash:comments><description>如果想要在git push后自动通知团队中的其他成员，可以利用git的hook脚本，git源代码里 contrib/hooks/post-receive-email 就可以直接用来发送邮件通知。 如果觉得邮件还不够即时，可以试试利用gae发送通知到gtalk上，google提供了很方便的api，可以通过部署在gae上的程序发送xmpp协议的即时消息。 我无聊写了个这样的小程序，放在github上了，用的是Python版的GAE SDK。 使用方法: 下载后，先把gae目录中的程序部署到gae上，然后可以访问 domain/sendim/invite 向所需通知的用户发一个邀请，然后可以访问 domain/sendim/demo 测试下消息是否能够正常发送。 接着将scripts目录中的post-receive-im链接到git服务器里指定仓库的hooks目录中，名为post-receive，post-receive-im这个是我直接在post-receive-email里改的 &amp;#8211; - 最后修改git服务器仓库目录里的config文件加入下面的内容 [hooks] # 要通知到的用户的gmail，如果有多个用空格分开 jids = xxx1@gmail.com xxx2@gmail.com # 就是刚才部署的那个gae的地址 imurl = http://xxxx.appspot.com/sendim 这样弄完，push后应该就会收到消息了， svn hg等应该都可以用类似的方法实现一个通知，利用gae真的是可以玩出很多花样阿，哈哈。 目前只弄了一点点，如果谁有兴趣，欢迎加入一起改进阿 。&lt;img src=&quot;http://www1.feedsky.com/t1/405466725/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/send-git-push-im-by-gae&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466725/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466725/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>git</category><category>gae</category><category>Python</category><category>harry</category><pubDate>Wed, 23 Jun 2010 23:38:04 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/send-git-push-im-by-gae#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=226</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/send-git-push-im-by-gae</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466725/6095385</fs:itemid></item><item><title>neocomplcache与其他一些插件还真难相处阿</title><link>http://blog.harrspy.com/neocomplcache-stuff</link><content:encoded>&lt;p&gt;无聊装了个&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2620&quot; target=&quot;_blank&quot;&gt;neocomplcache&lt;/a&gt;试下，初步用下来感觉效果的确不错，不过要和 snipMate superTab zencoding插件和谐共存还是要设置一下。。。&lt;/p&gt;
&lt;p&gt;首先如果你不需要让他自动启用 （不加 &lt;code&gt;let g:NeoComplCache_EnableAtStartup = 1&lt;/code&gt;），或者不需要让他自动弹出提示 （加了 &lt;code&gt;let g:NeoComplCache_DisableAutoComplete = 1&lt;/code&gt;），那似乎就不用设置什么了。&lt;/p&gt;
&lt;p&gt;如果用了 zencoding.vim，那么vimrc里面不要有 &lt;code&gt;let g:use_zen_complete_tag = 1&lt;/code&gt; ，如果加了这句会使NeoComplCache自动启用那句没做用。。。&lt;/p&gt;
&lt;p&gt;另外如果要 snipMate 和 superTab的话，也要修改下，因为snipMate为了与superTab兼容，在提示菜单弹出的时候是不会展开的，即使你修改了触发snipMate的热键也没用，他只会执行superTab的动作。。。&lt;/p&gt;
&lt;p&gt;所以我就想把snipMate为了兼容superTab的代码去掉。&lt;br /&gt;
&lt;del datetime=&quot;2010-08-22T13:55:58+00:00&quot;&gt;打开 ~/.vim/plugin/snipMate.vim 134行开始&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;134
135
136
137
138
139
140
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;vim&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #804040;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;pumvisible&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span style=&quot;color: #804040;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;exists&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'SuperTabKey'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span style=&quot;color: #804040;&quot;&gt;call&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;feedkeys&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;SuperTabKey&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #804040;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #C5A22D;&quot;&gt;''&lt;/span&gt;
  &lt;span style=&quot;color: #804040;&quot;&gt;endif&lt;/span&gt;
  &lt;span style=&quot;color: #804040;&quot;&gt;call&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;feedkeys&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;&amp;quot;&lt;span style=&quot;&quot;&gt;\&amp;lt;&lt;/span&gt;esc&amp;gt;a&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #C5A22D;&quot;&gt;'n'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; 
  &lt;span style=&quot;color: #804040;&quot;&gt;call&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;feedkeys&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;&amp;quot;&lt;span style=&quot;&quot;&gt;\&amp;lt;&lt;/span&gt;tab&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #804040;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #C5A22D;&quot;&gt;''&lt;/span&gt;
&lt;span style=&quot;color: #804040;&quot;&gt;endif&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;font color=&quot;#FF0000&quot;&gt;---------------- 2010-08-22 更新 --------------&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;
根据snipMate&lt;a href=&quot;http://github.com/msanders/snipmate.vim/blob/504fcdf50b9ad75a7936d1cb3b46fcbd0ceb3eed/plugin/snipMate.vim#L159&quot;&gt;在github中的最新代码&lt;/a&gt;，从149行，开始，从新调整一下TriggerSnippet函数，并且下面再增加一个小函数&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;vim&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #804040;&quot;&gt;fun&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;!&lt;/span&gt; TriggerSnippet&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #804040;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;exists&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'g:SuperTabMappingForward'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #804040;&quot;&gt;if&lt;/span&gt; g&lt;span style=&quot;color: #000000;&quot;&gt;:&lt;/span&gt;SuperTabMappingForward == &lt;span style=&quot;color: #C5A22D;&quot;&gt;&amp;quot;&amp;lt;tab&amp;gt;&amp;quot;&lt;/span&gt;
			&lt;span style=&quot;color: #804040;&quot;&gt;let&lt;/span&gt; SuperTabKey = &lt;span style=&quot;color: #C5A22D;&quot;&gt;&amp;quot;&lt;span style=&quot;&quot;&gt;\&amp;lt;&lt;/span&gt;c-n&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #804040;&quot;&gt;elseif&lt;/span&gt; g&lt;span style=&quot;color: #000000;&quot;&gt;:&lt;/span&gt;SuperTabMappingBackward == &lt;span style=&quot;color: #C5A22D;&quot;&gt;&amp;quot;&amp;lt;tab&amp;gt;&amp;quot;&lt;/span&gt;
			&lt;span style=&quot;color: #804040;&quot;&gt;let&lt;/span&gt; SuperTabKey = &lt;span style=&quot;color: #C5A22D;&quot;&gt;&amp;quot;&lt;span style=&quot;&quot;&gt;\&amp;lt;&lt;/span&gt;c-p&amp;gt;&amp;quot;&lt;/span&gt;
		&lt;span style=&quot;color: #804040;&quot;&gt;endif&lt;/span&gt;
	&lt;span style=&quot;color: #804040;&quot;&gt;endif&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #804040;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;exists&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'g:snipPos'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #804040;&quot;&gt;return&lt;/span&gt; snipMate#jumpTabStop&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;0&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color: #804040;&quot;&gt;endif&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #804040;&quot;&gt;let&lt;/span&gt; word = &lt;span style=&quot;color: #25BB4D;&quot;&gt;matchstr&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #25BB4D;&quot;&gt;getline&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'.'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span style=&quot;color: #C5A22D;&quot;&gt;'&lt;span style=&quot;&quot;&gt;\S&lt;/span&gt;&lt;span style=&quot;&quot;&gt;\+&lt;/span&gt;&lt;span style=&quot;&quot;&gt;\%&lt;/span&gt;'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #25BB4D;&quot;&gt;col&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'.'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'c'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #804040;&quot;&gt;for&lt;/span&gt; scope &lt;span style=&quot;color: #804040;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #25BB4D;&quot;&gt;bufnr&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'%'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;amp;&lt;/span&gt;ft, &lt;span style=&quot;color: #C5A22D;&quot;&gt;'&lt;span style=&quot;&quot;&gt;\.&lt;/span&gt;'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'_'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#93;&lt;/span&gt;
		&lt;span style=&quot;color: #804040;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#91;&lt;/span&gt;trigger, snippet&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#93;&lt;/span&gt; = s&lt;span style=&quot;color: #000000;&quot;&gt;:&lt;/span&gt;GetSnippet&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;word, scope&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #C5A22D;&quot;&gt;&amp;quot; If word is a trigger for a snippet, delete the trigger &amp;amp; expand
		&amp;quot;&lt;/span&gt; the snippet&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;
		&lt;span style=&quot;color: #804040;&quot;&gt;if&lt;/span&gt; snippet &lt;span style=&quot;color: #000000;&quot;&gt;!&lt;/span&gt;= &lt;span style=&quot;color: #C5A22D;&quot;&gt;''&lt;/span&gt;
			&lt;span style=&quot;color: #804040;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;exists&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'g:loaded_neocomplcache'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
				&lt;span style=&quot;color: #804040;&quot;&gt;let&lt;/span&gt; g&lt;span style=&quot;color: #000000;&quot;&gt;:&lt;/span&gt;neocomplcache_disable_auto_complete = 1
				inoremap &lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;ESC&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;ESC&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;:&lt;/span&gt;&lt;span style=&quot;color: #804040;&quot;&gt;call&lt;/span&gt; SetNeocomplBack&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;CR&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;
				snoremap &lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;ESC&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;ESC&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;:&lt;/span&gt;&lt;span style=&quot;color: #804040;&quot;&gt;call&lt;/span&gt; SetNeocomplBack&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;CR&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;
			&lt;span style=&quot;color: #804040;&quot;&gt;endif&lt;/span&gt;
			&lt;span style=&quot;color: #804040;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;col&lt;/span&gt; = &lt;span style=&quot;color: #25BB4D;&quot;&gt;col&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'.'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;trigger&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
			sil &lt;span style=&quot;color: #804040;&quot;&gt;exe&lt;/span&gt; &lt;span style=&quot;color: #C5A22D;&quot;&gt;'s/&lt;span style=&quot;&quot;&gt;\V&lt;/span&gt;'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #25BB4D;&quot;&gt;escape&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;trigger, &lt;span style=&quot;color: #C5A22D;&quot;&gt;'/&lt;span style=&quot;&quot;&gt;\.&lt;/span&gt;'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'&lt;span style=&quot;&quot;&gt;\%&lt;/span&gt;#//'&lt;/span&gt;
			&lt;span style=&quot;color: #804040;&quot;&gt;return&lt;/span&gt; snipMate#expandSnip&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;snippet, &lt;span style=&quot;color: #25BB4D;&quot;&gt;col&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #804040;&quot;&gt;endif&lt;/span&gt;
	&lt;span style=&quot;color: #804040;&quot;&gt;endfor&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #804040;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;exists&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #C5A22D;&quot;&gt;'SuperTabKey'&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #804040;&quot;&gt;call&lt;/span&gt; &lt;span style=&quot;color: #25BB4D;&quot;&gt;feedkeys&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;SuperTabKey&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #804040;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #C5A22D;&quot;&gt;''&lt;/span&gt;
	&lt;span style=&quot;color: #804040;&quot;&gt;endif&lt;/span&gt;
	&lt;span style=&quot;color: #804040;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #C5A22D;&quot;&gt;&amp;quot;&lt;span style=&quot;&quot;&gt;\&amp;lt;&lt;/span&gt;tab&amp;gt;&amp;quot;&lt;/span&gt;
endf
&amp;nbsp;
&lt;span style=&quot;color: #804040;&quot;&gt;fun&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;!&lt;/span&gt; SetNeocomplBack&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #804040;&quot;&gt;let&lt;/span&gt; g&lt;span style=&quot;color: #000000;&quot;&gt;:&lt;/span&gt;neocomplcache_disable_auto_complete = &lt;span style=&quot;color: #000000; font-weight:bold;&quot;&gt;0&lt;/span&gt;
	inoremap &lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;ESC&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;ESC&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;
	snoremap &lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;ESC&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;&lt;/span&gt;ESC&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;
endf&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;-----------------------------------------------&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这几句注释掉后就行了，不管是否兼容了，反正用了NeoComplCache自动提示，superTab的作用也体现不出多少了，主要是为了可以用tab键来选择提示菜单中的项目。&lt;br /&gt;
还有个办法不需要修改snipMate的代码就是修改superTab的热键，但是如果改掉的话那还能叫superTab不？ 哈哈&lt;br /&gt;
这里也有个参考，不过他是把NeoComplCache的自动提示关闭了。&lt;br /&gt;
&lt;a href=&quot;http://sinolog.it/?p=1399&quot; target=&quot;_blank&quot;&gt;http://sinolog.it/?p=1399&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466726/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/neocomplcache-stuff&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466726/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466726/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/neocomplcache-stuff/feed</wfw:commentRss><slash:comments>3</slash:comments><description>无聊装了个neocomplcache试下，初步用下来感觉效果的确不错，不过要和 snipMate superTab zencoding插件和谐共存还是要设置一下。。。 首先如果你不需要让他自动启用 （不加 let g:NeoComplCache_EnableAtStartup = 1），或者不需要让他自动弹出提示 （加了 let g:NeoComplCache_DisableAutoComplete = 1），那似乎就不用设置什么了。 如果用了 zencoding.vim，那么vimrc里面不要有 let g:use_zen_complete_tag = 1 ，如果加了这句会使NeoComplCache自动启用那句没做用。。。 另外如果要 snipMate 和 superTab的话，也要修改下，因为snipMate为了与superTab兼容，在提示菜单弹出的时候是不会展开的，即使你修改了触发snipMate的热键也没用，他只会执行superTab的动作。。。 所以我就想把snipMate为了兼容superTab的代码去掉。 打开 ~/.vim/plugin/snipMate.vim 134行开始 134 135 136 137 138 139 140 if pumvisible&amp;#40;&amp;#41; if exists&amp;#40;'SuperTabKey'&amp;#41; call feedkeys&amp;#40;SuperTabKey&amp;#41; &amp;#124; return '' endif call feedkeys&amp;#40;&amp;#34;\&amp;#60;esc&amp;#62;a&amp;#34;, 'n'&amp;#41; call feedkeys&amp;#40;&amp;#34;\&amp;#60;tab&amp;#62;&amp;#34;&amp;#41; &amp;#124; return '' [...]&lt;img src=&quot;http://www1.feedsky.com/t1/405466726/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/neocomplcache-stuff&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466726/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466726/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>harry</category><category>vim</category><pubDate>Tue, 04 May 2010 22:08:37 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/neocomplcache-stuff#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=222</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/neocomplcache-stuff</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466726/6095385</fs:itemid></item><item><title>Ubuntu 10.04窗口延迟的补丁</title><link>http://blog.harrspy.com/ubuntu-lucid-xserver-xorg-1-7-6-gc</link><content:encoded>&lt;p&gt;装了Ubuntu 10.04后，如果是ATI显卡并且开启compiz效果，窗口在最大化，调整大小的时候还是会出现延迟的问题。&lt;br /&gt;
加入下面的ppa源然后更新下系统，重启xserver后可以解决这个问题。&lt;br /&gt;
&lt;a href=&quot;https://launchpad.net/~info-g-com/+archive/xserver-xorg-1.7.6-gc&quot; target=&quot;_blank&quot;&gt;https://launchpad.net/~info-g-com/+archive/xserver-xorg-1.7.6-gc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;相关参考：&lt;br /&gt;
&lt;a href=&quot;https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/568988&quot; target=&quot;_blank&quot;&gt;[Lucid][Ubuntu 10.04][ATI cards] Slow/freeze windows management (resize, maximise, .etc) with fglrx driver + compositing desktop.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.phoronix.com/forums/showthread.php?t=21846&amp;#038;page=2&quot; target=&quot;_blank&quot;&gt;http://www.phoronix.com/forums/showthread.php?t=21846&amp;#038;page=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;破问题 官方啥时候可以修复阿 &amp;#8211; -&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466727/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/ubuntu-lucid-xserver-xorg-1-7-6-gc&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466727/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466727/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/ubuntu-lucid-xserver-xorg-1-7-6-gc/feed</wfw:commentRss><slash:comments>2</slash:comments><description>装了Ubuntu 10.04后，如果是ATI显卡并且开启compiz效果，窗口在最大化，调整大小的时候还是会出现延迟的问题。 加入下面的ppa源然后更新下系统，重启xserver后可以解决这个问题。 https://launchpad.net/~info-g-com/+archive/xserver-xorg-1.7.6-gc 相关参考： [Lucid][Ubuntu 10.04][ATI cards] Slow/freeze windows management (resize, maximise, .etc) with fglrx driver + compositing desktop. http://www.phoronix.com/forums/showthread.php?t=21846&amp;#038;page=2 破问题 官方啥时候可以修复阿 &amp;#8211; -&lt;img src=&quot;http://www1.feedsky.com/t1/405466727/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/ubuntu-lucid-xserver-xorg-1-7-6-gc&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466727/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466727/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>ubuntu</category><category>xserver</category><category>harry</category><pubDate>Mon, 03 May 2010 11:07:08 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/ubuntu-lucid-xserver-xorg-1-7-6-gc#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=220</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/ubuntu-lucid-xserver-xorg-1-7-6-gc</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466727/6095385</fs:itemid></item><item><title>几个深色背景和大字体的 userstyles</title><link>http://blog.harrspy.com/dark-userstyles</link><content:encoded>&lt;p&gt;不知道老外的眼睛是不是特别好，字体都喜欢搞得像蚂蚁那样小，又是白色背景，nnd 老子眼睛看久了实在受不了。&lt;/p&gt;
&lt;p&gt;幸好有Stylish这样的玩具，我把几个自己常看的技术文档网页调成了深色背景，自己感觉看着舒服些了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://userstyles.org/styles/22269&quot; target=&quot;_blank&quot;&gt;Symfony 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://userstyles.org/styles/28559&quot; target=&quot;_blank&quot;&gt;Flex 4 帮助文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://userstyles.org/styles/22254&quot; target=&quot;_blank&quot;&gt;Parsley 文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你和我有同样的屁好，就能直接用了。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://userstyles.org/&quot; target=&quot;_blank&quot;&gt;userstyles&lt;/a&gt;适用于Firefox的&lt;a href=&quot;https://addons.mozilla.org/zh-CN/firefox/addon/2108&quot; target=&quot;_blank&quot;&gt;Stylish&lt;/a&gt;和Google  Chrome的&lt;a href=&quot;https://chrome.google.com/extensions/detail/fjnbnpbmkenffdnngjfgmeleoegfcffe?hl=en&quot; target=&quot;_blank&quot;&gt;Stylish&lt;/a&gt;。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466728/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/dark-userstyles&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466728/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466728/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/dark-userstyles/feed</wfw:commentRss><slash:comments>3</slash:comments><description>不知道老外的眼睛是不是特别好，字体都喜欢搞得像蚂蚁那样小，又是白色背景，nnd 老子眼睛看久了实在受不了。 幸好有Stylish这样的玩具，我把几个自己常看的技术文档网页调成了深色背景，自己感觉看着舒服些了。 Symfony 文档 Flex 4 帮助文档 Parsley 文档 如果你和我有同样的屁好，就能直接用了。 userstyles适用于Firefox的Stylish和Google  Chrome的Stylish。&lt;img src=&quot;http://www1.feedsky.com/t1/405466728/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/dark-userstyles&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466728/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466728/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>harry</category><pubDate>Tue, 20 Apr 2010 21:54:03 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/dark-userstyles#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=218</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/dark-userstyles</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466728/6095385</fs:itemid></item><item><title>使用apache2-mpm-itk为apache的虚拟主机指定单独的用户运行</title><link>http://blog.harrspy.com/apache2-mpm-itk</link><content:encoded>&lt;p&gt;在用Python和django写一个类似&lt;a href=&quot;http://github.com/&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;的程序，当然功能是非常少的，目前只想做到可以创建git仓库，自行管理ssh公钥还有些基本的权限控制。&lt;/p&gt;
&lt;p&gt;在ssh公钥管理这里，其实就是管理Linux用户目录下的.ssh/authorized_keys文件，当用户提交公钥时，向这个文件里写入公钥内容。&lt;/p&gt;
&lt;p&gt;authorized_keys的权限设置非常严格，只有当除了用户自己可以有写权限外，组权限和其他权限都不能有写入的权限才行，否则这个文件就无效，即使把公钥写入这个文件，通过ssh登录到该用户时还是需要输入密码，这是ssh出于安全的考虑，防止由于用户自己对权限设置不当而造成安全问题。&lt;/p&gt;
&lt;p&gt;但是现在我要通过web界面管理这个文件，那么读写这个文件的用户就是运行web服务器的用户，一般来说运行apache的用户是www-data，那么就无法写入了，我本身对apache也只会一些最基本的配置，然后就搜阿搜。。。&lt;/p&gt;
&lt;p&gt;搜到一个suexec，然后装啊，设置阿，测试阿，弄了半天不是太明白，也没成功，运行虚拟主机的用户仍旧是www-data。&lt;/p&gt;
&lt;p&gt;然后继续搜阿搜，找到个文章： &lt;a href=&quot;http://blog.andreaolivato.net/open-source/running-apache2-virtualhost-with-different-users.html&quot; target=&quot;_blank&quot;&gt;Running apache2 virtualhost with different users&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后按照里面说的装了 apache2-mpm-itk&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash&quot; style=&quot;font-family:monospace;&quot;&gt;$ &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; apache2-mpm-itk&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;在apache的VirtualHost里加入&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;IfModule&lt;/span&gt; mpm_itk_module&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
   AssignUserId git git
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/IfModule&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;AssignUserId 后面2个参数一个是运行该虚拟主机的用户，另一个就是组。&lt;br /&gt;
我把所有git仓库都放在一个叫git的linux用户目录下作为git服务器，所以AssignUserId就是 git git。&lt;/p&gt;
&lt;p&gt;最后把django项目下的所有文件的用户和组都设置为git，重启apache，测试后果然就可以了。&lt;/p&gt;
&lt;p&gt;使用这个mpm_itk非常方便，之前搜到的suexec我虽然没弄成功过，但是了解下来似乎python程序要通过fastcgi方式运行才行。&lt;/p&gt;
&lt;p&gt;我现在django的运行方式是，apache+mod_wsgi，用mpm_itk后同样可以达到效果了。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466729/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/apache2-mpm-itk&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466729/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466729/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/apache2-mpm-itk/feed</wfw:commentRss><slash:comments>0</slash:comments><description>在用Python和django写一个类似github的程序，当然功能是非常少的，目前只想做到可以创建git仓库，自行管理ssh公钥还有些基本的权限控制。 在ssh公钥管理这里，其实就是管理Linux用户目录下的.ssh/authorized_keys文件，当用户提交公钥时，向这个文件里写入公钥内容。 authorized_keys的权限设置非常严格，只有当除了用户自己可以有写权限外，组权限和其他权限都不能有写入的权限才行，否则这个文件就无效，即使把公钥写入这个文件，通过ssh登录到该用户时还是需要输入密码，这是ssh出于安全的考虑，防止由于用户自己对权限设置不当而造成安全问题。 但是现在我要通过web界面管理这个文件，那么读写这个文件的用户就是运行web服务器的用户，一般来说运行apache的用户是www-data，那么就无法写入了，我本身对apache也只会一些最基本的配置，然后就搜阿搜。。。 搜到一个suexec，然后装啊，设置阿，测试阿，弄了半天不是太明白，也没成功，运行虚拟主机的用户仍旧是www-data。 然后继续搜阿搜，找到个文章： Running apache2 virtualhost with different users 然后按照里面说的装了 apache2-mpm-itk $ sudo apt-get install apache2-mpm-itk 在apache的VirtualHost里加入 &amp;#60;IfModule mpm_itk_module&amp;#62; AssignUserId git git &amp;#60;/IfModule&amp;#62; AssignUserId 后面2个参数一个是运行该虚拟主机的用户，另一个就是组。 我把所有git仓库都放在一个叫git的linux用户目录下作为git服务器，所以AssignUserId就是 git git。 最后把django项目下的所有文件的用户和组都设置为git，重启apache，测试后果然就可以了。 使用这个mpm_itk非常方便，之前搜到的suexec我虽然没弄成功过，但是了解下来似乎python程序要通过fastcgi方式运行才行。 我现在django的运行方式是，apache+mod_wsgi，用mpm_itk后同样可以达到效果了。&lt;img src=&quot;http://www1.feedsky.com/t1/405466729/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/apache2-mpm-itk&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466729/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466729/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Linux</category><category>ssh</category><category>harry</category><category>apache</category><pubDate>Mon, 05 Apr 2010 00:18:28 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/apache2-mpm-itk#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=215</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/apache2-mpm-itk</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466729/6095385</fs:itemid></item><item><title>记录下我在win下配置git的过程</title><link>http://blog.harrspy.com/%e8%ae%b0%e5%bd%95%e4%b8%8b%e6%88%91%e5%9c%a8win%e4%b8%8b%e9%85%8d%e7%bd%aegit%e7%9a%84%e8%bf%87%e7%a8%8b</link><content:encoded>&lt;p&gt;首先下载安装&lt;a href=&quot;http://code.google.com/p/msysgit/&quot; target=&quot;_blank&quot;&gt;msysgit&lt;/a&gt;，安装过程一般使用默认选项即可。不过如果团队中可能有使用Linux unix等非windows系统的话，最好选择 Use unix style line endings&lt;br /&gt;
&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/harryxu/5665395c7501/kv9ybyor.jpg&quot; alt=&quot;&quot; width=&quot;503&quot; height=&quot;385&quot; /&gt;&lt;/p&gt;
&lt;p&gt;msysgit装完就能用命令行的方式玩git了，如果需要一个类似乌龟svn的GUI工具，可以装下 &lt;a href=&quot;http://code.google.com/p/tortoisegit/&quot;&gt;tortoisegit&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;现在基本就能在本地玩git了。&lt;/p&gt;
&lt;p&gt;如果是在一个团队中，要参与合作开发，一般是需要生成ssh key，然后把公钥发给git服务器管理员，让管理员给你设置权限。这样才能push或pull。&lt;/p&gt;
&lt;p&gt;打开 msysgit 的cygwin窗口 ，可以双击桌面上的图标，也可以在任何文件夹上右键 选 Git Bash Here&lt;br /&gt;
输入 &lt;code&gt;ssh-keygen -t rsa -C &quot;xxx@xxx.com&quot;&lt;/code&gt; 并回车（-C 后面的引号里就输入邮箱地址好了&amp;#8230;），如果你不清楚回车后提示你输入的是啥，就一直回车直到完成好了。&lt;/p&gt;
&lt;p&gt;然后到 系统盘你的用户目录里的.ssh目录下，比如 C:\Documents and Settings\Administrator\.ssh ，把里面的 id_rsa.pub 文件发给管理员，如果使用类似github的git服务提供网站，就把那个文件里的内容添加到账户的&lt;a href=&quot;https://github.com/account#ssh_bucket&quot; target=&quot;_blank&quot;&gt;SSH Public Keys&lt;/a&gt;里。&lt;/p&gt;
&lt;p&gt;最后在乌龟git里设置2样东西&lt;br /&gt;
&lt;img src=&quot;http://pic.yupoo.com/harryxu/8573695c74f8/diio2k7b.png&quot; alt=&quot;&quot; width=&quot;344&quot; height=&quot;274&quot; /&gt;&lt;/p&gt;
&lt;p&gt;首先进入Network选项，把ssh client的程序设置为msysgit安装目录里的bin/ssh.exe ，如下图&lt;br /&gt;
&lt;a href=&quot;http://pic.yupoo.com/harryxu/9471195c74fb/kfygj5ox.jpg&quot;&gt;&lt;img src=&quot;http://photo.yupoo.com/harryxu/9471195c74fb/medium.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;307&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后进入Config，输入你的名字和Email，再勾上下面的Save as globa，就行了，以后你做了提交，在git log的Author就是你这里设置的名字和Email。&lt;br /&gt;
&lt;a href=&quot;http://pic.yupoo.com/harryxu/4332195c74fe/72xu1f6s.jpg&quot;&gt;&lt;img src=&quot;http://photo.yupoo.com/harryxu/4332195c74fe/medium.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;307&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;完喽，这样在Win下就基本配置完了一个git客户端。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/405466730/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/%e8%ae%b0%e5%bd%95%e4%b8%8b%e6%88%91%e5%9c%a8win%e4%b8%8b%e9%85%8d%e7%bd%aegit%e7%9a%84%e8%bf%87%e7%a8%8b&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466730/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466730/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.harrspy.com/%e8%ae%b0%e5%bd%95%e4%b8%8b%e6%88%91%e5%9c%a8win%e4%b8%8b%e9%85%8d%e7%bd%aegit%e7%9a%84%e8%bf%87%e7%a8%8b/feed</wfw:commentRss><slash:comments>0</slash:comments><description>首先下载安装msysgit，安装过程一般使用默认选项即可。不过如果团队中可能有使用Linux unix等非windows系统的话，最好选择 Use unix style line endings msysgit装完就能用命令行的方式玩git了，如果需要一个类似乌龟svn的GUI工具，可以装下 tortoisegit。 现在基本就能在本地玩git了。 如果是在一个团队中，要参与合作开发，一般是需要生成ssh key，然后把公钥发给git服务器管理员，让管理员给你设置权限。这样才能push或pull。 打开 msysgit 的cygwin窗口 ，可以双击桌面上的图标，也可以在任何文件夹上右键 选 Git Bash Here 输入 ssh-keygen -t rsa -C &quot;xxx@xxx.com&quot; 并回车（-C 后面的引号里就输入邮箱地址好了&amp;#8230;），如果你不清楚回车后提示你输入的是啥，就一直回车直到完成好了。 然后到 系统盘你的用户目录里的.ssh目录下，比如 C:\Documents and Settings\Administrator\.ssh ，把里面的 id_rsa.pub 文件发给管理员，如果使用类似github的git服务提供网站，就把那个文件里的内容添加到账户的SSH Public Keys里。 最后在乌龟git里设置2样东西 首先进入Network选项，把ssh client的程序设置为msysgit安装目录里的bin/ssh.exe ，如下图 然后进入Config，输入你的名字和Email，再勾上下面的Save as globa，就行了，以后你做了提交，在git log的Author就是你这里设置的名字和Email。 完喽，这样在Win下就基本配置完了一个git客户端。&lt;img src=&quot;http://www1.feedsky.com/t1/405466730/harryblog/feedsky/s.gif?r=http://blog.harrspy.com/%e8%ae%b0%e5%bd%95%e4%b8%8b%e6%88%91%e5%9c%a8win%e4%b8%8b%e9%85%8d%e7%bd%aegit%e7%9a%84%e8%bf%87%e7%a8%8b&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/harryblog/405466730/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/harryblog/405466730/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>tortoisegit</category><category>git</category><category>harry</category><category>msysgit</category><pubDate>Sun, 10 Jan 2010 15:38:16 +0800</pubDate><author>harry</author><comments>http://blog.harrspy.com/%e8%ae%b0%e5%bd%95%e4%b8%8b%e6%88%91%e5%9c%a8win%e4%b8%8b%e9%85%8d%e7%bd%aegit%e7%9a%84%e8%bf%87%e7%a8%8b#comments</comments><guid isPermaLink="false">http://blog.harrspy.com/?p=212</guid><dc:creator>harry</dc:creator><fs:srclink>http://blog.harrspy.com/%e8%ae%b0%e5%bd%95%e4%b8%8b%e6%88%91%e5%9c%a8win%e4%b8%8b%e9%85%8d%e7%bd%aegit%e7%9a%84%e8%bf%87%e7%a8%8b</fs:srclink><fs:srcfeed>http://blog.harrspy.com/feed</fs:srcfeed><fs:itemid>feedsky/harryblog/~7986025/405466730/6095385</fs:itemid></item></channel></rss>