Saturday, December 11, 2010

Set up a Maven Repository Manager

My basic requirements are
  1. rich and intuitive user interface
  2. ease of setting network proxy
  3. ease of deploying 3rd party and internal artifacts
I got a chance to try several different products and finally installed one of them. Here are my impressions and the problems I encountered and luckily fixed.

Sonatype Nexus
No one can ignore it. De facto standard and from the company behind Maven. It's not my first time to use the interface, so no surprise and everything works just as expected.

JFog Artifactory
I had to say I love the design, and the auto discovery of ArtifactId, Version and Type during deploying artifacts, although some GroupId are wrongly set to be the same as ArtifactId.

Apache Archiva
It has quite good UI, but needs work on usabilities. If you have several remote repositories and need to apply the same (is there anyone need to set different proxies?) network proxy, it's a joke. Also it lacks some commonly used artifacts, which the other two players have no such problem.

I tried each of them for half day or so and decided to go with Artifactory.

Problem
Downloading: http://localhost:8081/artifactory/repo/org/apache/maven/plugins/maven-compiler-plugin/2.3.2/maven-compiler-plugin-2.3.2.jar

[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-compiler-plugin:2.3.2: Plugin org.apache.maven.plugins:maven-compiler-plugin:2.3.2 or one of its dependencies could not be resolved: Could not find artifact org.apache.maven.plugins:maven-compiler-plugin:jar:2.3.2 in artifactory (http://localhost:8081/artifactory/repo)

Solution
Set network proxy.

Problem
[WARNING] While downloading poi:poi:3.1-FINAL

This artifact has been relocated to org.apache.poi:poi:3.1-FINAL.

Solution
It's not repository manager's problem and it's better to follow the new location defined in pom file.

Problem
HTTP ERROR 409

Problem accessing /artifactory/repo/commons-fileupload/commons-fileupload/1.2.2/commons-fileupload-1.2.2.pom. Reason:

Rejected artifact download request: Checksum policy 'GEN_IF_ABSENT' rejected the artifact 'commons-fileupload-1.2.2.pom'. Checksums info: [ChecksumInfo{type=SHA-1, original='ad3fda4adc95eb0d061341228cc94845ddb9a6fe', actual='0ce5d4a03b07c8b00ab60252e5cacdc708a4e6d8'}, ChecksumInfo{type=MD5, original='c938bb047b88d2b85b47da0be9d901ec', actual='b219248b081b6b44abf436f41e16e9e1'}]

Solution
Go to Configure Repositories, in Edit Remote Repository, change Checksum Policy from default "Generate if absent" to "Ignore and generate".

Problem
HTTP ERROR 409

Problem accessing /artifactory/repo/velocity/velocity/1.5/velocity-1.5.pom. Reason:

The target deployment path 'velocity/velocity/1.5/velocity-1.5.pom' does not match the POM's expected path prefix 'org/apache/velocity/velocity/1.5'. Please verify your POM content for correctness and make sure the source path is a valid Maven 2 repository root path.

Solution
This is not repository manager's problem. Change the dependency definition as suggested.

Problem
HTTP ERROR 404

Problem accessing /artifactory/repo/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.pom. Reason:

Could not find resource

Solution
None of the default remote repositories has this artifact. Add a remote repository (in this case, http://repository.jboss.org/maven2/) and assign it to remote-repos.

Problem
Error messages in Maven Console in Eclipse
Unable to update index for snapshots|http://localhost:8081/artifactory/plugins-snapshot: Resource nexus-maven-repository-index.properties does not exist

Updating index central|http://localhost:8081/artifactory/plugins-release

Unable to update index for central|http://localhost:8081/artifactory/plugins-release: Resource nexus-maven-repository-index.properties does not exist

Updating index snapshots|http://localhost:8081/artifactory/libs-snapshot

Unable to update index for snapshots|http://localhost:8081/artifactory/libs-snapshot: Resource nexus-maven-repository-index.properties does not exist

Updating index central|http://localhost:8081/artifactory/libs-release

Unable to update index for central|http://localhost:8081/artifactory/libs-release: Resource nexus-maven-repository-index.properties does not exist

Updating index snapshots|http://localhost:8081/artifactory/plugins-snapshot

Solution
Maven Settings Generator generated wrong URLs in settings.xml. Use following URLs instead.
<repositories>
    <repository>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <id>central</id>
        <name>libs-releases</name>
        <url>http://localhost:8081/artifactory/libs-release-local</url>
    </repository>
    <repository>
        <snapshots />
        <id>snapshots</id>
        <name>libs-snapshots</name>
        <url>http://localhost:8081/artifactory/libs-snapshot-local</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <id>central</id>
        <name>plugins-releases</name>
        <url>http://localhost:8081/artifactory/plugins-release-local</url>
    </pluginRepository>
    <pluginRepository>
        <snapshots />
        <id>snapshots</id>
        <name>plugins-snapshots</name>
        <url>http://localhost:8081/artifactory/plugins-snapshot-local</url>
    </pluginRepository>
</pluginRepositories>

Monday, November 29, 2010

How to migrate an SVN repository

I had a chance to migrate an SVN repository of more than 10,000 revisions to another machine. Here are the process and the problems I solved.

1. Install a new Subversion server
CollabNet Subversion Edge 1.3 for Windows 64-bit is chosen because it has great web user interface to manage repositories and users.

2. Dump old repository
This should be very easy by using
svnadmin dump path/to/repository > repository.dump

But I got errors like
svnadmin: Filesystem path .../trunk/... is neither a file nor a directory

This is because either the file system or the repository is corrupt. I had to spit the dumping at the failing revision. Any dumpings after the failing point should use --incremental option.
svnadmin dump -r 0:N-1 path/to/repository > 0_N-1.dump
svnadmin dump --incremental -r N+1:M path/to/repository > N+1_M.dump

3. Create new repository
This can be done in 2 ways.
svnadmin create path/to/repository
or
New Repository in Repositories category in Subversion Edge's web UI (http://host:3343/csvn/repo/create).

Note, however, that you have to uncheck "Create standard trunk/branches/tags structure" in Use template option. Otherwise you will get following error when loading the dumped repository.
adding path : branches ...svnadmin: File already exists: filesystem '..\data\repositories\repository\db', transaction '123-4l', path 'branches'

4. Load dumped repository (for me, repositories)
Remember to use --force-uuid when you load the repository, or you may suffer either the above error or difficulties in relocate you old repository to new one.
svnadmin load --force-uuid path/to/repository < repository.dump

If you have failures in dumping like me. You have to replicate what the failing revision is supposed to be doing, and check in the changes to revision N in my example.

Hope it's helpful to Subversion users, but maybe migrate to Git is the way to go.

Thursday, November 11, 2010

A bug in GWT Designer

Two projects in my team encountered the same problem this week. If you have more than one classes (public A and non-public B) in a Java file (A.java, of course) in GWT client side, there will be compilation errors in GWT problems marker category saying
B can not be found in source packages. Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly.
However these errors affect nothing. You can still run as / debug as web application in development mode, or GWT compile the whole project successfully.

I'm using Eclipse Helios 3.6.1 (Service Release 1) in Ubuntu with
  • Google Plugin for Eclipse
  • GWT Designer

After investigation, I found it should be a bug of GWT Designer and reported it to GWT team.

If you really mind the "errors" and need to use GWT Designer, I think you know how to deal with it. In case you want to get rid of GWT Designer, go to Help - About Eclipse - Installation Details - Installed Software, and uninstall all the items with Id starting with com.instantiations.


18/11/2010 Update: It's a bug of Enhanced Compilation and got fixed in GWT Designer BETA.

Friday, October 22, 2010

Change the cache location for Chromium

Update: You can create tmpfs and mount it to the default cache folder of Chrome / Chromium.
google-chrome /home/jerry/.cache/google-chrome tmpfs defaults,noatime,mode=1777 0 0

If you have plenty of memory and want to move some temporary files out of your disk, tmpfs is the answer. Especially when you are using an SSD and don't want to wear it out soon.

I already did so for Firefox and PostgreSQL, and it's time for my Chromium (or Google Chrome) for Ubuntu.

Create a launcher. In the Launcher Properties, keep the Type to be Application, set the Name to "Chromium Web Brower" and Comment to "Access the Internet". Set Command to be "/usr/bin/chromium-browser --disk-cache-dir=/tmp --disk-cache-size=134217728 %U". That's it.

Note that
  • there are no quotation marks (") for the value of disk-cache-dir
  • path in disk-cache-dir is relative to your home, if it's not an absolute path
  • the unit of disk-cache-size is byte

Monday, October 18, 2010

When Evolution meets Microsoft Exchange

I tried to use Evolution (since it's the default email client in Ubuntu distro) to access Microsoft Exchange Server but failed. In Evolution Account Assistant, after I set Server Type to Microsoft Exchange and provide OWA URL in Receiving Email dialog box, I always got
Could not authenticate to Server.
Make sure the username and password are correct and try again.
Let me know if you have any idea about what's going wrong, but I decided to try something else.

sudo apt-get install evolution-mapi

This will also install libexchangemapi-1.0-0, which evolution-mapi depends on. Choose Exchange MAPI as Server Type and provide Server, Username and Domain name.

Wednesday, October 06, 2010

Tuesday, October 05, 2010

Upgraded to Ubuntu 10.10 Maverick Meerkat

update-manager --devel-release worked beautifully for me. The only issue I found is linux-image-2.6.32-25-generic is not removed by Update Manager, but it's a piece of cake for any Linux users.

I love the new font and Firefox's theme. Obviously they are designed with wide screen in mind, because I found there is more vertical space remained.

Well done, Canonical.

Tuesday, September 14, 2010

These user agents have accessed myTunes

myTunes is my personal project aggregating popular Chinese podcasts finished in 2006. Its core functions are generating dynamic RSS feeds (such as all the video contents, all the mp3 contents, etc), and providing OPML, which iTunes supports from several years ago. The UI, which is just a consumer of myTunes' API (RSS and OPML), is implemented in JSF.

I promised to publish all the user agents that have accessed myTunes and I think it's the right time now.


Thanks Datong for this pretty logo.


To the iPod mini 1st generation my sister bought me
To Java Studio Creator I used to create the web UI
To Bloglines that will officially shut down on October 1, 2010

1:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1a2) Gecko/20060512 BonEcho/2.0a2  
2:  msnbot/1.0 (+http://search.msn.com/msnbot.htm)  
3:  iTunes/6.0.5 (Windows; N)  
4:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)  
5:  Opera/9.00 (Windows NT 5.1; U; en)  
6:  INTERNET-DOWNLOAD  
7:  Opera/9.00 (Windows NT 5.1; U; zh-cn)  
8:  Maxthon  
9:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4  
10:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; (R1 1.3))  
11:  iTunes/6.0.4 (Windows; N)  
12:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; Maxthon; (R1 1.5))  
13:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; (R1 1.5))  
14:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; (R1 1.3); eBook)  
15:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)  
16:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1b1) Gecko/20060707 Firefox/2.0b1  
17:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060620 Firefox/1.5.0.4 Flock/0.7.1  
18:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a1) Gecko/20060709 Minefield/3.0a1  
19:  User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.1.4322)  
20:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1)  
21:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)  
22:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.4) Gecko/20060608 Ubuntu/dapper-security Firefox/1.5.0.4  
23:  MagpieRSS/0.7 (+http://magpierss.sf.net)  
24:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)  
25:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)  
26:  J. River Internet Reader/2.0 (compatible; Windows-Media-Player/10)  
27:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.2)  
28:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.12) Gecko/20050919 Firefox/1.0.7  
29:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler )  
30:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)  
31:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Alexa Toolbar)  
32:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4  
33:  iTunes/6.0.2 (Windows; N)  
34:  Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4  
35:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; {F5AD05F1-C763-DDDE-CDC9-FBC473231D46}; .NET CLR 1.1.4322)  
36:  Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.7.13) Gecko/20060414 CentOS/1.0.8-1.4.1.centos4 Firefox/1.0.8  
37:  Mozilla/5.0 (compatible) GM RSS Panel  
38:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GOSURF - BETA; GOSURF; .NET CLR 1.1.4322)  
39:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2)  
40:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; POTU(RR:26060619:0); .NET CLR 2.0.50727; InfoPath.2)  
41:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)  
42:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Alexa Toolbar; mxie; SV1; POTU(RR:26060619:0); roguecleaner; .NET CLR 1.1.4322)  
43:  iTunes/6.0.5 (Macintosh; N; PPC)  
44:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; KKman3.0; .NET CLR 1.1.4322)  
45:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705)  
46:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)  
47:  iTunes/6.0.1 (Windows; N)  
48:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)  
49:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)  
50:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)  
51:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; zh-cn) AppleWebKit/417.9 (KHTML, like Gecko) Safari/417.9.2  
52:  AppleSyndication/51  
53:  Feedfetcher-Google; (+http://www.google.com/feedfetcher.html)  
54:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon; .NET CLR 1.1.4322)  
55:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Alexa Toolbar)  
56:  Zhuaxia.com 1 Subscribers  
57:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; TencentTraveler )  
58:  Zhuaxia.com 2 Subscribers  
59:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2  
60:  FeedValidator/1.3  
61:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; zh-tw) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3  
62:  AppleSyndication/54  
63:  foobar2000 v0.9.2  
64:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)  
65:  Feedreader 3.05 (Powered by Newsbrain)  
66:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727)  
67:  Mozilla/4.0 (compatible; Google Desktop)  
68:  Java/1.5.0_07  
69:  myTunes/1.0  
70:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Alexa Toolbar)  
71:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5  
72:  Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4  
73:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon)  
74:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; TencentTraveler ; (R1 1.5))  
75:  iPodder/2.2beta1 (Windows) +http://ipodder.sf.net/  
76:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727; .NET CLR 1.1.4322)  
77:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5  
78:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.5) Gecko/20060727 Ubuntu/dapper-security Firefox/1.5.0.5  
79:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.5) Gecko/20060731 Ubuntu/dapper-security Firefox/1.5.0.5  
80:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; POTU(1.13); .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
81:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)  
82:  Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0)  
83:  Mozilla/5.0 (compatible;heritrix-1.8.0 +http://www.business.com)  
84:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6  
85:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; TencentTraveler )  
86:  Opera/9.00 (X11; Linux i686; U; en)  
87:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; InfoPath.1)  
88:  iTunes/6.0 (Windows; N)  
89:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)  
90:  potu 0.7 (+http://www.potu.com/)  
91:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; POTU(1.13); .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
92:  Gigabot/2.0; http://www.gigablast.com/spider.html  
93:  ia_archiver  
94:  Mozilla/5.0 (PC; U; Intel; Windows; en) AppleWebKit/420+ (KHTML, like Gecko)  
95:  Live.Com Feed Manager  
96:  Opera/9.01 (Windows NT 5.1; U; zh-cn)  
97:  iTunes/6.0.3 (Windows; N)  
98:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; POTU(RR:26060619:0); TencentTraveler ; InfoPath.1)  
99:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
100:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
101:  Mozilla/5.0 (compatible; Google Desktop)  
102:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5  
103:  Protopage/3.0 (http://www.protopage.com)  
104:  Pageflakes/1.0 (WinNT 5.1.2600.0; http://www.pageflakes.com; 1 subscribers )  
105:  Netvibes (http://www.netvibes.com/; 1 subscriber)  
106:  Netvibes (http://www.netvibes.com/; 1 subscribers)  
107:  Netvibes (http://www.netvibes.com/; 2 subscribers)  
108:  lanshanbot/1.0  
109:  Mozilla/6.0 (MSIE 6.0; Windows NT 5.1;Foxmail/MILOWU)  
110:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; zh-cn) AppleWebKit/418 (KHTML, like Gecko) Safari/417.9.3  
111:  AppleSyndication/52  
112:  iTunes/6.0.5 (Macintosh; N; Intel)  
113:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
114:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Avant Browser; Avant Browser)  
115:  Mozilla/4.0 (compatible;)  
116:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
117:  gnome-vfs/2.14.2 neon/0.25.4  
118:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6  
119:  msnbot-media/1.0 (+http://search.msn.com/msnbot.htm)  
120:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)  
121:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
122:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3  
123:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; TencentTraveler ; .NET CLR 1.0.3705; .NET CLR 1.1.4322)  
124:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3  
125:  Ensemble/1.0 (http://pyxis-project.net/)  
126:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)  
127:  Exabot/3.0  
128:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)  
129:  Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)  
130:  iTunes/7.0 (Macintosh; N; Intel)  
131:  iTunes/7.0 (Macintosh; N; PPC)  
132:  msnbot/0.9 (+http://search.msn.com/msnbot.htm)  
133:  iTunes/7.0 (Windows; N)  
134:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; zh-cn) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3  
135:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.5) Gecko/20060802 Firefox/1.5.0.5 Flock/0.7.4.1  
136:  Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)  
137:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)  
138:  MSN Feed Manager  
139:  Live (http://www.live.com/)  
140:  Zhuaxia.com 3 Subscribers  
141:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar)  
142:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; zh-CN; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2  
143:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7  
144:  Grazr/Beta1vX0.2  
145:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; 5460)  
146:  Mozilla/4.0 (compatible; Nokia Podcasting; SymbianOS)  
147:  http://Anonymouse.org/ (Unix)  
148:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418 (KHTML, like Gecko) Safari/417.9.2  
149:  Grazr/v1.0  
150:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; zh-CN; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7  
151:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; .NET CLR 1.1.4322)  
152:  Mozilla/5.0 (000000000; 0; 00000 000 00 0; 00000) 00000000000000000 0000000 0000 000000 000000000000  
153:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7  
154:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060921 Ubuntu/dapper-security Firefox/1.5.0.7  
155:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; zh-cn) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3  
156:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; zh-cn) AppleWebKit/85.8.5 (KHTML, like Gecko) Safari/85.8.1  
157:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7  
158:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Tablet PC 1.7; .NET CLR 1.0.3705; .NET CLR 1.1.4322)  
159:  FeedBurner/1.0 (http://www.FeedBurner.com)  
160:  iTunes/7.0 (000000000; 0; 00000)  
161:  Opera/9.02 (Windows NT 5.0; U; zh-cn)  
162:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon; SV1)  
163:  Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)  
164:  Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)  
165:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; TencentTraveler ; .NET CLR 1.1.4322)  
166:  iTunes/7.0.1 (Macintosh; N; Intel)  
167:  Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)  
168:  iTunes/7.0.1 (Windows; N)  
169:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; Maxthon 2.0)  
170:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20050920 Firefox/1.0.7  
171:  Opera/9.02 (Macintosh; PPC Mac OS X; U; zh-cn)  
172:  Bloglines/3.1 (http://www.bloglines.com; 1 subscriber)  
173:  iTunes/7.0.1 (Macintosh; N; PPC)  
174:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 1.1.4322)  
175:  iTunes/7.0.1 (000000000; 0; 00000)  
176:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Alexa Toolbar; mxie; .NET CLR 1.1.4322)  
177:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)  
178:  Windows-RSS-Platform/1.0 (MSIE 7.0; Windows NT 5.1)  
179:  NutchCVS/0.7.2 (Nutch; http://lucene.apache.org/nutch/bot.html; nutch-agent@lucene.apache.org)  
180:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3  
181:  OutfoxBot/0.5 (for internet experiments; http://; outfoxbot@gmail.com)  
182:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; zh-cn) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3  
183:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1)  
184:  FeedValidator/1.21 +http://feeds.archive.org/validator/  
185:  Frontier/9.0.1 (WinNT)  
186:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; zh-tw) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3  
187:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3  
188:  Mozilla/4.76 [en] (PalmOS; U; WebPro/3.0.1a; palm-MT64)  
189:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1) Gecko/20060918 Firefox/2.0  
190:  Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)  
191:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; GOSURF; RogueCleaner; .NET CLR 1.1.4322; Creative ZENcast v1.02.12)  
192:  Creative ZENcast v1.02.12  
193:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; GOSURF; .NET CLR 1.1.4322; InfoPath.1; Creative ZENcast v1.02.12)  
194:  Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-TW; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7  
195:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Poco 0.31; .NET CLR 2.0.50727)  
196:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2  
197:  Zhuaxia.com 0 Subscribers  
198:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; InfoPath.1; .NET CLR 1.1.4322)  
199:  gnome-vfs/2.16.1 neon/0.25.4  
200:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
201:  ZTE-Me/Mobile  
202:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0  
203:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20060601 Firefox/2.0 (Ubuntu-edgy)  
204:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Poco 0.31; Maxthon)  
205:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; zh-tw) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3  
206:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 (FoxPlus) Firefox/1.5.0.7  
207:  Mozilla/4.0  
208:  Shim-Crawler(Mozilla-compatible; http://www.logos.ic.i.u-tokyo.ac.jp/crawler/; crawl@logos.ic.i.u-tokyo.ac.jp)  
209:  iTunes/7.0.2 (Macintosh; N; PPC)  
210:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; Alexa Toolbar; .NET CLR 1.0.3705)  
211:  iTunes/7.0.2 (Macintosh; N; Intel)  
212:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; MyIE2; .NET CLR 1.1.4322; .NET CLR 1.0.3705)  
213:  iTunes/7.0.2 (Windows; N)  
214:  Grazr/v1.1  
215:  iTunes/7.0.2 (000000000; 0; 00000)  
216:  XML-FeedPP/0.16 XML-TreePP/0.18 libwww-perl/5.803  
217:  Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://about.ask.com/en/docs/about/webmasters.shtml)  
218:  Juice/2.2 (Windows) +http://juicereceiver.sf.net/  
219:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)  
220:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
221:  iTunes/6.0.4 (Macintosh; N; Intel)  
222:  Opera/9.02 (Windows NT 5.1; U; zh-cn)  
223:  Ziepod+ 0.99.1 (www.ziepod.com;MediaAggregator&Player; Windows NT 5.1)  
224:  Opera/9.01 (Windows NT 5.1; U; en)  
225:  <a href='http://www.netforex.org'> Forex Trading Network Organization </a> info@netforex.org  
226:  iTunes/5.0.1 (Windows; N)  
227:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; Maxthon)  
228:  Mozilla/4.0 (Mozilla; http://www.mozilla.org/docs/en/bot.html; master@mozilla.com)  
229:  Ziepod 0.99.1 (www.ziepod.com;PodcastReceiver&Player; Windows NT 5.1)  
230:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; (R1 1.5); .NET CLR 1.1.4322)  
231:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.5) Gecko/20060719 (FoxPlus) Firefox/1.5.0.5  
232:  ichiro/2.0 (http://help.goo.ne.jp/door/crawler.html)  
233:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)  
234:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.03)  
235:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; MSOffice 12)  
236:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0  
237:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Poco 0.31; .NET CLR 1.1.4322)  
238:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
239:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Creative ZENcast v1.02.12)  
240:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)  
241:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8  
242:  Quick News by Stand Alone, Inc.  
243:  Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.8.1) Gecko/20060601 Firefox/2.0 (Ubuntu-edgy)  
244:  iPodder-linux/2.1.9 +http://ipodder.sf.net/  
245:  Python-urllib/1.16  
246:  NokiaE61-1/3.0 (2.0618.06.05) SymbianOS/9.1 Series60/3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1  
247:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2; MSOffice 12)  
248:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461)  
249:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8  
250:  RSSMicro.com RSS/Atom Feed Robot  
251:  Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1; SV1)  
252:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3  
253:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mister X)  
254:  iTunes/6.0.2 (Macintosh; N; Intel)  
255:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon; .NET CLR 1.1.4322)  
256:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061024 BonEcho/2.0  
257:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; InfoPath.1)  
258:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727; InfoPath.1)  
259:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
260:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.1)  
261:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP-mac; rv:1.8.1) Gecko/20061010 Firefox/2.0  
262:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8  
263:  sogou spider  
264:  Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8  
265:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1  
266:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a1) Gecko/20061204 GranParadiso/3.0a1  
267:  iSiloX/4.32 Windows/32  
268:  iTunes/6.0.1 (Macintosh; N; PPC)  
269:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; HbTools 4.7.7)  
270:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9  
271:  Mozilla/4.0 (compatible; MSIE 6.0; ; Linux i686) Opera 7.50 [en]  
272:  Opera/9.10 (Windows NT 5.1; U; zh-cn)  
273:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1  
274:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1  
275:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)  
276:  Mozilla/5.0 (000000000; 0; 00000 000 00 0; 00000; 0000000000) 00000000000000 000000000000000  
277:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en)  
278:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20060601 Firefox/2.0.0.1 (Ubuntu-edgy)  
279:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)  
280:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Hotbar 4.5.1.0; .NET CLR 1.1.4322)  
281:  Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; Nokia E61/0633.09.04; 9730) Opera 8.65 [zh-CN]  
282:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9  
283:  Mozilla/4.0 (PSP (PlayStation Portable); 2.00)  
284:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322; InfoPath.1)  
285:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1  
286:  Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1  
287:  XML-FeedPP/0.19 XML-TreePP/0.19 libwww-perl/5.76  
288:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; InfoPath.1; .NET CLR 1.1.4322)  
289:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Alexa Toolbar; .NET CLR 2.0.50727; InfoPath.1)  
290:  Mozilla/5.0 (compatible; Exabot/3.0; +http://www.exabot.com/go/robot)  
291:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20041215 Firefox/1.0 Red Hat/1.0-12.EL4  
292:  Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)  
293:  Avbrno cuoreyagh tcjrig  
294:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322)  
295:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts)  
296:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2  
297:  curl/7.13.1 (powerpc-apple-darwin8.0) libcurl/7.13.1 OpenSSL/0.9.7l zlib/1.2.3  
298:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.2) Gecko/20060601 Firefox/2.0.0.2 (Ubuntu-edgy)  
299:  Grazr/v1.2  
300:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Media Center PC 3.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322)  
301:  iTunes/7.1 (Macintosh; N; Intel)  
302:  iTunes/7.1 (000000000; 0; 00000)  
303:  iTunes/7.1 (Macintosh; N; PPC)  
304:  iTunes/7.1 (Windows; N)  
305:  Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2  
306:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; zh-cn) AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3  
307:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2  
308:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0 qihoobot@qihoo.net)  
309:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; TencentTraveler ; .NET CLR 2.0.50727)  
310:  Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2  
311:  Resco News  
312:  Mozilla/5.0 (compatible; Konqueror/3.4; Linux) KHTML/3.4.3 (like Gecko)  
313:  Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.7.13) Gecko/20050610 K-Meleon/0.9  
314:  Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)  
315:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; .NET CLR 1.1.4322)  
316:  Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=3254972797126430783)  
317:  Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=10516567267389403425)  
318:  iTunes/7.1.1 (Macintosh; N; PPC)  
319:  iTunes/7.1.1 (Windows; N)  
320:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; KuGooSoft)  
321:  iTunes/7.1.1 (Macintosh; N; Intel)  
322:  NextGenSearchBot 1 (for information visit http://about.zoominfo.com/About/NextGenSearchBot.aspx)  
323:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)  
324:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3  
325:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Embedded Web Browser from: http://bsalsa.com/; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  
326:  Creative ZENcast v1.04.06  
327:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3  
328:  iTunes/7.1.1 (000000000; 0; 00000)  
329:  ShopWiki/1.0 ( +http://www.shopwiki.com/wiki/Help:Bot)  
330:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3  
331:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)  
332:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11  
333:  Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)  
334:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11  
335:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; NetCaptor 7.5.4)  
336:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322)  
337:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20060601 Firefox/2.0.0.3 (Ubuntu-edgy)  
338:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; i-NavFourF; Embedded Web Browser from: http://bsalsa.com/; .NET CLR 1.1.4322)  
339:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; zh-cn) Opera 9.02  
340:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; KuGooSoft)  
341:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; Maxthon 2.0)  
342:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP-mac; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3  
343:  Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=18276495934853990384)  
344:  Opera/9.20 (Windows NT 5.1; U; zh-cn)  
345:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0  
346:  Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0  
347:  Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3  
348:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; .NET CLR 2.0.50727)  
349:  Grazr/v2.0  
350:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11  
351:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)  
352:  gnome-vfs/2.18.1 neon/0.25.4  
353:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; POTU(RR:27011715:0); Maxthon; .NET CLR 2.0.50727)  
354:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MSOffice 12)  
355:  Ziepod 0.99.9b2 (www.ziepod.com;PodcastReceiver&Player; Windows NT 5.1)  
356:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Maxthon 2.0)  
357:  iTunes/4.9 (Windows; N)  
358:  Sogou Push Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)  
359:  Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=15254394928724077235)  
360:  Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=8177589595128505927)  
361:  Mozilla/4.0 (compatible; MSIE 6.0)  
362:  Mozilla/5.0 (Windows; U; Win98; zh-CN; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3  
363:  iTunes/7.3.1 (Macintosh; N; PPC)  
364:  iTunes/7.3 (Windows; N)  
365:  iTunes/7.3.1 (Windows; N)  
366:  iTunes/7.3.1 (Macintosh; N; Intel)  
367:  iTunes/7.2 (Windows; N)  
368:  iTunes/7.3 (Macintosh; N; Intel)  
369:  iTunes/7.3.1 (000000000; 0; 00000)  
370:  Creative ZENcast v2.00.07  
371:  Opera/9.22 (Windows NT 5.1; U; zh-cn)  
372:  Mozilla/4.0 (compatible; NaverBot/1.0; http://help.naver.com/delete_main.asp)  
373:  Gigabot/3.0 (http://www.gigablast.com/spider.html)  
374:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5  
375:  Opera/9.22 (Macintosh; Intel Mac OS X; U; en)  
376:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/419.2.1 (KHTML, like Gecko) Safari/419.3  
377:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6  
378:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.5) Gecko/20061201 Firefox/2.0.0.5 (Ubuntu-feisty)  
379:  Liferea/1.0.52-2 (Linux; en_US; http://liferea.sf.net/)  
380:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Embedded Web Browser from: http://bsalsa.com/; TheWorld)  
381:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6  
382:  iTunes/7.3.2 (Macintosh; N; Intel)  
383:  iTunes/7.3.2 (Macintosh; N; PPC)  
384:  iTunes/7.3.2 (Windows; N)  
385:  iTunes/7.3.2 (000000000; 0; 00000)  
386:  iTunes/7.2 (Macintosh; N; Intel)  
387:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20061201 Firefox/2.0.0.6 (Ubuntu-feisty)  
388:  Mozilla/4.0 (compatible; MSIE 6.0; ; Linux armv5tejl; U) Opera 8.02 [en_US] Maemo browser 0.4.34 N770/SU-18  
389:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Media Center PC 3.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MAXTHON 2.0)  
390:  Mozilla/5.0 (Twiceler-0.9 http://www.cuill.com/twiceler/robot.html)  
391:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MSN 6.1; MSNbMSFT; MSNmsc-cn; MSNc0z; v5m)  
392:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; (R1 1.5))  
393:  Opera/9.23 (Windows NT 5.1; U; zh-cn)  
394:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TheWorld)  
395:  Egress  
396:  Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 2 subscribers; feed-id=15254394928724077235)  
397:  iTunes/7.4 (Windows; N)  
398:  iTunes/7.4 (Macintosh; N; Intel)  
399:  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh) AppleWebKit/522.13.1 (KHTML, like Gecko) Version/3.0.2 Safari/522.13.1  
400:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; Alexa Toolbar)  
401:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Mozilla/4.0(Compatible Mozilla/4.0(Compatible-EmbeddedWB 14.59 http://bsalsa.com/ EmbeddedWB- 14.59 from: http://bsalsa.com/ ; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)  
402:  iTunes/7.4 (Macintosh; N; PPC)  
403:  Sogou web spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)  
404:  iTunes/7.4.1 (Macintosh; N; PPC)  
405:  iTunes/7.4.1 (Macintosh; N; Intel)  
406:  iTunes/7.4.1 (Windows; N)  
407:  iTunes/7.4 (000000000; 0; 00000)  
408:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)  
409:  Mozilla/5.0 (compatible; Exabot Test/3.0; +http://www.exabot.com/go/robot)  
410:  MagpieRSS/0.72 (+http://magpierss.sf.net)  
411:  iTunes/7.4.2 (Windows; N)  
412:  iTunes/7.4.2 (Macintosh; N; Intel)  
413:  Opera/9.23 (Macintosh; Intel Mac OS X; U; zh-cn)  
414:  iTunes/7.4.1 (000000000; 0; 00000)  
415:  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7  
416:  iTunes/7.4.2 (Macintosh; N; PPC)  
417:  iTunes/7.4.2 (000000000; 0; 00000)  
418:  Zhuaxia.com 4 Subscribers  
419:  Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.0.12) Gecko/20070531 Firefox/1.5.0.12 Flock/0.7.14  
420:  iTunes/7.3.1 (Windows; N), DynaWeb http://www.dit-inc.us/disclaimer.php  
421:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MAXTHON 2.0)  
422:  iTunes/7.4.3 (Windows; N)  
423:  Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.7.12) Gecko/20050921 Red Hat/1.0.7-1.4.1 Firefox/1.0.7  
424:  Mozilla/5.0 (Macintosh; U; Intel Mac OS X; zh-CN; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6  
425:  Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070914 Firefox/2.0.0.6 Flock/0.9.1.0  
426:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 1.1.4322; InfoPath.2)  
427:  Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8  
428:  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 1.1.4322)  

Wednesday, September 01, 2010

MyEclipse 8.x

It's so painful to install plug-ins in MyEclipse 8.x. It tries to block you from directly access update URLs with a so-called Software Centre. Things become even worse if you're behind a proxy. What's funnier are You can't update Eclipse 3.5 behind the proxy and MyEclipse still refuses to base itself on Eclipse 3.6.

Anyway, I just want to share a tip in plug-in installing in MyEclipse 8.5. See the screenshot. Note the "Connect directly to host" option.

Wednesday, August 25, 2010

tmpfs and PostgreSQL

I've been dreaming to have an SSD for quite a long time. In order to reduce disk operations when I actually have an SSD, I practiced to
  • point browser.cache.disk.parent_directory of Firefox to /dev/shm
  • remove swap partition
  • move several temporary folders to tmpfs.
tmpfs /var/log/apt tmpfs noatime,defaults 0 0
tmpfs /var/log tmpfs noatime,defaults 0 0
tmpfs /tmp tmpfs noatime,defaults 0 0
tmpfs /var/tmp tmpfs noatime,defaults 0 0

It works beautifully until I installed PostgreSQL for a project on my laptop, because it needs one more folder for logs. Here is the workaround.

sudo mkdir /var/log/postgresql
sudo service postgresql-8.4 start

Enjoy taking the advantage of my 4GB memory.

Wednesday, August 11, 2010

Good practice in using java.util.concurrent

Concurrent package was introduced from Java 5 and still doesn't get reasonable acceptance. Traditional thread programming is just too strong for us to unlearn it. Several years ago, I created a task framework to solve commonly used scenario, a modified version (most changes are generic related) is used in a product I participated in 2008.

In my current project, I have a requirement of setting timeout for serials of web service operations, which is very suitable for concurrent package. I learned a good lesson from this simple task. I reckon I need to revise my framework one day.

The 1st lesson I learned is it's harder and not safe to set thread name to a Callable thread. One workaround is calling Thread.currentThread().setName() at the beginning of call(). But thread is not owned by Callable but by ExecutorService, so this might have some side-effects. Use it at your own risk.

The 2nd one is the overhead of creating and removing threads is much heavier than I imaged before. In debug mode you can see the process of creation and removal of threads, especially when you submit the thread in loops. Try your best to minimize the operations in call() and only call call() when necessary.

Third tip is by using Future.get(1L, TimeUnit.MILLISECONDS) and ignoring TimeoutException you get an asynchronized thread.

Last but not least is always cancel future and shutdown service. If you fail to do so, the callable will be in running status forever and eventually you'll have no memory to create any new thread. Although I don't see any difference between Future.cancel(true) and Future.cancel(false), ExecutorService.shutdown() and ExecutorService.shutdownNow() in my case.

Friday, July 30, 2010

createRecordComponent is not called for the first record created

I'm using Smart GWT 2.2 and facing a strange bug. The com.smartgwt.client.widgets.grid.ListGrid#createRecordComponent(ListGridRecord record, Integer colNum) is not called for the very first record. Thanks to smartgwt's popularity, I found some complaints and workarounds.

In Issue 450 - smartgwt - createRecordComponent(final ListGridRecord record, Integer colNum) {} never executed, someone suggested create a function that does all the job createRecordComponent is supposed to do and call this function explicitly. If this works, the event model needs also to be hacked, because nothing wrong in createRecordComponent. Hope he/she will contribute the solution to the product.

In createRecordComponent not called for changed record when refreshing ListGrid, another one suggested showRecordComponent must be implemented as well, if not all the columns' component are created in create/updateRecordComponent. Sounds simple but no matter showRecordComponent returns true or false, createRecordComponent still fails to be called.

What helped me is ListGrid.createRecordComponent not called unless a column is sorted. I don't call setSortField because I have no field to sort. I call ListGrid#sort after a new record is added and problem solved.

Tuesday, June 22, 2010

soapUI 3.5.1 on Ubuntu 10.04

Update: soapUI 3.6.1 on Ubuntu 10.10 doesn't have the following problem.

I got following error in my console when I tried to run soapUI on Ubuntu. It was started, after a blank splash screen, but cannot create a project.

Exception in thread "XpcMessageLoop" java.lang.NoSuchMethodError: com.jniwrapper.gtk.GTK.initialize([Ljava/lang/String;)V
    at com.teamdev.xpcom.impl.awt.linux.AwtLinuxPlatform.a(SourceFile:166)
    at com.teamdev.xpcom.impl.E.initialize(SourceFile:69)
    at com.teamdev.xpcom.c.run(SourceFile:150)

The solution is to uncomment the following line in soapui.sh
# JAVA_OPTS="$JAVA_OPTS -Dsoapui.jxbrowser.disable=true"

To set authentication information for a web service, use this dialog box.

Saturday, May 22, 2010

How to connect an InputStream to an OutputStream

In the FTP Proxy product, one basic requirement is to intercept upstream authentication commands (USER and PASS commands sent from FTP client to FTP server), finish customized authentication and then let FTP client and FTP server work together with following tasks.

For upstream commands, the proxy has an inputstream from client and an output stream to server; for downstream commands, it has an inputstream from server and an inputstream to client. An easy way to deal with it is StreamConnector.

Don't mix up with similar solutions like Convert a Java OutputStream to an InputStream and Java utilities for stream wiring and file format detection.

Sunday, May 16, 2010

Totem Media Player error in Lucid Lynx 32-bit

Upgraded to Ubuntu 10.04 for a while and everything is fine. But I encountered an error when I tried to play a video today.
An error occurred
pa_stream_writable_size() failed: Connection terminated

I played the same video on Ubuntu 10.04 64-bit without any problem. Time to switch to 64, eh?

Saturday, May 08, 2010

Where is Sun Java?

Trust yourself should be 1st law in open source world.

I installed Ubuntu 10.04 and noticed Sun Java in not in default repository any more. I checked Ubuntu 10.04 LTS Release Notes and found

Sun Java moved to the Partner repository


For Ubuntu 10.04 LTS, the sun-java6 packages have been dropped from the Multiverse section of the Ubuntu archive. It is recommended that you use openjdk-6 instead.
If you can not switch from the proprietary Sun JDK/JRE to OpenJDK, you can install sun-java6 packages from the Canonical Partner Repository. You can configure your system to use this repository via command-line:
add-apt-repository "deb http://archive.canonical.com/ lucid partner"
Easy, but it's wrong. Here is how to enable partner's repository.
 
You can see the leftover of the wrong command. What a(nother) shame.

Sunday, April 25, 2010

Lucid Lynx installed

6 months ago, I installed Ubuntu 9.10 side by side with Windows XP on a laptop. I let Ubuntu livecd to do all the task, resize XP partition, create Linux root and swap partiton. It worked flawlessly. Each time I start this laptop, I have a chance to choose between Ubuntu and XP, by default Ubuntu.

Last week, Ubuntu 10.04 RC released. It's time to upgrade but the problems are:

  • Ubuntu 9.10 automatically assigned 6ish GB to Linux partitions (/ and swap). It's not big enough to upgrade directly.
  • if I remove these 2 partitions, I cannot get my Windows XP started because GRUB will be damaged.

It seems the only way is to accept previous partitions and install new version on them.

When I was just about to start, I got another idea, better and risky. I removed Linux partitions using GParted, resize XP partition to use this newly freed space. Note that I unchecked Round to cylinder, otherwise error occurred. At this time, I could not boot this laptop to Windows XP, grub rescue prompt is shown and I don't know what to do in it.

Then I booted the laptop with livecd and did just the same as I did 6 months ago. I worked and Linux partitions now occupied 12ish GB. I'm happy to work this out and happier to see a more confident Ubuntu.

Tuesday, April 13, 2010

FTP Dialects

I'm researching the possibilities of an FTP Proxy that can act as an authentication plugin of an FTP server. As a side product, I experienced totally different FTP dialects from popular FTP clients.

FileZilla 3.3.2.1
(000001) 13/04/2010 9:54:18 AM - (not logged in) (127.0.0.1)> Connected, sending welcome message...
(000001) 13/04/2010 9:54:18 AM - (not logged in) (127.0.0.1)> 220-FileZilla Server version 0.9.34 beta
(000001) 13/04/2010 9:54:18 AM - (not logged in) (127.0.0.1)> 220-written by Tim Kosse (Tim.Kosse@gmx.de)
(000001) 13/04/2010 9:54:18 AM - (not logged in) (127.0.0.1)> 220 Please visit http://sourceforge.net/projects/filezilla/
(000001) 13/04/2010 9:54:18 AM - (not logged in) (127.0.0.1)> USER zhao
(000001) 13/04/2010 9:54:18 AM - (not logged in) (127.0.0.1)> 331 Password required for zhao
(000001) 13/04/2010 9:54:18 AM - (not logged in) (127.0.0.1)> PASS ********
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 230 Logged on
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> SYST
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 215 UNIX emulated by FileZilla
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> FEAT
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 211-Features:
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> MDTM
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> REST STREAM
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> SIZE
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> MLST type*;size*;modify*;
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> MLSD
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> UTF8
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> CLNT
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> MFMT
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 211 End
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> PWD
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 257 "/" is current directory.
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> TYPE I
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 200 Type set to I
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> PASV
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,4,27)
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> MLSD
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 150 Connection accepted
(000001) 13/04/2010 9:54:18 AM - zhao (127.0.0.1)> 226 Transfer OK

Firefox 3.6.3
(000002) 13/04/2010 9:59:59 AM - (not logged in) (127.0.0.1)> Connected, sending welcome message...
(000002) 13/04/2010 9:59:59 AM - (not logged in) (127.0.0.1)> 220-FileZilla Server version 0.9.34 beta
(000002) 13/04/2010 9:59:59 AM - (not logged in) (127.0.0.1)> 220-written by Tim Kosse (Tim.Kosse@gmx.de)
(000002) 13/04/2010 9:59:59 AM - (not logged in) (127.0.0.1)> 220 Please visit http://sourceforge.net/projects/filezilla/
(000002) 13/04/2010 9:59:59 AM - (not logged in) (127.0.0.1)> USER zhao
(000002) 13/04/2010 9:59:59 AM - (not logged in) (127.0.0.1)> 331 Password required for zhao
(000002) 13/04/2010 9:59:59 AM - (not logged in) (127.0.0.1)> PASS ********
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 230 Logged on
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> SYST
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 215 UNIX emulated by FileZilla
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> PWD
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 257 "/" is current directory.
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> TYPE I
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 200 Type set to I
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> PASV
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,4,218)
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> SIZE /
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 550 File not found
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> MDTM /
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 550 File not found
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> RETR /
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 550 File not found
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> PASV
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,4,220)
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> CWD /
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 250 CWD successful. "/" is current directory.
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> LIST
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 150 Connection accepted
(000002) 13/04/2010 9:59:59 AM - zhao (127.0.0.1)> 226 Transfer OK

IE 8
(000003) 13/04/2010 10:01:42 AM - (not logged in) (127.0.0.1)> Connected, sending welcome message...
(000003) 13/04/2010 10:01:42 AM - (not logged in) (127.0.0.1)> 220-FileZilla Server version 0.9.34 beta
(000003) 13/04/2010 10:01:42 AM - (not logged in) (127.0.0.1)> 220-written by Tim Kosse (Tim.Kosse@gmx.de)
(000003) 13/04/2010 10:01:42 AM - (not logged in) (127.0.0.1)> 220 Please visit http://sourceforge.net/projects/filezilla/
(000003) 13/04/2010 10:01:42 AM - (not logged in) (127.0.0.1)> USER zhao
(000003) 13/04/2010 10:01:42 AM - (not logged in) (127.0.0.1)> 331 Password required for zhao
(000003) 13/04/2010 10:01:42 AM - (not logged in) (127.0.0.1)> PASS ********
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> 230 Logged on
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> CWD /
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> 250 CWD successful. "/" is current directory.
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> TYPE A
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> 200 Type set to A
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> PASV
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,4,226)
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> LIST
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> 150 Connection accepted
(000003) 13/04/2010 10:01:42 AM - zhao (127.0.0.1)> 226 Transfer OK

It looks that Firefox has the ugliest commands, right?

Thursday, February 11, 2010

OpenOffice 3.2.0 released

If you want to download it via traditional http protocol, please wait for few days more because OpenOffice prefers P2P this time. Go to http://distribution.openoffice.org/p2p/ and you'll find version 3.2.0 for all platforms are already there.

sudo apt-get remove openoffice*.*
sudo dpkg -i OOO320_m12_native_packed-1_en-US.9483/DEBS/*.deb
sudo dpkg -i OOO320_m12_native_packed-1_en-US.9483/DEBS/desktop-integration/openoffice.org3.2-debian-menus_3.2-9472_all.deb


I still remember when Ubuntu released Karmic Koala, I can hardly download torrent file from official website. Hope Canonical will follow this way and give P2P downloader a higher priority.

Saturday, February 06, 2010

Friday, January 29, 2010

Submitted another bug to Eclipse

It's unavoidable to have ambiguous types in single Java file. The way to solve the problem is very easy, using fully qualified class name. Unfortunately, the Content Assist of Eclipse 3.6M4 is not that smart to generate correct code.

I submitted this bug to Eclipse today and let's see what will happen.

Saturday, January 16, 2010

Floating point arithmetic in Python 3 is much more accurate

There is always limited precision in floating point arithmetic due to conversion between decimal and binary. But I found Python 3 becomes much more accurate.

 zhao@nettop:~$ python  
 Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15)   
 [GCC 4.4.1] on linux2  
 Type "help", "copyright", "credits" or "license" for more information.  
 >>> 12.6 / 2  
 6.2999999999999998  
 >>> 12.6 + 0.01
 12.609999999999999
 >>> float('3.2')
 3.2000000000000002  

 zhao@nettop:~$ python3  
 Python 3.1.1+ (r311:74480, Nov 2 2009, 14:49:22)   
 [GCC 4.4.1] on linux2  
 Type "help", "copyright", "credits" or "license" for more information.  
 >>> 12.6 / 2  
 6.3  
 >>> 12.6 + 0.01  
 12.61  
 >>> float('3.2')  
 3.2  
Who has any idea about this?

Saturday, January 09, 2010

Let scim and ibus support Skype

Update 28/4/2012 - If you're using Ubuntu 12.04 Precise Pangolin, install ibus-qt4 first.
sudo apt-get install ibus-qt4

By default, I cannot input Chinese in Linux version of Skype. This issue doesn't get solved when Karmic Koala decided to introduce a new input framework, ibus, to replace scim.

To solve this problem, add these 3 lines into your .bashrc file and reboot:
 export GTK_IM_MODULE=ibus  
 export XMODIFIERS=@im=ibus  
 export QT_IM_MODULE=ibus  

If you prefer scim, maybe these lines will help (not tested):
 export XMODIFIERS=@im=SCIM  
 export GTK_IM_MODULE=scim  
 export QT_IM_MODULE=scim  

Skype is better now under Ubuntu.

Monday, January 04, 2010

Schema of iTunes podcast feed

In 2006, in order to aggregate my favourite podcasts and share them with other iPod owners, I did a podcast aggregation service named myTunes.

I chose JAXB to map XML documents to Java objects and vice versa, so I need a schema or DTD file of iTunes podcast feed. Unfortunately I couldn't find one. I had to generate one myself.

I got an example feed from Apple. I removed a few elements that I think of no use at the moment and generated its schema.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" elementFormDefault="qualified">
    <xs:complexType name="channelType">
        <xs:sequence>
            <xs:element ref="title"/>
            <xs:element ref="link"/>
            <xs:element ref="language"/>
            <xs:element ref="description"/>
            <xs:element ref="pubDate"/>
            <xs:element name="image" type="imageType"/>
            <xs:element ref="copyright"/>
            <xs:element ref="subtitle"/>
            <xs:element ref="summary"/>
            <xs:element name="item" type="itemType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="copyright">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
        <xs:element name="subtitle">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
        <xs:element name="summary">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="description">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:complexType name="enclosureType">
        <xs:attribute name="url" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:anyURI">
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="length" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:int">
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="type" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
    <xs:element name="guid">
        <xs:simpleType>
            <xs:restriction base="xs:anyURI">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:complexType name="imageType">
        <xs:sequence>
            <xs:element ref="url"/>
            <xs:element ref="title"/>
            <xs:element ref="link"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="itemType">
        <xs:sequence>
            <xs:element ref="title"/>
            <xs:element ref="link"/>
            <xs:element ref="description"/>
            <xs:element ref="subtitle"/>
            <xs:element ref="summary"/>
            <xs:element name="enclosure" type="enclosureType"/>
            <xs:element ref="guid"/>
            <xs:element ref="pubDate"/>
            <xs:element ref="duration"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="language">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="link">
        <xs:simpleType>
            <xs:restriction base="xs:anyURI">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="pubDate">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="duration">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="rss">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="channel" type="channelType"/>
            </xs:sequence>
            <xs:attribute name="version" use="required">
                <xs:simpleType>
                    <xs:restriction base="xs:decimal">
                        <xs:enumeration value="2.0"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <xs:element name="title">
        <xs:simpleType>
            <xs:restriction base="xs:string">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="url">
        <xs:simpleType>
            <xs:restriction base="xs:anyURI">
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>

Then I created Java classes (ObjectFactory.java, Rss.java, ChannelType.java, ImageType.java, ItemType.java and EnclosureType.java) using xjc. Now we're ready to output iTunes compatible podcast feed.

I had closed myTunes before I moved to Melbourne in 2008. In less than 2 years, myTunes collected several hundreds of user agent (it only collects user agent, nothing else). I think it'll be a good idea to publish them one day.