<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>麦叔之道</title>
		<description>Mike Gang Chen's personal website</description>
		<link>http://gchen.cn</link>
		
			<item>
				<title>PhoneGap - 在程序内打开网页链接</title>
				<description type="html">&lt;p&gt;用PhoneGap“伪装”Web App成Mobile App，第一件要做的事情就是避免“露馅” - 防止用户点击页面链接时候，会打开系统的新窗口。而恰恰PhoneGap在iOS和Android的默认情况下，新窗口都是采用移动终端自己的浏览器（Mobile Safari和Android Web View）进行渲染。&lt;/p&gt;

&lt;p&gt;以下介绍的设置适用PhoneGap 1.4+版本，之前的版本没有经过测试。&lt;/p&gt;

&lt;h3 id='ios'&gt;iOS&lt;/h3&gt;

&lt;p&gt;首先要声明的是，用PhoneGap开发的App在iOS中默外部地址都会禁止访问。也就是说，用PhoneGap打包一个网页，如果页面里面含有链接到其他网站的地址的话，用户点击是无法正常访问的。 在目前版本的设置也相对简单，PhoneGap已经给出一个配置文件。在项目的“Supporting Files”目录，打开PhoneGap.plist文件，里面含有一个外部地址的白名单设置，一个&lt;strong&gt;ExternalHosts&lt;/strong&gt;的数组，只要分别加入允许访问的网址就可加入白名单。同样还有另外一个Key为&lt;strong&gt;OpenAllWhitelistURLsInWebView&lt;/strong&gt;的设置，如果设置为YES，那么所有白名单上的网站都可以在App的Web View里面打开。&lt;/p&gt;

&lt;h3 id='android'&gt;Android&lt;/h3&gt;

&lt;p&gt;Android平台相对复杂一点，目前可以采用的一个做法是用自己的WebViewClient对象，并且重写shouldOverrideUrlLoading方法。如果有更简单的办法，还请告知。&lt;/p&gt;

&lt;p&gt;首先，在layout/main.xml中里面加入一个WebView，如：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;WebView android:id=&amp;quot;@+id/MyWebView&amp;quot;
android:layout_width=&amp;quot;fill_parent&amp;quot;
android:layout_height=&amp;quot;fill_parent&amp;quot;
android:scrollbars=&amp;quot;none&amp;quot;&amp;gt;
&amp;lt;/WebView&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;然后，新建一个class，并继承自WebViewClient类，如：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import android.webkit.WebViewClient;
import android.webkit.WebView;

public class MyClient extends WebViewClient {
	@Override
	public boolean shouldOverrideUrlLoading(WebView view, String url) {
		//only open new browser when access protocal of ext://
		if( url.contains(&amp;quot;ext://&amp;quot;) ) {
	        return false;
		}
		else {
			view.loadUrl(url);
			return true;
		}
	}
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;最后，在主类的onCreate方法里面加入这几行代码：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;WebView myWebView = ((WebView)findViewById(R.id.MyWebView));
// Required to work with Javascript
myWebView.getSettings().setJavaScriptEnabled(true);  
myWebView.setWebViewClient( new MyClient() );
myWebView.loadUrl(&amp;quot;file:///android_asset/www/index.html&amp;quot;);&lt;/code&gt;&lt;/pre&gt;</description>
				<published>2012-02-26 21:35:44 +0800</published>
				<link>http://gchen.cn/2012/02/phonegap-open-new-page-not-in-external-browser/</link>
			</item>
		
			<item>
				<title>MBP挂SSD有感</title>
				<description type="html">&lt;p&gt;我13寸的MBP是09年中买的，双核2.26MHz，内存半年前为了升级Lion加到了8G。 最近开xcode和eclipse，系统已经开始反应缓慢，之前也已经有好几个人推荐开发机用SSD，于是做了决定把硬盘给升级了。&lt;/p&gt;

&lt;h3 id='id620'&gt;选什么牌子？&lt;/h3&gt;

&lt;p&gt;在东芝/三星没有苹果的定制版前，网上都推荐Intel和西数的两款SSD。既然有自家产品，当然也是首选。 苹果一向排斥外部的东西，据说其他牌子的SSD不能打开&lt;a href='http://paulstamatiou.com/mac-osx-lion-ssd-trim-support'&gt;TRIM&lt;/a&gt;，而需要软件支持。 我最后到手的是一块东芝产的APPLE SSD TS128C，三星的TS128C应该新一点。价格在1.2K RMB左右。&lt;/p&gt;

&lt;h3 id='id621'&gt;多大容量？&lt;/h3&gt;

&lt;p&gt;作为人生第一块SSD，性价比很重要。够用，并且能满足将来2年系统扩张，128Gb对我来说比较可行。 在适应摩尔定律的早期，越大越贵越吃亏。&lt;/p&gt;

&lt;h3 id='id622'&gt;如何安装？&lt;/h3&gt;

&lt;p&gt;随着网络带宽加速和各类高速接口标准诞生，笔记本上的光驱使用率现在越来越低，我的MBP是办公室唯一一台可以用来共享光驱的机器（其他是MBA和Mini）。因此，我打算取出内置光驱，在这个位置加一块SSD，变成双硬盘。考虑到原盘安全等因素（&lt;a href='http://apple4.us/2011/03/kill-cdrom-embrace-ssd.html'&gt;详细可参考这篇文章&lt;/a&gt;），HDD还是待在原处，新添的SSD则装入一个国产硬盘支架，安装在光驱位置。安装时候还出现了一个小插曲，国产支架做工叫糙，安装后本子的盖子不能无缝密合，需要拆开后用钳子把螺丝位置两处压平一些，然后再装入。&lt;/p&gt;

&lt;h3 id='id623'&gt;速度优势？&lt;/h3&gt;

&lt;p&gt;SSD最关心的就是叫HDD速度上的提升，在升级前我特意做了一个简单的性能测试，HDD在256k的顺序读写速度分别是：51MB/s 和 40MB/s。 我的Lion 10.7.3进入系统前转圈在60次以上。 &lt;img alt='hdd' src='http://ww3.sinaimg.cn/bmiddle/55dd8cd7jw1dpqmst1kh5j.jpg' /&gt;&lt;/p&gt;

&lt;p&gt;SSD相同条件测试数据为：157MB/s 和 192 MB/s，提升了2-3倍多。 5s内进入系统，2s即可关机。 &lt;img alt='ssd' src='http://ww4.sinaimg.cn/bmiddle/55dd8cd7jw1dprhlv0d83j.jpg' /&gt;&lt;/p&gt;

&lt;h3 id='id624'&gt;其他考虑&lt;/h3&gt;

&lt;p&gt;在没有TRIM前，SSD的寿命会较短，这也是尽量先选择低成本进入SSD的原因。所以在软件和数据上的存储策略，也会考虑把重要数据放到HDD上，SSD用来运行操作系统和常用软件。&lt;/p&gt;</description>
				<published>2012-02-06 22:46:28 +0800</published>
				<link>http://gchen.cn/2012/02/macbook-pro-has-a-ssd/</link>
			</item>
		
			<item>
				<title>iTodo - Sublime Text 2上的GTD插件</title>
				<description type="html">&lt;p&gt;前段时间一直在用TextMate上的&lt;a href='https://github.com/svenfuchs/taskmate'&gt;Taskmate&lt;/a&gt;插件做TODO List的管理，自从Sublime Text2成为我首选文本编辑器后，这也是我唯一在留用TextMate的原因。几天前问了一下Taskmate的作者有无计划把他的插件迁移到st2上，一直没有等到回音。这个周末花了一点时间，自己实现了简单版本的st2插件，项目名为iTodo。&lt;/p&gt;

&lt;p&gt;目前iTodo的功能还十分有限，只实现了两个基本功能&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- 任务标记完成（或撤销）
- todo文件的语法高亮&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;具体效果下图所示：&lt;/p&gt;

&lt;p&gt;&lt;img alt='iTodo in Sublime Text 2' src='http://d.yun.io/public/getcontent/shorturl/_Zna8f' /&gt;&lt;/p&gt;

&lt;p&gt;通过快捷键CMD+\切换任务状态。标记完成状态时候，会在任务尾部加上 @done 这个Tag，并加上当前时间和更改开头图标。再次按同样快捷键，取消完成标记。&lt;/p&gt;

&lt;p&gt;目前我的TODO文件是每月新建，一旦列表多了之后，可能会考虑在后续版本加上Tag和Project的汇总文件生成，当然如果我有时间的话。作为开源项目，也希望任何人可以扩充这个插件。&lt;/p&gt;

&lt;h3 id='id619'&gt;安装使用&lt;/h3&gt;

&lt;p&gt;插件已经提了Pull Request给Package Control Channel，一旦通过就可以在st2里面通过Package Control搜索iTodo直接安装。目前，还只能在我项目地址获取源码后，拷贝到插件目录进行安装。&lt;/p&gt;

&lt;h3 id='todo'&gt;附：我的TODO列表管理方案&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;QuickSilver内置Trigger快捷键(CMD+SHIFT+T)启动Sublime Text2/iTodo进行编辑&lt;/li&gt;

&lt;li&gt;使用&lt;a href='http://projects.tynsoe.org/en/geektool/'&gt;GeekTool&lt;/a&gt;新建shell，cat活动.todo文件，显示在桌面时刻提醒&lt;/li&gt;

&lt;li&gt;使用DropBox进行同步备份&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img alt='GeekTool with Shell to cat .todo' src='http://d.yun.io/public/getcontent/shorturl/dASX9t' /&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;em&gt;iTodo在GitHub的项目地址：&lt;/em&gt; &lt;a href='https://github.com/chagel/itodo'&gt;https://github.com/chagel/itodo&lt;/a&gt;&lt;/p&gt;

&lt;h3 id='updated20120110_2317'&gt;Updated(2012-01-10 23:17):&lt;/h3&gt;

&lt;p&gt;iTodo项目已经合并到Package Control Channel了，现在可以直接搜索iTodo来进行安装，任何问题欢迎和我联系。&lt;/p&gt;</description>
				<published>2012-01-08 20:24:24 +0800</published>
				<link>http://gchen.cn/2012/01/gtd-with-itodo-in-sublime-text/</link>
			</item>
		
			<item>
				<title>What do we work with in Diggerlab?</title>
				<description type="html">&lt;p&gt;&lt;img alt='diggerlab' src='http://d.yun.io/public/getcontent/shorturl/_379Fy' /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Beauty of style and harmony and grace and good rhythm depends on simplicity. — Plato&lt;/em&gt;&lt;/p&gt;

&lt;h3 id='id615'&gt;工作机:&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Macbook Pro&lt;/li&gt;

&lt;li&gt;Macbook Air&lt;/li&gt;

&lt;li&gt;Mac Mini&lt;/li&gt;

&lt;li&gt;Dell 24&amp;#8221; U2412M显示器&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3 id='id616'&gt;操作系统：&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mac OSX 10.7 Lion&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3 id='id617'&gt;团队协作：&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;电子邮件：使用Google Apps提供的企业邮箱，客户端：Sparrow ＋ Web&lt;/li&gt;

&lt;li&gt;IM：Google Talk，客户端：iChat + Adium&lt;/li&gt;

&lt;li&gt;文件共享：SparkleShare + 盛大云硬盘（测试中）&lt;/li&gt;

&lt;li&gt;项目管理：Redmine + Scrum + 白板&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3 id='id618'&gt;开发环境：&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;设计：Adobe CS5（Illustrator，Photoshop）&lt;/li&gt;

&lt;li&gt;前端：Adobe CS5（Photoshop，Dreamweaver，Fireworks）&lt;/li&gt;

&lt;li&gt;后端：Sublime Text2，iTerm2&lt;/li&gt;

&lt;li&gt;版本控制：Git&lt;/li&gt;

&lt;li&gt;语言：Ruby1.9, Python2.7, Objective C++, JavaScript, HTML5, CSS3&lt;/li&gt;

&lt;li&gt;框架：Rails3.1, Xcode, PhoneGap&lt;/li&gt;

&lt;li&gt;数据库：MySQL(XtraDB), Redis&lt;/li&gt;
&lt;/ul&gt;</description>
				<published>2011-12-18 11:34:42 +0800</published>
				<link>http://gchen.cn/2011/12/diggerlab-tech-stack/</link>
			</item>
		
			<item>
				<title>程序员的完美文本编辑器 － Sublime Text2</title>
				<description type="html">&lt;p&gt;每个人都应该有一双好鞋，每个geek都应该有一个适合自己的文本编辑器。&lt;/p&gt;

&lt;p&gt;自从10月份开始换上了Sublime Text 2(st2)，在接下来的两个月它和我朝夕相伴，已经完成了好几个Web项目开发，Blog，文档处理，Notes等等工作。如果wakoopa没有卸载的话，st2一定是可以飙升我开发时间的头号利器。从Windows到Ubuntu再到Mac OSX，我使用过的文本编辑器也不算少了，比较有名的包含有EditPlus, UltraEdit, SciTE, Notepad++, e-TextEditor, Intype, gedit, Vim, TextMate, BBEdit, Coda等。而我现在的Dock上唯有一个st2足矣。&lt;/p&gt;

&lt;p&gt;如今，我每见到一个程序员朋友都会问一下他们是否在用st2，没有用的话，我一定要强烈推荐一下。以致于公司招聘工程师时候，我也会旁敲侧击地问一下是否知道st2。为了更好地把这个神器推荐给更多的朋友，我按照优先级，列举了10个st2对我最有用的或者我最喜欢的功能，仅供参考（快捷键为我在MacOSX Lion使用，其他OS请对号入座）。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;h3 id='command_palette_cmdshiftp'&gt;Command Palette (cmd+shift+p)&lt;/h3&gt;

&lt;p&gt;打开命令窗口，匹配查找任何内置指令 &lt;img alt='Command Palette' src='http://dl.dropbox.com/u/4017415/blog/st2/command_palette.png' /&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='go_to_anything_cmdp'&gt;Go to Anything (cmd+p)&lt;/h3&gt;

&lt;p&gt;快速访问项目文件（包含模糊和首字母等匹配），ctrl+g定位行，cmd+r定位到函数 &lt;img alt='Go to Anything' src='http://dl.dropbox.com/u/4017415/blog/st2/go_to_anything.png' /&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='package_control'&gt;Package Control&lt;/h3&gt;

&lt;p&gt;用户在线查找，安装，管理插件的插件 &lt;a href='http://wbond.net/sublime_packages/package_control'&gt;Package Control&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='modern_ui'&gt;Modern UI&lt;/h3&gt;

&lt;p&gt;标准的Mac风格UI，简洁，耐看，实用，美观，操作响应很快，用户友好性极高，智能轻快 &lt;img alt='Sublime Text2' src='http://www.sublimetext.com/screenshots/cpo.png' /&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='distraction_free_mode_cmdctrlshiftf'&gt;Distraction Free Mode (cmd+ctrl+shift＋f)&lt;/h3&gt;

&lt;p&gt;类似WriteRoom，FocusWriter等全屏无干扰模式，自定义文字和宽度，非常适合静心思考写博客 &lt;img alt='Distraction Free' src='http://dl.dropbox.com/u/4017415/blog/st2/distraction_free_mode.png' /&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='vi_mode'&gt;VI Mode&lt;/h3&gt;

&lt;p&gt;如果是VI中毒用户，可以打开这个Vintage选项，使用熟悉的read/write模式和快捷键&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.sublimetext.com/docs/2/vintage.html'&gt;参考链接&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='mini_map'&gt;Mini Map&lt;/h3&gt;

&lt;p&gt;对于千行以上代码文件，这个功能非常实用 &lt;img alt='Minimap' src='http://dl.dropbox.com/u/4017415/blog/st2/minimap.png' /&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='multipanel_editing_cmdalt14'&gt;Multi-panel Editing (cmd+alt+1-4)&lt;/h3&gt;

&lt;p&gt;Split（v/h）已经不是vim的专利 &lt;img alt='Split layouts' src='http://dl.dropbox.com/u/4017415/blog/st2/splits_layout.png' /&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='auto_save'&gt;Auto Save&lt;/h3&gt;

&lt;p&gt;时刻自动保存，就算程序异常，下次启动最后修改也会还原&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='multiple_selection'&gt;Multiple Selection&lt;/h3&gt;

&lt;p&gt;如果vertical selection都不能满足你需求的时候，st2提供了cmd+selection可以对多个焦点进行同时选择&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.sublimetext.com/docs/2/multiple_selection_with_the_keyboard.html'&gt;参考链接&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;h3 id='all_others_normal_editors_have'&gt;All Others Normal Editors Have&lt;/h3&gt;

&lt;p&gt;最后，请允许我加上这一条，就是以往你在其他编辑器里面用到的基本功能st2都有。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h4 id='id614'&gt;更多参考：&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.sublimetext.com/2'&gt;Sublime Text Home&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.sublimetext.com/docs/2/'&gt;Sublime Text 2 Doc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
				<published>2011-12-01 22:13:02 +0800</published>
				<link>http://gchen.cn/2011/12/ten-amazing-features-of-sublime-text-2/</link>
			</item>
		
			<item>
				<title>在创业的路上</title>
				<description type="html">&lt;p&gt;几个月前，我终于鼓起勇气跟以前的老板和同事一一说再见。从此，我踏上了和许多创业者一样的道路，为实现自己的梦想开始加快步伐。&lt;/p&gt;

&lt;h1 id='id609'&gt;勇气&lt;/h1&gt;

&lt;p&gt;都说男人三十而立。如果拥有一份稳定的工作，拿着比平均水平高的待遇，不必担心贷款和支出意外，那么，我曾接近这个而立之年该有的回报。但是，有人愿意选择这种宁静的生活，而有人却总在不经意间尝试一种新的方式，而我就是那个不满足现状，总是觉得自己得不到的才是最好的人（想起第一个当面这么评价我的前同事，祈祷你在天堂永远健康快乐）。&lt;/p&gt;

&lt;p&gt;有时我很庆幸自己选择了这个行业，在IT界的这么多年，看惯了科技给人类生活带来的革命变化，看惯了一批批科技公司成长起来、黯淡下去，也看惯了一个个名校高材生为了追逐梦想，可以辍学而坚持书写传奇。我时常告诉自己，其实，你自己也离他们很近，如果眼中没有自己，将永远也得不到尝试的机会，因为你想都不敢想。鼓励自己尝试昨天的你不敢做的，明天的你将变得愈来愈强。&lt;/p&gt;

&lt;h1 id='id610'&gt;兴趣&lt;/h1&gt;

&lt;p&gt;最快乐的工作莫过于天天可以做自己想做的事情。一直很向往互联网公司－自由、开放、个性、创意，似乎每一种精神都让人陶醉。但是，我却一直囚禁在企业软件和微软的行动规则里面。曾辗转了半个地球然后尝试找回工作的乐趣，却无法让自己在不同价值观面前低头，不甘接受事实。创业，促成了满足自己兴趣的最佳选择。做自己喜欢的，当你想成就一番事业时，这样才能坚持。让兴趣成为工作，在工作中找到乐趣，快乐，莫过于此。&lt;/p&gt;

&lt;p&gt;移动互联网，一个结合了个人兴趣爱好和最新科技代表的方向，是我对这个创业项目的基本定位。能从事这么有意义的工作，让我的创业激情得到充分发挥。&lt;/p&gt;

&lt;h1 id='id611'&gt;学习&lt;/h1&gt;

&lt;p&gt;创业是一个最适合努力学习，深刻反省的机会。替别人打工，职位决定了你的能力范围，不是因为你做不了，而是因为别人比你更适合。给自己打工，你开始代替甲乙丙丁，除了设计产品、带头研发，还开始关注财务，了解市场，学习运营，以前前台做的事情现在你不得不自己处理，以前老板见的人现在你也要硬着头皮搞关系。互联网创业的一大特点就是节奏快，知识更新频繁，不但要求创业者有持久的学习热情，同时也要时刻保持谦逊的心态，前辈太多了。多了解行情，多结识朋友。&lt;/p&gt;

&lt;h1 id='id612'&gt;诱惑&lt;/h1&gt;

&lt;p&gt;创业路上面临着无数的诱惑，有些是物质的，有些是虚幻的。很多人觉得创业的直接动力来自财富，相比短暂的集中付出，可以带来高比例的回报。股份只有在真正兑现时候，才有其价值，有多少创业项目获得A轮，B轮？最后爬到金字塔顶端的，不是所有创业者都能做到，绝大多数都以失败告终。更有一些所谓的Title，比如名片上的CXO，决不能让虚幻遮掩了现实的残酷。10%的创业项目成功率，比巴莱多定律还要低很多。&lt;/p&gt;

&lt;h1 id='id613'&gt;事业&lt;/h1&gt;

&lt;p&gt;创业不仅仅是体验过程，同时也是人生事业的目标。失败是教训，成功是勉励，如果同时能为社会做出贡献，让自己的努力成果得到其他人的认可，甚至改变一些人的生活方式，此生而无憾！&lt;/p&gt;

&lt;p&gt;你是想卖一辈子糖水，还是想改变世界，你想好了吗？&lt;/p&gt;</description>
				<published>2011-11-28 00:31:36 +0800</published>
				<link>http://gchen.cn/2011/11/i-am-on-my-way/</link>
			</item>
		
			<item>
				<title>Google Dart语言身世揭秘</title>
				<description type="html">&lt;p&gt;Google V8团队将在今年10月10日于丹麦公布一个新的Web脚本语言&lt;a href='http://goo.gl/0i4Da'&gt;Dart&lt;/a&gt;，这个消息作为Keynote将是Google GOTO大会的一个重磅炸弹。Dart是一门什么样的编程语言？&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;Dart, a new programming language for structured web programming.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;揭幕这个语言的演讲者是&lt;a href='http://en.wikipedia.org/wiki/Lars_Bak_(computer_programmer)'&gt;Lars Bak&lt;/a&gt;，是Google虚拟机领域的专家，参与了Chrome浏览器中V8 JavaScript引擎的开发。虽然官方还没有给出Dart的详细说明，但是我们通过Keynote标题以及作者背景了解到，这个新语言应该是跟浏览器Chrome以及VM相关。&lt;/p&gt;&lt;p&gt;&lt;img alt='new_lingo' src='http://dl.dropbox.com/u/4017415/blog/new_language.png' /&gt;&lt;/p&gt;&lt;p&gt;一年前，Google&lt;a href='https://groups.google.com/a/google.com/group/javascript-standard/topics'&gt;内部JavaScript群组&lt;/a&gt;以及Buzz上，透露了Google当时正在改进JavaScript并且在研发一门&lt;a href='http://goo.gl/uLo7l'&gt;新的Web编程语言Dash&lt;/a&gt;，负责Dash的正是Lars Bak，因此有理由相信当年的Dash应该就是即将面世的Dart的项目代号。&lt;/p&gt;&lt;p&gt;Google认为目前Web领域的发展已经完全超越了JavaScript相关技术更新的步伐，越来越多的应用采用JavaScript开发，但是语言本身的缺陷，导致需要维护大量的代码。并且很多创新的项目开始从Web平台迁移到iOS和其他平台。Google开发的复杂Web应用，忍受着JavaScript本身不可加工性（cannot be tooled），并且一直受着性能的牵制。而大规模的小型Web项目常常迷失在种种JavaScript框架中，被各种各样的开发模式所困扰。&lt;/p&gt;&lt;p&gt;Dash语言的三个目标：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;性能 - Dash要彻底解决如今EcmaScript的虚拟机面临的性能问题&lt;/li&gt;
&lt;li&gt;开发者友好 - 比JavaScript更加动态，易上手，没有编译器特性&lt;/li&gt;
&lt;li&gt;可加工性(be Tooled) - Dash将被设计成容易扩展（比如，含有optional types），对于规模大的互联网项目，能够提供代码支持特性，如重构或者查找调用入口点（意味着可以提供IDE级别支持）。当然，Dash对于大多数项目完全是利用文本编辑器即可配合开发的。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;此外，Dash也会考虑安全性。Dash被设计成使用在以下一些地方：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Browser VM - Dash作为浏览器客户端的语言，将可以完全取代JavaScript&lt;/li&gt;
&lt;li&gt;Front-end Server - Dash也可以作为服务器端语言&lt;/li&gt;
&lt;li&gt;Dash Cross Compiler - 在没有Dash VM的地方，可以把Dash编译成JavaScript给传统平台调用&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;由此，Dash/Dart想取代JavaScript成为一个全新的Web客户端语言的目标显露无疑。而且最终染指服务器编程，可见其野心之大。但是如今Chrome浏览器的全球市场规模还达不到1/4，摆在Google眼前一个很艰巨的任务是，如何说服Mozilla，Microsft，Apple等这些浏览器霸主跟其合作，将他们的新语言推向市场。当然还有如今数不尽的JavaScript受益公司和组织，他们的前途又将如何？Node.js，CoffeScript又将有何反应？&lt;/p&gt;</description>
				<published>2011-09-10 12:09:18 +0800</published>
				<link>http://gchen.cn/2011/09/google-dart-unleash/</link>
			</item>
		
			<item>
				<title>Strobe平台初探</title>
				<description type="html">&lt;h1&gt;什么是Strobe开发平台&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;We build for the internet's multi-device renaissance.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href='http://www.strobecorp.com/'&gt;Strobe&lt;/a&gt;成立于2010年6月，创始人之一是前苹果公司负责JavaScript框架的Charles Jolley，正是SproutCore的作者，该框架曾被用于苹果产品MobileMe，iWork.com,.Mac。后有另外两名技术社区界的大牛Yehuda Katz和Carl Lerche加入，Yehuda是Rails，jQuery和众多开源项目的核心成员和创始人，Carl也是Rails的核心开发人员（Mike曾在RubyConf 2010上海有幸听过Yehuda的精彩演讲）。目前公司已经获得A轮250万美金风投。&lt;/p&gt;&lt;p&gt;&lt;a href='http://www.strobecorp.com/products-platform'&gt;Strobe平台&lt;/a&gt; 利用HTML5，JavaScript，Rails等开发技术和框架，让开发，部署和管理基于浏览器，移动设备，Tablet等用户平台的App应用更为简单和方便。&lt;/p&gt;&lt;h1&gt;申请帐号和下载Starter Kit&lt;/h1&gt;&lt;p&gt;目前该项目还出于Beta邀请测试阶段，需要&lt;a href='http://www.strobecorp.com/products-platform/#beta-signup-form'&gt;申请&lt;/a&gt;后才能获得注册帐号。
帐号注册后先下载SDK，目前提供了Windows和Mac两个版本：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;http://strobe-pkg.strobeapp.com/strobe-latest.exe&lt;/li&gt;
&lt;li&gt;http://strobe-pkg.strobeapp.com/strobe-latest.pkg&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;然后可以从Getting Started获得基于&lt;a href='http://html5boilerplate.com/'&gt;HTML5 Bolierplate&lt;/a&gt;的&lt;a href='http://starterkit.strobeapp.com/strobe-starter-kit.zip'&gt;Starter Kit&lt;/a&gt;&lt;/p&gt;&lt;h1&gt;创建第一个App&lt;/h1&gt;&lt;p&gt;目前Strobe提供的开发包里面其实只有一个Strobe.js文件是用于编写代码的，目前这个JavaScript库也不复杂，有以下一些功能和方法的实现：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Strobe.ajax(url, [settings])&lt;/li&gt;
&lt;li&gt;Strobe.isNativeApp&lt;/li&gt;
&lt;li&gt;Strobe.popup &lt;/li&gt;
&lt;li&gt;Cookies相关处理&lt;/li&gt;
&lt;li&gt;StrobeSocial封装了Twitter和Facebook两个Addon services&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;SDK中安装的strobe命令提供以下任务：
&lt;pre class='shell' name='code'&gt;
Zeus:starter-kit mike$ strobe --help
Tasks:
  strobe applications          # list all of your applications
  strobe config [KEY] [VALUE]  # configure strobe
  strobe delete                # delete a specific application
  strobe deploy                # deploy your application to Strobe
  strobe deploys               # manage deploys
  strobe help [TASK]           # Describe available tasks or one specific task
  strobe login                 # register this computer with an existing Stro...
  strobe open                  # opens application in browser
  strobe preview               # preview your application as it would show up...
  strobe register              # registers a local application with an existi...
  strobe rollback              # rollback application to a state from given d...
  strobe set                   # update the settings for the application
  strobe signup                # signup for a new Strobe account
  strobe users                 # manage users
  strobe version               # Prints the version information
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;目前先拿Starter Kit做例子，不再做额外的开发和修改，含有以下待部署的文件：&lt;/p&gt;&lt;pre class='shell' name='code'&gt;

  Zeus:starter-kit mike$ ll
  total 88
  -rwxr-xr-x  1 mike  staff  1356 Aug 23 18:04 404.html
  -rwxr-xr-x  1 mike  staff  1032 Aug 23 18:04 apple-touch-icon-114x114-precomposed.png
  -rwxr-xr-x  1 mike  staff   640 Aug 23 18:04 apple-touch-icon-57x57-precomposed.png
  -rwxr-xr-x  1 mike  staff   747 Aug 23 18:04 apple-touch-icon-72x72-precomposed.png
  -rwxr-xr-x  1 mike  staff   640 Aug 23 18:04 apple-touch-icon-precomposed.png
  -rwxr-xr-x  1 mike  staff   640 Aug 23 18:04 apple-touch-icon.png
  -rwxr-xr-x  1 mike  staff   799 Aug 23 18:04 crossdomain.xml
  drwxr-xr-x  3 mike  staff   102 Aug 29 20:15 css
  -rwxr-xr-x  1 mike  staff  1150 Aug 23 18:04 favicon.ico
  -rwxr-xr-x  1 mike  staff  1647 Aug 23 18:04 humans.txt
  -rwxr-xr-x@ 1 mike  staff  1541 Aug 25 16:55 index.html
  drwxr-xr-x  5 mike  staff   170 Aug 29 20:16 js
  -rwxr-xr-x  1 mike  staff   107 Aug 23 18:04 robots.txt
  drwxr-xr-x  3 mike  staff   102 Sep  2 19:15 strobe


&lt;/pre&gt;&lt;h1&gt;部署到多个平台（Web，iOS）&lt;/h1&gt;&lt;p&gt;在Starter Kit的项目下面执行：&lt;/p&gt;&lt;pre&gt;&lt;code&gt;strobe deploy --production
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;开始部署项目到服务器，输入帐号密码，上传成功后会提示一个二级域名的访问路径，比如：&lt;/p&gt;&lt;pre&gt;&lt;code&gt;shutter-fce39fdd.strobeapp.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个地址就是最终部署的Web项目的访问地址，由于我们没有对项目部署进行配置，默认只有Web程序的部署。如果要部署成iOS和Android项目（目前只支持这三种），需要先设置项目属性。&lt;/p&gt;&lt;p&gt;访问https://home.strobeapp.com/ 进入您的项目，打开Platforms菜单可以分别设置三个平台的部署参数，iOS和Android的部署利用了&lt;a href='http://www.phonegap.com'&gt;PhoneGap&lt;/a&gt;项目
&lt;img alt='Strobe Project Platforms Option' border='1' src='http://dl.dropbox.com/u/4017415/blog/strobe_starter_kit_platforms.png' width='600px' /&gt;&lt;/p&gt;&lt;h1&gt;其他功能&lt;/h1&gt;&lt;p&gt;后台Dashboard，提供项目部署记录和分析，协作情况，用户和权限管理，提供Web服务帮助促销
&lt;img alt='Strobe project dashboard' border='1' src='http://dl.dropbox.com/u/4017415/blog/strobe_dashboard.png' width='600px' /&gt;&lt;/p&gt;&lt;p&gt;附加服务，集成Twitter，Facebook等Social接口，还有比较期待的未开放API－auth，push，persistence
&lt;img alt='Strobe project addons' border='1' src='http://dl.dropbox.com/u/4017415/blog/strobe_addons.png' width='600px' /&gt;&lt;/p&gt;&lt;h1&gt;总结&lt;/h1&gt;&lt;p&gt;在移动App被业界无限看好的年代，HTML5作为后起之秀正在一步步被开发者所接受。一旦HTML5＋Native Code的模式能被用于跨平台的开发，并且获得最终用户的青睐，像Strobe以及&lt;a href='http://www.sencha.com/'&gt;Sencha&lt;/a&gt;这样的开放平台无疑是开发者的福音。让我们期待更多的应用实例出现，挑战传统的时刻到了。&lt;/p&gt;</description>
				<published>2011-09-02 21:27:02 +0800</published>
				<link>http://gchen.cn/2011/09/first-impression-of-strobe/</link>
			</item>
		
			<item>
				<title>wb2t-同步新浪微博到Twitter</title>
				<description type="html">&lt;p&gt;我开始使用微博了，主要是关注朋友圈，Startup和VC领域的动向，Twitter上面还是以关注和交流技术为主。工具和平台多了之后，总在考验人类的有限精力，对于懒人总是希望能一招制胜，不喜欢做重复劳动，我也是－发推或发微博，我希望只有一个接口让我做输入，因此我写了这个简单的脚本，帮助我把微博内容同步到Twitter中去。（注：这个脚本不是双向同步的，由于众所周知的原因，国内微博可用性要远远高于另一者）&lt;/p&gt;

&lt;p&gt;这个脚本是独立运行在墙外的一段Ruby代码，定时从我的微博获取数据然后导入到我的Twitter帐号。类似的服务有第三方提供，但是我还是比较倾向自己管理，一是出于安全性考虑，二是不想引入太复杂的方案，事实上，这个Ruby脚本很简单，核心代码只有十几行。基本思路是：微博导出数据－解析和获取最新数据－Twitter发布数据。&lt;/p&gt;

&lt;p&gt;互联网阅读格式的数据开放标准，目前来说RSS是最为方便的，但是微博虽然做了开放平台，却不提供RSS的输出，这一点确实让人很遗憾。当然，利用微博的开放API也可以导出json数据，但前提是要申请App应用，管理一堆Key，Token等，太麻烦了，我不是不愿意使用新浪的技术平台，只是一个地址栏里的字符串的问题，不想搞成一个SDK的模型去求解。互联网大会上四大巨头接收采访的视频里，曹国伟还在强调微博的管理没有如履薄冰，如何以开放平台的心态迎接未来。微博平台现在就是墙里墙，前段时间把所有第三方同步API也关了，目的就是要围成圈，所有数据概不外借，所有用户都在新浪服务器监控之下，在微博外面出了事，我不管，反正你没有理由说我是在新浪微博发布的信息。好了，扯远了，程序员的世界是无所不能的，微博的RSS输出有很多现成的方案，我用了下面这个地址的服务： &lt;a href='http://medcl.net/sinarss/?uname=chagel'&gt;http://medcl.net/sinarss/?uname=chagel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;解析RSS我用了simple-rss这个gem，Twitter的发布用了twitter，这些都是Ruby里面常用的一些包。没有的话装起来也很方便： &lt;pre&gt;gem install simple-rss
gem install twitter&lt;/pre&gt; 读取RSS中的Item后就可以判断需要的内容，用Twitter类方法update进行发布： &lt;pre class='ruby'&gt;rss = SimpleRSS.parse(rss)
rss.items.reverse.each_with_index do |item, index|
  if item.pubDate &amp;gt; last_sync_time
    Twitter.update &quot;#{item.title}&quot;
  end
end&lt;/pre&gt; 记录最后一个状态导入的时间，只有比这个时间新的数据我们才需要同步，代码太简单了，这里就不再啰嗦了。这个项目我已经发布到GitHub上面，如果有兴趣，你也可以获取源码自己玩，有问题请拍砖或者发个Pull request给我吧。&lt;/p&gt;

&lt;p&gt;项目地址: &lt;a href='https://github.com/chagel/wb2t/'&gt;https://github.com/chagel/wb2t&lt;/a&gt;&lt;/p&gt;</description>
				<published>2011-08-25 01:46:33 +0800</published>
				<link>http://gchen.cn/2011/08/wb2t-sync-sina-weibo-to-twitter/</link>
			</item>
		
			<item>
				<title>在Mac OSX Lion上编译MacVim</title>
				<description type="html">&lt;p&gt;最近在整理和更新Vim的插件，发现blogit.vim这个插件已经在一个角落里面很久了。由于这个插件调用了Vim内嵌Python代码，但是我系统的Vim是没有带Python编译的，因此每次启动vim的时候，会先报一堆找不到Python指令的错误。忍了很久，今天终于拿了vim的源码，并且把Python/Ruby解释器全部编译了进来。做完发现MacVim也是很久没有更新了，顺便也pull了一下源码，按照官网说明更新：
&lt;pre class='shell' name='code'&gt;
$ git checkout snapshot-61
$ cd src
$ ./configure --with-features=huge 
              --enable-rubyinterp 
              --enable-pythoninterp
$ make
$ open MacVim/build/Release/MacVim.app
&lt;/pre&gt;&lt;/p&gt;&lt;pre class='markdown-html-error' style='border: solid 3px red; background-color: pink'&gt;REXML could not parse this XML/HTML: 
&amp;lt;p&amp;gt;编译很顺利，但是在使用blogit插件时候，MacVim直接挂了，提示：
&amp;lt;pre code=&amp;quot;shell&amp;quot;&amp;gt;
Vim: Caught deadly signal SEGV
Vim: Finished.
Segmentation fault: 11
&amp;lt;/pre&amp;gt;
由于之前这个插件是好的，所以我怀疑是我编译时候出了问题。Vim的插件开发和调试没有什么经验，不过官网给了debug和生成日志的&amp;lt;a href=&amp;quot;https://github.com/b4winckler/macvim/wiki/Debugging&amp;quot;&amp;gt;步骤&amp;lt;/a&amp;gt;
按照给出的方法，找到了日志中看上去像是问题的地方：
&amp;lt;pre&amp;gt;
Aug 22 15:11:27 Zeus.local MacVim[96992] &amp;lt;Debug&amp;gt;: 
-[MMVimController(Private) connectionDidDie:]@1333: NSConcreteNotification 0x7f88d8ee0020 {name = NSConnectionDidDieNotification; object = connection 0x7f88d8e444a0 is invalid}
&amp;lt;/pre&amp;gt;&lt;/pre&gt;
&lt;p&gt;不过看不明白，不知道具体什么问题导致，如果有经验的朋友看到了请指教！&amp;lt;/p&amp;gt; &lt;p&gt;其实MacVim提供了最新Lion系统上的一个编译版本(snapshot61)，虽然我比较喜欢native compiling的软件，现在只好拿人家的编译下来看看。下载下来解压缩试用了一下，居然插件工作的很好。立马看了一下版本信息：
&lt;pre&gt;
$ ./mvim --version
&lt;/pre&gt;
再和我自己的版本做了一下比较，只是发现在link时候多了两个参数。我又仔细看了一下configure的帮助，最终发现我漏了一个--with-macsdk=参数。于是，在make uninstall后从新configure了一把，然后make，试用成功！&lt;/p&gt; &lt;p&gt;这是我最后编译的语句：
&lt;pre&gt;
./configure --with-features=huge --enable-multibyte --enable-pythoninterp=yes 
    --enable-rubyinterp=yes --enable-perlinterp=yes --with-macsdk=10.6
&lt;/pre&gt;&lt;/p&gt;&lt;/p&gt;</description>
				<published>2011-08-22 16:54:59 +0800</published>
				<link>http://gchen.cn/2011/08/build-macvim-on-macosx-lion/</link>
			</item>
		
	</channel>
</rss>
