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

<channel>
	<title>ideal's blog</title>
	<atom:link href="http://blog.xiang.li/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xiang.li</link>
	<description>IT labor in Beijing.</description>
	<lastBuildDate>Sun, 07 Nov 2010 03:57:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>杯具是怎样炼成的：记杯具的一天</title>
		<link>http://blog.xiang.li/2010/11/how_the_cup_was_made/</link>
		<comments>http://blog.xiang.li/2010/11/how_the_cup_was_made/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 15:59:40 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cup]]></category>

		<guid isPermaLink="false">http://blog.xiang.li/?p=97</guid>
		<description><![CDATA[我从来都是无神论者，但是我相信有RP（人品）这个东西。当你的RP不好或者不够时，就会产生一系列的杯具。下面的事情都是我今天真实的经历，虽然都是小事情，但是都集中在一天也是可以让人崩溃的。 昨天晚上和一好友聊天话题过于深入，导致一晚上胡思乱想，翻来覆去的竟然没睡着… 早上起9点多就起了，习惯的走向卫生间，发现卫生间的门被反锁了，里面竟然没人，我记得钥匙还是在里面的… 中午12点多，好不容易安顿好一切，拖着疲惫的身体去邮局买燃气，结果大白天柜台竟然没有人，问旁边负责其他业务的人都说不知道去哪了，也不知道什么时候回来… 昨天和同事约好今天中午在体育公园打羽毛球，幸好邮局离那不远，遂决定先去锻炼锻炼身体，到了体育公园，下午1点左右，好不容易找到羽毛球馆，神马！怎么是空的，又没有人！没有人！赶紧电话同事们，果然都是没人接的… 下午接近2点，只好返回邮局充燃气，这次终于有人了，把卡和钱交出去，服务员折腾了半天，又把卡和钱退回给了我，告诉我充不了，这卡坏了，神马！这卡是我上周去客服刚换的新卡啊，新卡啊！只见服务员淡定的告诉我，再去换一张吧…好吧，只好又去中关村见燃气客服了…顺便说一下，这地方我去过三次了，我也顺便的在4sq上成了中科院计算所的mayor… 下午4点左右，燃气的事情总算告一段落了，之前约好打羽毛球没接电话的同事给我回电话了，我问为什么羽毛球馆没人，他说他们其实在羽毛球馆旁边的网球馆打羽毛球…我直接喷血… 没有打到羽毛球，好吧，还是要去锻炼一下身体吧，决定去我之前住的小区打篮球，到了一看，人好多啊，还有一些熟人呢，排队等着上场吧。好不容易上场打了会，天就黑的看不见了，一看时间，才下午5点半啊，哎，一点都不尽兴… 6点左右，肚子饿了，去吃饭吧，随便走到路边的一家麦当劳，要了个新出的汉堡，长大嘴就开始啃，我的妈呀！因为天气太干燥导致嘴唇干裂，嘴巴张太大了直接把嘴唇撕裂了…疼啊，只好把汉堡拆开来，面包一口肉一口憋屈的吃着… 晚上洗完澡，舒舒服服的坐下来coding，写了半天开始测试时，遇到了一个无法解释的bug…涉及到技术的问题就不多说了，我也说不清楚，反正就是诡异的无法解释！ 杯具男的绰号真的是很适合我，还是睡觉吧，结束这杯具的一天…]]></description>
			<content:encoded><![CDATA[<p>我从来都是无神论者，但是我相信有RP（人品）这个东西。当你的RP不好或者不够时，就会产生一系列的杯具。下面的事情都是我今天真实的经历，虽然都是小事情，但是都集中在一天也是可以让人崩溃的。</p>
<ul>
<li>昨天晚上和一好友聊天话题过于深入，导致一晚上胡思乱想，翻来覆去的竟然没睡着…</li>
<li>早上起9点多就起了，习惯的走向卫生间，发现卫生间的门被反锁了，里面竟然没人，我记得钥匙还是在里面的…</li>
<li>中午12点多，好不容易安顿好一切，拖着疲惫的身体去邮局买燃气，结果大白天柜台竟然没有人，问旁边负责其他业务的人都说不知道去哪了，也不知道什么时候回来…</li>
<li>昨天和同事约好今天中午在体育公园打羽毛球，幸好邮局离那不远，遂决定先去锻炼锻炼身体，到了体育公园，下午1点左右，好不容易找到羽毛球馆，神马！怎么是空的，又没有人！没有人！赶紧电话同事们，果然都是没人接的…</li>
<li>下午接近2点，只好返回邮局充燃气，这次终于有人了，把卡和钱交出去，服务员折腾了半天，又把卡和钱退回给了我，告诉我充不了，这卡坏了，神马！这卡是我上周去客服刚换的新卡啊，新卡啊！只见服务员淡定的告诉我，再去换一张吧…好吧，只好又去中关村见燃气客服了…顺便说一下，这地方我去过三次了，我也顺便的在<a title="4sq" href="http://www.foursquare.com" target="_blank">4sq</a>上成了中科院计算所的mayor…</li>
<li>下午4点左右，燃气的事情总算告一段落了，之前约好打羽毛球没接电话的同事给我回电话了，我问为什么羽毛球馆没人，他说他们其实在羽毛球馆旁边的网球馆打羽毛球…我直接喷血…</li>
<li>没有打到羽毛球，好吧，还是要去锻炼一下身体吧，决定去我之前住的小区打篮球，到了一看，人好多啊，还有一些熟人呢，排队等着上场吧。好不容易上场打了会，天就黑的看不见了，一看时间，才下午5点半啊，哎，一点都不尽兴…</li>
<li>6点左右，肚子饿了，去吃饭吧，随便走到路边的一家麦当劳，要了个新出的汉堡，长大嘴就开始啃，我的妈呀！因为天气太干燥导致嘴唇干裂，嘴巴张太大了直接把嘴唇撕裂了…疼啊，只好把汉堡拆开来，面包一口肉一口憋屈的吃着…</li>
<li>晚上洗完澡，舒舒服服的坐下来coding，写了半天开始测试时，遇到了一个无法解释的bug…涉及到技术的问题就不多说了，我也说不清楚，反正就是诡异的无法解释！</li>
</ul>
<p>杯具男的绰号真的是很适合我，还是睡觉吧，结束这杯具的一天…</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2010/11/how_the_cup_was_made/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>纪念我的iPhone4耳机</title>
		<link>http://blog.xiang.li/2010/10/lost-my-iphone4-headset/</link>
		<comments>http://blog.xiang.li/2010/10/lost-my-iphone4-headset/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 15:48:40 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.xiang.li/?p=93</guid>
		<description><![CDATA[杯具啊，iPhone4的耳机被猫咬断了…血的教训，以后千万不要让猫看见iPhone/iPod的耳机，再次赞叹苹果的设计和营销，不过我立马上淘宝拍了两山寨的… 这是凶手……]]></description>
			<content:encoded><![CDATA[<p>杯具啊，iPhone4的耳机被猫咬断了…血的教训，以后千万不要让猫看见iPhone/iPod的耳机，再次赞叹苹果的设计和营销，不过我立马上淘宝拍了两山寨的…<br />
<a href="http://www.flickr.com/photos/30831820@N02/5078050601/" title="IMG_0012 by idealee, on Flickr"><img class="aligncenter" src="http://farm5.static.flickr.com/4084/5078050601_1447141435.jpg" width="500" height="393" alt="IMG_0012" /></a></p>
<p>这是凶手……<br />
<a href="http://www.flickr.com/photos/30831820@N02/5078643626/" title="IMG_0010 by idealee, on Flickr"><img class="aligncenter" src="http://farm5.static.flickr.com/4035/5078643626_2dc0b321bb_z.jpg" width="498" height="640" alt="IMG_0010" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2010/10/lost-my-iphone4-headset/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My first MacBook Pro</title>
		<link>http://blog.xiang.li/2010/05/my-first-macbook-pro/</link>
		<comments>http://blog.xiang.li/2010/05/my-first-macbook-pro/#comments</comments>
		<pubDate>Sat, 15 May 2010 07:03:45 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.xiang.li/?p=68</guid>
		<description><![CDATA[昨天总算是入手了最新的MacBook Pro MC371ZP/A定制版（选配了雾面+高分屏）。之前关于镜面和雾面、13&#8242;和15&#8242;纠结了好一阵，矛盾的焦点是价格（穷人嘛，没办法）。 最终，价格在可接受范围内还是以自己的使用体验为主，昨天一咬牙冲到Machome交了订金，本以为要等上一段时间的，结果不料RP爆发（难以置信的），当天就到了一批货，我的就包括在内，于是下午又鸡冻的冲到Machome，倾家荡产的把Mac带回家~ 定制的雾面屏，加上unibody的机身，按照大家对Mac习惯的称呼，这应该是北极熊和熊猫的杂交品种了~ 其实在没有自己的Mac前，我早已是Mac用户，从最早的Hackint0sh（其实还有更早的）到目前公司用的第一款MBP2006。 两台MBP的合影，新版的稍大一些，但薄一些。 谨此告别陪伴我快5年的ThinPad T43（曾经也被我Hackint0sh过，现在依然很好的跑着Win7）以及我的第一台Mac~]]></description>
			<content:encoded><![CDATA[<p>昨天总算是入手了最新的MacBook Pro  MC371ZP/A定制版（选配了雾面+高分屏）。之前关于镜面和雾面、13&#8242;和15&#8242;纠结了好一阵，矛盾的焦点是价格（穷人嘛，没办法）。</p>
<p>最终，价格在可接受范围内还是以自己的使用体验为主，昨天一咬牙冲到<a href="http://www.machome.com.cn/" target="_blank">Machome</a>交了订金，本以为要等上一段时间的，结果不料RP爆发（难以置信的），当天就到了一批货，我的就包括在内，于是下午又鸡冻的冲到<a href="http://www.machome.com.cn/" target="_blank">Machome</a>，倾家荡产的把Mac带回家~</p>
<p>定制的雾面屏，加上unibody的机身，按照大家对Mac习惯的称呼，这应该是北极熊和熊猫的杂交品种了~</p>
<p>其实在没有自己的Mac前，我早已是Mac用户，从最早的<a href="http://blog.xiang.li/2009/02/hp520-fh592aa-install-leopard/" target="_blank">Hackint0sh</a>（其实还有<a href="http://blog.sina.com.cn/s/blog_4830b1bc010007jp.html" target="_blank">更早的</a>）到目前公司用的第一款MBP2006。</p>
<p>两台MBP的合影，新版的稍大一些，但薄一些。<br />
<a href="http://www.flickr.com/photos/30831820@N02/4619291882/" title="IMG_0204 by idealee, on Flickr"><img  class="aligncenter" src="http://farm4.static.flickr.com/3401/4619291882_8ac4e7ed28.jpg" width="500" height="196" alt="IMG_0204" /></a><br />
<a href="http://www.flickr.com/photos/30831820@N02/4619294700/" title="IMG_0205 by idealee, on Flickr"><img  class="aligncenter" src="http://farm4.static.flickr.com/3376/4619294700_13b5df640f.jpg" width="500" height="296" alt="IMG_0205" /></a></p>
<p>谨此告别陪伴我快5年的ThinPad T43（曾经也被我Hackint0sh过，现在依然很好的跑着Win7）以及我的第一台Mac~</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2010/05/my-first-macbook-pro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>日记：2009谷歌开发者日</title>
		<link>http://blog.xiang.li/2009/06/google_developer_day_2009/</link>
		<comments>http://blog.xiang.li/2009/06/google_developer_day_2009/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 15:55:46 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[谷歌开发者日]]></category>

		<guid isPermaLink="false">http://blog.xiang.li/?p=52</guid>
		<description><![CDATA[一年一度的谷歌开发者日又来了，由于我参加过去年的活动，所以这次收到了邀请，注册和确认都非常顺利。虽然这次是在工作日（周五）举行，但是公司可以申请带薪培训，所以有出去走走的机会当然是不会错过的。今年的谷歌开发者日依然在北京国际会议中心举行。 继去年的活动迟到后，今年依然没有按时赶到。不过还是要比去年幸运一点，虽然迟到了，但是还可以签到，我火速拿出打印好的邀请函交给工作人员，顺利的拿到了参会嘉宾的手册和通行证。 到了主会场，比较幸运的是大会还没有开幕。会场布置的挺漂亮，开场也很隆重，还有击鼓的表演。首先是李开复的主题演讲，概括了很多谷歌的新技术还请了一些技术人员做演示。 接着听了第一个分会场的讲座。之后是午餐，我RP挺好好，拿到了一个巨大的香蕉。 饭后路过展区，本来想多看看的，结果发现人非常多，无奈只好直接去分会场等待讲座开始。路上经过很多免费的零食和饮料，还有塞满雪糕的冰柜，这个要赞一下。 不知道是不是因为很久都没有听讲座了，一点也听不进去，不是听瞌睡了就是在玩自己的手机或者笔记本。下午连续听了3场讲座后，我们坚持不下去了，放弃了自助晚餐，领了纪念品后跑路了。 领取的纪念品是一件T恤+一个背包，T恤是本来就知道能领的，但是背包是个很不错的电脑包，算是个惊喜吧。 据说晚上交流互动环节还不错，不过早早的被同事拉走了，本来也不善交际，所以也没什么关系。 流水帐记完了，说说感想吧： 活动是免费的，总体上讲比去年的组织和安排好很多了，不会到处都是人的感觉了。 虽然都是在做广告，但是谷歌的技术还是非常吸引人的，所以觉得还不错。 各种技术讲座深的深、浅的浅，演讲不够吸引人（主要的针对我听的几个讲座，都是网络讲座系列的）。 对这种大会不要抱太大希望，肯定是讲不了什么有技术含量的东西。 如果你性格外向活泼的话，应该可以结交到不少IT界的朋友。 这种活动去凑凑热闹还是不错的，免费吃吃喝喝还可以拿纪念品，也可以对谷歌的各种技术混个面熟。另外，说不定还可以碰见老朋友，这次我们就碰到了公司前同事还有大猫：）]]></description>
			<content:encoded><![CDATA[<p>一年一度的谷歌开发者日又来了，由于我参加过去年的活动，所以这次收到了邀请，注册和确认都非常顺利。虽然这次是在工作日（周五）举行，但是公司可以申请带薪培训，所以有出去走走的机会当然是不会错过的。今年的谷歌开发者日依然在北京国际会议中心举行。</p>
<p><a href="http://picasaweb.google.com/lh/photo/x7NKGNGzj3MBrqzHeBJbsg?feat=embedwebsite"><img class="aligncenter" title="会场入口" src="http://lh4.ggpht.com/_LgZH1W6VLSE/SivRZ5vVeZI/AAAAAAAAAYk/RuaG93_brKk/s400/IMG_0396.JPG" alt="" width="400" height="300" /></a></p>
<p>继去年的活动迟到后，今年依然没有按时赶到。不过还是要比去年幸运一点，虽然迟到了，但是还可以签到，我火速拿出打印好的邀请函交给工作人员，顺利的拿到了参会嘉宾的手册和通行证。</p>
<p><a href="http://picasaweb.google.com/lh/photo/newjSDqs3r9tIEt44wcKNw?feat=embedwebsite"><img class="aligncenter" title="签到处" src="http://lh5.ggpht.com/_LgZH1W6VLSE/SivRZ2qmrNI/AAAAAAAAAYo/URcYeibHAAg/s400/IMG_0398.JPG" alt="" width="300" height="400" /></a></p>
<p>到了主会场，比较幸运的是大会还没有开幕。会场布置的挺漂亮，开场也很隆重，还有击鼓的表演。首先是李开复的主题演讲，概括了很多谷歌的新技术还请了一些技术人员做演示。</p>
<p><a href="http://picasaweb.google.com/lh/photo/PbFPkn5hjU5kAGdzsYhaPQ?feat=embedwebsite"><img class="aligncenter" title="主题演讲台" src="http://lh4.ggpht.com/_LgZH1W6VLSE/SivRaKJMY8I/AAAAAAAAAYs/VBos1OW08Ok/s400/IMG_0401.JPG" alt="" width="400" height="300" /></a></p>
<p>接着听了第一个分会场的讲座。之后是午餐，我RP挺好好，拿到了一个巨大的香蕉。</p>
<p><a href="http://picasaweb.google.com/lh/photo/s3ljCzEEnxnrcluIfJ5Fag?feat=embedwebsite"><img class="aligncenter" title="午餐" src="http://lh6.ggpht.com/_LgZH1W6VLSE/SivRaKoepdI/AAAAAAAAAYw/NABAsDmdz2c/s400/IMG_0405.JPG" alt="" width="400" height="300" /></a></p>
<p>饭后路过展区，本来想多看看的，结果发现人非常多，无奈只好直接去分会场等待讲座开始。路上经过很多免费的零食和饮料，还有塞满雪糕的冰柜，这个要赞一下。</p>
<p><a href="http://picasaweb.google.com/lh/photo/gokZGXxYhnB_nb_cqZcA7A?feat=embedwebsite"><img class="aligncenter" title="展区" src="http://lh5.ggpht.com/_LgZH1W6VLSE/SivRaMrpv0I/AAAAAAAAAY0/4Ea2AYVSWLI/s400/IMG_0406.JPG" alt="" width="400" height="300" /></a></p>
<p>不知道是不是因为很久都没有听讲座了，一点也听不进去，不是听瞌睡了就是在玩自己的手机或者笔记本。下午连续听了3场讲座后，我们坚持不下去了，放弃了自助晚餐，领了纪念品后跑路了。</p>
<p>领取的纪念品是一件T恤+一个背包，T恤是本来就知道能领的，但是背包是个很不错的电脑包，算是个惊喜吧。</p>
<p><a href="http://picasaweb.google.com/lh/photo/kjdj8iOzPE93C-fB3pOsvA?feat=embedwebsite"><img class="aligncenter" title="纪念品" src="http://lh5.ggpht.com/_LgZH1W6VLSE/SivSj-PGhQI/AAAAAAAAAZA/gBGewuIOxo8/s400/IMG_0416.JPG" alt="" width="300" height="400" /></a></p>
<p>据说晚上交流互动环节还不错，不过早早的被同事拉走了，本来也不善交际，所以也没什么关系。</p>
<p>流水帐记完了，说说感想吧：</p>
<ul>
<li>活动是免费的，总体上讲比去年的组织和安排好很多了，不会到处都是人的感觉了。</li>
<li>虽然都是在做广告，但是谷歌的技术还是非常吸引人的，所以觉得还不错。</li>
<li>各种技术讲座深的深、浅的浅，演讲不够吸引人（主要的针对我听的几个讲座，都是网络讲座系列的）。</li>
<li>对这种大会不要抱太大希望，肯定是讲不了什么有技术含量的东西。</li>
<li>如果你性格外向活泼的话，应该可以结交到不少IT界的朋友。</li>
<li>这种活动去凑凑热闹还是不错的，免费吃吃喝喝还可以拿纪念品，也可以对谷歌的各种技术混个面熟。另外，说不定还可以碰见老朋友，这次我们就碰到了公司前同事还有<a title="大猫" href="http://my.donews.com/lonecat/" target="_blank">大猫</a>：）</li>
</ul>
<p><em></em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2009/06/google_developer_day_2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>日记：天津一日自助游</title>
		<link>http://blog.xiang.li/2009/05/one_day_in_tianjin/</link>
		<comments>http://blog.xiang.li/2009/05/one_day_in_tianjin/#comments</comments>
		<pubDate>Mon, 04 May 2009 09:52:00 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[一日自助游]]></category>
		<category><![CDATA[五一]]></category>
		<category><![CDATA[天津]]></category>

		<guid isPermaLink="false">http://blog.xiang.li/?p=42</guid>
		<description><![CDATA[五一假期，应同学邀请花一天时间去天津走走，不跟旅游团，叫做天津一日自助游应该没错吧。记个流水帐，仅供可能从北京去天津游玩的各位参考。 我之前没去过天津，同学只提供了几个想去的地方，要求我安排行程。只好到处找资料问天津的同学同事们，结果发现其实他们也不是很熟悉，因为他们很少在本地玩。之前去过天津的同学都说不想再去第二次了，但是没去过还是去看看吧。我们的行程非常的奇怪，一天时间既要去天津还要去塘沽，大概的行程是这样： 上午：从北京南站坐城际快车到天津，逛逛天津市区的古文化街和食品街。 午餐：在食品街解决。 下午：去塘沽的洋货市场逛逛然后看看塘沽的海河外滩公园。 晚餐：找家本地的餐馆吃些有地方特色的。 晚上：直接从塘沽坐火车回北京。 事实上的行程和计划的基本相同，但是期间遇到各种问题让我们很是郁闷。 上午8:55乘坐北京到天津的城际快车，这是我第二次坐动车，还是得赞一下，动车的环境真的非常不错的，毕竟还是要对得起它的票价的。很快，不到半个小时就到了天津，车厢内的OLED显示最高速度到330+。 动车内的OLED 从天津站去古文化街，因为之前已经查好它们的距离非常近，所以出站后直接打车前往。排了很长的队伍上了出租车，结果发现堵的不行。下车后才发现，原来古文化街离开天津站非常的近，其实没必要打车，因为等车加上堵车的时间我们早就走到了。 好不容易到了古文化街，还是比较有感觉的，值得逛一逛，还有一些天津特色的民间艺术，比如泥人张，买一个送人还是不错的。 古文化街 泥人张 泥人张店内 古文化街地图 古文化街不长，如果不逛里面的商店，一会儿就走完了。之后出发去南市食品街，因为距离也不是很远，鉴于之前打车的经验，我们决定步行前往。问好路一顿乱走了大概二十多分钟总算到了，比我想象的远了很多啊，而且我们一路走来看到马路上车辆都还是挺少的，于是我们又后悔应该坐公交或者打车的… 南市食品街的门口有一处很显眼的狗不理包子，到了天津，当然得尝尝狗不理包子，考虑到一会进食品街还得吃其他小吃，我们就买了一盒打包的三鲜包子一人尝了 一个，包子非常贵，接近5块钱一个，但是我并没有觉得好吃到像它的价钱那样。进入食品街，原来所谓的食品街，就是室内的一个个小食品摊子，分布着各种各样 的小吃，但是很奇怪里面最多的竟然是台湾的各种小吃，天津特色的小吃却不多，最后只是买了个炸糕吃，出门后在门口买了个煎饼果子填肚子，还特意挑了一个加 油条的，结果吃了一半就扔了，实在没有什么好吃的。 下午一点左右，我们离开了食品街，出发去塘沽的洋货市场，打车到中山门坐轻轨去塘沽。打车时又遇到堵车，真是郁闷，不过幸好很快就畅通了，堵的时间不长。 打车还得看人品的，我们一行9人，分3辆车走，结果最后的车费分别是26.x元，31.x元和36.x元，看来天津的出租车司机真是不够厚道啊。另外，我的人品还是不错的，我们那辆车的车费最少。 经过半个多小时的轻轨，我们终于到了传说中的塘沽，出轻轨站走大概十多分钟就到了洋货市场。不看不知道，一看吓一跳，原来所谓的洋货市场就是各种各样山寨的产品，我觉得叫塘沽山寨市场比较合适。我对山寨的东西不是很感冒，所以就随便逛了逛。当然，山寨的东西还是比较便宜的，这里的东西据说可以按出价的 1/4至1/3的砍。 逛完无语的山寨市场后，下一站是海河外滩公园。继续打车，继续堵车，幸好距离很近，一会就到了。发现这里也并没有什么特色，唯一值得提的就是走在河边的感觉还是不错的。但是比较可怕的是，河上的快艇开过后泛起的河水竟然是黄色的。我们逛到一半的时候还很不幸的下雨了，幸好看了天气预报有小雨，我们都带了伞，但是看着灰暗的天空就没有太大的兴趣继续逛了，于是大家决定找个地方吃饭。 到了塘沽，当然是希望吃一些本地的海鲜等一些有特点的小吃，所以路边随便找了一家看着像本地的餐馆，结果没想到可怕的晚餐开始了。首先是餐桌上的塑料餐布里有很多小虫子（应该是蚊子吧），然后是经过消毒并且重新包装的餐具（需要付费的那种一套的用塑料膜包装餐具）竟然基本没洗干净的。关键是饭菜做的基本的 吃不下，唯一一个能吃的青椒牛柳里的肉竟然还是用猪肉代替的…实在不想回忆这恶心的晚餐了。我们基本没吃什么就走了。建议大家以后在塘沽吃饭还是吃一些KFC之类的会比较放心一点。 经过了下午郁闷的塘沽之行，我们一致认为我们应该赶紧逃离这鬼地方（本来还打算如果这里的景点没玩完，在这待一晚上的，现在想想都后怕）。因为不赶时间， 所以我们坐公交车去塘沽火车站（天津的公交车票价是1.5元，而且基本是无人售票的，所以要先准备好零钱），最近一趟回北京的火车是19:00的普快，已经没有座了，我们就只买了塘沽到天津的票，决定如果有座的话就补票一直坐到北京，没有座的话就从天津下坐城际快车回北京（这里要解释一下，塘沽回北京也有城际快车，但是每天只有四趟，不像天津到北京是十五分钟一趟，所以从天津回北京是非常方便的）。不过我们还是比较幸运的，上车以后发现基本都有座。在车上玩牌时间过得很快，二个小时四十分钟的车程一会就过去了。 晚上九点左右，我们终于安全的回到了北京。]]></description>
			<content:encoded><![CDATA[<p>五一假期，应同学邀请花一天时间去天津走走，不跟旅游团，叫做天津一日自助游应该没错吧。记个流水帐，仅供可能从北京去天津游玩的各位参考。</p>
<p>我之前没去过天津，同学只提供了几个想去的地方，要求我安排行程。只好到处找资料问天津的同学同事们，结果发现其实他们也不是很熟悉，因为他们很少在本地玩。之前去过天津的同学都说不想再去第二次了，但是没去过还是去看看吧。我们的行程非常的奇怪，一天时间既要去天津还要去塘沽，大概的行程是这样：<br />
上午：从北京南站坐城际快车到天津，逛逛天津市区的古文化街和食品街。<br />
午餐：在食品街解决。<br />
下午：去塘沽的洋货市场逛逛然后看看塘沽的海河外滩公园。<br />
晚餐：找家本地的餐馆吃些有地方特色的。<br />
晚上：直接从塘沽坐火车回北京。</p>
<p>事实上的行程和计划的基本相同，但是期间遇到各种问题让我们很是郁闷。</p>
<p>上午8:55乘坐北京到天津的城际快车，这是我第二次坐动车，还是得赞一下，动车的环境真的非常不错的，毕竟还是要对得起它的票价的。很快，不到半个小时就到了天津，车厢内的OLED显示最高速度到330+。</p>
<p style="text-align: center;"><a href="http://picasaweb.google.com/lh/photo/nFdHbNFK35rJc4V4QLjfhw?feat=directlink" target="_blank"><img class="aligncenter" title="城际快车OLED" src="http://lh4.ggpht.com/_LgZH1W6VLSE/Sf63bZoEhbI/AAAAAAAAAWY/XFnRREUZ3mc/s400/IMG_0314.jpg" alt="" width="300" height="400" /></a>动车内的OLED</p>
<p>从天津站去古文化街，因为之前已经查好它们的距离非常近，所以出站后直接打车前往。排了很长的队伍上了出租车，结果发现堵的不行。下车后才发现，原来古文化街离开天津站非常的近，其实没必要打车，因为等车加上堵车的时间我们早就走到了。</p>
<p>好不容易到了古文化街，还是比较有感觉的，值得逛一逛，还有一些天津特色的民间艺术，比如泥人张，买一个送人还是不错的。</p>
<p style="text-align: center;"><a href="http://picasaweb.google.com/lh/photo/lhXTOgXGWztPP3pKANo-fw?feat=directlink" target="_blank"><img class="aligncenter" title="古文化街" src="http://lh6.ggpht.com/_LgZH1W6VLSE/Sf63bvnRmFI/AAAAAAAAAWg/BEn48z9mecI/s400/IMG_0318.jpg" alt="" width="300" height="400" /></a>古文化街</p>
<p style="text-align: center;"><a href="http://picasaweb.google.com/lh/photo/PDNQ8JpdjFmrcm_UEWkdzw?feat=directlink" target="_blank"><img class="aligncenter" title="泥人张" src="http://lh5.ggpht.com/_LgZH1W6VLSE/Sf63buRAkRI/AAAAAAAAAWo/XlF-TwXXozE/s400/IMG_0322.jpg" alt="" width="400" height="300" /></a>泥人张</p>
<p style="text-align: center;"><a href="http://picasaweb.google.com/lh/photo/zl0D5aIvBvAzMiGLifBTbw?feat=directlink" target="_blank"><img class="aligncenter" title="泥人张店内" src="http://lh4.ggpht.com/_LgZH1W6VLSE/Sf63b_WaePI/AAAAAAAAAWw/RXcB2UA4N4k/s400/IMG_0324.jpg" alt="" width="300" height="400" /></a>泥人张店内</p>
<p style="text-align: center;"><a href="http://picasaweb.google.com/lh/photo/CTOeb2_9e32A-n1qiYq7oA?feat=directlink" target="_blank"><img class="aligncenter" title="古文化街地图" src="http://lh5.ggpht.com/_LgZH1W6VLSE/Sf63cIJuSWI/AAAAAAAAAW4/a8pqQeXalCo/s400/IMG_0325.jpg" alt="" width="300" height="400" /></a>古文化街地图</p>
<p style="text-align: left;">古文化街不长，如果不逛里面的商店，一会儿就走完了。之后出发去南市食品街，因为距离也不是很远，鉴于之前打车的经验，我们决定步行前往。问好路一顿乱走了大概二十多分钟总算到了，比我想象的远了很多啊，而且我们一路走来看到马路上车辆都还是挺少的，于是我们又后悔应该坐公交或者打车的…</p>
<p>南市食品街的门口有一处很显眼的狗不理包子，到了天津，当然得尝尝狗不理包子，考虑到一会进食品街还得吃其他小吃，我们就买了一盒打包的三鲜包子一人尝了 一个，包子非常贵，接近5块钱一个，但是我并没有觉得好吃到像它的价钱那样。进入食品街，原来所谓的食品街，就是室内的一个个小食品摊子，分布着各种各样 的小吃，但是很奇怪里面最多的竟然是台湾的各种小吃，天津特色的小吃却不多，最后只是买了个炸糕吃，出门后在门口买了个煎饼果子填肚子，还特意挑了一个加 油条的，结果吃了一半就扔了，实在没有什么好吃的。</p>
<p>下午一点左右，我们离开了食品街，出发去塘沽的洋货市场，打车到中山门坐轻轨去塘沽。打车时又遇到堵车，真是郁闷，不过幸好很快就畅通了，堵的时间不长。 打车还得看人品的，我们一行9人，分3辆车走，结果最后的车费分别是26.x元，31.x元和36.x元，看来天津的出租车司机真是不够厚道啊。另外，我的人品还是不错的，我们那辆车的车费最少。</p>
<p>经过半个多小时的轻轨，我们终于到了传说中的塘沽，出轻轨站走大概十多分钟就到了洋货市场。不看不知道，一看吓一跳，原来所谓的洋货市场就是各种各样山寨的产品，我觉得叫塘沽山寨市场比较合适。我对山寨的东西不是很感冒，所以就随便逛了逛。当然，山寨的东西还是比较便宜的，这里的东西据说可以按出价的 1/4至1/3的砍。</p>
<p>逛完无语的山寨市场后，下一站是海河外滩公园。继续打车，继续堵车，幸好距离很近，一会就到了。发现这里也并没有什么特色，唯一值得提的就是走在河边的感觉还是不错的。但是比较可怕的是，河上的快艇开过后泛起的河水竟然是黄色的。我们逛到一半的时候还很不幸的下雨了，幸好看了天气预报有小雨，我们都带了伞，但是看着灰暗的天空就没有太大的兴趣继续逛了，于是大家决定找个地方吃饭。</p>
<p>到了塘沽，当然是希望吃一些本地的海鲜等一些有特点的小吃，所以路边随便找了一家看着像本地的餐馆，结果没想到可怕的晚餐开始了。首先是餐桌上的塑料餐布里有很多小虫子（应该是蚊子吧），然后是经过消毒并且重新包装的餐具（需要付费的那种一套的用塑料膜包装餐具）竟然基本没洗干净的。关键是饭菜做的基本的 吃不下，唯一一个能吃的青椒牛柳里的肉竟然还是用猪肉代替的…实在不想回忆这恶心的晚餐了。我们基本没吃什么就走了。建议大家以后在塘沽吃饭还是吃一些KFC之类的会比较放心一点。</p>
<p>经过了下午郁闷的塘沽之行，我们一致认为我们应该赶紧逃离这鬼地方（本来还打算如果这里的景点没玩完，在这待一晚上的，现在想想都后怕）。因为不赶时间， 所以我们坐公交车去塘沽火车站（天津的公交车票价是1.5元，而且基本是无人售票的，所以要先准备好零钱），最近一趟回北京的火车是19:00的普快，已经没有座了，我们就只买了塘沽到天津的票，决定如果有座的话就补票一直坐到北京，没有座的话就从天津下坐城际快车回北京（这里要解释一下，塘沽回北京也有城际快车，但是每天只有四趟，不像天津到北京是十五分钟一趟，所以从天津回北京是非常方便的）。不过我们还是比较幸运的，上车以后发现基本都有座。在车上玩牌时间过得很快，二个小时四十分钟的车程一会就过去了。</p>
<p>晚上九点左右，我们终于安全的回到了北京。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2009/05/one_day_in_tianjin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>一些提高工作效率的好习惯</title>
		<link>http://blog.xiang.li/2009/04/good_habits_for_work_efficiently/</link>
		<comments>http://blog.xiang.li/2009/04/good_habits_for_work_efficiently/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 15:56:45 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[GTD]]></category>
		<category><![CDATA[工作效率]]></category>

		<guid isPermaLink="false">http://blog.xiang.li/?p=24</guid>
		<description><![CDATA[一直以来，只要是有项目的正在进行时，我就觉得每天都很忙，但是每次忙完后再回头仔细看看，其实自己完成了很少的工作，而且很多工作完成的并不好。 最近，好不容易到了项目间隙，相对有一些空闲，就上网找了一些提高工作效率的资料。在 GTDLife.cn 看到了一些不错的时间管理的资料，分析了一下自己的情况，感觉最关键的问题在于自己在工作时很少能集中精力，总是在做A事时突然想到B事，又或者突然被C事打断，导致很多工作完成的很慢，质量也不高。 那么如何来解决这些问题呢，比较好的办法就是在工作时养成好习惯。在 GTDLife.cn 的新书《小强升职记》第一章中提到一些，自己在这些天的工作中也总结出一些，打印出来贴在办公室里比较显眼的位置，可以不时的监督自己。 营造良好的办公环境 工作时需要一个安静的环境才能集中精力的工作，尽量排除一切可能的干扰。 如果不是工作需要的话最好关闭各种 IM 软件和邮件提醒软件。 在完成比较重要的工作时，可以提前告诉同事在一定时间内不要打扰自己，手机关机或者切换到飞行模式。 办公环境尽量干净整洁，能轻易的找到自己需要的工具。 舒适的办公桌椅。 培养良好的生活习惯 有规律的生活习惯可以提升工作状态，最大程度的减少生活问题对工作的影响。 早睡早起，这样才能保证充足的精力同时也有利于身体健康。 习惯的排泄时间，每天晚上睡觉前和早晨起床后是比较合适的时间，以免对你白天的工作造成影响。 定期剪指甲，比如一个星期中周一和周四的早晨，这样不会影响你使用键盘时的心情（可能并不是每个人都存在这个问题）。 定期检查邮件和阅读新闻（使用RSS订阅方式），可以早晚两次，在上午开始工作之前和下午结束工作之后。 学习良好的工作方式 良好的工作方式可以解放你的大脑，使你更容易专注于当前的工作。 每天工作前都有一个任务列表，明确今天要进行的工作，完成一项划去一项，很有成就感。 每个任务都有优先级和时间限制，督促自己更快更好的完成工作。 工作状态最好时做最重要的事情。 再小的工作也要尽量分解的做，避免一心二用。 任务不能安排的太满，要留出适当的休息时间和可能处理紧急事务的时间。 其中我觉得最重要的是如何做到在状态最好的时候去做最重要的事情，我相信这一点是符合二八定律的，用工作状态最好的 20% 的时间可以把 80% 的工作完成好。至于如何做好这一点，还需要一段时间的摸索，以后再讨论。]]></description>
			<content:encoded><![CDATA[<p>一直以来，只要是有项目的正在进行时，我就觉得每天都很忙，但是每次忙完后再回头仔细看看，其实自己完成了很少的工作，而且很多工作完成的并不好。</p>
<p>最近，好不容易到了项目间隙，相对有一些空闲，就上网找了一些提高工作效率的资料。在 <a id="owyg" title="GTDLife.cn" href="http://www.gtdlife.cn/" target="_blank">GTDLife.cn</a> 看到了一些不错的时间管理的资料，分析了一下自己的情况，感觉最关键的问题在于自己在工作时很少能集中精力，总是在做A事时突然想到B事，又或者突然被C事打断，导致很多工作完成的很慢，质量也不高。</p>
<p>那么如何来解决这些问题呢，比较好的办法就是在工作时养成好习惯。在 <a id="znkj" title="GTDLife.cn" href="http://www.gtdlife.cn/" target="_blank">GTDLife.cn</a> 的新书<a id="zb7j" title="《小强升职记》第一章" href="http://www.gtdlife.cn/2009/1108/xiaoqiangshengzhiji-1/" target="_blank">《小强升职记》第一章</a>中提到一些，自己在这些天的工作中也总结出一些，打印出来贴在办公室里比较显眼的位置，可以不时的监督自己。</p>
<p><strong>营造良好的办公环境</strong></p>
<p>工作时需要一个安静的环境才能集中精力的工作，尽量排除一切可能的干扰。</p>
<ul>
<li>如果不是工作需要的话最好关闭各种 IM 软件和邮件提醒软件。</li>
<li>在完成比较重要的工作时，可以提前告诉同事在一定时间内不要打扰自己，手机关机或者切换到飞行模式。</li>
<li>办公环境尽量干净整洁，能轻易的找到自己需要的工具。</li>
<li>舒适的办公桌椅。</li>
</ul>
<p><strong>培养良好的生活习惯</strong></p>
<p>有规律的生活习惯可以提升工作状态，最大程度的减少生活问题对工作的影响。</p>
<ul>
<li>早睡早起，这样才能保证充足的精力同时也有利于身体健康。</li>
<li>习惯的排泄时间，每天晚上睡觉前和早晨起床后是比较合适的时间，以免对你白天的工作造成影响。</li>
<li>定期剪指甲，比如一个星期中周一和周四的早晨，这样不会影响你使用键盘时的心情（可能并不是每个人都存在这个问题）。</li>
<li>定期检查邮件和阅读新闻（使用RSS订阅方式），可以早晚两次，在上午开始工作之前和下午结束工作之后。</li>
</ul>
<p><strong>学习良好的工作方式</strong></p>
<p>良好的工作方式可以解放你的大脑，使你更容易专注于当前的工作。</p>
<ul>
<li>每天工作前都有一个任务列表，明确今天要进行的工作，完成一项划去一项，很有成就感。</li>
<li>每个任务都有优先级和时间限制，督促自己更快更好的完成工作。</li>
<li> 工作状态最好时做最重要的事情。</li>
<li>再小的工作也要尽量分解的做，避免一心二用。</li>
<li>任务不能安排的太满，要留出适当的休息时间和可能处理紧急事务的时间。</li>
</ul>
<p>其中我觉得最重要的是如何做到在状态最好的时候去做最重要的事情，我相信这一点是符合<a id="xdhb" title="二八定律" href="http://zh.wikipedia.org/wiki/%E4%BA%8C%E5%85%AB%E5%AE%9A%E5%BE%8B" target="_blank">二八定律</a>的，用工作状态最好的 20% 的时间可以把 80% 的工作完成好。至于如何做好这一点，还需要一段时间的摸索，以后再讨论。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2009/04/good_habits_for_work_efficiently/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hello world!</title>
		<link>http://blog.xiang.li/2009/03/hello-world/</link>
		<comments>http://blog.xiang.li/2009/03/hello-world/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 13:16:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://i.xiang.li/?p=1</guid>
		<description><![CDATA[我的 blog 又回归 WordPress 啦，感谢 林健同学 给我提供的免费试用的主机。终于可以稳定的使用 blog 了，先试用一段时间再决定是否安家吧。之前试用了一段时间的 Blogger，功能非常强大也非常好用，但是因为使用自定义域名的问题用的非常郁闷。 目前使用的这个主机还不错，就是速度慢了一些。]]></description>
			<content:encoded><![CDATA[<p>我的 blog 又回归 <a href="http://wordpress.org/" target="_blank">WordPress</a> 啦，感谢 <a href="http://blog.linjian.org/" target="_blank">林健</a><a href="http://blog.linjian.org/" target="_blank">同学</a> 给我提供的免费试用的主机。终于可以稳定的使用 blog 了，先试用一段时间再决定是否安家吧。之前试用了一段时间的 <a href="http://www.blogger.com" target="_blank">Blogger</a>，功能非常强大也非常好用，但是因为使用自定义域名的问题用的非常郁闷。</p>
<p>目前使用的这个主机还不错，就是速度慢了一些。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2009/03/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mac OS X &#8211; Menu Extras Tips：添加、移动或者删除弹出光驱、音量等图标</title>
		<link>http://blog.xiang.li/2009/03/mac-os-x-menu-bar-menu-extras-tips/</link>
		<comments>http://blog.xiang.li/2009/03/mac-os-x-menu-bar-menu-extras-tips/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 13:15:16 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[Menu Extras]]></category>
		<category><![CDATA[菜单栏]]></category>

		<guid isPermaLink="false">http://i.xiang.li/?p=21</guid>
		<description><![CDATA[用过 Mac OS 的用户都会对它的菜单栏印象深刻，因为它很独特。如果你习惯了 Windows 的 UI，第一次用 Mac OS 时你总是找不到的程序的菜单，其实它就分布在顶部的菜单栏上。它会根据不同的程序显示不同的菜单，但是，也有一些不变的部分，最左边的一个苹果图标的菜单 （勉强的可以说类似于 Windows 的开始菜单）以及最右边的一些小图标。这篇文章主要是关于最右边这些小图标的，这些图标的作用与 Windows 下系统托盘（System tray）类似，在 Mac OS 下叫做 Menu Extras（菜单栏上的额外项目），比如我的 Menu Extras 如下图： 可以看到，除了显示时间以及一些正在运行程序的图标，还可以监视系统的状态以及一些常用操作的快捷菜单，比如第三个小图标是弹出光驱的快捷菜单以及之后的调节音量的菜单。可能你会觉得弹出光驱和调节音量都有快捷键，我们可以把它们从菜单栏上去掉，节省一定空间来显示其它有用的菜单，或者我想调整一些图标的位 置，又或者我想添加一些。那么如何删除、移动、添加菜单栏上的 Menu Extras 呢？其实很简单，方法如下： 删除： 很多常用的 Menu Extras 都可以在系统设置（System Preferences）里找到，比如音量，在 System Preferences -&#62; Sound 中有一个 Show volume in menu bar 的选项，把钩去掉就删除了。如果你没有在系统找到相关选项，其实有更简单的删除方法，直接按住 Command 键然后用鼠标将小图标拖出（Command &#8211; Drag）菜单栏即可。 移动：与 Command &#8211; Drag 删除类似，只是拖到时把小图标拖到菜单栏中想要的位置即可。 [...]]]></description>
			<content:encoded><![CDATA[<p>用过 Mac OS 的用户都会对它的菜单栏印象深刻，因为它很独特。如果你习惯了 Windows 的 UI，第一次用 Mac OS 时你总是找不到的程序的菜单，其实它就分布在顶部的菜单栏上。它会根据不同的程序显示不同的菜单，但是，也有一些不变的部分，最左边的一个苹果图标的菜单 （勉强的可以说类似于 Windows 的开始菜单）以及最右边的一些小图标。这篇文章主要是关于最右边这些小图标的，这些图标的作用与 Windows 下系统托盘（System tray）类似，在 Mac OS 下叫做 Menu Extras（菜单栏上的额外项目），比如我的 Menu Extras 如下图：</p>
<p><a href="http://4.bp.blogspot.com/_LgZH1W6VLSE/SathdNLGJgI/AAAAAAAAATM/kQjZCg7i8Cc/s1600-h/menubar.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img id="BLOGGER_PHOTO_ID_5308443740166563330" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 77px;" src="http://4.bp.blogspot.com/_LgZH1W6VLSE/SathdNLGJgI/AAAAAAAAATM/kQjZCg7i8Cc/s400/menubar.png" border="0" alt="" /></a><br />
可以看到，除了显示时间以及一些正在运行程序的图标，还可以监视系统的状态以及一些常用操作的快捷菜单，比如第三个小图标是弹出光驱的快捷菜单以及之后的调节音量的菜单。可能你会觉得弹出光驱和调节音量都有快捷键，我们可以把它们从菜单栏上去掉，节省一定空间来显示其它有用的菜单，或者我想调整一些图标的位 置，又或者我想添加一些。那么如何删除、移动、添加菜单栏上的 Menu Extras 呢？其实很简单，方法如下：</p>
<ul>
<li><span style="font-weight: bold;">删除</span>： 很多常用的 Menu Extras 都可以在系统设置（System Preferences）里找到，比如音量，在 System Preferences -&gt; Sound 中有一个 Show volume in menu bar 的选项，把钩去掉就删除了。如果你没有在系统找到相关选项，其实有更简单的删除方法，直接按住 Command 键然后用鼠标将小图标拖出（Command &#8211; Drag）菜单栏即可。</li>
<li><span style="font-weight: bold;">移动</span>：与 Command &#8211; Drag 删除类似，只是拖到时把小图标拖到菜单栏中想要的位置即可。</li>
<li><span style="font-weight: bold;">添加</span>： 与删除类似，系统设置中找相关选项。如果没有相关选项，比如弹出光驱的图标，直接用 Finder 找到 /System/Library/CoreServices/Menu\ Extras，其中的 *.menu 是所有的 Menu Extras 了。Eject.menu 就是弹出光驱的菜单，双击这个文件或者用鼠标把它拖到菜单栏上即可。音量图标也可以在这里找到，就是 Volume.menu。但是要注意的是，有些菜单的添加可能需要系统注销或重启才能生效。另外，最好是通过系统设置的选项来添加或者删除 Menu Extras，因为直接使用某些 .menu 文件可能会导致 Menu Extras 的配置丢失。</li>
</ul>
<p>其实操作 Menu Extras 与操作 Dock 中的图标类似，只是拖到的时候要按住 Command。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2009/03/mac-os-x-menu-bar-menu-extras-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone 应用开发：音频播放</title>
		<link>http://blog.xiang.li/2009/02/iphone-dev-audio-play/</link>
		<comments>http://blog.xiang.li/2009/02/iphone-dev-audio-play/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 13:01:20 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[音频播放]]></category>

		<guid isPermaLink="false">http://i.xiang.li/?p=17</guid>
		<description><![CDATA[在 iPhone 应用或者是游戏的开发过程中&#65292;对声音的支持是必不可少的&#12290;在我做过的几个应用中&#65292;每个都涉及到音效&#65292;所以在这里做个简单的归纳&#65292;很多都是引用自&#12298;iPhone Application Programming Guide&#12299;&#65288;需要有 Apple ID 才能打开链接&#65289;&#65292;加了一些实际使用的经验&#12290; iPhone OS 主要提供以下了几种播放音频的方法&#65306; System Sound Services AVAudioPlayer 类 Audio Queue Services OpenAL 1. System Sound Services System Sound Services 是最底层也是最简单的声音播放服务&#65292;调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件&#65292;使用此方法只适合播放一些很小的提示或者警告音&#65292;因为它有很多限制&#65306; &#9632; 声音长度要小于 30 秒&#9632; In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的&#9632; 打包成 .caf, .aif, 或者 .wav 的文件&#9632; 不能控制播放的进度&#9632; 调用方法后立即播放声音&#9632; 没有循环播放和立体声控制 另外&#65292;它还可以调用系统的震动功能&#65292;方法也很简单&#12290;具体的代码可以参考官方的示例 SysSound&#65292;但是官方的示例只有一些简单的用法&#65292;从文档中我们发现可以通过 AudioServicesAddSystemSoundCompletion 方法为音频播放添加 [...]]]></description>
			<content:encoded><![CDATA[<p>在 iPhone 应用或者是游戏的开发过程中&#65292;对声音的支持是必不可少的&#12290;在我做过的几个应用中&#65292;每个都涉及到音效&#65292;所以在这里做个简单的归纳&#65292;很多都是引用自<a target="_blank" target="_blank" href="http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/chapter_1_section_1.html">&#12298;iPhone Application Programming Guide&#12299;</a>&#65288;需要有 Apple ID 才能打开链接&#65289;&#65292;加了一些实际使用的经验&#12290;</p>
<p>iPhone OS 主要提供以下了几种播放音频的方法&#65306;
<ul>
<li>System Sound Services</li>
<li>AVAudioPlayer 类</li>
<li>Audio Queue Services</li>
<li>OpenAL</li>
</ul>
<p><span style="font-weight: bold;font-size:100%;" ><br /><span style="font-size:130%;">1. System Sound Services</span></span></p>
<p>System Sound Services 是最底层也是最简单的声音播放服务&#65292;调用 <span style="font-family:courier new;">AudioServicesPlaySystemSound</span> 这个方法就可以播放一些简单的音频文件&#65292;使用此方法只适合播放一些很小的提示或者警告音&#65292;因为它有很多限制&#65306;</p>
<blockquote><p>&#9632; 声音长度要小于 30 秒<br />&#9632; In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的<br />&#9632; 打包成 .caf, .aif, 或者 .wav 的文件<br />&#9632; 不能控制播放的进度<br />&#9632; 调用方法后立即播放声音<br />&#9632; 没有循环播放和立体声控制</p></blockquote>
<p>另外&#65292;它还可以调用系统的震动功能&#65292;方法也很简单&#12290;具体的代码可以参考官方的示例 <a target="_blank" href="http://developer.apple.com/iphone/library/samplecode/SysSound/">SysSound<br /></a>&#65292;但是官方的示例只有一些简单的用法&#65292;从文档中我们发现可以通过 <span style="font-family:courier new;">AudioServicesAddSystemSoundCompletion</span> 方法为音频播放添加 CallBack 函数&#65292;有了 CallBack 函数我们可以解决不少问题&#65292;比如可以克服 System Sound Services 本身不支持循环播放的问题&#12290;以下代码可以实现一个在程序中循环播放的背景音乐&#65306;</p>
<div class="code_style"><font color="#60ff60"><b>static</b></font>&nbsp;<font color="#60ff60"><b>void</b></font>&nbsp;completionCallback (SystemSoundID&nbsp;&nbsp;mySSID) {<br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// Play again after sound play completion</font><br />&nbsp;&nbsp;&nbsp;&nbsp;AudioServicesPlaySystemSound(mySSID);<br />}</p>
<p><font color="#40ffff">- </font>(<font color="#60ff60"><b>void</b></font>) playSound {<br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// Get the main bundle for the app</font><br />&nbsp;&nbsp;&nbsp;&nbsp;CFBundleRef mainBundle;<br />&nbsp;&nbsp;&nbsp;&nbsp;SystemSoundID soundFileObject;<br />&nbsp;&nbsp;&nbsp;&nbsp;mainBundle = CFBundleGetMainBundle ();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// Get the URL to the sound file to play</font><br />&nbsp;&nbsp;&nbsp;&nbsp;CFURLRef soundFileURLRef&nbsp;&nbsp;= CFBundleCopyResourceURL (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mainBundle,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFSTR (<span style="background-color: #0d0d0d"><font color="#ffa0a0">&quot;background&quot;</font></span>),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFSTR (<span style="background-color: #0d0d0d"><font color="#ffa0a0">&quot;wav&quot;</font></span>),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color: #0d0d0d"><font color="#ffa0a0">NULL</font></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// Create a system sound object representing the sound file</font><br />&nbsp;&nbsp;&nbsp;&nbsp;AudioServicesCreateSystemSoundID (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soundFileURLRef,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;soundFileObject<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// Add sound completion callback</font><br />&nbsp;&nbsp;&nbsp;&nbsp;AudioServicesAddSystemSoundCompletion (soundFileObject, <span style="background-color: #0d0d0d"><font color="#ffa0a0">NULL</font></span>, <span style="background-color: #0d0d0d"><font color="#ffa0a0">NULL</font></span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; completionCallback,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<font color="#60ff60"><b>void</b></font>*) <font color="#ffff60"><b>self</b></font>);<br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// Play the audio</font><br />&nbsp;&nbsp;&nbsp;&nbsp;AudioServicesPlaySystemSound(soundFileObject);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}</div>
<p><span style="font-weight: bold;font-size:130%;" >2. AVAudioPlayer 类<br /></span><br />AVAudioPlayer 是 AVFoundation.framework 中定义的一个类&#65292;所以使用要先在工程中引入 AVFoundation.framework&#12290;我们可以把 AVAudioPlayer 看作是一个高级的播放器&#65292;它支持广泛的音频格式&#65292;主要是以下这些格式&#65306;</p>
<blockquote><p>&#9632; AAC<br />&#9632; AMR(AdaptiveMulti-Rate, aformatforspeech)<br />&#9632; ALAC(AppleLossless)<br />&#9632; iLBC(internetLowBitrateCodec, anotherformatforspeech)<br />&#9632; IMA4(IMA/ADPCM)<br />&#9632; linearPCM(uncompressed)<br />&#9632; µ-lawanda-law<br />&#9632; MP3(MPEG-1audiolayer3 </p></blockquote>
<p>AVAudioPlayer 可以播放任意长度的音频文件&#12289;支持循环播放&#12289;可以同步播放多个音频文件&#12289;控制播放进度以及从音频文件的任意一点开始播放等&#65292;更高级的功能可以参考 <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html">AVAudioPlayer 的文档</a>&#12290;要使用 AVAudioPlayer 的对象播放文件&#65292;你只需为其指定一个音频文件并设定一个实现了 <span style="font-family:courier new;">AVAudioPlayerDelegate 协议的</span> delegate 对象&#12290;这里举一个简单的例子&#65292;和上一个例子一样&#65292;实现一直循环播放的背景音乐&#65306;
<div class="code_style"><font color="#40ffff">- </font>(<font color="#60ff60"><b>void</b></font>) playBackgroundSoundEffect {<br />&nbsp;&nbsp;&nbsp;&nbsp;NSString *soundFilePath = <br />&nbsp;&nbsp;&nbsp;&nbsp;[[NSBundle mainBundle] pathForResource: <span style="background-color: #0d0d0d"><font color="#ffa0a0">@&quot;background&quot;</font></span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ofType: <span style="background-color: #0d0d0d"><font color="#ffa0a0">@&quot;wav&quot;</font></span>]; <br />&nbsp;&nbsp;&nbsp;&nbsp;NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; <br />&nbsp;&nbsp;&nbsp;&nbsp;AVAudioPlayer *newPlayer = <br />&nbsp;&nbsp;&nbsp;&nbsp;[[AVAudioPlayer alloc] initWithContentsOfURL: fileURL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error: <span style="background-color: #0d0d0d"><font color="#ffa0a0">nil</font></span>];<br />&nbsp;&nbsp;&nbsp;&nbsp;[fileURL release];<br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff60"><b>self</b></font>.player = newPlayer; <br />&nbsp;&nbsp;&nbsp;&nbsp;[newPlayer release];<br />&nbsp;&nbsp;&nbsp;&nbsp;[<font color="#ffff60"><b>self</b></font>.player prepareToPlay];<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;[<font color="#ffff60"><b>self</b></font>.player setDelegate: <font color="#ffff60"><b>self</b></font>];<br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff60"><b>self</b></font>.player.numberOfLoops = -<span style="background-color: #0d0d0d"><font color="#ffa0a0">1</font></span>;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// Loop playback until invoke stop method</font><br />&nbsp;&nbsp;&nbsp;&nbsp;[<font color="#ffff60"><b>self</b></font>.player play];<br />}</div>
<p>可以看到&#65292;只要将 AVAudioPlayer 的 numberOfLoops 属性设为负数&#65292;音频文件就会一直循环播放直到调用 stop 方法&#12290;</p>
<p>AVAudioPlayer 同样支持 Callback&#65292;这是 <span style="font-family:courier new;">AVAudioPlayerDelegate</span> 的一个可选 delegate 方法&#65306;</p>
<div class="code_style"><font color="#40ffff">- </font>(<font color="#60ff60"><b>void</b></font>) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (<font color="#60ff60"><b>BOOL</b></font>) flag { <br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff60"><b>if</b></font>&nbsp;(player == <font color="#ffff60"><b>self</b></font>.player &amp;&amp; flag == YES) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(<span style="background-color: #0d0d0d"><font color="#ffa0a0">@&quot;Playback finish.&quot;</font></span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />} </div>
<p>另外&#65292;你可以随时控制 AVAudioPlayer 对象的播放&#12289;暂停以及停止&#65292;通过判断对象的状态&#65292;分别调用 <span style="font-family:courier new;">play&#12289;pause</span> 和 <span style="font-family:courier new;">stop</span> 方法即可&#65306;</p>
<div class="code_style"><font color="#40ffff">- </font>(IBAction) playOrPause: (<font color="#60ff60"><b>id</b></font>) sender { <br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// if playing, pause </font><br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff60"><b>if</b></font>&nbsp;(<font color="#ffff60"><b>self</b></font>.player.playing) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<font color="#ffff60"><b>self</b></font>.player pause]; <br />&nbsp;&nbsp;&nbsp;&nbsp;<font color="#80a0ff">// if stopped or paused, start playing </font><br />&nbsp;&nbsp;&nbsp;&nbsp;} <font color="#ffff60"><b>else</b></font>&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<font color="#ffff60"><b>self</b></font>.player play]; <br />&nbsp;&nbsp;&nbsp;&nbsp;} </div>
<p>虽然 AVAudioPlayer 可以播放很多格式&#65292;但是我们在实际开发过程中还是最好使用一些没有压缩的格式&#65292;比如 WAVE 文件&#65292;这样可以减少系统处理单元的资源占用&#65292;以便更好的完成程序的其他功能&#12290;另外&#65292;在使用 AVAudioPlayer 连续播放 mp3 这类经过压缩的音频文件时&#65292;在连接处可能出现一定的间隔时间&#12290;</p>
<p><span style="font-size:130%;"><span style="font-weight: bold;">3. Audio Queue Services</span></span></p>
<p>如果以上两种音频播放的解决方案都无法满足你的需求&#65292;那么我想你肯定需要使用 Audio Queue Services&#12290;使用 Audio Queue Services 对音频进行播放&#65292;你可以完全实现对声音的控制&#12290;例如&#65292;你可以在声音数据从文件读到内存缓冲区后对声音进行一定处理再进行播放&#65292;从而实现对音频的快速/慢速播放的功能&#12290;</p>
<p>因为 Audio Queue Services 相对复杂很多&#65292;Apple 官方已经把它整理为一本书了&#65292;具体可以参考 <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/chapter_1_section_1.html">Audio Queue Services Programming Guide</a> 和 <a target="_blank" href="http://developer.apple.com/iphone/library/samplecode/SpeakHere/">SpeakHere</a> 的程序示例&#12290;</p>
<p><span style="font-weight: bold;font-size:130%;" >4. OpenAL</span></p>
<p>OpenAL 是一套跨平台的开源的音频处理接口&#65292;与图形处理的 OpenGL 类似&#65292;它为音频播放提供了一套更加优化的方案&#12290;它最适合开发游戏的音效&#65292;用法也与其他平台下相同&#12290;</p>
<p>iPhone 支持 OpenAL 1.1&#65292;我没有在实际开发中使用过&#65292;具体的文档可以参考 OpenAL 的网站 <a target="_blank" href="http://openal.org">http://openal.org</a> 和 <a target="_blank" href="http://developer.apple.com/iphone/library/samplecode/oalTouch/">oalTouch</a> 的程序示例&#12290;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2009/02/iphone-dev-audio-play/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Xcode iPhone project ignore list</title>
		<link>http://blog.xiang.li/2009/02/xcode-iphone-project-ignore-list/</link>
		<comments>http://blog.xiang.li/2009/02/xcode-iphone-project-ignore-list/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 12:54:34 +0000</pubDate>
		<dc:creator>ideal</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[ignore]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://i.xiang.li/?p=14</guid>
		<description><![CDATA[我们在使用 svn 或者 git 管理 iPhone 项目的源代码时，某些文件是需要忽略的，如果不小心加入版本控制中很容易导致代码混乱和无尽的冲突。 注：其中 &#60;project_name&#62; 为实际的项目名称。 对于 svn ，我们可以使用 svn:ignore 这个属性将忽略列表提交到服务器上。 svn pe svn:ignore . svn pe svn:ignore &#60;project_name&#62;.xcodeproj 之后把上面的列表加入到相应文件中保存。 对于 git，只要更改项目文件中的 .gitignore 文件，加入以下内容： build &#60;project_name&#62;.xcodeproj/*.pbxuser &#60;project_name&#62;.xcodeproj/*.mode1v3 &#60;project_name&#62;.xcodeproj/*.mode2v3 &#60;project_name&#62;.xcodeproj/*.tm_build_errors &#60;project_name&#62;.xcodeproj/*.perspectivev3 然后把 .gitignore 本身加入版本控制中即可。]]></description>
			<content:encoded><![CDATA[<div>我们在使用 svn 或者 git 管理 iPhone 项目的源代码时，某些文件是需要忽略的，如果不小心加入版本控制中很容易导致代码混乱和无尽的冲突。<span class="Apple-style-span" style="font-family:'courier new';"><strong></strong></span></div>
<div></div>
<div>注：其中<span class="Apple-style-span" style="font-family:'courier new';"> &lt;</span><em><span class="Apple-style-span" style="font-family:'courier new';">project_name</span></em><span class="Apple-style-span" style="font-family:'courier new';">&gt; 为实际的项目名称。<br />
</span></div>
<div><span class="Apple-style-span" style="font-family:'courier new';"><strong>对于</strong></span><strong> svn</strong> ，我们可以使用 svn:ignore 这个属性将忽略列表提交到服务器上。</div>
<div>
<blockquote>
<div style="font-family: courier new;">svn pe svn:ignore .</div>
<div style="font-family: courier new;">svn pe svn:ignore <span class="Apple-style-span" style="font-family:'courier new';">&lt;</span><em><span class="Apple-style-span" style="font-family:'courier new';">project_name</span></em><span class="Apple-style-span" style="font-family:'courier new';">&gt;.xcodeproj<br />
</span></div>
</blockquote>
<div>之后把上面的列表加入到相应文件中保存。</div>
<div></div>
<div><strong>对于 git</strong>，只要更改项目文件中的 .gitignore 文件，加入以下内容：</div>
<div>
<blockquote style="font-family: courier new;"><p>build<br />
<span class="Apple-style-span" style="font-family:'courier new';">&lt;</span><em><span class="Apple-style-span" style="font-family:'courier new';">project_name</span></em><span class="Apple-style-span" style="font-family:'courier new';">&gt;</span>.xcodeproj/*.pbxuser<br />
<span class="Apple-style-span" style="font-family:'courier new';">&lt;</span><em><span class="Apple-style-span" style="font-family:'courier new';">project_name</span></em><span class="Apple-style-span" style="font-family:'courier new';">&gt;</span>.xcodeproj/*.mode1v3<br />
<span class="Apple-style-span" style="font-family:'courier new';">&lt;</span><em><span class="Apple-style-span" style="font-family:'courier new';">project_name</span></em><span class="Apple-style-span" style="font-family:'courier new';">&gt;</span>.xcodeproj/*.mode2v3<br />
<span class="Apple-style-span" style="font-family:'courier new';">&lt;</span><em><span class="Apple-style-span" style="font-family:'courier new';">project_name</span></em><span class="Apple-style-span" style="font-family:'courier new';">&gt;</span>.xcodeproj/*.tm_build_errors<br />
<span class="Apple-style-span" style="font-family:'courier new';">&lt;</span><em><span class="Apple-style-span" style="font-family:'courier new';">project_name</span></em><span class="Apple-style-span" style="font-family:'courier new';">&gt;</span>.xcodeproj/*.perspectivev3</p></blockquote>
<p>然后把 .gitignore 本身加入版本控制中即可。</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.xiang.li/2009/02/xcode-iphone-project-ignore-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

