<?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>奋斗 &#187; code</title>
	<atom:link href="http://fangfangtu.com/blog/category/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://fangfangtu.com/blog</link>
	<description>生命在于折腾</description>
	<lastBuildDate>Sat, 19 May 2012 21:44:07 +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>Invalid Product IDs</title>
		<link>http://fangfangtu.com/blog/2011/06/invalid-product-ids/</link>
		<comments>http://fangfangtu.com/blog/2011/06/invalid-product-ids/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 11:07:38 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[iap]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://fangfangtu.com/blog/?p=947</guid>
		<description><![CDATA[iOS除了可以推收费app之外，还可以通过IAP（In App Purchase）获得收益 IAP开发其实很简单 但是教程写的很繁琐 把简单的事情貌似很复杂 除此之外，新手在起步的时候很容易遇到挫折 就是获取商品ID到时候 返回Invalid Product IDs 这里有两篇文章可以参考 Apple Technical Note TN2259 Invalid Product IDs 但是这里有个问题 都没有提到 设备不能越狱！！ iOS devices must not Jailbreaking. 就在这个问题上让我纠结了好几天 很郁闷 随便看看2006-09-08 -- 情景剧2007-12-19 -- 郁闷的赶上Launchy的升级2005-09-08 -- 终于可以上网了2006-06-05 -- formatting2010-08-02 -- 拔牙]]></description>
			<content:encoded><![CDATA[<p>iOS除了可以推收费app之外，还可以通过IAP（In App Purchase）获得收益<br />
IAP开发其实很简单<br />
但是教程写的很繁琐 把简单的事情貌似很复杂<br />
除此之外，新手在起步的时候很容易遇到挫折<br />
就是获取商品ID到时候 返回Invalid Product IDs</p>
<p>这里有两篇文章可以参考<br />
<a href="http://developer.apple.com/library/ios/technotes/tn2259/_index.html#//apple_ref/doc/uid/DTS40009578">Apple Technical Note TN2259</a><br />
<a href="http://troybrant.net/blog/2010/01/invalid-product-ids/">Invalid Product IDs</a></p>
<p>但是这里有个问题 都没有提到<br />
设备不能越狱！！<br />
iOS devices must not Jailbreaking.</p>
<p>就在这个问题上让我纠结了好几天<br />
很郁闷</p>
<h3  class="related_post_title">随便看看</h3><ul class="related_post"><li>2006-07-17 -- <a href="http://fangfangtu.com/blog/2006/07/first-week-in-peking/" title="来北京的第一周">来北京的第一周</a></li><li>2006-12-18 -- <a href="http://fangfangtu.com/blog/2006/12/joga-ronaldo/" title="Joga Ronaldo">Joga Ronaldo</a></li><li>2007-08-15 -- <a href="http://fangfangtu.com/blog/2007/08/free-soccer/" title="免费看英超 让天盛一边玩去">免费看英超 让天盛一边玩去</a></li><li>2007-05-25 -- <a href="http://fangfangtu.com/blog/2007/05/shenzhen-old-big/" title="驻深圳特约记者报:老大的深圳之行">驻深圳特约记者报:老大的深圳之行</a></li><li>2007-06-03 -- <a href="http://fangfangtu.com/blog/2007/06/pjblog-update-3/" title="升级">升级</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2011/06/invalid-product-ids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bada初体验二三事</title>
		<link>http://fangfangtu.com/blog/2010/10/bada/</link>
		<comments>http://fangfangtu.com/blog/2010/10/bada/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 15:20:22 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[bada]]></category>
		<category><![CDATA[手机]]></category>

		<guid isPermaLink="false">http://fangfangtu.com/blog/?p=882</guid>
		<description><![CDATA[很早之前看过一次bada 本来想在十一之前做点东西出来的 不过那个时候太忙 给耽误了 周末没事在家 又想在bada上做点东西 看了看bada的资料 中文文章不多 官方但api文档还不错 挺详细的 并且附有一些简单的例子 调试很方便 用断点出现过几次没有响应但情况 再就是模拟器打开之后 再调试就会提示”simulator already launched” 试了试几个办法都没发解决 这是个要优先解决的问题 好在是模拟器启动的很快 sdk1.0不带数据压缩和解压缩 1.1增加了Inflator 和 Deflator 不过这sdk更新就是将近1g &#8230; 1.1的模拟器好看多了 sdk目前没有找到json解析的方法 所以需要第三方库 在badadev看到这个话题的讨论 可以使用yajl来做 基本不需要做改动 bada的网络编程看起来比较简单 异步处理 可以较少考虑线程 这方面还没有深入的看 bada的ui这块文档不多 还有不少疑问 可以可视化的编辑 也可以用代码来生成 1.1的向导增加了分辨率自适应 不过还没有找到方法 怎么做? 模拟器提供的分辨率就两种 是不是目前真机的规格就这两种? bada的内存管理比较类似c++ 直观 但是看多了objective c又有些不理解 比如有些内存并不是显式分配的 但也需要自己来释放 比如 ByteBuffer* pBuf1 = [...]]]></description>
			<content:encoded><![CDATA[<p>很早之前看过一次bada<br />
本来想在十一之前做点东西出来的<br />
不过那个时候太忙 给耽误了</p>
<p>周末没事在家 又想在bada上做点东西<br />
看了看bada的资料<br />
中文文章不多<br />
官方但api文档还不错 挺详细的<br />
并且附有一些简单的例子</p>
<p>调试很方便 用断点出现过几次没有响应但情况<br />
再就是模拟器打开之后 再调试就会提示”simulator already launched”<br />
试了试几个办法都没发解决 这是个要优先解决的问题<br />
好在是模拟器启动的很快</p>
<p>sdk1.0不带数据压缩和解压缩<br />
1.1增加了Inflator 和 Deflator<br />
不过这sdk更新就是将近1g &#8230;<br />
1.1的模拟器好看多了</p>
<p>sdk目前没有找到json解析的方法<br />
所以需要第三方库<br />
在badadev看到这个话题的讨论<br />
可以使用yajl来做<br />
基本不需要做改动</p>
<p>bada的网络编程看起来比较简单<br />
异步处理 可以较少考虑线程<br />
这方面还没有深入的看</p>
<p>bada的ui这块文档不多 还有不少疑问<br />
可以可视化的编辑<br />
也可以用代码来生成<br />
1.1的向导增加了分辨率自适应<br />
不过还没有找到方法 怎么做?<br />
模拟器提供的分辨率就两种<br />
是不是目前真机的规格就这两种?</p>
<p>bada的内存管理比较类似c++<br />
直观<br />
但是看多了objective c又有些不理解<br />
比如有些内存并不是显式分配的<br />
但也需要自己来释放<br />
比如</p>
<blockquote><p>
ByteBuffer* pBuf1 = null;<br />
//Inflate buf from current position to limit of ByteBuffer buf.<br />
pBuf1 = Inflator::InflateN(buf);<br />
delete pBuf1;
</p></blockquote>
<p>工厂模式?</p>
<p>最后bada还有一个致命的问题<br />
目前ide只运行在windows平台上<br />
很不理解<br />
eclipse没问题 cdt没问题<br />
不明白<br />
只得装个虚拟机跑着</p>
<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2009-12-06 -- <a href="http://fangfangtu.com/blog/2009/12/htc-hero/" title="HERO是个好手机">HERO是个好手机</a></li><li>2009-01-17 -- <a href="http://fangfangtu.com/blog/2009/01/mobile-phone/" title="关于手机的胡说八道">关于手机的胡说八道</a></li><li>2007-01-12 -- <a href="http://fangfangtu.com/blog/2007/01/phone/" title="我期望的手机">我期望的手机</a></li><li>2006-05-22 -- <a href="http://fangfangtu.com/blog/2006/05/n70/" title="n70">n70</a></li><li>2006-01-31 -- <a href="http://fangfangtu.com/blog/2006/01/se-w550c/" title="索尼爱立信 W550c">索尼爱立信 W550c</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2010/10/bada/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mp3 cover fetcher</title>
		<link>http://fangfangtu.com/blog/2010/05/mp3-cover-fetcher/</link>
		<comments>http://fangfangtu.com/blog/2010/05/mp3-cover-fetcher/#comments</comments>
		<pubDate>Thu, 13 May 2010 13:35:49 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[droidisland]]></category>
		<category><![CDATA[mp3 cover fetcher]]></category>

		<guid isPermaLink="false">http://fangfangtu.com/blog/?p=836</guid>
		<description><![CDATA[mp3 cover fetcher 是android手机上的一个软件 它可以通过读取mp3的tag信息,查询到mp3所属专辑唱片的封面 并且下载下来,写入到mp3文件里 这样 在你的听音乐的时候 播放器里不会再是一片空白 软件很简单 而且它是免费的! 在android market里搜索”mp3 cover fetcher” 更方便的扫描这个qr code 就是这样 可能相关2009-12-06 -- HERO是个好手机2009-08-22 -- 强大的Google2009-07-06 -- 改进版的Google 翻译前端]]></description>
			<content:encoded><![CDATA[<p>mp3 cover fetcher 是android手机上的一个软件<br />
它可以通过读取mp3的tag信息,查询到mp3所属专辑唱片的封面<br />
并且下载下来,写入到mp3文件里<br />
这样 在你的听音乐的时候 播放器里不会再是一片空白<br />
软件很简单 而且它是免费的!<br />
在android market里搜索”mp3 cover fetcher”<br />
更方便的扫描这个qr code<br />
<img src="http://bborn.cn/image/readimg.php?src=http%3A%2F%2Flh6.gouride.com%2F_eKKBmJB2_L4%2FS-v9FWEpiHI%2FAAAAAAAAADE%2FVAtVCnLgt3E%2Fs144%2Fmp3tag.png" alt="qr code" /></p>
<p><img src="http://bborn.cn/image/readimg.php?src=http%3A%2F%2Flh5.gouride.com%2F_eKKBmJB2_L4%2FS-v_DfZIyyI%2FAAAAAAAAADI%2FwjyPs_HjdqE%2Fs800%2F1.png" alt="main" /><br />
<img src="http://bborn.cn/image/readimg.php?src=http%3A%2F%2Flh3.gouride.com%2F_eKKBmJB2_L4%2FS-v_DZTeNJI%2FAAAAAAAAADM%2FYh80XaiT5gM%2Fs800%2F2.png" alt="2" /><br />
<img src="http://bborn.cn/image/readimg.php?src=http%3A%2F%2Flh3.gouride.com%2F_eKKBmJB2_L4%2FS-v_DjP1teI%2FAAAAAAAAADQ%2FqwPTBVqVxwQ%2Fs800%2F3.png" alt="3" /></p>
<p>就是这样</p>
<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2009-12-06 -- <a href="http://fangfangtu.com/blog/2009/12/htc-hero/" title="HERO是个好手机">HERO是个好手机</a></li><li>2009-08-22 -- <a href="http://fangfangtu.com/blog/2009/08/google/" title="强大的Google">强大的Google</a></li><li>2009-07-06 -- <a href="http://fangfangtu.com/blog/2009/07/gtranslator/" title="改进版的Google 翻译前端">改进版的Google 翻译前端</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2010/05/mp3-cover-fetcher/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Launchy2.5 汉化和修改</title>
		<link>http://fangfangtu.com/blog/2010/04/launchy25/</link>
		<comments>http://fangfangtu.com/blog/2010/04/launchy25/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 20:28:48 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[launchy]]></category>

		<guid isPermaLink="false">http://fangfangtu.com/blog/?p=819</guid>
		<description><![CDATA[周末从五台山回来 发现launchy2.5的release已经出来了 于是决定用剩下的一天假期来研究一下汉化和功能修改的事情 相比上个版本变化不是很大 除了有更好的性能之外 看起来都是一些细节的修改 其实对我来说 2.12就用的很不错了 首先说说汉化的事情 新版本在选项窗口多了一点新内容 如果喜欢用原版 但是又想看中文的话 下载”launchy_zh.qm”放到安装目录下的”tr”目录下覆盖即可 我的修改版和以前一样 主要针对两点 1. 支持双击双击方式,默认热键是双击ctrl 2. 支持中文名的拼音查找 qt虽然是一个跨平台的库 但是即使同在windows下 使用不同版本的vc编译出来的qt 放在一起也不能同时工作 说白点就是直接拿网上下载的插件回来有可能不能正常工作 需要在相同的环境下重新编译一下 我的编译环境是 VS2008 (没有装sp1) Qt libraries 4.6.2 for Windows (VS 2008) 安装包已经做好 在这里下载 http://code.google.com/p/launchy-chinese/downloads/list 代码同步更新 *2010.4.8更新,修改了插件的编译属性 去掉了dll的manifest文件 如果在dll里嵌入清单的话 需要在当前目录下去寻找运行时库 而dll和exe不在同一个目录 这时候需要部署两份运行时库 实际上dll需要的运行时库 exe的manifest文件已经包括了 所以没必要再嵌入 之前发现使用/mt可以解决问题 简单的测试也没有问题(在xp虚拟机下) 今天在win7下测试 release版更新索引时会莫名其妙的crash 猜想是因为运行时库不一致引起的 更新后 问题解决 [...]]]></description>
			<content:encoded><![CDATA[<p>周末从五台山回来 发现launchy2.5的release已经出来了<br />
于是决定用剩下的一天假期来研究一下汉化和功能修改的事情<br />
相比上个版本变化不是很大<br />
除了有更好的性能之外<br />
看起来都是一些细节的修改<br />
其实对我来说 2.12就用的很不错了 <img src='http://fangfangtu.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>首先说说汉化的事情<br />
新版本在选项窗口多了一点新内容<br />
如果喜欢用原版 但是又想看中文的话<br />
下载”launchy_zh.qm”放到安装目录下的”tr”目录下覆盖即可</p>
<p>我的修改版和以前一样<br />
主要针对两点<br />
1. 支持双击双击方式,默认热键是双击ctrl<br />
2. 支持中文名的拼音查找</p>
<p>qt虽然是一个跨平台的库<br />
但是即使同在windows下<br />
使用不同版本的vc编译出来的qt<br />
放在一起也不能同时工作<br />
说白点就是直接拿网上下载的插件回来有可能不能正常工作<br />
需要在相同的环境下重新编译一下<br />
我的编译环境是<br />
VS2008 (没有装sp1)<br />
Qt libraries 4.6.2 for Windows (VS 2008)</p>
<p>安装包已经做好<br />
在这里下载<br />
<a href="http://code.google.com/p/launchy-chinese/downloads/list">http://code.google.com/p/launchy-chinese/downloads/list</a><br />
代码同步更新</p>
<p>*2010.4.8更新,修改了插件的编译属性<br />
去掉了dll的manifest文件<br />
如果在dll里嵌入清单的话 需要在当前目录下去寻找运行时库<br />
而dll和exe不在同一个目录 这时候需要部署两份运行时库<br />
实际上dll需要的运行时库 exe的manifest文件已经包括了<br />
所以没必要再嵌入<br />
之前发现使用/mt可以解决问题 简单的测试也没有问题(在xp虚拟机下)<br />
今天在win7下测试 release版更新索引时会莫名其妙的crash<br />
猜想是因为运行时库不一致引起的<br />
更新后 问题解决</p>
<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2009-04-23 -- <a href="http://fangfangtu.com/blog/2009/04/qt-plugin/" title="qt开发插件的郁闷">qt开发插件的郁闷</a></li><li>2009-04-12 -- <a href="http://fangfangtu.com/blog/2009/04/twittery-first-release/" title="twittery第一个release版本">twittery第一个release版本</a></li><li>2008-11-16 -- <a href="http://fangfangtu.com/blog/2008/11/launchy212/" title="Launchy 2.12 修改+汉化">Launchy 2.12 修改+汉化</a></li><li>2008-06-23 -- <a href="http://fangfangtu.com/blog/2008/06/launchy/" title="launchy2修改版的源代码">launchy2修改版的源代码</a></li><li>2007-12-25 -- <a href="http://fangfangtu.com/blog/2007/12/launchy-2-chinese/" title="Launchy2.0 新功能+汉化版">Launchy2.0 新功能+汉化版</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2010/04/launchy25/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>boost::asio::async_read 的一些记录</title>
		<link>http://fangfangtu.com/blog/2009/12/async_read-memo/</link>
		<comments>http://fangfangtu.com/blog/2009/12/async_read-memo/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 13:12:12 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[网络]]></category>

		<guid isPermaLink="false">http://fangfangtu.com/blog/?p=795</guid>
		<description><![CDATA[boost中的asio是一个非常好用的网络库 不过可以参考的资料比较少 大部分都是靠阅读自带的几个example来理解 这里记录一下这两天的几个心得 boost::asio::async_read_until(socket_, response_, “\r\n\r\n”, boost::bind(&#038;shoutcast::handle_read_headers, this, boost::asio::placeholders::error)); async_read_until, 一直读,直到读到指定的内容.但是了,并不是刚刚读到就停止,一般缓冲区里会有更多的内容, 所以我们需要读出我们需要的,剩下的留下就好 官方是这么说的”After a successful async_read_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent async_read_until operation to examine.” boost::asio::async_read(socket_, response_, boost::asio::transfer_at_least(512), boost::bind(&#038;shoutcast::handle_read_content, this, boost::asio::placeholders::error)); async_read 可以选择使用transfer_at_least 这个CompletionCondition async_read 读入的缓冲区可以这样 [...]]]></description>
			<content:encoded><![CDATA[<p>boost中的asio是一个非常好用的网络库<br />
不过可以参考的资料比较少<br />
大部分都是靠阅读自带的几个example来理解<br />
这里记录一下这两天的几个心得</p>
<blockquote><p>boost::asio::async_read_until(socket_, response_,  “\r\n\r\n”, boost::bind(&#038;shoutcast::handle_read_headers, this, boost::asio::placeholders::error));</p></blockquote>
<p>async_read_until, 一直读,直到读到指定的内容.但是了,并不是刚刚读到就停止,一般缓冲区里会有更多的内容,<br />
所以我们需要读出我们需要的,剩下的留下就好<br />
官方是这么说的”After a successful async_read_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent async_read_until operation to examine.”</p>
<blockquote><p>boost::asio::async_read(socket_, response_, boost::asio::transfer_at_least(512), boost::bind(&#038;shoutcast::handle_read_content, this, boost::asio::placeholders::error));</p></blockquote>
<p>async_read 可以选择使用transfer_at_least 这个CompletionCondition<br />
async_read 读入的缓冲区可以这样<br />
boost::array<char, 8192> buffer_;<br />
boost::asio::buffer(buffer_);来构造<br />
也可以直接用字符数组来构造<br />
char _buf[512] = {0};<br />
boost::asio::buffer(_buf, 512);<br />
也可以用流,更像tcp的方式<br />
使用boost::asio::streambuf response_;<br />
它继承自 std::streambuf<br />
一般这样使用<br />
std::istream _stream(&#038;response_);<br />
这里要注意的是 basic_istream::get<br />
如果我们指定get的个数count,那么取出的个数是count-1<br />
msdn是这样说的”The fourth function extracts up to _Count &#8211; 1 elements and stores them in the array beginning at _Str.”</p>
<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2005-09-08 -- <a href="http://fangfangtu.com/blog/2005/09/net-hust/" title="终于可以上网了">终于可以上网了</a></li><li>2005-08-31 -- <a href="http://fangfangtu.com/blog/2005/08/opera-ten-years/" title="opera 十年">opera 十年</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2009/12/async_read-memo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>改进版的Google 翻译前端</title>
		<link>http://fangfangtu.com/blog/2009/07/gtranslator/</link>
		<comments>http://fangfangtu.com/blog/2009/07/gtranslator/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 15:42:32 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[代码]]></category>

		<guid isPermaLink="false">http://bborn.cn/blog/?p=748</guid>
		<description><![CDATA[其实一直对android很感兴趣 虽然没有用过它的真机&#8230; 上个星期看到了这篇文章 Android:Google 翻译前端 作者的代码写的简单明了 并且发布了源代码给大家学习 真是很不错 看了之后 决定动手增加点东西 学习一下android的开发 增加的内容主要是在查询过程中弹出一个等待的对话框 涉及到的内容包括 ProgressDialog, AsyncTask 效果如下 当用户点击Translate的时候,会出现一个”正在查询”的对话框 查询完毕后对话框消失 对话框很好做 showDialog(1) 后 系统会调用 @Override protected Dialog onCreateDialog(int id) { if(1 == id) { ProgressDialog dialog = new ProgressDialog(GTranslator.this); dialog.setTitle(“正在查询”); dialog.setMessage(“请稍候……”); return dialog; } return null; } 但是 查询是个阻塞的过程 我们必须得在另外一个线程里去做这个事情 比较简单的方法就是继承AsyncTask 网上有一篇转载比较多的关于AsyncTask的文章(Android线程模型（Painless Threading）) 官方的说明在这里 http://developer.android.com/reference/android/os/AsyncTask.html 大概说一下 android [...]]]></description>
			<content:encoded><![CDATA[<p>其实一直对android很感兴趣<br />
虽然没有用过它的真机&#8230;</p>
<p>上个星期看到了这篇文章<br />
<a href="http://percy.blog.ubuntu.org.cn/2009/06/04/androidgoogle-%e7%bf%bb%e8%af%91%e5%89%8d%e7%ab%af/">Android:Google 翻译前端</a><br />
作者的代码写的简单明了<br />
并且发布了源代码给大家学习<br />
真是很不错</p>
<p>看了之后 决定动手增加点东西 学习一下android的开发<br />
增加的内容主要是在查询过程中弹出一个等待的对话框<br />
涉及到的内容包括 ProgressDialog, AsyncTask<br />
效果如下<br />
当用户点击Translate的时候,会出现一个”正在查询”的对话框<br />
查询完毕后对话框消失</p>
<div style="float:none "><a href="http://lh5.ggpht.com/_jovmLNLVWVI/SlIJf_dDkYI/AAAAAAAAFf0/472hW_kRaX0/s800/gtranslator.jpg" onclick="return hs.expand(this);" class="highslide"><img src="http://bborn.cn/image/readimg.php?src=http%3A%2F%2Flh5.gouride.com%2F_jovmLNLVWVI%2FSlIJf_dDkYI%2FAAAAAAAAFf0%2F472hW_kRaX0%2Fs400%2Fgtranslator.jpg" alt="" title="" /></a></div>
<p>对话框很好做 showDialog(1) 后<br />
系统会调用</p>
<blockquote><p>
	@Override<br />
	protected Dialog onCreateDialog(int id) {<br />
		if(1 == id)<br />
		{<br />
			ProgressDialog dialog = new ProgressDialog(GTranslator.this);<br />
			dialog.setTitle(“正在查询”);<br />
			dialog.setMessage(“请稍候……”);<br />
			return  dialog;<br />
		}<br />
		return null;<br />
	}</p></blockquote>
<p>但是 查询是个阻塞的过程<br />
我们必须得在另外一个线程里去做这个事情<br />
比较简单的方法就是继承AsyncTask<br />
网上有一篇转载比较多的关于AsyncTask的文章(Android线程模型（Painless Threading）)<br />
官方的说明在这里 <a href="http://developer.android.com/reference/android/os/AsyncTask.html">http://developer.android.com/reference/android/os/AsyncTask.html</a><br />
大概说一下 android 的ui线程不是线程安全的<br />
我们不能在其他的线程里直接做关于ui的操作<br />
这里有个简单的办法就是继承AsyncTask<br />
然后实现它的doInBackground方法<br />
在类的onPreExecute(),publishProgress(Progress&#8230;),onPostExecute(Result)方法里<br />
做ui的操作<br />
如果在doInBackground里操作ui<br />
可能会弹出异常提示<br />
“Only the original thread that created a view hierarchy can touch its views”<br />
不是每次都弹&#8230;为什么了?</p>
<p>下面贴一下线程的代码</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">class</span> ProcessDialogThread <span style="color: #000000; font-weight: bold;">extends</span> AsyncTask<span style="color: #339933;">&lt;</span>String, <span style="color: #003399;">Void</span>, String<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// @Override</span>
		<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #003399;">String</span> doInBackground<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>... <span style="color: #006633;">str</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #003399;">String</span> toTranslateTextString <span style="color: #339933;">=</span> toTranslateEditText.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
					.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">String</span> tempString <span style="color: #339933;">=</span> toTranslateTextString.<span style="color: #006633;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &quot;</span>, <span style="color: #0000ff;">&quot;%20&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			fromString <span style="color: #339933;">=</span> mCountries<span style="color: #009900;">&#91;</span>fromSpinner.<span style="color: #006633;">getSelectedItemPosition</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			toString <span style="color: #339933;">=</span> mCountries<span style="color: #009900;">&#91;</span>toSpinner.<span style="color: #006633;">getSelectedItemPosition</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">String</span> queryString <span style="color: #339933;">=</span> tempString <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;&amp;langpair=&quot;</span> <span style="color: #339933;">+</span> fromString <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;%7C&quot;</span>
					<span style="color: #339933;">+</span> toString<span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">return</span> getRawData<span style="color: #009900;">&#40;</span>queryString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onPreExecute<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			showDialog<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			translatedTextView.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Connecting...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onPostExecute<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> rawData<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			dismissDialog<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">!=</span> rawData<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003399;">String</span> parsedDataString <span style="color: #339933;">=</span> getData<span style="color: #009900;">&#40;</span>rawData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">==</span> parsedDataString <span style="color: #339933;">||</span> <span style="color: #0000ff;">&quot;&quot;</span> <span style="color: #339933;">==</span> parsedDataString<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
						translatedTextView.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Not found&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
					translatedTextView.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>parsedDataString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					dbAdapter.<span style="color: #006633;">insertItem</span><span style="color: #009900;">&#40;</span>toTranslateEditText.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
							.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, parsedDataString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #666666; font-style: italic;">/*
					 * FileAccess.writeFile(this,
					 * toTranslateEditText.getText().toString() + &quot;:&quot; +
					 * parsedDataString);
					 */</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
				translatedTextView.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Translate failed!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getRawData<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> string<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">String</span> dataString <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// String queryString = &quot;hello%20world&amp;langpair=en%7Czh-CN&quot;;</span>
			<span style="color: #003399;">String</span> queryString <span style="color: #339933;">=</span> string<span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003399;">URL</span> url<span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>bAtOffice<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					url <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">URL</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://10.85.40.153:8000/a.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
					url <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">URL</span><span style="color: #009900;">&#40;</span>
							<span style="color: #0000ff;">&quot;http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&amp;q=&quot;</span>
									<span style="color: #339933;">+</span> queryString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #003399;">URLConnection</span> conn <span style="color: #339933;">=</span> url.<span style="color: #006633;">openConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				conn.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #003399;">BufferedReader</span> reader <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedReader</span><span style="color: #009900;">&#40;</span>
						<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">InputStreamReader</span><span style="color: #009900;">&#40;</span>conn.<span style="color: #006633;">getInputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #000066; font-weight: bold;">byte</span> buffer<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1024</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// bis.r</span>
				<span style="color: #003399;">String</span> readerString<span style="color: #339933;">;</span>
				<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>readerString <span style="color: #339933;">=</span> reader.<span style="color: #006633;">readLine</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					dataString <span style="color: #339933;">+=</span> readerString<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				reader.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #666666; font-style: italic;">// is.close();</span>
&nbsp;
			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Net work error&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">return</span> dataString<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2010-05-13 -- <a href="http://fangfangtu.com/blog/2010/05/mp3-cover-fetcher/" title="mp3 cover fetcher">mp3 cover fetcher</a></li><li>2009-12-06 -- <a href="http://fangfangtu.com/blog/2009/12/htc-hero/" title="HERO是个好手机">HERO是个好手机</a></li><li>2009-08-22 -- <a href="http://fangfangtu.com/blog/2009/08/google/" title="强大的Google">强大的Google</a></li><li>2008-11-07 -- <a href="http://fangfangtu.com/blog/2008/11/ffmpeg-h264/" title="在windows平台编译FFMPEG的静态链接库">在windows平台编译FFMPEG的静态链接库</a></li><li>2006-11-17 -- <a href="http://fangfangtu.com/blog/2006/11/sort/" title="全排列">全排列</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2009/07/gtranslator/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Linux下的GAP的GUI脚本</title>
		<link>http://fangfangtu.com/blog/2009/06/linux_gui_gap/</link>
		<comments>http://fangfangtu.com/blog/2009/06/linux_gui_gap/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 15:07:36 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://bborn.cn/blog/?p=732</guid>
		<description><![CDATA[GAP: GAppProxy是一个运行于Google App Engine上的 遵循GUN的代理解决方案 关于它的详细介绍请访问项目主页 code.google.com/p/gappproxy 它的一个劣势就是需要运行一个客户端 是个简单的python脚本 在windows下 作者已经写好并打包了一个GUI程序 但是在linux下没有 上周末抽空做了一个Ubuntu下的GUI界面 点击start 后会缩放到托盘 GNOME的托盘是在上面哦 如果需要使用自己的server 首先修改并save 然后在start就好了 程序的部分代码是直接复制GAP下的gui.py里的 把代码解压后放到localproxy文件夹里 和proxy.py等 放一起就好 在终端里输入python linux_gui.py 运行 但 既然要在终端里输入命令 那为什么还要GUI了 &#8230;&#8230; 哈哈 看起来很笨拙 实际上我是想打包做成安装包的 尝试了freeze.py 但是在编译的时候出错 等有时间再想想办法吧 在Linux上 我基本还是小白 这段脚本测试的环境是 Ubuntu9.04 python2.6 Qt4 和 pyqt 可能相关2009-11-09 -- the wall2009-08-22 -- 强大的Google2009-02-04 -- 基于Google App Engine的网站计数器2008-11-26 -- [...]]]></description>
			<content:encoded><![CDATA[<p>GAP: GAppProxy是一个运行于Google App Engine上的<br />
遵循GUN的代理解决方案<br />
关于它的详细介绍请访问项目主页<br />
<a href="http://code.google.com/p/gappproxy/">code.google.com/p/gappproxy</a></p>
<p>它的一个劣势就是需要运行一个客户端<br />
是个简单的python脚本<br />
在windows下 作者已经写好并打包了一个GUI程序<br />
但是在linux下没有</p>
<p>上周末抽空做了一个Ubuntu下的GUI界面</p>
<div style="float:none "><a href="http://lh5.ggpht.com/_jovmLNLVWVI/Sj-U0b1s0zI/AAAAAAAAFUs/d5b0UmOULGs/s800/gap.png" onclick="return hs.expand(this);" class="highslide"><img src="http://bborn.cn/image/readimg.php?src=http%3A%2F%2Flh5.gouride.com%2F_jovmLNLVWVI%2FSj-U0b1s0zI%2FAAAAAAAAFUs%2Fd5b0UmOULGs%2Fs400%2Fgap.png" alt="" title="" /></a></div>
<p>点击start 后会缩放到托盘<br />
GNOME的托盘是在上面哦</p>
<div style="float:none "><a href="http://lh5.ggpht.com/_jovmLNLVWVI/Sj-U0Th01EI/AAAAAAAAFUw/QX9xOnAoekw/s800/gap-icon.png" onclick="return hs.expand(this);" class="highslide"><img src="http://bborn.cn/image/readimg.php?src=http%3A%2F%2Flh5.gouride.com%2F_jovmLNLVWVI%2FSj-U0Th01EI%2FAAAAAAAAFUw%2FQX9xOnAoekw%2Fs400%2Fgap-icon.png" alt="" title="" /></a></div>
<p>如果需要使用自己的server<br />
首先修改并save<br />
然后在start就好了</p>
<p>程序的部分代码是直接复制GAP下的gui.py里的<br />
把代码解压后放到localproxy文件夹里<br />
和proxy.py等 放一起就好</p>
<p>在终端里输入python linux_gui.py 运行<br />
但 既然要在终端里输入命令<br />
那为什么还要GUI了 &#8230;&#8230;<br />
哈哈 看起来很笨拙<br />
实际上我是想打包做成安装包的<br />
尝试了freeze.py 但是在编译的时候出错<br />
等有时间再想想办法吧</p>
<p>在Linux上 我基本还是小白<br />
这段脚本测试的环境是<br />
Ubuntu9.04<br />
python2.6<br />
Qt4 和 pyqt</p>
<a class="downloadlink dlimg" href="http://fangfangtu.com/blog/wp-content/plugins/download-monitor/download.php?id=2" title="Version 1 downloaded 350 times" ><img src="http://bborn.cn/blog/wp-content/plugins/download-monitor/img/download.gif" alt="Download linux_gui_gap Version 1" /></a>
<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2009-11-09 -- <a href="http://fangfangtu.com/blog/2009/11/the-wall/" title="the wall">the wall</a></li><li>2009-08-22 -- <a href="http://fangfangtu.com/blog/2009/08/google/" title="强大的Google">强大的Google</a></li><li>2009-02-04 -- <a href="http://fangfangtu.com/blog/2009/02/google-app-engine/" title="基于Google App Engine的网站计数器">基于Google App Engine的网站计数器</a></li><li>2008-11-26 -- <a href="http://fangfangtu.com/blog/2008/11/rubbish-baidu/" title="为什么都说baidu垃圾">为什么都说baidu垃圾</a></li><li>2008-09-03 -- <a href="http://fangfangtu.com/blog/2008/09/google-software/" title="Google软件发布日">Google软件发布日</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2009/06/linux_gui_gap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>qt开发插件的郁闷</title>
		<link>http://fangfangtu.com/blog/2009/04/qt-plugin/</link>
		<comments>http://fangfangtu.com/blog/2009/04/qt-plugin/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 15:51:21 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[launchy]]></category>
		<category><![CDATA[qt]]></category>

		<guid isPermaLink="false">http://bborn.cn/blog/?p=701</guid>
		<description><![CDATA[Qt真是庞大 甚至连软件的插件开发 它都替你考虑了 不过说实话 实在是不好用 之前以为是我vs2008+qt4.5的环境编译出来的插件不兼容 之后我花了三个晚上下载vs2005 又花了一个晚上编译qt4.4 之后编译出来的插件还是不能用 甚至还搜到了有人遇到了更奇怪的问题 发布的qt程序拷贝到其它机器无法读取plugin Qt作为一个商业软件 这些事情实在是很恼火 发现qt4.4编译时比qt4.5占用的硬盘少很多 可能相关2009-04-12 -- twittery第一个release版本2010-04-07 -- Launchy2.5 汉化和修改2009-04-12 -- HICON to QPixmap2009-04-12 -- 夜-uno2009-03-15 -- 有关QListView和QStringListModel的操作]]></description>
			<content:encoded><![CDATA[<p>Qt真是庞大<br />
甚至连软件的插件开发<br />
它都替你考虑了<br />
不过说实话 实在是不好用<br />
之前以为是我vs2008+qt4.5的环境编译出来的插件不兼容<br />
之后我花了三个晚上下载vs2005<br />
又花了一个晚上编译qt4.4<br />
之后编译出来的插件还是不能用<br />
甚至还搜到了有人遇到了更奇怪的问题<br />
<a href="http://www.qtopia.org.cn/phpBB2/viewtopic.php?p=4040">发布的qt程序拷贝到其它机器无法读取plugin</a></p>
<p>Qt作为一个商业软件<br />
这些事情实在是很恼火</p>
<p>发现qt4.4编译时比qt4.5占用的硬盘少很多</p>
<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2009-04-12 -- <a href="http://fangfangtu.com/blog/2009/04/twittery-first-release/" title="twittery第一个release版本">twittery第一个release版本</a></li><li>2010-04-07 -- <a href="http://fangfangtu.com/blog/2010/04/launchy25/" title="Launchy2.5 汉化和修改">Launchy2.5 汉化和修改</a></li><li>2009-04-12 -- <a href="http://fangfangtu.com/blog/2009/04/hicon-to-qpixmap/" title="HICON to QPixmap">HICON to QPixmap</a></li><li>2009-04-12 -- <a href="http://fangfangtu.com/blog/2009/04/night-uno/" title="夜-uno">夜-uno</a></li><li>2009-03-15 -- <a href="http://fangfangtu.com/blog/2009/03/qlistview/" title="有关QListView和QStringListModel的操作">有关QListView和QStringListModel的操作</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2009/04/qt-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>twittery第一个release版本</title>
		<link>http://fangfangtu.com/blog/2009/04/twittery-first-release/</link>
		<comments>http://fangfangtu.com/blog/2009/04/twittery-first-release/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 15:10:41 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[launchy]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[twittery]]></category>

		<guid isPermaLink="false">http://bborn.cn/blog/?p=694</guid>
		<description><![CDATA[今天发布了第一个twittery的release版本 周中花了一个晚上的时间用google doc做了一个简单的网页 http://twittery.sourceforge.net/ twittery 是Launchy 的插件 可以让你方便的通过Launchy发送twitter消息 使用很简单 首先要在插件的设置窗口里输入你的twitter的用户名和密码 然后在文本框里输入”twtter”, 找到twittery 然后点击tab键 再输入你想要说的话 最后就是回车 等待你的消息发送成功 因为我现在的编译环境是vs2008和qt4.5 所以我编译出来的插件 以前的程序加载不成功 所以我放出来的文件是包括了重新编译了的launchy的安装包 同理 这个版本也不支持以前版本的插件 这是个很郁闷的问题 现在只能期望有朋友有vs2005和qt4.4环境 能帮我重新编译一下 这样官方的版本也可以使用这个插件了 twittery中的twitter api是使用twitlib的实现 它也是基于qt的实现 twittery也是一个开源的项目,遵循GPL协议 twittery的主页 http://twittery.sourceforge.net/ 请多点击右边的google广告支持 关于launchy 请看这里 http://bborn.cn/blog/2008/11/launchy212/ 很高兴这个小东东终于可以拿出来分享 之前也有一些其他项目的想法 做出了雏形 但进度很慢 很难继续下去 生活的琐碎事太多 用业余时间来维护一个凭兴趣做的项目很难 希望大家能喜欢 今天在屋里宅了一天 一天写了好几篇东西 佩服 可能相关2009-04-23 -- qt开发插件的郁闷2010-04-07 -- Launchy2.5 汉化和修改2009-04-12 -- HICON [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://bborn.cn/image/readimg.php?src=http%3A%2F%2Flh3.gouride.com%2F_jovmLNLVWVI%2FSeHsaUT0iwI%2FAAAAAAAAERk%2FE2pmRKGzFeo%2Fs800%2Ftwittery.png" title="twittery" class="alignnone" width="453" height="275" /><br />
今天发布了第一个twittery的release版本<br />
周中花了一个晚上的时间用google doc做了一个简单的网页<br />
<a href="http://twittery.sourceforge.net/">http://twittery.sourceforge.net/</a></p>
<p>twittery 是Launchy 的插件<br />
可以让你方便的通过Launchy发送twitter消息</p>
<p>使用很简单<br />
首先要在插件的设置窗口里输入你的twitter的用户名和密码<br />
然后在文本框里输入”twtter”, 找到twittery<br />
然后点击tab键<br />
再输入你想要说的话<br />
最后就是回车 等待你的消息发送成功</p>
<p>因为我现在的编译环境是vs2008和qt4.5<br />
所以我编译出来的插件<br />
以前的程序加载不成功<br />
所以我放出来的文件是包括了重新编译了的launchy的安装包<br />
同理 这个版本也不支持以前版本的插件<br />
这是个很郁闷的问题<br />
现在只能期望有朋友有vs2005和qt4.4环境<br />
能帮我重新编译一下 这样官方的版本也可以使用这个插件了</p>
<p>twittery中的twitter api是使用<a href="http://code.google.com/p/twitlib/">twitlib</a>的实现<br />
它也是基于qt的实现</p>
<p>twittery也是一个开源的项目,遵循GPL协议<br />
twittery的主页<br />
<a href="http://twittery.sourceforge.net/">http://twittery.sourceforge.net/</a><br />
请多点击右边的google广告支持 <img src='http://fangfangtu.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>关于launchy 请看这里<br />
<a href="http://bborn.cn/blog/2008/11/launchy212/">http://bborn.cn/blog/2008/11/launchy212/</a><br />
很高兴这个小东东终于可以拿出来分享<br />
之前也有一些其他项目的想法 做出了雏形<br />
但进度很慢 很难继续下去<br />
生活的琐碎事太多<br />
用业余时间来维护一个凭兴趣做的项目很难<br />
希望大家能喜欢</p>
<p>今天在屋里宅了一天<br />
一天写了好几篇东西<br />
佩服</p>
<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2009-04-23 -- <a href="http://fangfangtu.com/blog/2009/04/qt-plugin/" title="qt开发插件的郁闷">qt开发插件的郁闷</a></li><li>2010-04-07 -- <a href="http://fangfangtu.com/blog/2010/04/launchy25/" title="Launchy2.5 汉化和修改">Launchy2.5 汉化和修改</a></li><li>2009-04-12 -- <a href="http://fangfangtu.com/blog/2009/04/hicon-to-qpixmap/" title="HICON to QPixmap">HICON to QPixmap</a></li><li>2009-04-12 -- <a href="http://fangfangtu.com/blog/2009/04/night-uno/" title="夜-uno">夜-uno</a></li><li>2009-03-15 -- <a href="http://fangfangtu.com/blog/2009/03/qlistview/" title="有关QListView和QStringListModel的操作">有关QListView和QStringListModel的操作</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2009/04/twittery-first-release/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HICON to QPixmap</title>
		<link>http://fangfangtu.com/blog/2009/04/hicon-to-qpixmap/</link>
		<comments>http://fangfangtu.com/blog/2009/04/hicon-to-qpixmap/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 05:19:27 +0000</pubDate>
		<dc:creator>bborn</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[qt]]></category>

		<guid isPermaLink="false">http://bborn.cn/blog/?p=682</guid>
		<description><![CDATA[在windows下使用Qt的时候 有些时候需要将一个图标句柄HICON转换成QPixmap 在这里有一个解决方案 不过比较老了 http://www.methylblue.com/blog/hicon-to-qpixmap/ 没有测试过 实际上在Qt的源码中是有这样的代码的 在src/gui/image/qpixmap_win.cpp中 这个函数 convertHIconToPixmap() 貌似并没有导出 需要自己拷贝代码出来使用 这里有个问题 在Qt4.5中实现和以前貌似不一样 所以了 在新版本中编译以前的代码 取得的QPixmap是个黑色的色块 使用最新的实现就可以 这就是昨天折腾一晚上的发现 可能相关2009-04-23 -- qt开发插件的郁闷2009-04-12 -- twittery第一个release版本2009-04-12 -- 夜-uno2009-03-15 -- 有关QListView和QStringListModel的操作2009-03-14 -- 辛苦]]></description>
			<content:encoded><![CDATA[<p>在windows下使用Qt的时候<br />
有些时候需要将一个图标句柄HICON转换成QPixmap<br />
在这里有一个解决方案  不过比较老了<br />
<a href="http://www.methylblue.com/blog/hicon-to-qpixmap/">http://www.methylblue.com/blog/hicon-to-qpixmap/</a><br />
没有测试过</p>
<p>实际上在Qt的源码中是有这样的代码的<br />
在src/gui/image/qpixmap_win.cpp中<br />
这个函数 convertHIconToPixmap()<br />
貌似并没有导出 需要自己拷贝代码出来使用</p>
<p>这里有个问题<br />
在Qt4.5中实现和以前貌似不一样<br />
所以了<br />
在新版本中编译以前的代码<br />
取得的QPixmap是个黑色的色块<br />
使用最新的实现就可以</p>
<p>这就是昨天折腾一晚上的发现</p>
<h3  class="related_post_title">可能相关</h3><ul class="related_post"><li>2009-04-23 -- <a href="http://fangfangtu.com/blog/2009/04/qt-plugin/" title="qt开发插件的郁闷">qt开发插件的郁闷</a></li><li>2009-04-12 -- <a href="http://fangfangtu.com/blog/2009/04/twittery-first-release/" title="twittery第一个release版本">twittery第一个release版本</a></li><li>2009-04-12 -- <a href="http://fangfangtu.com/blog/2009/04/night-uno/" title="夜-uno">夜-uno</a></li><li>2009-03-15 -- <a href="http://fangfangtu.com/blog/2009/03/qlistview/" title="有关QListView和QStringListModel的操作">有关QListView和QStringListModel的操作</a></li><li>2009-03-14 -- <a href="http://fangfangtu.com/blog/2009/03/feel-tired/" title="辛苦">辛苦</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://fangfangtu.com/blog/2009/04/hicon-to-qpixmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

