PyAWS 0.3.0 released

Development, Web May 6th, 2008

After 6 months, PyAWS 0.3.0 is eventually released. You can check out the tar ball here.

I almost abandoned this project as I found the XSLT approach is more appealing: ideal for AJAX application and easy to integrate via simplejson in the server side. Furthermore, I joined Microsoft, moved to Canada, and had less spare time to work on less interested hobby work. The last straw is the unexpected complicity of the the BIG FAT refactory.

Until recently, I got the email from one PyAWS user, he reported a bug on unexpected result of ListLookup operation. It is so good to hear from some users that this library still benefits somebody in the world. So I picked it up, completed the refactory and released it today. The library still in active development, the code style stinks, the document sucks and most of all, testing is lacking — I would explain it for a little bit here.

I am a big fan of TDD personally, and we have respected testing troops to help building our products in MSFT as well. However, the complexity of PyAWS is far beyond my capacity: there are tens of operations and twenties of response groups, and response groups may combine, that make it extremely difficult to cover all the paths. To make it worse, the AWS is dynamic, there is no guarantee that the consecutive queries would return the same result. I may consider automation to facilitate the unit tests. If you have better ideas, please leave a comment here.

AideRSS relieves the pain, fails to cure

Web April 29th, 2008

AideRSS logoAideRSS aims to resolve a problem, so called “information overload”, one of the typical symptoms in 2.0 era is we are overwhelmed by the piled thousands of unread posts in Google Reader and it so hard to catch up the pace of the rest of the world. AideRSS ranks the posts to Good, Great and Best categories based on its PostRank. This approach moves one step forward to relieve the pain, but still does not to resolve the problem.

PostRank measures the attention, not the value
Though the algorithm of PostRank is not disclosed as the mysterious PageRank, from the promotion voucher and personal observation, the PostRank is determined by the comments, reference and social bookmarking. In another word, a provocative flaming post may invite more attention, and achieves a higher PostRank then a plain HOWTO, though the latter is more valuable imho.

PostRank reflects the group wisdom, not the personal choice
I once read digg’s program channel, then moved on to programming@reddit because the latter is more programmer-oriented and just meets my flavor. Once the community grows big, the voice from the majority dwarf the “long tail” which the minority audience care most. The same dilemma also applies to the PostRank.

PostRank is too humble
There is no evidence, still my wild guess; the PostRank is feed-based, not internet-wise as PageRank. This assumption is quite reasonable: the global PostRank is too expensive for a startup company; the global PostRank is too provocative to the bloggers, how come the post in Gizmodo ends up lower than the alternative Engadget? The humbleness renders the sorting across feeds less useful.

The next step towards perfection
To address the above issues, the PostRank needs to be personalized. Let the user to define what is Good, Great, Best based on his/her historic behavior; check the influence from the public using the popularity contest score; discover the similar minority for sharing and referring.

A hybrid Bayesian classifier case + Web 2.0 community.

Why I hate paid reviews

Web April 28th, 2008

As a blogger, we all dream one day we can buy a new car out of the revenue from our websites. At least your dear wife/husband would not regard you totally wasting time on the stupid blogging. But life is not that easy, Google AdSense sucks as most of advertisement network; paid text link would hurt SEO, and eventually kill your revenue in the long run. Thanks god, some generous gentlemen would pay me to write a review, seems they do know what I am really good at.

This just happens inside the blogosphere of China, thanks to Feedsky, the largest Chinese feed management provider(BTW, FeedBurner is GFWed), I read quite a lot about new laptops from Asus and HP. The potential audience is reached, but may have the opposite effect. Because –
I hate paid reviews.

Paid reviews are fake, paid reviewers are liars

I really doubt how many reviewers would buy that laptop, use it for several week, and then write a review for only $20. How come you spread word-of-the-mouth without real experience? You are just compromising the trust between you and your readers.

Stop poisoning my feed

Let’s assume some reviewers take it very seriously, salute to you, but do I care about the product or service you are reviewing for? The paid reviews are nothing but the noise in the subscription. We have been fighting email spam, comment spam and traceback spam for a long time, now we may need another Bayesian classifier to filter the post spam. What is the hell?

Do not write paid reviews, something just should not be traded.

Enhance Facebook Notes with Greasemonkey

Web April 27th, 2008

The UI of Write a New Note of Facebook is quite straightforward and … shabby:

The UI of Write a New Note in Facebook


If you happen to use Firefox, this userscript would make Facebook’s notes suck less.

Screenshot

The UI of Write a New Note in Facebook


Requirement

Usage
Exactly the same as WordPress’s quicktags, — no wonder, the core functionality is a port from WordPress’s quicktags.js:

  • You may click to button to start a tag, type some words, then click button again to close the tag.
  • Select the words, and click the button to surround it with the corresponding tag.

License
This piece of script is released under the GNU General Public License as WordPress, a compatible license would make my life much easier.

Development
The development is a little bumpy than my expectation. The biggest obstacle in the way is the namespace in Greasemonky is not consistent to the general DOM model. When the page is loaded, GM takes control, we may manipulate the DOM nodes using various ways. When it is done, all the object in GM’s anonymous global namespace runs out of the scope, and they are garbage-collected.

For every rule, there is an exception: the closure as documented in the bible. The anonymous function would create a closure that wraps a function in the GM’s namespace. However this does not work for us since we need to maintain several records to bookkeeping the status. So eventually we have to inject the scripts and objects into the host. Here is a tip to inject the functions, but for the Javascript objects, we have to manually do the dirty work, error-prone and tedious. If you have a better idea to access the objects that resident in the GM namespace, please leave a comment here.

Are you naked today?

Web April 9th, 2008

Happy naked day.

To know more about why styles are disabled on this website visit the

Annual CSS Naked Day
website for more information.