<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5617895540532429977</id><updated>2012-02-16T20:25:16.864+08:00</updated><category term='linux'/><category term='android'/><category term='openmoko'/><category term='EFL'/><category term='0xlab'/><title type='text'>Hacking by Walkingice</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5617895540532429977.post-5116329726272493142</id><published>2011-09-14T17:43:00.000+08:00</published><updated>2011-09-14T17:48:14.942+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>tmux split window in current directory</title><content type='html'>I use tmux to instead of gnu-screen due to tmux supports vertical window splitting.&lt;br /&gt;&lt;br /&gt;There are many common question such as 'How to create a new window in the current directory'. Here are some simple how-to, inspired by tmux FAQ.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Preparing - set environment variable by PS1 in shell&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;  &lt;/ul&gt;add this line to your .bashrc&lt;br /&gt;&lt;blockquote&gt;PS1='$([ -n "$TMUX" ] &amp;amp;&amp;amp; tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;How it works?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #ffe599;"&gt;&lt;i&gt;$([ -n "$TMUX" ] &amp;amp;&amp;amp; tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)&lt;/i&gt;&lt;/div&gt;The previous half part makes the magic, &lt;b&gt;#I&lt;/b&gt; indicates the index of each displays. In display 1, it saves current directory (&lt;b&gt;$PWD&lt;/b&gt;) into environment variable &lt;b&gt;$TMUXPWD_1&lt;/b&gt;, corresponding to $TMUXPWD_2, $TMUXPWD_3 ...etc.&lt;br /&gt;&lt;br /&gt;Just type 'printenv |grep TMUXPWD' and you will know everything.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #ffe599;"&gt;&lt;i&gt;${debian_chroot:+($debian_chroot)}\u@\h:\w\$&lt;/i&gt;&lt;/div&gt;Well, this is my own prompt (such as &lt;b&gt;walkingice@my_laptop$&lt;/b&gt; ), you can keep your own settings by 'cat ~/.bashrc |grep PS1'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Create new window in current directory&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;  &lt;/ul&gt;Follow the common FAQ, add this line to your .tmux.conf&lt;br /&gt;&lt;blockquote&gt;bind-key c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'&lt;/blockquote&gt;&lt;b&gt;3. Split window in current directory&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;  &lt;/ul&gt;Since we did the magic to PS1, why don't we keep using it? Add these two lines to your .tmux.conf&lt;br /&gt;&lt;blockquote&gt;bind-key h run-shell 'tmux splitw -v "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'&lt;br /&gt;bind-key v run-shell 'tmux splitw -h "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'&lt;/blockquote&gt;Caution: I prefer &lt;b&gt;Ctrl-a h&lt;/b&gt; to &lt;b&gt;split horizontal window&lt;/b&gt;(splitw -v). In other words, when I click &lt;b&gt;Ctrl-a h&lt;/b&gt;, I am saying "Hey, give me a horizontal line". I think it make more sense than tmux original key binding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5617895540532429977-5116329726272493142?l=0xwalkingice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/5116329726272493142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://0xwalkingice.blogspot.com/2011/09/tmux-split-window-in-current-directory.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/5116329726272493142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/5116329726272493142'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/2011/09/tmux-split-window-in-current-directory.html' title='tmux split window in current directory'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5617895540532429977.post-2371900309062421280</id><published>2011-06-03T16:50:00.001+08:00</published><updated>2011-06-03T16:50:58.059+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>To change default window manager</title><content type='html'>This is a quick note for myself to avoid bother [&lt;a href="http://kanru.info/blog/"&gt;Kanru&lt;/a&gt;] again and again.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;span style="font-size: large;"&gt;Why&lt;/span&gt;&lt;/h2&gt;I use compiz in my Debian a lot. The default window manager in Gnome2 is metacity. I would not like to type this command once I reboot.&lt;br /&gt;$ compiz ccp --indirect-rendering --replace&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;span style="font-size: large;"&gt;How&lt;/span&gt;&lt;/h2&gt;Tell gnome to use compiz as default windowmanager &lt;br /&gt;&lt;ul&gt;&lt;li&gt;open gconf-editor, navigate to &lt;b&gt;/desktop/gnome/session/required_components&lt;/b&gt;&lt;/li&gt;&lt;li&gt;change value of windowmanager to &lt;b&gt;compiz&lt;/b&gt;&lt;/li&gt;&lt;li&gt;logout and login, here you go&lt;/li&gt;&lt;/ul&gt;If you want to specify some runtime parameters to compiz like me ( assign ccp --indirect-rendering), just to&lt;br /&gt;&lt;ul&gt;&lt;li&gt;edit &lt;b&gt;/usr/share/applications/compiz.desktop&lt;/b&gt;&lt;/li&gt;&lt;li&gt;change the value of Exec to &lt;b&gt;Exec=compiz ccp --indirect-rendering&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I have tried edit ~/.gnomerc but it does not work.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5617895540532429977-2371900309062421280?l=0xwalkingice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/2371900309062421280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://0xwalkingice.blogspot.com/2011/06/to-change-default-window-manager.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/2371900309062421280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/2371900309062421280'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/2011/06/to-change-default-window-manager.html' title='To change default window manager'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5617895540532429977.post-5807093410655244252</id><published>2010-10-06T11:40:00.001+08:00</published><updated>2010-10-14T12:22:55.551+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Ubuntu wifi connection randomly disconnect</title><content type='html'>I am using Ubuntu Linux 10.04 but had this annoying problem since Ubuntu 9.04. When I am at some place and use particular Access Point, the Wifi connection on my laptop randomly disconnect. Although I reboot laptop, reconnect to wifi, it still disconnect in less than one minute.&lt;br /&gt;&lt;br /&gt;Image that, you open browser and enter gmail, click first unread mail then you lose connection. That repeat 100 times in one hour. Gosh !&lt;br /&gt;&lt;br /&gt;Jserv told me the Wifi driver mode N is not so stable as my imagination. Follow his suggestion I turned off the N mode and it does not annoy me anymore. (at least now)&lt;br /&gt;&lt;br /&gt;Here is the workaround&lt;br /&gt;&lt;pre class="brush:bash"&gt;# unload iwlagn&lt;br /&gt;$ sudo rmmod iwlagn&lt;br /&gt;# load again with disable options&lt;br /&gt;$ sudo modprobe iwlagn 11n_disable50=1 11n_disable=1&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If it works, you can add it to /etc/modprobe.d. Once system modprobe this module, these options will be used.&lt;br /&gt;&lt;pre class="brush:bash"&gt;$ echo "options iwlagn 11n_disable50=1 11n_disable=1" &gt; /etc/modprobe.d/iwlagn.conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;There is another problem. If I suspend my laptop and put it into my backpack. Sometimes the hardware wifi switch will be turned off. If I resume the laptop while the wifi switch turned off, I can not turn it on anymore.&lt;br /&gt;&lt;br /&gt;You can try this command, it works for me.&lt;br /&gt;&lt;pre class="brush:bash"&gt;$ sudo rfkill block all&lt;br /&gt;$ sudo rfkill unblock all&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5617895540532429977-5807093410655244252?l=0xwalkingice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/5807093410655244252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://0xwalkingice.blogspot.com/2010/10/ubuntu-wifi-connection-randomly.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/5807093410655244252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/5807093410655244252'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/2010/10/ubuntu-wifi-connection-randomly.html' title='Ubuntu wifi connection randomly disconnect'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5617895540532429977.post-9194042302664615243</id><published>2010-09-04T19:23:00.001+08:00</published><updated>2010-09-04T20:14:21.778+08:00</updated><title type='text'>NotifyOSD Dispute</title><content type='html'>You might googled this article with the same reason I had. Days ago I updated my Ubuntu9.04 to Ubuntu10.04 and really enjoy it. There are sort of things annoy me - the notification at the corner displays TOO LONG.&lt;br /&gt;&lt;br /&gt;To put the question simply: You&amp;nbsp; cannot change the displaying period of notification.&lt;br /&gt;&lt;br /&gt;I use Rhythmbox to listen music, the new version of Rhythmbox at Ubuntu10.04 is sweet because it displays a notification once it finish playing a song and starting next one. This feature is very like Amarok just did, I like it excepts the displaying period is too long.&lt;br /&gt;&lt;br /&gt;Most of guys like to coding and listening music at the same time. When the notification coming, you say "Ok, I got it" and back to your original work. 10 seconds passed then the notification disappears, and grab your attention AGAIN : "Hey, I am leaving, bye bye"&lt;br /&gt;&lt;br /&gt;Gosh!&lt;br /&gt;&lt;br /&gt;It is very like SMS and Phone Call. When you get a SMS message, your mobile just beep for one second. But phone calling keeps shouting until 30 seconds pass or pick up your phone.&lt;br /&gt;&lt;br /&gt;Oh, you cannot even close the notification by clicking it.&lt;br /&gt;&lt;br /&gt;According to my experience of using Amarok, a user can tweak the period to fit his own requirement. But I cannot find any option in Rhythmbox. I guess the main developers of Rhythmbox are too busy to do that, send a patch to them might be a good idea.&lt;br /&gt;&lt;br /&gt;Building Rhythmbox is pretty easy, just checkout the source code then type&lt;br /&gt;&lt;ul&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;./autogen.sh --enable-libnotify --prefix=/tmp/mybuild # I want to install to /tmp/mybuild&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;make&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;make install &lt;/div&gt;&lt;/ul&gt;Actually, the notification mechanism was implemented by plug-in. See &lt;i&gt;rhythmbox/plugins/status-icon/rb-status-icon-plugin.c&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;static void  do_notify (RBStatusIconPlugin *plugin,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; guint timeout,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char *primary,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char *secondary,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GdkPixbuf *pixbuf,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gboolean show_action)&amp;nbsp;&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .....&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; notify_notification_set_timeout (plugin-&amp;gt;priv-&amp;gt;notification, timeout);&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .......&amp;nbsp;&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;} &lt;/ul&gt;The function makes the notification and it also set timeout. But, whatever I did to the variables timeout, the notification always displays 10 seconds.&lt;br /&gt;&lt;br /&gt;I doubt there is a bug at libnotify so I checkout the source. the function &lt;b&gt;notify_notification_show&lt;/b&gt; at &lt;i&gt;libnotify/notification.c&lt;/i&gt; did send an notification with expect timeout to dbus. The command &lt;b&gt;notify-send&lt;/b&gt; did as well. Actually, even if you write a small script to send notification request with expect timeout to dbus, you still got 10 seconds notification.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#!/usr/bin/env python &lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;import dbus&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;item = ('org.freedesktop.Notifications')&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;path = ('/org/freedesktop/Notifications')&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;interface = ('org.freedesktop.Notifications')&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;time = 2000 # 2second&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;bus = dbus.SessionBus()&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;notif = bus.get_object(item, path)&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;notify = dbus.Interface(notif, interface)&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;notify.Notify('blah', 0, '', 'Ouch', '2 seconds,please', '', '', time) &lt;/ul&gt;&lt;br /&gt;Rhythmbox is ok, libnotify is ok. What thing is go wrong? Take a look of the source code of NotifyOSD. See &lt;i&gt;notify-osd-0.9.29/src/default.c&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/* these values are interpreted as milliseconds-measurements and do comply to &amp;nbsp;* the visual guide for jaunty-notifications */&amp;nbsp;&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#define DEFAULT_FADE_IN_TIMEOUT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 250&amp;nbsp;&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#define DEFAULT_FADE_OUT_TIMEOUT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#define DEFAULT_ON_SCREEN_TIMEOUT&amp;nbsp;&amp;nbsp;&amp;nbsp; 10000&amp;nbsp;&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;......&amp;nbsp;&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property_on_screen_timeout = g_param_spec_int (&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "on-screen-timeout",&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "on-screen-timeout",&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Timeout for bubble on screen in milliseconds",&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10000,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFAULT_ON_SCREEN_TIMEOUT,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; G_PARAM_CONSTRUCT |&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; G_PARAM_READWRITE |&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; G_PARAM_STATIC_STRINGS);&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_object_class_install_property (gobject_class,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PROP_ON_SCREEN_TIMEOUT,&lt;/ul&gt;&lt;ul style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property_on_screen_timeout);&lt;/ul&gt;&lt;ul&gt;&amp;nbsp;&lt;/ul&gt;&lt;br /&gt;And then see function stack_notify_handler at &lt;i&gt;stack.c&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;if (bubble_get_id (bubble) == FORCED_SHUTDOWN_THRESHOLD)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_timeout_add (defaults_get_on_screen_timeout (self-&amp;gt;defaults),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _arm_forced_quit,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (gpointer) self);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As you see, NotifyOSD defines a default on-screen-time to 10 seconds and use it at handling notification. But Why? take a look of this [&lt;a href="https://wiki.ubuntu.com/NotifyOSD#org.freedesktop.Notifications.Notify"&gt;design specification for Notify OSD&lt;/a&gt;]. It said "All other hints, and all other parameters (including &lt;tt class="backtick"&gt;expire_timeout&lt;/tt&gt;) should be ignored."&lt;br /&gt;&lt;br /&gt;Well, there is a huge discussion at [&lt;a href="https://bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/390508"&gt;Launchpad Bug Tracker (#390508)&lt;/a&gt;]. I read the whole thread. Ouch, thats pretty tough for me, a non-native English speaker. (But I still did, now you know how much I care about this issue.) Matthew Paul Thomas [&lt;a href="https://bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/390508/comments/29"&gt;said&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the timeout parameter is for application developers, not end users. We  think we can set more consistent and reliable durations for users  automatically than diverse application developers ever could manually.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;That really pissed off many developers :-P.&lt;br /&gt;&lt;br /&gt;First, why 10 seconds? Why not 9.5 second, 10.5 second or 3.14159265358 seconds? Does they really did a research and find THE BEST NUMBER?(I do believe it should be 42) We don't know, we just got the answer: 10.&lt;br /&gt;&lt;br /&gt;Ok, 10 is fine. Displays a notification in 10 seconds by default is fine. But why can't an end user change 10 seconds to another number? Is that a bad idea? That is not for developer, that is for end user.&lt;br /&gt;&lt;br /&gt;Those developers went to there and complained because they really care about what they are using. Many end users don't complain because they don't know how to complain but not they think the design is good. Every developer who ever designed a UI agrees that making a good interface is so hard therefore making mistake is just so easy.&lt;br /&gt;Providing a good default settings and a option to customize is always a better way.&lt;br /&gt;&lt;br /&gt;Unfortunately, Ubuntu has its right to set period to any seconds it want because that is Open Source. I agree but disappointed. John Lee mentioned [&lt;a href="http://asleepfromday.wordpress.com/2010/09/03/notification-daemon-instead-of-notify-osd/"&gt;How to use notification-daemon to instead of notify osd&lt;/a&gt;], I will replace it and say bye bye to NotifyOSD. Moreover, you can use [&lt;a href="http://www.webupd8.org/2010/07/patched-notifyosd-updates-option-to.html"&gt;patched NotifyOSD&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5617895540532429977-9194042302664615243?l=0xwalkingice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/9194042302664615243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://0xwalkingice.blogspot.com/2010/09/notifyosd-dispute.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/9194042302664615243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/9194042302664615243'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/2010/09/notifyosd-dispute.html' title='NotifyOSD Dispute'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5617895540532429977.post-8425746281651810750</id><published>2010-06-10T23:57:00.000+08:00</published><updated>2010-08-29T01:37:44.716+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='0xlab'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>MotionEvent on HTC Hero</title><content type='html'>I have both of HTC Hero and Nexus One. Thanks God and HTC, finally Hero users got the Android Eclair update via OTA.&lt;br /&gt;&lt;br /&gt;Recently I found a weird behavior on HTC Hero and differs from my Nexus One.&lt;br /&gt;&lt;br /&gt;Here is the testing code&lt;br /&gt;&lt;div class="mycode"&gt;&lt;br /&gt;public boolean &lt;span style="color: rgb(0, 153, 0);"&gt;onTouchEvent&lt;/span&gt;(MotionEvent event) {&lt;br /&gt;    long now = android.os.SystemClock.uptimeMillis();&lt;br /&gt;        android.util.Log.i(&lt;span style="color: rgb(204, 0, 0);"&gt;"Ouch"&lt;/span&gt;, &lt;span style="color: rgb(204, 0, 0);"&gt;"keep pressing:"&lt;/span&gt; + (&lt;span style="color: rgb(51, 51, 255);"&gt;now - event.getDownTime()&lt;/span&gt;));&lt;br /&gt;    return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;I just keep pressing the screen and see the log output which tells the pressing time in millisecond.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;blockquote&gt;&lt;strong&gt;Nexus One (Eclair)&lt;/strong&gt;&lt;br /&gt;&lt;em style="color: rgb(153, 153, 153);"&gt;(just press and do not drag)&lt;/em&gt;&lt;br /&gt;I/Ouch    (11979): keep pressing:2&lt;br /&gt;I/Ouch    (11979): keep pressing:14&lt;br /&gt;I/Ouch    (11979): keep pressing:43&lt;br /&gt;I/Ouch    (11979): keep pressing:71&lt;br /&gt;I/Ouch    (11979): keep pressing:98&lt;br /&gt;I/Ouch    (11979): keep pressing:127&lt;br /&gt;I/Ouch    (11979): keep pressing:154&lt;br /&gt;I/Ouch    (11979): keep pressing:189&lt;br /&gt;I/Ouch    (11979): keep pressing:214&lt;br /&gt;I/Ouch    (11979): keep pressing:238&lt;br /&gt;I/Ouch    (11979): keep pressing:265&lt;br /&gt;I/Ouch    (11979): keep pressing:294&lt;br /&gt;I/Ouch    (11979): keep pressing:324&lt;br /&gt;I/Ouch    (11979): keep pressing:351&lt;br /&gt;I/Ouch    (11979): keep pressing:380&lt;br /&gt;I/Ouch    (11979): keep pressing:405&lt;br /&gt;&lt;/blockquote&gt;I got 16 events in 0.4 seconds, that is well known event "Touch Event Flood".&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;blockquote&gt;&lt;strong&gt;HTC Hero (Eclair)&lt;/strong&gt;&lt;br /&gt;&lt;em style="color: rgb(153, 153, 153);"&gt;(just press, I do not drag)&lt;/em&gt;&lt;br /&gt;W/Rosie   (  152): mAddHtcWidgetByOtherActivity = false, mIsOpenSlideWhenLeaveLaunch = true&lt;br /&gt;I/Ouch    ( 2149): keep pressing:4&lt;br /&gt;I/Ouch    ( 2149): keep pressing:17&lt;br /&gt;I/Ouch    ( 2149): keep pressing:26&lt;br /&gt;I/Ouch    ( 2149): keep pressing:62&lt;br /&gt;I/Ouch    ( 2149): keep pressing:245&lt;br /&gt;I/Ouch    ( 2149): keep pressing:421&lt;br /&gt;I/Ouch    ( 2149): keep pressing:817&lt;br /&gt;I/Ouch    ( 2149): keep pressing:1671&lt;br /&gt;D/dalvikvm(  528): GC freed 1174 objects / 73000 bytes in 139ms&lt;br /&gt;&lt;em style="color: rgb(153, 153, 153);"&gt;(8 seconds left, I start moving my finger)&lt;/em&gt;&lt;br /&gt;I/Ouch    ( 2149): keep pressing:8372&lt;br /&gt;I/Ouch    ( 2149): keep pressing:8697&lt;br /&gt;I/Ouch    ( 2149): keep pressing:8743&lt;br /&gt;I/Ouch    ( 2149): keep pressing:8752&lt;br /&gt;D/dalvikvm(  135): GC freed 211 objects / 10464 bytes in 241ms&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In the first 1.6 seconds, I got 8 events. I still kept pressing the screen untle 8 seconds left. I started dragging and then got touch event as I expects.&lt;br /&gt;&lt;br /&gt;I guess Sense-UI of HTC Hero did some change to deal with touch event flood. It should be good thing but I guess that kicks someone's ass.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5617895540532429977-8425746281651810750?l=0xwalkingice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/8425746281651810750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://0xwalkingice.blogspot.com/2010/06/motionevent-on-htc-hero.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/8425746281651810750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/8425746281651810750'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/2010/06/motionevent-on-htc-hero.html' title='MotionEvent on HTC Hero'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5617895540532429977.post-5395625041727445940</id><published>2010-03-30T13:57:00.001+08:00</published><updated>2011-07-13T16:58:50.955+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='0xlab'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Javadoc at Android</title><content type='html'>&lt;div&gt;* This article also post to 0xlab planet *&lt;/div&gt;&lt;div&gt;&lt;div&gt;I have a tiny, useless brain with slow frequency, 128 bytes L1 cache and 256K Ram. Therefore, I cannot remember everything while I am doing Java programming.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Although you are not a nut like me, you might still need Java API documentation. Well, we could read the [&lt;a href="http://developer.android.com/intl/fr/reference/android/package-summary.html"&gt;online version&lt;/a&gt;], thats cool.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But what if you are a poor guy cannot pay for network. You still have to work on the Bus, at Starbucks coffee, at toilet or on the bed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Luckily, you could generate offline documentation by command&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;$make docs&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But I do not like droiddoc. I cannot explain why I dislike it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I like the original javadoc style, it is like although I had PS but I still love FF3 on FC. (bad example I know)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I read article of [&lt;a href="http://www.androidjavadoc.com/"&gt;androidjavadoc&lt;/a&gt;] and prepared this [&lt;a href="http://0xlab.org/%7Ewalkingice/Create-original-javadoc.patch"&gt;patch&lt;/a&gt;], you could generate your own old style offline java documentation.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;From bfe51b44ee6f6c1a989d34c96f9b0ea457731d80 Mon Sep 17 00:00:00 2001&lt;br /&gt;From: Julian Chu &lt;/span&gt;&lt;walkingice@0xlab.org&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;br /&gt;Date: Wed, 26 Aug 2009 12:19:36 +0800&lt;br /&gt;Subject: [PATCH] Create original javadoc&lt;br /&gt;&lt;br /&gt;Apply this patch and type in&lt;br /&gt;$make docs&lt;br /&gt;---&lt;br /&gt;core/droiddoc.mk | 12 ++++--------&lt;br /&gt;1 files changed, 4 insertions(+), 8 deletions(-)&lt;br /&gt;&lt;br /&gt;diff --git a/core/droiddoc.mk b/core/droiddoc.mk&lt;br /&gt;index 30bd918..af4121e 100644&lt;br /&gt;--- a/core/droiddoc.mk&lt;br /&gt;+++ b/core/droiddoc.mk&lt;br /&gt;@@ -159,17 +159,13 @@ $(full_target): $(full_src_files) $(droiddoc_templates) $(droiddoc) $(html_dir_f&lt;br /&gt;-J-Xmx768m \&lt;br /&gt;-J-Djava.library.path=$(HOST_OUT_SHARED_LIBRARIES) \&lt;br /&gt;$(PRIVATE_PROFILING_OPTIONS) \&lt;br /&gt;- -quiet \&lt;br /&gt;- -doclet DroidDoc \&lt;br /&gt;- -docletpath $(PRIVATE_DOCLETPATH) \&lt;br /&gt;- -templatedir $(PRIVATE_CUSTOM_TEMPLATE_DIR) \&lt;br /&gt;- -templatedir $(PRIVATE_TEMPLATE_DIR) \&lt;br /&gt;- $(PRIVATE_DROIDDOC_HTML_DIR) \&lt;br /&gt;+  -overview $(TOP)/frameworks/base/core/java/overview.html \&lt;br /&gt;+  -splitindex \&lt;br /&gt;+  -use \&lt;br /&gt;+  -package \&lt;br /&gt;$(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \&lt;br /&gt;-sourcepath $(PRIVATE_SOURCE_PATH)$(addprefix :,$(PRIVATE_CLASSPATH)) \&lt;br /&gt;-d $(PRIVATE_OUT_DIR) \&lt;br /&gt;- $(PRIVATE_CURRENT_BUILD) $(PRIVATE_CURRENT_TIME) \&lt;br /&gt;- $(PRIVATE_DROIDDOC_OPTIONS) \&lt;br /&gt;&amp;amp;&amp;amp; rm -rf $(PRIVATE_OUT_ASSET_DIR) \&lt;br /&gt;&amp;amp;&amp;amp; rm -rf $(PRIVATE_OUT_CUSTOM_ASSET_DIR) \&lt;br /&gt;&amp;amp;&amp;amp; mkdir -p $(PRIVATE_OUT_ASSET_DIR) \&lt;br /&gt;--&lt;br /&gt;1.6.3.3&lt;/span&gt;&lt;/walkingice@0xlab.org&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;The generating documentation will be put under out/common/host/….Once you finish it, you could revert the previous patch and pretend nothing happened&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;$ cd /WHERE/TO/ANDROID/build/&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;$ git reset –-hard HEAD^&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;ps. I tried it on Eclair, it works.&lt;/div&gt;&lt;div&gt;ps2. you could download [&lt;a href="http://code.google.com/p/0xdroid/downloads/list"&gt;Eclair offline sdk doc from 0xdroid webpage&lt;/a&gt;]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;Update: you can tweak the stylesheet.css to make it looks better&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-body { background-color: #FFFFFF; color:#000000 }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;+body { background-color: #FFFFFF; color:#000000; margin : auto; max-width: 1024px; margin-top: 30px;}&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5617895540532429977-5395625041727445940?l=0xwalkingice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/5395625041727445940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://0xwalkingice.blogspot.com/2010/03/javadoc-at-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/5395625041727445940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/5395625041727445940'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/2010/03/javadoc-at-android.html' title='Javadoc at Android'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5617895540532429977.post-8619035838869106399</id><published>2008-11-30T05:47:00.000+08:00</published><updated>2010-08-29T01:37:44.744+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EFL'/><category scheme='http://www.blogger.com/atom/ns#' term='0xlab'/><category scheme='http://www.blogger.com/atom/ns#' term='openmoko'/><title type='text'>Starting at EFL</title><content type='html'>Well, I want to write something about EFL first.&lt;br /&gt;&lt;br /&gt;[&lt;a href="http://en.wikipedia.org/wiki/Enlightenment_Foundation_Libraries"&gt;EFL&lt;/a&gt;], Enlightenment Foundation Libraries, is a GUI libraries which let you draw something on X. The windows manager Enlightenment is written by EFL. The position of EFL in Enlightenment is like GTK for Gnome or Qtopia for KDE.&lt;br /&gt;&lt;br /&gt;The maintainer make huge progress in EFL therefore it changes very fast.&lt;br /&gt;Before he make a release of EFL, we can say that EFL changes EVERYDAY.&lt;br /&gt;&lt;br /&gt;Rasterman, one maintainer of EFL, provided a script (&lt;a href="http://www.rasterman.com/files/get_e.sh"&gt;get_e.sh&lt;/a&gt;) that you may build EFL easily.&lt;br /&gt;&lt;br /&gt;However, for the reason that getting more stable, Openmoko only use svn revision 36882 of EFL before it release.&lt;br /&gt;&lt;br /&gt;You can use this script to checkout out the source code and build it with revision 36882.&lt;br /&gt;&lt;div class="mycode"&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;sudo echo "Get Root permission" || exit&lt;br /&gt;list="eina eet evas ecore e_dbus efreet embryo edje etk edje_editor edje_viewer"&lt;br /&gt;&lt;br /&gt;for l in $list;do&lt;br /&gt;svn co -r 36882 http://svn.enlightenment.org/svn/e/trunk/$l&lt;br /&gt;cd $l&lt;br /&gt;./autogen.sh || exit&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;cd ..&lt;br /&gt;done&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5617895540532429977-8619035838869106399?l=0xwalkingice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/8619035838869106399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://0xwalkingice.blogspot.com/2008/11/starting-at-efl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/8619035838869106399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/8619035838869106399'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/2008/11/starting-at-efl.html' title='Starting at EFL'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5617895540532429977.post-1595057746794179137</id><published>2008-11-30T05:37:00.000+08:00</published><updated>2010-08-29T01:37:44.758+08:00</updated><title type='text'>Hello Blogger</title><content type='html'>Hi, this is the first article in this blog. I am Julian Chu, a Chinese native speaker and live in Taiwan.&lt;br /&gt;&lt;br /&gt;I am going to use this blog to write some boring and sleepy technical stuffs. Recordes what I learned and hopes it could help me to improve my poor English.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5617895540532429977-1595057746794179137?l=0xwalkingice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://0xwalkingice.blogspot.com/feeds/1595057746794179137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://0xwalkingice.blogspot.com/2008/11/hello-blogger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/1595057746794179137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5617895540532429977/posts/default/1595057746794179137'/><link rel='alternate' type='text/html' href='http://0xwalkingice.blogspot.com/2008/11/hello-blogger.html' title='Hello Blogger'/><author><name>walkingice</name><uri>http://www.blogger.com/profile/18063847457218562558</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_tBgWxrFmN1c/SfKywq_jwbI/AAAAAAAACZE/D7y4nYR7CvE/S220/walkingice-rect.JPG'/></author><thr:total>0</thr:total></entry></feed>
