A quick comparison between Readability and Pocket

To be honest, I'm not really a hard-core tech. fashion follower. That's why I heard of Pocket and Readability just a few days ago. I downloaded both app to my Motorola Defy (Cyanogen Mod 9 nightly buids) and registered accounts. Then I used them for days.

Feeling? See below:

Adding entries: Pocket > Readability.
Both Readability and Pocket support adding post from Browser. Pocket uses an snippet of  Javascript code, which can be saved to bookmark list. Readability recommends I install a plug-in, which supports Safari, Firefox and Chrome. By the way, it looks like there's no plug-in for IE. Does Readability team decide to remove the support for IE? Kindly correct me if I'm wrong.

I personally like Pocket's way a little bit more. Installing a plug-in is not always working when user need to use a shared computer (like me). Pocket's solution is simpler, and working for almost all browsers.

In my Android phone (Motorola Defy), the story is a little bit different. Both two apps provides "share to ..." for sharing. The difference is the UI response: Pocket is always pops an quick on-screen message fast, while Readability's sharing button has no response until several seconds after. Another problem is Readability sometimes pops up a "adding article fails" message so I have to share it again, while Pocket never fails me.

NOTE: As a man lives in Great Fire Wall, I can't confirm if Readability should be responsible for the last problem.

Sync: Pocket >>> Readability.
I'll say this is the most important reason I like Pocket. In the environment of using my China Unicom ADSL connection, a new post can be seen immediately in Pocket. Meanwhile, I have to wait for a while (probably 2 - 3 minutes) to see it appear in Readability reading list.

Frankly speaking, this issue may not be a deal break: why do I want to see an entry in list when I has already decided to read it later?

I think it's just because of perfection. Who knows?

Page re-formatting: Readability >> Pocket.
Readability wins. With multiple reading theme and clear font settings, the reading experience is more comfortable. Meanwhile, Pocket only allows switching fonts by clicking the same button for several times, which is not intuitive to me.

Add-on for Chinese. One difference between Readability and Pocket for Chinese character is Readability does not use Italic fonts for Chinese characters, while Pocket uses it. Though I personally believe this is a bug, I must say thanks to Readability. This is because Chinese does not use italic at all. As for Pocket, the use of italic fonts makes Chinese articles looks weird.

Night reading mode: Readability >> Pocket.
In one word, I hate the night reading theme from Pocket! There's only one pure black theme for Pocket and it looks ugly. Readability is much better: it offers five themes (wheat, black, light blue, etc.) to allow me choose proper theme for different environments. The most remarkable point is Readability uses a dark grey background for night reading theme, instead of pure black. That makes my eyes much comfortable. My taste, at least.

Subscribing: Readability > Pocket. (You may have different point of view)
Readability offers a subscribing mode, which charges us a small amount to support article writers, $5/month. The 70% of the money will go to the article writers. I didn't see equivalent approaches in Pocket.

Some people may not like it. As for me, I'm fine because I'm always happy to support my favorite writers. So that depends on you. At least, you may choose to decline this without losing any features from Readability.

App memory usage: Both are bad :(.
Well, when saying memory usage, I mean Android. Both apps uses 35+MB memory, which eats a huge block of memory. When I keep both open, my poor phone becomes slow because memory is swapping in and out.

Conclusion? Not yet.

I want to try more, as I'm still new to both services. Moreover, I don't know if I should recommend you guys use them in phone. I personally prefer Evernote if I want to keep an article. If I want to read an article later (and in a cleaner format), I like computer. Anyway, let me try it a little bit more before making a conclusion. I'll keep you updated.


A quick script to convert your BASH environment settings to environment.plist

When a new Linux guy who switchs to Mac, the first problem for them to use environment.plist. Here's a simple example to convert environment settings to environment.plist. This is especially true when the project you work with uses a lot of environment settings in your XCode project file.

So I created the script below to help me sort it out. It is not a complete script to handle all special cases like differences between ${} and $ token in BASH, but already good enough in my environment.

Try modify code yourself and enjoy hacking!

#!/usr/bin/env python
import sys
import re

keyval_pat = re.compile(r"[ ]*export ([^=]*)=(.*)")
fd = open(sys.argv[1])

print(r'<?xml version="1.0" encoding="utf-8">')
    "-//Apple DTD PLIST 1.0//EN"
print('<plist version="1.0">')
for each_line in fd:
    m = keyval_pat.search(each_line)
    if m is None:
    key = m.group(1)
    value = m.group(2)
    print("<key>%s</key><string>%s</string>" % (key, value))


DummyDigit, Reloaded

It has been a long time since my last blog post was out. Sorry for keeping silent for such a long time.

There were so many things happened from 2010 to 2011. Quite a bit. My girlfriend broke up with me. I dropped my job in US and moved back to Beijing. I broke up with my girlfriend (nah you know the difference, buddy). I lost my job (the whole team was cancelled) and got the second offer to went back to US. I found my new love and decided to stay. I got a second job and declined the offer.

Crazy, huh?

Anyway, just like everyone says, thing always becomes better. Though I'm really missing my friends in Washington, I decided to stay in Beijing with my girl for a while. Meanwhile, it's also the time to make this Blog active again.

I'm back, my friends.











TaggyTODO:工作模型(三) 任务分类





  • 概念单一不会使用户养成不同的使用习惯。假定我同时提供标题字符串搜索和tag,就可能出现两个用户一个习惯用tag而另一个习惯搜索标题的情况。如果他们两人共享任务列表,则合并后的task就无法满足任何一个人的需要。
  • 基于tag查找的方法进行优化的方法简单。单纯字符串搜索就可能得动用索引结构之类的大家伙了。相比之下,我更希望我的软件能尽量小一点。

First Release: GoTask is renamed as TaggyTODO!

OK. So I finally pushed the first bunch of code for GoTask to Google Code. It's still incomplete, which can only run some basic unit tests, but I'll update in the new year. -- New year, new start, right? :)

Also, I finally found a name for the project: TaggyTODO. I have to change the name because I found the name GoTask has been used in another project, a library for Game development. Hope the name is not used again.

If you are interested in it, check it out from http://code.google.com/p/taggytodo.


ConsoleKit, access denied and a see-it-once bug

    I just noticed an interesting bug when I upgraded my ArchLinux last Sunday.  Every time when I log on my Openbox desktop, I found my NetworkManager applet icon cannot be shown on the system tray. When I invoke nm-applet from comman line, I got an error like below:

** (nm-applet:14122): WARNING **:   applet_dbus_manager_start_service(): 
Could not acquire the NetworkManagerUserSettings service.
  Message: 'Connection ":1.21" is not allowed to own the service 
"org.freedesktop.NetworkManagerUserSettings" due to security policies in the 
configuration file'
The most interesting thing is: the issue only happens *once*. When I log out and log in again, everything looks fine.

Obviously it's not a hardware issue. Since it only happens after upgrading, I decided to have a check on udev configuration files and finally got something new:

<policy at_console="true">
   <allow own="org.freedesktop.NetworkManagerUserSettings"/>
   <allow send_destination="org.freedesktop.NetworkManagerUserSettings"
   <allow send_destination="org.freedesktop.NetworkManagerUserSettings" send_interface="org.freedesktop.NetworkManagerSettings.Connection"/>

This is new to me. I know that the traditional way is to use network group to define who can access network configuration. I also got some suggestions from *here* that I should add to make it back to old behavior.

But wait -- is it really the root cause? If that is the case, why it works when I log on twice?

After some studies I noticed that the settings above are used by ConsoleKit. Meanwhile, I also found that there should be a daemon, /usr/sbin/console-kit-daemon, which will assign an XDG_SESSION_COOKIE environment variable to every active logon session so it can determine who is using the current console. This is important for nm-applet to determine who should be assigned the access to read network settings.

Look -- the key is here. I didn't see XDG_SESSION_COOKIE environment variable when I log on system for the first time! However, I'm able to see the setting from the second logon. It seems the server was not there but was then invoked after first session, but NO DOCUMENT says that console-kit-daemon can be automatically started!

So the final fix is rather simple: I opened my /etc/rc.local file and added two lines:
That will force starting a console-kit-daemon service when system starts up. I rebooted the machine and everything works then.

Also, it just solve another see-it-once issue: my PCManFM file manager always give me an error when I'm trying to mount any USB flash disk, with a message like "send message rejected". This is also a see-it-once issue on my first logon session. After applying the fix (or workaround? Who knows) above, it also disappeared.

So my friend, if you are also experiencing the same issue, try that. Good luck.




a) 最近工作实在太忙,脱不开身。
b) 最近是人生一个重大转折,不可不上心。
c) Gotask可能要改名。
d) 光说不练,假把式。


另外,Gotask使用的开发语言是Python(>= 2.5),暂时没有做C扩展的方案。目前的计划是在数据库和查询的部分实现Python2和Python3双兼容,UI部分第一个实现应当会基于GTK+。