<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>$tail -f damien.mind</title>
	
	<link>http://damienh.org</link>
	<description>Braindump from Damien; Python, Django, Groovy, Grails, software engineering, all the geek stuff</description>
	<lastBuildDate>Sun, 04 Oct 2009 10:40:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/intrc" type="application/rss+xml" /><feedburner:emailServiceId>intrc</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>twtplus updated for Ubiquity 0.5+</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/5oIWL9JdHFU/</link>
		<comments>http://damienh.org/2009/10/04/twtplus-updated-for-ubiquity-0-5/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 10:40:54 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[Ubiquity]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=303</guid>
		<description />
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F10%2F04%2Ftwtplus-updated-for-ubiquity-0-5%2F&amp;title=twtplus+updated+for+Ubiquity+0.5%2B&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F10%2F04%2Ftwtplus-updated-for-ubiquity-0-5%2F&amp;title=twtplus+updated+for+Ubiquity+0.5%2B&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><link rel="commands" href="http://damienh.org/wp-content/uploads/2009/10/twtplus.ubiq.js" name="twtplus" />
I&#8217;ve updated the &#8220;twtplus&#8221; command for Ubiquity 0.5+. Since Github Gist sucks right now, (it&#8217;s very slow and cuts off the last lines of the code randomly without any prompt) I&#8217;m publishing the script here on my blog. Note that this is only compatible with Ubiq 0.5+ now.<br />
<a href='http://damienh.org/wp-content/uploads/2009/10/twtplus.ubiq.js'>twtplus.ubiq.js</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=5oIWL9JdHFU:fFIdor98jaY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=5oIWL9JdHFU:fFIdor98jaY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=5oIWL9JdHFU:fFIdor98jaY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=5oIWL9JdHFU:fFIdor98jaY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=5oIWL9JdHFU:fFIdor98jaY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=5oIWL9JdHFU:fFIdor98jaY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=5oIWL9JdHFU:fFIdor98jaY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=5oIWL9JdHFU:fFIdor98jaY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=5oIWL9JdHFU:fFIdor98jaY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=5oIWL9JdHFU:fFIdor98jaY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/5oIWL9JdHFU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/10/04/twtplus-updated-for-ubiquity-0-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/10/04/twtplus-updated-for-ubiquity-0-5/</feedburner:origLink></item>
		<item>
		<title>Icecodez for iPhone</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/bWeCI11Ux88/</link>
		<comments>http://damienh.org/2009/08/09/icecodez-for-iphone/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 14:40:34 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=296</guid>
		<description><![CDATA[  My friend Ryan and I just launched our team site Icecodez, which is dedicated to our iPhone apps development. The FIRST app by Icecodez just got out this week. Check out IceMetro Shahghai Subway Map Lite (itunes link). It&#8217;s an interactive map for Shanghai subway. And it&#8217;s free! Isn&#8217;t that ice cool?
]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F08%2F09%2Ficecodez-for-iphone%2F&amp;title=Icecodez+for+iPhone&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F08%2F09%2Ficecodez-for-iphone%2F&amp;title=Icecodez+for+iPhone&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>My friend Ryan and I just launched our team site <a href="http://icecodez.com">Icecodez</a>, which is dedicated to our iPhone apps development. The <a href="http://icecodez.com/icemetro/">FIRST app by Icecodez</a> just got out this week. Check out <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=325339593&amp;mt=8">IceMetro Shahghai Subway Map Lite</a> (itunes link). It&#8217;s an interactive map for Shanghai subway. And it&#8217;s free! Isn&#8217;t that ice cool?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=bWeCI11Ux88:BqV7YdXIgrM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=bWeCI11Ux88:BqV7YdXIgrM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=bWeCI11Ux88:BqV7YdXIgrM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=bWeCI11Ux88:BqV7YdXIgrM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=bWeCI11Ux88:BqV7YdXIgrM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=bWeCI11Ux88:BqV7YdXIgrM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=bWeCI11Ux88:BqV7YdXIgrM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=bWeCI11Ux88:BqV7YdXIgrM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=bWeCI11Ux88:BqV7YdXIgrM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=bWeCI11Ux88:BqV7YdXIgrM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/bWeCI11Ux88" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/08/09/icecodez-for-iphone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/08/09/icecodez-for-iphone/</feedburner:origLink></item>
		<item>
		<title>Setting up MGTwitterEngine with YAJL 1.0.6 for iPhone development</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/NA0ezCFJjNw/</link>
		<comments>http://damienh.org/2009/06/20/setting-up-mgtwitterengine-with-yajl-106-for-iphone-development/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 17:55:56 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=276</guid>
		<description><![CDATA[  *Corrected yajl include path. Updated info about adding YAJL static lib to project for deploying on device
MGTwitterEngine is a great Objective-C library for the Twitter API. Did you know the famous Twitterrific for iPhone (iTunes link) is built with MGTwitterEngine plus YAJL? You probably know that from the now famous YAJL error Twitterrific presented [...]]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F06%2F20%2Fsetting-up-mgtwitterengine-with-yajl-106-for-iphone-development%2F&amp;title=Setting+up+MGTwitterEngine+with+YAJL+1.0.6+for+iPhone+development&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F06%2F20%2Fsetting-up-mgtwitterengine-with-yajl-106-for-iphone-development%2F&amp;title=Setting+up+MGTwitterEngine+with+YAJL+1.0.6+for+iPhone+development&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>*Corrected yajl include path. Updated info about adding YAJL static lib to project for deploying on device</p>
<p><a href="http://mattgemmell.com/source#mgtwitterengine">MGTwitterEngine</a> is a great Objective-C library for the Twitter API. Did you know the famous <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284540316&amp;mt=8">Twitterrific for iPhone</a> (iTunes link) is built with MGTwitterEngine plus <a href="http://lloyd.github.com/yajl/">YAJL</a>? You probably know that from the now famous YAJL error Twitterrific presented you when the Twitapocalypse hit the world, right?</p>
<p>But setting up MGTwitterEngine and YAJL for iPhone development turned out to be more difficult than I thought, due to the lack of documentation, and my lack of extensive experience with iPhone and Mac development. Anyway, after some hacking around, I finally got the two boys to play together and work with my next cool iPhone project. The following is how I did it and I think it might be useful to someone else wrestling with the same problem out there.</p>
<h2>Getting and compiling YAJL on your Mac</h2>
<p>First, get the latest YAJL code and get it compiled.</p>
<pre class="brush: bash">
git clone git://github.com/lloyd/yajl
</pre>
<p>If you don&#8217;t have cmake on your Mac yet, get it via MacPorts. (The cmake version from Fink is too old to compile YAJL. I&#8217;ve tried it.)</p>
<pre class="brush: bash">
sudo port install cmake
</pre>
<p>Now compile YAJL</p>
<pre class="brush: bash">
cd yajl
sudo ./configure &amp;&amp; make install
</pre>
<p>Now you should have &#8220;yajl-1.0.6&#8243; under the &#8220;build&#8221; folder. And the build process should have copied the binaries to /usr/local/lib/ and /usr/local/include/yajl respectively.</p>
<h2>Getting MGTwitterEngine</h2>
<p>Get the latest code from the SVN repo.</p>
<pre class="brush: bash">
svn checkout http://svn.cocoasourcecode.com/MGTwitterEngine
</pre>
<h2>Adding MGTwitterEngine to your iPhone project</h2>
<p>Add everything from the MGTwitterEngine directory starting with &#8221;MGTwitter&#8221;, and also the NSString+UUID and NSData+Base64 category files, to the Xcode project. Choose to copy the files to the project.</p>
<h2>Telling MGTwitterEngine to use YAJL</h2>
<p>MGTwitterEngine doesn&#8217;t support Twitter&#8217;s search and trends API without YAJL, because these APIs only return JSON data. So obviously we need to tell MGTwitterEngine we have YAJL and please give us the support search and trends APIs, in addition to requesting JSON data for other Twitter API calls.</p>
<p>In MGTwitterEngineGlobalHeader.h</p>
<pre class="brush: c">
#define YAJL_AVAILABLE 1
</pre>
<h2>Adding YAJL and LibXML to the project</h2>
<p>Now add the required frameworks to the Xcode project.</p>
<p><span style="text-decoration: line-through;">Locate &#8220;/usr/local/lib/libyajl.dylib&#8221;, drag and drop it onto &#8220;Frameworks&#8221; in the Groups &amp; Files pane in Xcode. Don&#8217;t choose to copy the files.</span></p>
<p>**BEGIN UPDATE**</p>
<p>Compiling YAJL from the source using the shipped makefile will produce the dynamic library binary files (yajl*.dylib) under /usr/local/lib. Although adding these files to the frameworks gets the project to compile and run on the simulator, this won&#8217;t work on a device since only static libraries are allowed on devices for third party frameworks.</p>
<p>Compiling the static library from the source code requires a bit more work but I found someone has already done that with more good stuff like an <a href="http://github.com/gabriel/yajl-objc/tree/master">Obj-C wrapper for YAJL</a>. So we can now simply grab this <a href="https://rel.me.s3.amazonaws.com/yajl/libYAJLIPhone-0.2.2.zip">compiled YAJL static library for iPhone</a>, exand it, then add the file &#8220;libYAJLIPhone.a&#8221; to the Frameworks.</p>
<p>**END UPDATE**</p>
<p>Then also add &#8220;/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/libxml2.dylib&#8221; to Frameworks.</p>
<p>Next, open Project Info, locate the Build page, and look for the &#8220;Header Search Paths&#8221; property. Add the following two paths to the search paths property.</p>
<pre class="brush: bash">
/usr/local/include/yajl
$SDKROOT/usr/include/libxml2
</pre>
<p>*Although it seems LibXML is not required, I did get compilation errors if LibXML is not in the Frameworks.</p>
<h2>Hack and get MGTwitterEngine to build</h2>
<p>It appears that MGTwitterEngine is still written against a previous version of YAJL (supposedly a pre-1.0 version). So if at this stage you go ahead and build the project, you will see two errors from MGTwitterEngine.</p>
<pre class="brush: bash">
error: too few arguments to function &#039;yajl_alloc&#039;
error: too few arguments to function &#039;yajl_free_error&#039;
</pre>
<p>It looks like the latest version of YAJL has changed its signatures of the functions &#8220;yajl_alloc&#8221; and &#8220;yajl_free_error&#8221;. So let&#8217;s hack the corresponding code in MGTwitterYAJLParser.m to work around the build errors. Find the calls to these two functions and change the code as follows.</p>
<pre class="brush: c">
...
_handle = yajl_alloc(&amp;callbacks, &amp;cfg, nil, self);
...
yajl_free_error(nil, errorMessage);
...
</pre>
<h2>Done!</h2>
<p>Now you can hit Build and the project should build successfully. Next, you should take a look at AppController.h and AppController.m which come with MGTwitterEngine and see how to use it. It&#8217;s pretty easy to use once you get past the compilation problems. Now we have a fully functional and nicely built Twitter library ready to be used for any iPhone project! Also, if you have any suggestion or any better way to get the stuff to work please let me know.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=NA0ezCFJjNw:AAbRGm4H3io:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=NA0ezCFJjNw:AAbRGm4H3io:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=NA0ezCFJjNw:AAbRGm4H3io:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=NA0ezCFJjNw:AAbRGm4H3io:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=NA0ezCFJjNw:AAbRGm4H3io:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=NA0ezCFJjNw:AAbRGm4H3io:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=NA0ezCFJjNw:AAbRGm4H3io:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=NA0ezCFJjNw:AAbRGm4H3io:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=NA0ezCFJjNw:AAbRGm4H3io:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=NA0ezCFJjNw:AAbRGm4H3io:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/NA0ezCFJjNw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/06/20/setting-up-mgtwitterengine-with-yajl-106-for-iphone-development/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/06/20/setting-up-mgtwitterengine-with-yajl-106-for-iphone-development/</feedburner:origLink></item>
		<item>
		<title>Conditional compilation flag for iPhone OS 3.0</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/UORvFYn1KOU/</link>
		<comments>http://damienh.org/2009/06/19/conditional-compilation-flag-for-iphone-os-30/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 16:17:46 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=270</guid>
		<description><![CDATA[  If you want to take advantage of the new APIs from iPhone SDK 3.0 while keeping compatibility with pre-3.0 devices, using the following conditional compilation flag is a good solution.

#ifdef __IPHONE_3_0
//3.0
#else
//pre 3.0
#endif

]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F06%2F19%2Fconditional-compilation-flag-for-iphone-os-30%2F&amp;title=Conditional+compilation+flag+for+iPhone+OS+3.0&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F06%2F19%2Fconditional-compilation-flag-for-iphone-os-30%2F&amp;title=Conditional+compilation+flag+for+iPhone+OS+3.0&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>If you want to take advantage of the new APIs from iPhone SDK 3.0 while keeping compatibility with pre-3.0 devices, using the following conditional compilation flag is a good solution.</p>
<pre class="brush: c">
#ifdef __IPHONE_3_0
//3.0
#else
//pre 3.0
#endif
</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=UORvFYn1KOU:pYl3jybf0Vk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=UORvFYn1KOU:pYl3jybf0Vk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=UORvFYn1KOU:pYl3jybf0Vk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=UORvFYn1KOU:pYl3jybf0Vk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=UORvFYn1KOU:pYl3jybf0Vk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=UORvFYn1KOU:pYl3jybf0Vk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=UORvFYn1KOU:pYl3jybf0Vk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=UORvFYn1KOU:pYl3jybf0Vk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=UORvFYn1KOU:pYl3jybf0Vk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=UORvFYn1KOU:pYl3jybf0Vk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/UORvFYn1KOU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/06/19/conditional-compilation-flag-for-iphone-os-30/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/06/19/conditional-compilation-flag-for-iphone-os-30/</feedburner:origLink></item>
		<item>
		<title>Compile cmemcache on Gentoo</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/eBFvKwor1As/</link>
		<comments>http://damienh.org/2009/06/17/compile-cmemcache-on-gentoo/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 15:56:50 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=260</guid>
		<description><![CDATA[  I needed to install cmemcache on a Gentoo box in order to enable Django to work with memcached. But when I tried to compile the cmemcache code, I got such error messages:

‘CmemcacheObject’ has no member named ‘mc_ctxt’

I&#8217;m surprised Google didn&#8217;t give me many answers. But I came across this post which was very useful. [...]]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F06%2F17%2Fcompile-cmemcache-on-gentoo%2F&amp;title=Compile+cmemcache+on+Gentoo&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F06%2F17%2Fcompile-cmemcache-on-gentoo%2F&amp;title=Compile+cmemcache+on+Gentoo&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>I needed to install cmemcache on a Gentoo box in order to enable Django to work with memcached. But when I tried to compile the cmemcache code, I got such error messages:</p>
<blockquote>
<div>‘CmemcacheObject’ has no member named ‘mc_ctxt’</div>
</blockquote>
<p>I&#8217;m surprised Google didn&#8217;t give me many answers. But I came across <a id="aptureLink_M7Wq3PqV3K" href="http://blog.uxebu.com/2008/06/30/django-and-memcached/">this post</a> which was very useful. So in the end, here&#8217;s how I got cmemcache compiled and installed on Gentoo.</p>
<pre class="brush: bash">
cd ~/code
sudo emerge libmemcache
wget http://gijsbert.org/downloads/cmemcache/libmemcache-1.4.0.rc2.patch
wget http://gijsbert.org/downloads/cmemcache/cmemcache-0.95.tar.bz2
# the patch was made using a folder called reference
mkdir reference
cd reference
tar xjvf ../libmemcache-1.4.0.rc2.tar.bz2
cd ..
patch -p0 &lt; libmemcache-1.4.0.rc2.patch
cd reference/libmemcache-1.4.0.rc2
./configure &amp;&amp; make
sudo make install
cd ../../
tar xjvf cmemcache-0.95.tar.bz2
cd cmemcache-0.95
sudo python setup.py install
</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=eBFvKwor1As:PJqU6xFtmlY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=eBFvKwor1As:PJqU6xFtmlY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=eBFvKwor1As:PJqU6xFtmlY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=eBFvKwor1As:PJqU6xFtmlY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=eBFvKwor1As:PJqU6xFtmlY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=eBFvKwor1As:PJqU6xFtmlY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=eBFvKwor1As:PJqU6xFtmlY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=eBFvKwor1As:PJqU6xFtmlY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=eBFvKwor1As:PJqU6xFtmlY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=eBFvKwor1As:PJqU6xFtmlY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/eBFvKwor1As" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/06/17/compile-cmemcache-on-gentoo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/06/17/compile-cmemcache-on-gentoo/</feedburner:origLink></item>
		<item>
		<title>伟大产品的哲学</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/W4Xa7fEEzJM/</link>
		<comments>http://damienh.org/2009/04/26/%e4%bc%9f%e5%a4%a7%e4%ba%a7%e5%93%81%e7%9a%84%e5%93%b2%e5%ad%a6/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 16:52:03 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[quicksilver]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=255</guid>
		<description><![CDATA[  一直在思考这个问题，如何定义伟大的产品，怎么样才能做出伟大的产品。这个星期某天又折腾了一把Quicksilver，注意到了About窗内的老子语录，真有茅塞顿开的感觉。这不就是最好的对伟大产品哲学的概括吗？！难怪Quicksilver能达到这种境界。
为无为 事无事 味无味 大小多少 报怨以德 圆难于其易 为大于其细 天下难事 必作于易 天下大事 必作于细

难/易，是对&#8221;Getting Real&#8220;哲学的概括
大/细，是对Mac(包括iPhone)哲学&#8221;polish the hell out of it&#8220;的概括

我想，要做伟大的软件产品，参照这两条足矣。要是几千年前有电脑，老子就一定是古代的Steve Jobs了。遂发至Twitter与友共勉。
]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F04%2F26%2F%25e4%25bc%259f%25e5%25a4%25a7%25e4%25ba%25a7%25e5%2593%2581%25e7%259a%2584%25e5%2593%25b2%25e5%25ad%25a6%2F&amp;title=%E4%BC%9F%E5%A4%A7%E4%BA%A7%E5%93%81%E7%9A%84%E5%93%B2%E5%AD%A6&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F04%2F26%2F%25e4%25bc%259f%25e5%25a4%25a7%25e4%25ba%25a7%25e5%2593%2581%25e7%259a%2584%25e5%2593%25b2%25e5%25ad%25a6%2F&amp;title=%E4%BC%9F%E5%A4%A7%E4%BA%A7%E5%93%81%E7%9A%84%E5%93%B2%E5%AD%A6&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>一直在思考这个问题，如何定义伟大的产品，怎么样才能做出伟大的产品。这个星期某天又折腾了一把Quicksilver，注意到了About窗内的老子语录，真有茅塞顿开的感觉。这不就是最好的对伟大产品哲学的概括吗？！难怪Quicksilver能达到这种境界。</p>
<blockquote><p>为无为 事无事 味无味 大小多少 报怨以德 <strong>圆难于其易 为大于其细</strong> 天下<strong>难事</strong> 必作于<strong>易</strong> 天下<strong>大事</strong> 必作于<strong>细</strong></p></blockquote>
<ol>
<li>难/易，是对&#8221;<a href="http://gettingreal.37signals.com/">Getting Real</a>&#8220;哲学的概括</li>
<li>大/细，是对Mac(包括iPhone)哲学&#8221;<a href="http://daringfireball.net/2008/11/iphone_likeness">polish the hell out of it</a>&#8220;的概括</li>
</ol>
<p>我想，要做伟大的软件产品，参照这两条足矣。要是几千年前有电脑，老子就一定是古代的Steve Jobs了。遂发至Twitter与友共勉。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=W4Xa7fEEzJM:qloaq8cf7fA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=W4Xa7fEEzJM:qloaq8cf7fA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=W4Xa7fEEzJM:qloaq8cf7fA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=W4Xa7fEEzJM:qloaq8cf7fA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=W4Xa7fEEzJM:qloaq8cf7fA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=W4Xa7fEEzJM:qloaq8cf7fA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=W4Xa7fEEzJM:qloaq8cf7fA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=W4Xa7fEEzJM:qloaq8cf7fA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=W4Xa7fEEzJM:qloaq8cf7fA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=W4Xa7fEEzJM:qloaq8cf7fA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/W4Xa7fEEzJM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/04/26/%e4%bc%9f%e5%a4%a7%e4%ba%a7%e5%93%81%e7%9a%84%e5%93%b2%e5%ad%a6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/04/26/%e4%bc%9f%e5%a4%a7%e4%ba%a7%e5%93%81%e7%9a%84%e5%93%b2%e5%ad%a6/</feedburner:origLink></item>
		<item>
		<title>我最常用的XCode快捷键</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/Jcd_kAeTpPg/</link>
		<comments>http://damienh.org/2009/04/12/%e6%88%91%e6%9c%80%e5%b8%b8%e7%94%a8%e7%9a%84xcode%e5%bf%ab%e6%8d%b7%e9%94%ae/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 08:48:20 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=249</guid>
		<description><![CDATA[  和Xcode打了几个月的交道，总结一下我最常用也是最喜欢的几个快捷键。总的来说Xcode快捷键并不是非常丰富灵活，但熟悉了下面为数不多的几个快捷键以后工作效率马上可以提高不少。

Command-Option-Up: 切换.h和.m
Command-Shift-D: 快速打开文件
Control-2: 快速浏览当前文件成员
Alt-Command-Left/Right: 前一个/后一个编辑位置
Command-Shift-E: 最大化文件编辑区域
Control-/: 切换到下一个占位符（自动完成的时候）
Control-.: 下一个自动完成提示
Command-E: 使用当前选中内容查找
Command-G: 在当前文件中查找下一个
Command-Shift-F: 在项目中查找
Command-Alt-Shift-T: 在Groups&#38;Files里定位到当前编辑的文件
Command+双击：浏览源文件
Alt+双击：查找帮助

外加一句，深感XCode一定要用All-In-One单窗口的Layout才好用。

]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F04%2F12%2F%25e6%2588%2591%25e6%259c%2580%25e5%25b8%25b8%25e7%2594%25a8%25e7%259a%2584xcode%25e5%25bf%25ab%25e6%258d%25b7%25e9%2594%25ae%2F&amp;title=%E6%88%91%E6%9C%80%E5%B8%B8%E7%94%A8%E7%9A%84XCode%E5%BF%AB%E6%8D%B7%E9%94%AE&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F04%2F12%2F%25e6%2588%2591%25e6%259c%2580%25e5%25b8%25b8%25e7%2594%25a8%25e7%259a%2584xcode%25e5%25bf%25ab%25e6%258d%25b7%25e9%2594%25ae%2F&amp;title=%E6%88%91%E6%9C%80%E5%B8%B8%E7%94%A8%E7%9A%84XCode%E5%BF%AB%E6%8D%B7%E9%94%AE&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>和Xcode打了几个月的交道，总结一下我最常用也是最喜欢的几个快捷键。总的来说Xcode快捷键并不是非常丰富灵活，但熟悉了下面为数不多的几个快捷键以后工作效率马上可以提高不少。</p>
<ul>
<li>Command-Option-Up: 切换.h和.m</li>
<li>Command-Shift-D: 快速打开文件</li>
<li>Control-2: 快速浏览当前文件成员</li>
<li>Alt-Command-Left/Right: 前一个/后一个编辑位置</li>
<li>Command-Shift-E: 最大化文件编辑区域</li>
<li>Control-/: 切换到下一个占位符（自动完成的时候）</li>
<li>Control-.: 下一个自动完成提示</li>
<li>Command-E: 使用当前选中内容查找</li>
<li>Command-G: 在当前文件中查找下一个</li>
<li>Command-Shift-F: 在项目中查找</li>
<li>Command-Alt-Shift-T: 在Groups&amp;Files里定位到当前编辑的文件</li>
<li>Command+双击：浏览源文件</li>
<li>Alt+双击：查找帮助</li>
</ul>
<p>外加一句，深感XCode一定要用All-In-One单窗口的Layout才好用。</p>
<ul></ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=Jcd_kAeTpPg:zTFqF-847Nc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=Jcd_kAeTpPg:zTFqF-847Nc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=Jcd_kAeTpPg:zTFqF-847Nc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=Jcd_kAeTpPg:zTFqF-847Nc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=Jcd_kAeTpPg:zTFqF-847Nc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=Jcd_kAeTpPg:zTFqF-847Nc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=Jcd_kAeTpPg:zTFqF-847Nc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=Jcd_kAeTpPg:zTFqF-847Nc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=Jcd_kAeTpPg:zTFqF-847Nc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=Jcd_kAeTpPg:zTFqF-847Nc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/Jcd_kAeTpPg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/04/12/%e6%88%91%e6%9c%80%e5%b8%b8%e7%94%a8%e7%9a%84xcode%e5%bf%ab%e6%8d%b7%e9%94%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/04/12/%e6%88%91%e6%9c%80%e5%b8%b8%e7%94%a8%e7%9a%84xcode%e5%bf%ab%e6%8d%b7%e9%94%ae/</feedburner:origLink></item>
		<item>
		<title>iPhone OS 3.0 beta初体验</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/MfTOVzOnT4c/</link>
		<comments>http://damienh.org/2009/03/19/iphone-os-30-beta%e5%88%9d%e4%bd%93%e9%aa%8c/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 19:13:01 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=223</guid>
		<description><![CDATA[  iPhone OS 3.0 beta发布后马上下载过来体验了一把，把自己的iPod Touch刷了3.0版firmware，也升级了XCode 3.1.3。这次大版本更新带来了非常多的新特性，iPhone离一台完美的手持设备已经非常非常近了。初步体验下来，3.0版OS的潜力还是要靠app来挖掘，系统的本来面目还没有特别大的区别，众多新特性需要有软件的支持才能用得到。普通用户一上手就能看到的改进主要是spotlight搜索，拷贝粘贴，还有开放的蓝牙（但是默认状态是什么蓝牙服务都没有的）。后台Push，in-app支付，turn-by-turn GPS等等重要特性都要等到众多新版应用出现以后才能体现出强大来。先上几张touch上的截图吧�
]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F03%2F19%2Fiphone-os-30-beta%25e5%2588%259d%25e4%25bd%2593%25e9%25aa%258c%2F&amp;title=iPhone+OS+3.0+beta%E5%88%9D%E4%BD%93%E9%AA%8C&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F03%2F19%2Fiphone-os-30-beta%25e5%2588%259d%25e4%25bd%2593%25e9%25aa%258c%2F&amp;title=iPhone+OS+3.0+beta%E5%88%9D%E4%BD%93%E9%AA%8C&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>iPhone OS 3.0 beta发布后马上下载过来体验了一把，把自己的iPod Touch刷了3.0版firmware，也升级了XCode 3.1.3。这次大版本更新带来了非常多的新特性，iPhone离一台完美的手持设备已经非常非常近了。初步体验下来，3.0版OS的潜力还是要靠app来挖掘，系统的本来面目还没有特别大的区别，众多新特性需要有软件的支持才能用得到。普通用户一上手就能看到的改进主要是spotlight搜索，拷贝粘贴，还有开放的蓝牙（但是默认状态是什么蓝牙服务都没有的）。后台Push，in-app支付，turn-by-turn GPS等等重要特性都要等到众多新版应用出现以后才能体现出强大来。先上几张touch上的截图吧。
<a href='http://damienh.org/2009/03/19/iphone-os-30-beta%e5%88%9d%e4%bd%93%e9%aa%8c/img_0012/' title='img_0012'><img width="150" height="150" src="http://damienh.org/wp-content/uploads/2009/03/img_0012-150x150.png" class="attachment-thumbnail" alt="" title="img_0012" /></a>
<a href='http://damienh.org/2009/03/19/iphone-os-30-beta%e5%88%9d%e4%bd%93%e9%aa%8c/img_0013/' title='img_0013'><img width="150" height="150" src="http://damienh.org/wp-content/uploads/2009/03/img_0013-150x150.png" class="attachment-thumbnail" alt="" title="img_0013" /></a>
<a href='http://damienh.org/2009/03/19/iphone-os-30-beta%e5%88%9d%e4%bd%93%e9%aa%8c/img_0014/' title='img_0014'><img width="150" height="150" src="http://damienh.org/wp-content/uploads/2009/03/img_0014-150x150.png" class="attachment-thumbnail" alt="" title="img_0014" /></a>
<a href='http://damienh.org/2009/03/19/iphone-os-30-beta%e5%88%9d%e4%bd%93%e9%aa%8c/img_0015/' title='img_0015'><img width="150" height="150" src="http://damienh.org/wp-content/uploads/2009/03/img_0015-150x150.png" class="attachment-thumbnail" alt="" title="img_0015" /></a>
<a href='http://damienh.org/2009/03/19/iphone-os-30-beta%e5%88%9d%e4%bd%93%e9%aa%8c/img_0016/' title='img_0016'><img width="150" height="150" src="http://damienh.org/wp-content/uploads/2009/03/img_0016-150x150.png" class="attachment-thumbnail" alt="" title="img_0016" /></a>
</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=MfTOVzOnT4c:P_k3HM4q6uk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=MfTOVzOnT4c:P_k3HM4q6uk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=MfTOVzOnT4c:P_k3HM4q6uk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=MfTOVzOnT4c:P_k3HM4q6uk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=MfTOVzOnT4c:P_k3HM4q6uk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=MfTOVzOnT4c:P_k3HM4q6uk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=MfTOVzOnT4c:P_k3HM4q6uk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=MfTOVzOnT4c:P_k3HM4q6uk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=MfTOVzOnT4c:P_k3HM4q6uk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=MfTOVzOnT4c:P_k3HM4q6uk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/MfTOVzOnT4c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/03/19/iphone-os-30-beta%e5%88%9d%e4%bd%93%e9%aa%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/03/19/iphone-os-30-beta%e5%88%9d%e4%bd%93%e9%aa%8c/</feedburner:origLink></item>
		<item>
		<title>Running Greasemonkey scripts on Ubiquity</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/1XKV2EuC-Zk/</link>
		<comments>http://damienh.org/2009/03/06/running-greasemonkey-scripts-on-ubiquity/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 14:51:58 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[Geek Stuff]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Ubiquity]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ubiquity]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=204</guid>
		<description><![CDATA[  Mozilla Ubiquity is not only a wonderful command engine and launcher. It can also be used to do stuff what Greasemonkey is good at, manipulating page DOM dynamically, by utilizing the &#8220;pageLoad_&#8221; function hook. To demonstrate this case I&#8217;ve quickly migrated the recently popular Twitter search on Google monkey script onto Ubiquity. You [...]]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F03%2F06%2Frunning-greasemonkey-scripts-on-ubiquity%2F&amp;title=Running+Greasemonkey+scripts+on+Ubiquity&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F03%2F06%2Frunning-greasemonkey-scripts-on-ubiquity%2F&amp;title=Running+Greasemonkey+scripts+on+Ubiquity&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>Mozilla Ubiquity is not only a wonderful command engine and launcher. It can also be used to do stuff what <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> is good at, manipulating page DOM dynamically, by utilizing the &#8220;pageLoad_&#8221; function hook. To demonstrate this case I&#8217;ve quickly migrated the recently popular <a href="http://mt-hacks.com/20090302-realtime-twitter-search-results-on-google.html">Twitter search on Google monkey script</a> onto Ubiquity. You can get the Ubiq version of Twitter+Google search <a href="http://gist.github.com/74351">from here</a>.</p>
<p>I retained the original DOM building code, but replaced the Ajax call with a JQuery one along with a couple hacks explained below to get it working from Ubiquity.</p>
<p>First, while Greasemonkey has built-in mechanism for filtering page URLs for selective script invocation, you have to do that on your own with Ubiquity. Look at the first few lines in the Ubiq command for the regex job to filter out Google search addresses.</p>
<pre class="brush: javascript">
    var href = doc.location.href;
    var q = (/^https?:\/\/(?:www\.)?google\..*\/.*[&amp;?]q=([^&amp;]*)(?:&amp;|$)/(href)||0)[1];
</pre>
<p>Secondly, before publishing the script, you have to put such a line of comment in the script in order for Ubiquity to consider it an installable command and trigger the install bar at the top of the page. (Kudos to <a href="http://gist.github.com/satyr">satyr</a> for pointing out this hack)</p>
<pre class="brush: javascript">
//function cmd_
</pre>
<p>In similar ways, most of the Greasemonkey scripts can be migrated to Ubiquity.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=1XKV2EuC-Zk:QI6jgfMHJw0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=1XKV2EuC-Zk:QI6jgfMHJw0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=1XKV2EuC-Zk:QI6jgfMHJw0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=1XKV2EuC-Zk:QI6jgfMHJw0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=1XKV2EuC-Zk:QI6jgfMHJw0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=1XKV2EuC-Zk:QI6jgfMHJw0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=1XKV2EuC-Zk:QI6jgfMHJw0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=1XKV2EuC-Zk:QI6jgfMHJw0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=1XKV2EuC-Zk:QI6jgfMHJw0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=1XKV2EuC-Zk:QI6jgfMHJw0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/1XKV2EuC-Zk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/03/06/running-greasemonkey-scripts-on-ubiquity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://damienh.org/2009/03/06/running-greasemonkey-scripts-on-ubiquity/</feedburner:origLink></item>
		<item>
		<title>twtplus – The missing Twitter command for Ubiquity and Firefox</title>
		<link>http://feedproxy.google.com/~r/intrc/~3/632yu4UpOkQ/</link>
		<comments>http://damienh.org/2009/03/02/twtplus-the-missing-twitter-command-for-ubiquity-and-firefox/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 07:53:12 +0000</pubDate>
		<dc:creator>Damien</dc:creator>
				<category><![CDATA[Geek Stuff]]></category>
		<category><![CDATA[Ubiquity]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ubiquity]]></category>

		<guid isPermaLink="false">http://damienh.org/?p=188</guid>
		<description><![CDATA[  Earlier this year I spent some time to write the &#8220;twtplus&#8221; command for Ubiquity, the intriguing Quicksilver-like plugin for Firefox. I&#8217;ve been tweaking it intermittently and now I&#8217;m gonna put together a little handy reference for it.  Twtplus has the following features:

Post message to your twitter account (of course)
Preview your friends timeline. [...]]]></description>
			<content:encoded><![CDATA[<!-- This is a HTML comment, it will not display in any page. Feel free to remove this comment if it cause any inconvenient to you.
	Thanks for using digg digg, please visit http://www.mkyong.com/blog/digg-digg-wordpress-plugin for any comments and ideas, 
	
    Author : Yong Mook Kim
    Website : http://www.mkyong.com
	--><div style='float:left'><table> <td><iframe src='http://www.reddit.com/button_content?newwindow=1&amp;url=http%3A%2F%2Fdamienh.org%2F2009%2F03%2F02%2Ftwtplus-the-missing-twitter-command-for-ubiquity-and-firefox%2F&amp;title=twtplus+-+The+missing+Twitter+command+for+Ubiquity+and+Firefox&amp;t=1 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fdamienh.org%2F2009%2F03%2F02%2Ftwtplus-the-missing-twitter-command-for-ubiquity-and-firefox%2F&amp;title=twtplus+-+The+missing+Twitter+command+for+Ubiquity+and+Firefox&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>Earlier this year I spent some time to write the <a title="Get twtplus" href="http://gist.github.com/52797">&#8220;twtplus&#8221; command</a> for <a title="Get Ubiquity" href="http://labs.mozilla.com/projects/ubiquity/">Ubiquity</a>, the intriguing Quicksilver-like plugin for Firefox. I&#8217;ve been tweaking it intermittently and now I&#8217;m gonna put together a little handy reference for it.  Twtplus has the following features:</p>
<ul>
<li>Post message to your twitter account (of course)</li>
<li>Preview your friends timeline. Click avatar to reply.</li>
<li>@ and d message to friends with friends username autocompletion. Notice that &#8220;@&#8221; is a modifier keyword so you need to leave a space after it to get the friend name autocompletion working.</li>
<li>Use &#8220;#url&#8221; tag to substitute the URL of the currently viewing page</li>
<li>Automatically shorten all URLs found in a message using http://is.gd</li>
<li>&#8220;as&#8221; modifier for posting as multiple twitter accounts.</li>
</ul>
<p>Most of the features are pretty straightforward. Take a look at the following screenshot. Notice the grey hints after the &#8220;twtplus&#8221; command when you type and you&#8217;ll be fine.</p>
<div id="attachment_189" class="wp-caption alignnone" style="width: 310px"><a href="http://damienh.org/wp-content/uploads/2009/03/picture-2.jpg"><img class="size-full wp-image-189" title="twtplus Ubiquity" src="http://damienh.org/wp-content/uploads/2009/03/picture-2.jpg" alt="twtplus" width="300" height="210" /></a><p class="wp-caption-text">twtplus</p></div>
<p>In order to get multi-account posting working, there are a couple things I&#8217;d like to mention. First, due to the way the browser works, if you have a logged in session for Twitter, the browser will ALWAYS post your tweet as the currently logged in user, regardless of the one you specifies with the &#8220;as&#8221; modifier keyword. Thus the solution is to <strong>avoid being logged in</strong> via the Twitter web interface, or when the stock &#8220;twitter&#8221; command prompts you a login dailog. If you visit twitter.com and find that you&#8217;ve already logged in, log out explicitly.</p>
<p>Secondly, twtplus looks for your stored usernames and passwords for Twitter in your Firefox password manager, for the login authentication to Twitter and provide multiple account autocompletion suggestions. So you need to store your Twitter accounts with Firefox if you haven&#8217;t already. This is also a more secure and convenient way than the stock &#8220;twitter&#8221; command since you don&#8217;t need to input your twitter login from time to time.</p>
<p>Now <a href="http://gist.github.com/52797">get twtplus from here</a>.</p>
<p><em>Update: Here&#8217;s an <a href="http://www.screencast.com/t/oRlCPa34">awesome screencast</a> from <a href="http://twitter.com/neo4zion">@neo4zion</a></em></p>
<p><object width="440" height="343" data="http://content.screencast.com/users/nickson108/folders/openstream/media/b427bd76-8d7a-4f7e-b7bf-4bc02a54e49e/flvplayer.swf" type="application/x-shockwave-flash"><param name="quality" value="high" /><param name="bgcolor" value="#FFFFFF" /><param name="flashVars" value="thumb=http://content.screencast.com/users/nickson108/folders/openstream/media/b427bd76-8d7a-4f7e-b7bf-4bc02a54e49e/FirstFrame.jpg&amp;width=440&amp;height=343&amp;content=http://content.screencast.com/users/nickson108/folders/openstream/media/b427bd76-8d7a-4f7e-b7bf-4bc02a54e49e/twitter-ubiquity.mp4" /><param name="allowFullScreen" value="true" /><param name="scale" value="showall" /><param name="allowScriptAccess" value="always" /><param name="base" value="http://content.screencast.com/users/nickson108/folders/openstream/media/b427bd76-8d7a-4f7e-b7bf-4bc02a54e49e/" /><param name="src" value="http://content.screencast.com/users/nickson108/folders/openstream/media/b427bd76-8d7a-4f7e-b7bf-4bc02a54e49e/flvplayer.swf" /><param name="flashvars" value="thumb=http://content.screencast.com/users/nickson108/folders/openstream/media/b427bd76-8d7a-4f7e-b7bf-4bc02a54e49e/FirstFrame.jpg&amp;width=440&amp;height=343&amp;content=http://content.screencast.com/users/nickson108/folders/openstream/media/b427bd76-8d7a-4f7e-b7bf-4bc02a54e49e/twitter-ubiquity.mp4" /><param name="allowfullscreen" value="true" /></object></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/intrc?a=632yu4UpOkQ:AAsHP15iF68:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/intrc?i=632yu4UpOkQ:AAsHP15iF68:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=632yu4UpOkQ:AAsHP15iF68:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/intrc?i=632yu4UpOkQ:AAsHP15iF68:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=632yu4UpOkQ:AAsHP15iF68:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/intrc?i=632yu4UpOkQ:AAsHP15iF68:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=632yu4UpOkQ:AAsHP15iF68:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/intrc?i=632yu4UpOkQ:AAsHP15iF68:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=632yu4UpOkQ:AAsHP15iF68:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/intrc?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/intrc?a=632yu4UpOkQ:AAsHP15iF68:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/intrc?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/intrc/~4/632yu4UpOkQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://damienh.org/2009/03/02/twtplus-the-missing-twitter-command-for-ubiquity-and-firefox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>

		<feedburner:origLink>http://damienh.org/2009/03/02/twtplus-the-missing-twitter-command-for-ubiquity-and-firefox/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/intrc/~5/g6ak7fbrzgk/twitter-ubiquity.mp4" length="6247059" type="video/mp4" /><feedburner:origEnclosureLink>http://content.screencast.com/users/nickson108/folders/openstream/media/b427bd76-8d7a-4f7e-b7bf-4bc02a54e49e/twitter-ubiquity.mp4</feedburner:origEnclosureLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.700 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-11-09 13:54:40 --><!-- Compression = gzip -->
