<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEcMRX06fCp7ImA9WhBVF0U.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106</id><updated>2013-04-23T22:41:24.314-07:00</updated><category term="Being Grad Students" /><category term="SQLite" /><title>Polo's Blog</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://b010.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://b010.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/bmdrm" /><feedburner:info uri="blogspot/bmdrm" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CE4CR3k8eSp7ImA9WhBWGE4.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5674345192057852219</id><published>2013-04-12T23:02:00.003-07:00</published><updated>2013-04-12T23:02:46.771-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-12T23:02:46.771-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Essential PhD skills</title><content type="html">http://www.phds.org/graduate-school-success/essential-skills/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Mentoring&lt;/li&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Negotiation&lt;/li&gt;
&lt;li&gt;Computer&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Grant Writing&lt;/li&gt;
&lt;li&gt;Professional Ethics&lt;/li&gt;
&lt;li&gt;Management&lt;/li&gt;
&lt;li&gt;Teaching&lt;/li&gt;
&lt;li&gt;Marketing Yourself&lt;/li&gt;
&lt;li&gt;Time Management&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/-8VzuF63-fU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5674345192057852219?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5674345192057852219?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/-8VzuF63-fU/essential-phd-skills.html" title="Essential PhD skills" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2013/04/essential-phd-skills.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMNQ3c8eyp7ImA9WhBWGE4.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-1545764482045091834</id><published>2013-04-12T22:54:00.001-07:00</published><updated>2013-04-12T22:54:52.973-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-12T22:54:52.973-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Must read for PhD students</title><content type="html">Probably the best few minutes you will spend in your PhD life. Life-changing advice!&lt;br /&gt;
&lt;a href="http://www.cs.berkeley.edu/~pattrsn/talks/BadCareer.pdf" target="_blank"&gt;How to have a bad career in research/academia&lt;/a&gt; by Prof. David Patterson&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/0fBn4VXCBs4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1545764482045091834?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1545764482045091834?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/0fBn4VXCBs4/must-read-for-phd-students.html" title="Must read for PhD students" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2013/04/must-read-for-phd-students.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMCRnk4eyp7ImA9WhBXFU4.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-8221450300097091992</id><published>2013-03-28T23:27:00.004-07:00</published><updated>2013-03-28T23:27:47.733-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-28T23:27:47.733-07:00</app:edited><title>Automatically fix EPS bounding box on Mac, using ps2eps</title><content type="html">&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/P7Mw1t5Oy7Q" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/8221450300097091992?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/8221450300097091992?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/P7Mw1t5Oy7Q/automatically-fix-eps-bounding-box-on.html" title="Automatically fix EPS bounding box on Mac, using ps2eps" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2013/03/automatically-fix-eps-bounding-box-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUGQng7fyp7ImA9WhNbEk8.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-7380651899699602597</id><published>2013-01-14T19:57:00.001-08:00</published><updated>2013-01-14T19:57:03.607-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-14T19:57:03.607-08:00</app:edited><title>Shell script to import MySQL dumpfile into SQLite</title><content type="html">Download shell script:&amp;nbsp;&lt;a href="http://poloclub.gatech.edu/downloads/mysql2sqlite.sh" target="_blank"&gt;mysql2sqlite.sh&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;# Compiled by Polo Chau, by adapting Igor's StackOverflow answer on&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;# http://stackoverflow.com/questions/489277/script-to-convert-mysql-dump-sql-file-into-format-that-can-be-imported-into-sqli&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;if [ "x$1" == "x" ]; then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo ""&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo "Usage: $0 &lt;mysql dump="dump" filename="filename"&gt;"&lt;/mysql&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo "This is a shell script that imports a MySQL dumpfile into an SQLite database."&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo "Tested on a Mac with OS X 10.8.2 (late 2012)"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo "Creates 3 output files."&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo "1) out.db &amp;nbsp;-- SQLite database created from the MySQL dumpfile"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo "2) out.sql -- a cleaned-up version of the MySQL dumpfile, readable by SQLite"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo "3) out.err -- SQLite's error messages generated during importation"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;echo ""&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;exit&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;cat $1 |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;# delete the lines containing "KEY", "UNIQUE KEY", "PRIMARY KEY"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;grep -v ' KEY "' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;grep -v ' UNIQUE KEY "' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;grep -v ' PRIMARY KEY ' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;# use sed to substitute mysql-specific keywords with general SQL keywords that sqlite knows&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;# tell sed to read the text as unicode text, by specifying LANG=en-US.UTF-8&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed '/^SET/d' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ unsigned / /g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ auto_increment,/,/g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ auto_increment/ primary key autoincrement/g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ smallint([0-9]*) / integer /g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ tinyint([0-9]*) / integer /g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ int([0-9]*) / integer /g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ character set [^ ]* / /g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ enum([^)]*) / varchar(255) /g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/ on update [^,]*//g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/UNLOCK TABLES;//g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;LANG=en-US.UTF-8 sed 's/LOCK TABLES `[a-zA-Z0-9]*` WRITE;//g' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;# tell perl to read the text as unicode text, by specifying -C&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;perl -C -e 'local $/;$_=&amp;lt;&amp;gt;;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;perl -C -pe '&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; if (/^(INSERT.+?)\(/) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$a=$1;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;s/\\'\''/'\'\''/g;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;s/\\n/\n/g;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;s/\),\(/\);\n$a\(/g;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; ' &amp;gt; out.sql&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;# import the cleaned-up version of mysql dump into out.db sqlite database&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;# errors saved to out.err&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;cat out.sql | sqlite3 out.db &amp;amp;&amp;gt; out.err&lt;/span&gt;&lt;br /&gt;
&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/be0Bf0iFgf8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/7380651899699602597?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/7380651899699602597?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/be0Bf0iFgf8/shell-script-to-import-mysql-dumpfile.html" title="Shell script to import MySQL dumpfile into SQLite" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2013/01/shell-script-to-import-mysql-dumpfile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ERXs5fyp7ImA9WhNUGUg.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-1022065910161479262</id><published>2013-01-11T18:30:00.002-08:00</published><updated>2013-01-11T18:30:04.527-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-11T18:30:04.527-08:00</app:edited><title>Must read for (Java) programmers</title><content type="html">If you are a new programmer (e.g., high-school student, undergrad), and want to become a good one, you should read this:&lt;br /&gt;
&lt;a href="http://www.amazon.com/gp/product/0132350882/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0132350882"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=0132350882&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=posbl0e-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0132350882" style="border: none !important; margin: 0px !important;" width="1" /&gt;

&lt;br /&gt;
&lt;br /&gt;
If you're programming in Java, you should also read this:&lt;br /&gt;
&lt;a href="http://www.amazon.com/gp/product/0321356683/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321356683"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=0321356683&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=posbl0e-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321356683" style="border: none !important; margin: 0px !important;" width="1" /&gt;


&lt;br /&gt;
&lt;br /&gt;
You will benefit from them for the rest of your (programming) life!&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/dqFJqzkncr4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1022065910161479262?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1022065910161479262?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/dqFJqzkncr4/must-read-for-java-programmers.html" title="Must read for (Java) programmers" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2013/01/must-read-for-java-programmers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQCRXk4fCp7ImA9WhNUGUg.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-8721665576754706153</id><published>2013-01-11T18:22:00.002-08:00</published><updated>2013-01-11T18:22:44.734-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-11T18:22:44.734-08:00</app:edited><title>Convert PNG/JPG to EPS on a Mac without creating a huge file</title><content type="html">The command for converting PNG/JPG to EPS are:&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;convert temp.png -compress lzw eps2:temp.eps&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;convert temp.jpg -compress jpeg eps2:temp.eps&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The &lt;span style="font-family: Courier New, Courier, monospace;"&gt;convert&lt;/span&gt; command comes from Mac's built-in &lt;a href="http://www.imagemagick.org/" target="_blank"&gt;imagemagick&lt;/a&gt;&amp;nbsp;package.&lt;br /&gt;
&lt;br /&gt;
If you type only&amp;nbsp;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;convert temp.png temp.eps&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;, it's gonna create the EPS file&amp;nbsp;&lt;b&gt;without&lt;/b&gt; compression, creating a &lt;b&gt;huge&lt;/b&gt; file.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/XeHwxZp5fak" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/8721665576754706153?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/8721665576754706153?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/XeHwxZp5fak/convert-pngjpg-to-eps-on-mac-without.html" title="Convert PNG/JPG to EPS on a Mac without creating a huge file" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2013/01/convert-pngjpg-to-eps-on-mac-without.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcMQn07fip7ImA9WhJQGE0.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-4795763375851668706</id><published>2012-07-31T23:21:00.000-07:00</published><updated>2012-07-31T23:21:23.306-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-31T23:21:23.306-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Best Cloth Rack for Apartments</title><content type="html">Rarely am I so satisfied with a piece of furniture. For this &lt;a href="http://www.amazon.com/gp/product/B0038Z7BK6/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B0038Z7BK6&amp;amp;linkCode=as2&amp;amp;tag=posbl0e-20"&gt;this cloth rack&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B0038Z7BK6" style="border: none !important; margin: 0px !important;" width="1" /&gt;
 I am far more than satisfied.&lt;br /&gt;
&lt;br /&gt;
I've owned it for 5 years. It's survived two moves, and still looks like new -- sturdy, shiny, and holds tons of clothes. You can even do pull-ups on it!&lt;br /&gt;
&lt;br /&gt;
Best features:&lt;br /&gt;
* height adjustable: 48" to 60"&lt;br /&gt;
* hanging rod adjustable: 48" to 72"&lt;br /&gt;
* collapsible; you can pop the top hanging rod, and the two vertical pods will fold down to horizontal.&lt;br /&gt;
* sturdy; doesn't wobble a bit (plastic cloth racks do)&lt;br /&gt;
* can be used to transport large boxes! Stack the boxes on top of the two parallel rods at the bottom and there you go!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.amazon.com/gp/product/B0038Z7BK6/ref=as_li_ss_il?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B0038Z7BK6&amp;amp;linkCode=as2&amp;amp;tag=posbl0e-20"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B0038Z7BK6&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=posbl0e-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B0038Z7BK6" style="border: none !important; margin: 0px !important;" width="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/1IPtNVzaXb4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/4795763375851668706?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/4795763375851668706?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/1IPtNVzaXb4/best-cloth-rack-for-apartments.html" title="Best Cloth Rack for Apartments" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/07/best-cloth-rack-for-apartments.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQERXg_eip7ImA9WhVWGEg.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-6348319824814829602</id><published>2012-04-30T23:36:00.000-07:00</published><updated>2012-04-30T23:38:24.642-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-30T23:38:24.642-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Search for the perfect belt is over!</title><content type="html">Reversible, reasonably priced, nice colors, and doesn't crack.&lt;br /&gt;
&lt;br /&gt;



&lt;a href="http://www.amazon.com/gp/product/B001FOR4PY/ref=as_li_ss_il?ie=UTF8&amp;tag=posbl0e-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001FOR4PY"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=B001FOR4PY&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=posbl0e-20&amp;ServiceVersion=20070822" &gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;l=as2&amp;o=1&amp;a=B001FOR4PY" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/EqbTEae5IIw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/6348319824814829602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/6348319824814829602?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/EqbTEae5IIw/search-for-perfect-belt-is-over.html" title="Search for the perfect belt is over!" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/04/search-for-perfect-belt-is-over.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AEQXo6fip7ImA9WhVWEkw.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-6844218422200183061</id><published>2012-04-23T13:08:00.001-07:00</published><updated>2012-04-23T13:08:20.416-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-23T13:08:20.416-07:00</app:edited><title>PowerPoint Mistakes -- from a usability standpoint</title><content type="html">I saw a presentation today. Some of its fonts were really tiny.&lt;br /&gt;
That prompted me to google "powerpoint mistakes". Got many hits, including this funny and informative &lt;a href="http://www.youtube.com/watch?v=m5Y3P41hr-Q" target="_blank"&gt;YouTube video&lt;/a&gt; by Don McMillan.&lt;br /&gt;
&lt;br /&gt;
Interestingly, these sources often only tell you &lt;b&gt;what&lt;/b&gt; to, or what not to do, but don't really tell you &lt;b&gt;why&lt;/b&gt;.&lt;br /&gt;
For example, some would tell you "don't read the slides", "use a minimal font size of 24", "don't use more than 7 bullets on a slide", "don't use dark color text on dark background", etc.&lt;br /&gt;
&lt;br /&gt;
But what are the common rationale behind all these dos and don'ts?&lt;br /&gt;
&lt;b&gt;Usability&lt;/b&gt; -- that is whether it is easy for your audience to "use" (read, understand, see, etc.) your slides.&lt;br /&gt;
&lt;br /&gt;
If you think about your slides' usability as the first priority, then I expect you can naturally fix many of your slides' problems. For example, you won't:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;use fonts smaller than 24, because audience in the last row of a room can't see the text&lt;/li&gt;
&lt;li&gt;use more than 7 bullets, slide gets visually complex, straining your audience's eyes&lt;/li&gt;
&lt;li&gt;use dark color text on dark background, because your audience will find it hard to read&lt;/li&gt;
&lt;li&gt;read slides, because your audience will find you boring,&lt;/li&gt;
&lt;li&gt;and the list goes on...&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
I think it's much better to only remember one thing -- the principle of good slide usability -- rather than having to remember a laundry list of dos and don'ts.&lt;br /&gt;
&lt;br /&gt;
Usability is one focus of within the research area of Human-Computer Interaction. I think it also applies to slide design.&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/QvBj0Y0hZms" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/6844218422200183061?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/6844218422200183061?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/QvBj0Y0hZms/powerpoint-mistakes-from-usability.html" title="PowerPoint Mistakes -- from a usability standpoint" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/04/powerpoint-mistakes-from-usability.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcFQ3g4eSp7ImA9WhJaEkQ.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-2788923310563148308</id><published>2012-03-27T20:46:00.001-07:00</published><updated>2012-10-03T11:46:52.631-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-03T11:46:52.631-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLite" /><title>Aggregate bitwise OR in SQLite</title><content type="html">The following SQL snippet applies bitwise OR on all the values in &lt;b&gt;numbers&lt;/b&gt; table's &lt;b&gt;value&lt;/b&gt; column. This example supports up to 8 bits; you can easily extend it to support more.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CREATE TEMP TABLE numbers(value INTEGER);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;INSERT INTO numbers VALUES(2);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;INSERT INTO numbers VALUES(3);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;INSERT INTO numbers VALUES(15);&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;select&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;((sum(value&amp;amp;1)&amp;gt;0) &amp;lt;&amp;lt; 0) +&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;((sum(value&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;2)&amp;gt;0) &amp;lt;&amp;lt; 1) +&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;((sum(value&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;4)&amp;gt;0) &amp;lt;&amp;lt; 2) +&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;((sum(value&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;8)&amp;gt;0) &amp;lt;&amp;lt; 3) +&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;((sum(value&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;16)&amp;gt;0) &amp;lt;&amp;lt; 4) +&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;((sum(value&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;32)&amp;gt;0) &amp;lt;&amp;lt; 5) +&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;((sum(value&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;64)&amp;gt;0) &amp;lt;&amp;lt; 6) +&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;((sum(value&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;amp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;128)&amp;gt;0) &amp;lt;&amp;lt; 7)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;from numbers;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script charset="utf-8" src="http://ws.amazon.com/widgets/q?rt=tf_mfw&amp;amp;ServiceVersion=20070822&amp;amp;MarketPlace=US&amp;amp;ID=V20070822/US/posbl0e-20/8001/3c3e78f6-b5c7-4b5c-9f01-8d213f9d64e2" type="text/javascript"&gt;
 
&lt;/script&gt; &lt;noscript&gt;&amp;amp;lt;A HREF="http://ws.amazon.com/widgets/q?rt=tf_mfw&amp;amp;amp;ServiceVersion=20070822&amp;amp;amp;MarketPlace=US&amp;amp;amp;ID=V20070822%2FUS%2Fposbl0e-20%2F8001%2F3c3e78f6-b5c7-4b5c-9f01-8d213f9d64e2&amp;amp;amp;Operation=NoScript"&amp;amp;gt;Amazon.com Widgets&amp;amp;lt;/A&amp;amp;gt;&lt;/noscript&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/vCIvGV9JBlE" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2788923310563148308?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2788923310563148308?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/vCIvGV9JBlE/aggregate-bitwise-or-in-sqlite.html" title="Aggregate bitwise OR in SQLite" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/03/aggregate-bitwise-or-in-sqlite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYMQHczfCp7ImA9WhVVEE4.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5029535706266613485</id><published>2012-01-14T16:05:00.000-08:00</published><updated>2012-05-03T00:29:41.984-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-03T00:29:41.984-07:00</app:edited><title>The Best, Easy, Delicious Desserts for Potluck Parties</title><content type="html">I didn't like potluck parties. I didn't like how my home-cook dishes look like. They're just not appealing.&lt;br /&gt;
&lt;br /&gt;
One day, I decided I had to fix this --- to learn to make one thing that I could bring. Something that's delicious, easy to make, *and* unlikely that other people would bring.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://images.media-allrecipes.com/global/recipes/small/94068.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://images.media-allrecipes.com/global/recipes/small/94068.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
So I found this 5-star&amp;nbsp;&lt;a href="http://allrecipes.com/recipe/brownie-chocolate-chip-cheesecake/detail.aspx"&gt;Brownie Chocolate Chip Cheesecake&lt;/a&gt; recipe.&lt;br /&gt;
It needs very few ingredients, and you basically just mix them together, and it tastes &lt;b&gt;fantastic&lt;/b&gt;. Brownie bottom layer, plus cream cheese top layer filled with chocolate chips. Yummy. None of my friends could resist. (Mr. V, you should try it, but don't eat so much. Watch your tummy.)&lt;br /&gt;
&lt;br /&gt;
&lt;div style="clear: both;"&gt;
&lt;/div&gt;
&lt;a href="http://www.amazon.com/gp/product/B000237FSA/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000237FSA"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL110_&amp;amp;ASIN=B000237FSA&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=posbl0e-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000237FSA" style="border: none !important; margin: 0px !important;" width="1" /&gt;
And I'm using this springform pan. Sturdy and doesn't leak. Hasn't failed me for 1.5 years!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://images.media-allrecipes.com/global/recipes/small/92941.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://images.media-allrecipes.com/global/recipes/small/92941.jpg" /&gt;&lt;/a&gt;This Christmas, I learned another recipe: Rice Krispies Treat.&amp;nbsp;It needs only 3 ingredients, and 10 min to make (really 10 min, unlike other recipes that lie). Delicious. A good dessert to make when I don't have much time. There's &lt;a href="http://allrecipes.com/recipe/kelloggs-rice-krispies-treats-original/"&gt;Kellogg's version&lt;/a&gt;, but I like my friend's ingredient proportion better:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;1/4 cup butter&lt;/li&gt;
&lt;li&gt;4 cups marshmallows&lt;/li&gt;
&lt;li&gt;5 cups Rice Kripies cereal&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.amazon.com/gp/product/B004CFY55A/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B004CFY55A"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL110_&amp;amp;ASIN=B004CFY55A&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=posbl0e-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B004CFY55A" style="border: none !important; margin: 0px !important;" width="1" /&gt;
I use one of these nicely-built pyrex containers (3 QT) to hold the rice kris pies.
&lt;br /&gt;
&lt;br /&gt;
&lt;SCRIPT charset="utf-8" type="text/javascript" src="http://ws.amazon.com/widgets/q?rt=tf_mfw&amp;ServiceVersion=20070822&amp;MarketPlace=US&amp;ID=V20070822/US/posbl0e-20/8001/ca71a7fe-a2c8-4974-9956-cc26f295cc85"&gt; &lt;/SCRIPT&gt; &lt;NOSCRIPT&gt;&lt;A HREF="http://ws.amazon.com/widgets/q?rt=tf_mfw&amp;ServiceVersion=20070822&amp;MarketPlace=US&amp;ID=V20070822%2FUS%2Fposbl0e-20%2F8001%2Fca71a7fe-a2c8-4974-9956-cc26f295cc85&amp;Operation=NoScript"&gt;Amazon.com Widgets&lt;/A&gt;&lt;/NOSCRIPT&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/hWpFCFKUGbs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5029535706266613485?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5029535706266613485?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/hWpFCFKUGbs/desserts-for-potluck-party.html" title="The Best, Easy, Delicious Desserts for Potluck Parties" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/01/desserts-for-potluck-party.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDR3s9eyp7ImA9WhRVFEk.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5377030620267134373</id><published>2012-01-13T01:37:00.000-08:00</published><updated>2012-01-13T01:37:56.563-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-13T01:37:56.563-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Pittsburgh (Being Grad Students)</title><content type="html">Before I came to Pittsburgh for grad student, someone told me there's nothing to do here. And I would freeze to death.&lt;br /&gt;
&lt;br /&gt;
Well, it's certainly different from Hong Kong. But it's a &lt;b&gt;great&lt;/b&gt; city. It's medium sized, and you can find a bit of everything, without the craziness of big cities.&lt;br /&gt;
&lt;br /&gt;
First off, CMU has a diverse student population, with students coming from every parts of the world. I haven't counted, but I'm sure my friends come from more than 20 counties. (Just counted, it's roughly 25!)&lt;br /&gt;
&lt;br /&gt;
Pittsburgh has a fantastic football team (&lt;a href="http://www.steelers.com/"&gt;Steelers&lt;/a&gt;)&amp;nbsp;and an ice hockey team (&lt;a href="http://penguins.nhl.com/"&gt;Penguins&lt;/a&gt;). Ahem, and a baseball team, the &lt;a href="http://pittsburgh.pirates.mlb.com/"&gt;Pirates&lt;/a&gt;. Sorry to say, but the Pirates hasn't been doing that well. Yet, I have only been to Pirates games. Their tickets are cheap.&lt;br /&gt;
&lt;br /&gt;
Whoever says Pittsburgh is cold lies. Don't listen to him. Or her. I have traveled to other cities in the states that are much colder. Try those cities north of Pittsburgh closer to the lake, and you'll know what real cold is! And of course there are even colder ones further north. And it actually doesn't snow that much in the winter. But I never have to shovel snow.&lt;br /&gt;
&lt;br /&gt;
The nicest thing about Pittsburgh is perhaps its cheap housing. As a grad student, I could have afford to &lt;b&gt;buy&lt;/b&gt; a house. Though I didn't. And I regret. Many of my friends bought those. Good investment indeed. The Pittsburgh housing market wasn't affected much at all in 2008. People here really buy houses to live in them.&lt;br /&gt;
&lt;br /&gt;
More later.&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/mcwEZ28NwSA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5377030620267134373?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5377030620267134373?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/mcwEZ28NwSA/pittsburgh-being-grad-students.html" title="Pittsburgh (Being Grad Students)" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/01/pittsburgh-being-grad-students.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YASHY-fCp7ImA9WhRVE0w.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-2570676259538687090</id><published>2012-01-11T13:59:00.000-08:00</published><updated>2012-01-11T13:59:09.854-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T13:59:09.854-08:00</app:edited><title>Steamer instead of iron (Being Grad Students)</title><content type="html">No one likes to iron clothes. It takes so much effort and space. Clearing space in my tiny apartment so I can open up the ironing board is already a chore. Then you warm up the iron. All you want is to just iron one shirt!&lt;br /&gt;
Then lately, I learned of a much better alternative -- using a&amp;nbsp;&lt;a href="http://www.amazon.com/gp/product/B004VMTJ4G/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B004VMTJ4G"&gt;steamer&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B004VMTJ4G" style="border: none !important; margin: 0px !important;" width="1" /&gt;! No ironing board needed. It's fast to heat up the steam (and it only uses water). It has a small footprint. And since it stands upright, you can hang clothes on it. Plus, you can use it to sterilize curtains and other things. Handy.&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/5R48N6daUKg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2570676259538687090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2570676259538687090?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/5R48N6daUKg/steamer-instead-of-iron-being-grad.html" title="Steamer instead of iron (Being Grad Students)" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/01/steamer-instead-of-iron-being-grad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIGQn88eyp7ImA9WhRVE0w.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5091678986708213393</id><published>2012-01-09T11:33:00.000-08:00</published><updated>2012-01-11T13:48:43.173-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T13:48:43.173-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Decorating student apartment (Being Grad Students)</title><content type="html">If you're like me, a grad student renting an apartment, chances are that you have some rather bare (and boring) walls, because your landlord (or landlady) warned you not to hammer any nails, or they will take a big chuck out from your security deposit.&lt;br /&gt;
&lt;br /&gt;
How do you hang a clock then? What about some frame photos?&lt;br /&gt;
&lt;br /&gt;
I found some fantastic "&lt;a href="http://www.amazon.com/gp/product/B000FSORW4/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000FSORW4"&gt;command hooks&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000FSORW4" style="border: none !important; margin: 0px !important;" width="1" /&gt;" by 3M which can be removed from the wall cleanly. No glue left behind. They also won't pulled wallpaper (unless it is peeling anyways). 3M also sells &lt;a href="http://www.amazon.com/gp/product/B000OF6X48/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000OF6X48"&gt;strips&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000OF6X48" style="border: none !important; margin: 0px !important;" width="1" /&gt;&amp;nbsp;for hanging pictures, among other "command" products.&lt;br /&gt;
&lt;br /&gt;
Thumbs up.&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/Cy-dYAt7t2c" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5091678986708213393?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5091678986708213393?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/Cy-dYAt7t2c/decorating-walls-without-damaging-them.html" title="Decorating student apartment (Being Grad Students)" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/01/decorating-walls-without-damaging-them.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIHQH0ycCp7ImA9WhRVE0w.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-1095907194558941578</id><published>2012-01-08T09:59:00.000-08:00</published><updated>2012-01-11T13:48:51.398-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T13:48:51.398-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Choose conferences with nice locations (Being Grad Students)</title><content type="html">One of the nicest being a grad student is you get to travel, often "for free", to conference held at great places&amp;nbsp;(e.g., Sydney, Paris, Hong Kong, etc.).&lt;br /&gt;
&lt;br /&gt;
Picking such a conference could motivate you to work hard for a paper. :-) So choose your conference wisely. After all. If you have some good work that you can submit to similar conferences that have comparable reputation/prestige, which conference would you send it to? The nicer one of course.&lt;br /&gt;
&lt;br /&gt;
Just remember to check with you advisor that it's OK with him/her though.&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/qacXpyAEz8M" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1095907194558941578?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1095907194558941578?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/qacXpyAEz8M/conference-travel-tips-being-grad.html" title="Choose conferences with nice locations (Being Grad Students)" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/01/conference-travel-tips-being-grad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIHRng8eCp7ImA9WhRVE0w.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-7451405287992955436</id><published>2012-01-07T22:00:00.000-08:00</published><updated>2012-01-11T13:48:57.670-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T13:48:57.670-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Cut your own hair (Being Grad Students)</title><content type="html">When I was little, my father cut my hair. Then I came to the states for grad school -- no one cut my hair anymore!&lt;br /&gt;
&lt;br /&gt;
Going to a hair salon in the US can be so expensive. The costs add up really quickly.&amp;nbsp;So I thought about doing it myself; I remembered my father saying "it's a piece of cake" cutting my hair. How bad could it be if I did it myself?&lt;br /&gt;
&lt;br /&gt;
Very bad, when I first started, a few years back. I bought a cheap Wahl hair clipper (like &lt;a href="http://www.amazon.com/gp/product/B000JNQSIQ/ref=as_li_tf_tl?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000JNQSIQ"&gt;this one&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000JNQSIQ" style="border: none !important; margin: 0px !important;" width="1" /&gt;), &amp;nbsp;and I hated it, even though it's a 5 star product.&lt;br /&gt;
1) It has a long cord, which often get in the way&lt;br /&gt;
2) It's really awkward holding it to cut the side or the back of my head -- just try using your right hand to scratch your left ear from behind your head, and you'll know what I mean.&lt;br /&gt;
3) It's a big hassle having to keep changing the "length guides" for different hair lengths.&lt;br /&gt;
&lt;br /&gt;
Apparently, you need something &lt;i&gt;different&lt;/i&gt; when you cut your own hair. I found this&amp;nbsp;&lt;a href="http://www.amazon.com/gp/product/B004QWVY8A/ref=as_li_tf_tl?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B004QWVY8A"&gt;Philips hair clipper&lt;/a&gt;&amp;nbsp;recently, which solved all the above problems!!&lt;br /&gt;
1) It's cordless&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B004QWVY8A" style="border: none !important; margin: 0px !important;" width="1" /&gt;.&lt;br /&gt;
2) It has a rotating head, so you can hold it sideway when you cut your hair on the side or the back of your head&lt;br /&gt;
3) It has a "zoom ring" that lets you change the cutting length from 30mm (about 1.18 in) down to super close shave. No need to fiddle with the millions of "length guides"! (Well, technically, there are still two guides, one for the longer lengths, one for shorter lengths.)&lt;br /&gt;
&lt;br /&gt;
I love this clipper. Great for a quick fix.&lt;br /&gt;
&lt;br /&gt;
For those of you (men) who haven't cut your own hair before. It's very easy (assuming you use this Philips clipper, and you just want to style your hair a little). Here's how:&lt;br /&gt;
&lt;br /&gt;
1a) Pick the longest length you want your hair to be (e.g., 30mm), and run the clipper through your whole head.&lt;br /&gt;
1b)&amp;nbsp;If you want to style the top part of your hair (e.g., for parting, or styling), leave that part longer (or don't cut that at all) for later.&lt;br /&gt;
2) Pick a shorter one (e.g., 25cm) and run it along the areas close to the ear, and the back of your neck.&lt;br /&gt;
3) Repeat step 2, with even shorter length if desired.&amp;nbsp;The key is to "blend" different lengths of hairs.&lt;br /&gt;
4) To add "layers" to your hair (to make your hair more "choppy" and to fine tune it to frame your face), use a pair of scissors, and cut "into" your hair&amp;nbsp;&lt;a href="http://youtu.be/vqtWeWsAgqI?t=1m50s"&gt;like this&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Of course, if you need a really clean cut, or fancy style, you'll have to go to a hair salon.&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/aLec-Q5EFTo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/7451405287992955436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/7451405287992955436?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/aLec-Q5EFTo/being-grad-student-cutting-your-own.html" title="Cut your own hair (Being Grad Students)" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2012/01/being-grad-student-cutting-your-own.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIBQXw9cCp7ImA9WhRVE0w.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5901283024194393691</id><published>2011-01-05T11:48:00.000-08:00</published><updated>2012-01-11T13:49:10.268-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T13:49:10.268-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>Grocery shopping, folding t shirt (Being Grad Students)</title><content type="html">&lt;div&gt;
1. When grocery shopping,  instead of doing all the math in your head about which brand of food (or toilet paper if you may) is cheaper, you can often look at the tiny text close to the prominent sale price. For food, it's often stated as $XXX per ounce (and for toilet paper, $YYY per roll). This save you some brain cells, and some gold coins in your wallet.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
2. Fold a t shirt in 2 sec. (This makes the chore slightly more bearable.)&lt;br /&gt;
&lt;div&gt;
http://youtu.be/An0mFZ3enhM&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/Tl6us-2UHBo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5901283024194393691?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5901283024194393691?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/Tl6us-2UHBo/x-things-every-grad-student-should-know.html" title="Grocery shopping, folding t shirt (Being Grad Students)" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2011/01/x-things-every-grad-student-should-know.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8BRXk9cSp7ImA9WxNTEk8.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-31041966377668694</id><published>2009-08-13T20:03:00.000-07:00</published><updated>2009-08-13T20:34:14.769-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-13T20:34:14.769-07:00</app:edited><title>Creating decorators in the Prefuse framework</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_kYkPk7Cmx7g/SoTVv3w0OMI/AAAAAAAAEEY/CsQhAWOpuL4/s1600-h/prefuse_decorator.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 365px; height: 297px;" src="http://2.bp.blogspot.com/_kYkPk7Cmx7g/SoTVv3w0OMI/AAAAAAAAEEY/CsQhAWOpuL4/s400/prefuse_decorator.png" alt="" id="BLOGGER_PHOTO_ID_5369651674131740866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm working on some graph visualization using &lt;a href="http://prefuse.org/"&gt;Prefuse&lt;/a&gt;, and I want to allow the use to select nodes in the graph by dragging a marquee. In addition, I want to show a tiny black square indicator at the top-left corner of a selected node. The image on the left is what I eventually got.&lt;br /&gt;&lt;br /&gt;I wanted to use the Decorator design pattern provided by Prefuse to add the square indicators. Conceptually, the steps are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;programatically selects a subset of the nodes in the graph&lt;/li&gt;&lt;li&gt;applies the desired decoration on those subset of nodes&lt;/li&gt;&lt;/ol&gt;But in the actual implementation, these basic steps unfold into much more complex steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;creates a "focus group", of type "DefaultTupleSet", to the "visualization" object, using the method visualization.addFocusGroup(); you'll need to give this newly created group a name. This group (which is a "tuple set") is precisely the data structure that you use to store the selected nodes&lt;/li&gt;&lt;li&gt;look at &lt;a href="http://goosebumps4all.net/34all/bb/showthread.php?tid=18&amp;amp;pid=23#pid23"&gt;this example&lt;/a&gt; on how to create a control that lets you draw the rectangle marquee, which will put the selected nodes into the "focus group" that you created in step 1.&lt;/li&gt;&lt;li&gt;now comes the nontrivial part -- creating the "decorators", which are objects &lt;span style="font-weight: bold;"&gt;created&lt;/span&gt; to decorate the selected nodes. Programmatically, you call visualization.addDecorators() to create this new group of decorators. Again, you give this decorator group a name. &lt;/li&gt;&lt;li&gt;creates a layout action to continously relocate the indicator so that it always stay at the top-left of the node&lt;/li&gt;&lt;li&gt;creates a renderer to render the tiny square. I think we can use a ShapeRenderer instead so this step could be skipped.&lt;/li&gt;&lt;/ol&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;NEVER&lt;/span&gt; USE "graph.nodes.xxx.yyy.zzz" AS A GROUP'S NAME. IT BREAKS PREFUSE. I haven't had the time to figure out why, probably because of some of its internal parsing error, but this kind of names break Prefuse. I learned about this the hard way; wasted 4+ hours.&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/IXMl_vH-81M" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/31041966377668694?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/31041966377668694?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/IXMl_vH-81M/creating-decorators-in-prefuse.html" title="Creating decorators in the Prefuse framework" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_kYkPk7Cmx7g/SoTVv3w0OMI/AAAAAAAAEEY/CsQhAWOpuL4/s72-c/prefuse_decorator.png" height="72" width="72" /><feedburner:origLink>http://b010.blogspot.com/2009/08/creating-decorators-in-prefuse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEINQX06fyp7ImA9WxJWFU4.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-8789614347261997502</id><published>2009-05-25T14:53:00.000-07:00</published><updated>2009-06-20T15:23:10.317-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-20T15:23:10.317-07:00</app:edited><title>Using BitSet or BitVector to store a set of integers</title><content type="html">When programming with Java, we typically use HashSet&lt;integer&gt; to store a set of Integer, if we want to keep track of which Integer has been used and which hasn't. When we need to store millions of Integers, HashSet can be too slow, and it may take up too much memory.&lt;br /&gt;&lt;br /&gt;Java's BitSet and BitVector from  &lt;a href="http://acs.lbl.gov/%7Ehoschek/colt/"&gt;COLT&lt;/a&gt; are great alternative; they are MUCH faster and consumes way less memory. For example, to store 20 million integers, both BitSet and BitVector only use about 2.5MB and take only, respectively, 0.67s  and 0.27s (which means BitVector is the fastest) to set and get all of the values once.  using HashSet&lt;integer&gt;, it takes ~962MB, and 6.3s. This is more than 380 times of memory saving, and ~20 times speed up.&lt;br /&gt;&lt;br /&gt;One "disadvantage" for BitVector is that it's size can't dynamically scale, but you can always fake it by manually growing or shrinking the set via &lt;tt&gt;setSize(...)&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;I can't figure out why Java's HashSet implementation uses so much RAM; I tried to reduce the size to 2 million, and that uses 100MB, approximately 1/10 of the size when having 20 millions. So this means indeed the Java implementation is memory-hungry. I'm sure there's some way to cut down the memory consumption, but I haven't spent the time to investigate.&lt;/integer&gt;&lt;/integer&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/bXGtqY65YDk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/8789614347261997502?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/8789614347261997502?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/bXGtqY65YDk/using-bitvector-to-store-set-of.html" title="Using BitSet or BitVector to store a set of integers" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2009/05/using-bitvector-to-store-set-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMFR3Y5cCp7ImA9WxJQEko.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-2024211075755762718</id><published>2009-05-09T22:29:00.000-07:00</published><updated>2009-05-25T11:00:16.828-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-25T11:00:16.828-07:00</app:edited><title>Speed Comparison of:  (1) Java's built-in HashMap,  (2) Trove's TIntIntHashMap, and (3) Colt's OpenIntIntHashMap</title><content type="html">Finally get to do a comparison among several popular Java HashMap implementations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java's built-in HashMap&lt;/li&gt;&lt;li&gt;&lt;a href="http://trove4j.sourceforge.net/"&gt;Trove&lt;/a&gt;'s implementation for primitive types&lt;/li&gt;&lt;li&gt;&lt;a href="http://acs.lbl.gov/%7Ehoschek/colt/"&gt;Colt&lt;/a&gt;'s implementation for primitive types&lt;/li&gt;&lt;/ul&gt;Not too surprisingly, Java's built-in implementation is the slowest, and consumes the largest amount of memory among the three, since it stores objects instead of primitive types (e.g., instead of storing the number 3 as an int, it stores it as an Integer). What WAS surprisingly, however, was that Colt's implementation was SO MUCH faster than Java's implementation. For example, for a int-&gt;int hashmap, running 10,000,000 puts() with Colt took less than &lt;span style="font-weight: bold;"&gt;1/3&lt;/span&gt; of the time.  Running 10,000,000 gets() took less than &lt;span style="font-weight: bold;"&gt;1/6&lt;/span&gt;, and 10,000,000 containsKey() less than &lt;span style="font-weight: bold;"&gt;1/5&lt;/span&gt;! This is some substantial timing saving. This time-saving advantage is still there, even when we use a int-&gt;float[] hashmap.&lt;br /&gt;&lt;br /&gt;Memory-wise, the primitive implementations from Trove and Colt don't save us that much. For int-&gt;int hashmap, both Trove and Colt save us about 30% of memory, but for int-&gt;float[] (each float[] value has length 5) save us less than 10%. Nevertheless, there's still some saving.&lt;br /&gt;&lt;br /&gt;Since I need to deal with large data sets, where it's common to use hashmaps with millions of entries, I'll use the Colt implementation from now on, for both it's impressive time saving and (slighly) lower memory consumption.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kYkPk7Cmx7g/SgZsKm2kS3I/AAAAAAAADiU/QobOWMe1lXQ/s1600-h/speed.gif"&gt;&lt;img style="cursor: pointer; width: 400px; height: 249px;" src="http://3.bp.blogspot.com/_kYkPk7Cmx7g/SgZsKm2kS3I/AAAAAAAADiU/QobOWMe1lXQ/s400/speed.gif" alt="" id="BLOGGER_PHOTO_ID_5334069738150841202" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kYkPk7Cmx7g/SgZusxlwDcI/AAAAAAAADik/WaGMa1Oa4Es/s1600-h/memory.gif"&gt;&lt;img style="cursor: pointer; width: 400px; height: 216px;" src="http://4.bp.blogspot.com/_kYkPk7Cmx7g/SgZusxlwDcI/AAAAAAAADik/WaGMa1Oa4Es/s400/memory.gif" alt="" id="BLOGGER_PHOTO_ID_5334072524171906498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's the code I used for evaluating int-&gt;float[] hashmap. To get the timing and memory consumption for one implementation, comment out the other two that you DON'T want. You will also need to pass in these arguments to the VM, so enough heap memory will be alocated "-Xms1200M -Xmx1200M".&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;&lt;br /&gt;import cern.colt.map.OpenIntIntHashMap;&lt;br /&gt;import cern.colt.map.OpenIntObjectHashMap;&lt;br /&gt;import gnu.trove.TIntIntHashMap;&lt;br /&gt;import gnu.trove.TIntObjectHashMap;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Compare {&lt;br /&gt; &lt;br /&gt; public static void main(String args[]){&lt;br /&gt;  &lt;br /&gt;  System.out.println("1st line: time used(s)\n2nd line: heap memory used so far(MB)");&lt;br /&gt;  &lt;br /&gt;  int n = 10000000;&lt;br /&gt;  &lt;br /&gt;  long startTime = System.nanoTime(); &lt;br /&gt;  long startHeapSize = Runtime.getRuntime().freeMemory();&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;  // BEGIN: benchmark for Java's built-in hashmap&lt;br /&gt;  System.out.println("\n===== Java's built-in HashMap&lt;Integer, Integer&gt; =====");&lt;br /&gt;  HashMap&lt;Integer, float[]&gt; jIntIntMap = new HashMap&lt;Integer, float[]&gt;();&lt;br /&gt;&lt;br /&gt;  System.out.println("\n-- " + n + " puts(key, value) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { jIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;  &lt;br /&gt;  System.out.println("\n-- " + n + " gets(key) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { jIntIntMap.get(i); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;&lt;br /&gt;  System.out.println("\n-- " + n + " containsKey(key) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { jIntIntMap.containsKey(i); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;  // END  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  // BEGIN: benchmark for Trove's TIntIntHashMap&lt;br /&gt;  System.out.println("\n===== Trove's TIntIntHashMap =====");&lt;br /&gt;  TIntObjectHashMap&lt;float[]&gt; tIntIntMap = new TIntObjectHashMap&lt;float[]&gt;();&lt;br /&gt;&lt;br /&gt;  System.out.println("\n-- " + n + " puts(key, value) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { tIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;  &lt;br /&gt;  System.out.println("\n-- " + n + " gets(key) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { tIntIntMap.get(i); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;&lt;br /&gt;  System.out.println("\n-- " + n + " containsKey(key) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { tIntIntMap.containsKey(i); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;  // END     &lt;br /&gt;  &lt;br /&gt;  // BEGIN: benchmark for Colt's OpenIntIntHashMap&lt;br /&gt;  System.out.println("\n===== Colt's OpenIntIntHashMap =====");&lt;br /&gt;  OpenIntObjectHashMap cIntIntMap = new OpenIntObjectHashMap();&lt;br /&gt;&lt;br /&gt;  System.out.println("\n-- " + n + " puts(key, value) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { cIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;  &lt;br /&gt;  System.out.println("\n-- " + n + " gets(key) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { cIntIntMap.get(i); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;&lt;br /&gt;  System.out.println("\n-- " + n + " containsKey(key) --");&lt;br /&gt;  startTime = System.nanoTime(); &lt;br /&gt;  for (int i = 0; i &lt; n; i++) { cIntIntMap.containsKey(i); }&lt;br /&gt;  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );&lt;br /&gt;  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  &lt;br /&gt;  // END    &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="file:///C:/Users/polo/AppData/Local/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;img src="file:///C:/Users/polo/AppData/Local/Temp/moz-screenshot-1.jpg" alt="" /&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/fNa91ik5bA0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2024211075755762718?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2024211075755762718?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/fNa91ik5bA0/speed-comparison-of-1-javas-built-in.html" title="Speed Comparison of:  (1) Java's built-in HashMap,  (2) Trove's TIntIntHashMap, and (3) Colt's OpenIntIntHashMap" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_kYkPk7Cmx7g/SgZsKm2kS3I/AAAAAAAADiU/QobOWMe1lXQ/s72-c/speed.gif" height="72" width="72" /><feedburner:origLink>http://b010.blogspot.com/2009/05/speed-comparison-of-1-javas-built-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8MR3gyeip7ImA9WhRVEEg.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-3757553452028477741</id><published>2009-01-23T12:33:00.000-08:00</published><updated>2012-01-08T12:34:46.692-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-08T12:34:46.692-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students" /><title>How to write a great research paper</title><content type="html">A &lt;a href="https://research.microsoft.com/en-us/um/people/simonpj/papers/giving-a-talk/writing-a-paper-slides.pdf"&gt;great guide&lt;/a&gt; by &lt;a href="http://en.wikipedia.org/wiki/Simon_Peyton_Jones"&gt;Simon Peyton Jones&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/nUlIaASOLpM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/3757553452028477741?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/3757553452028477741?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/nUlIaASOLpM/how-to-write-great-research-paper.html" title="How to write a great research paper" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2009/01/how-to-write-great-research-paper.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HSXo8eip7ImA9WxRbE0k.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-1890711803060151813</id><published>2008-12-03T13:40:00.000-08:00</published><updated>2008-12-03T13:47:18.472-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-03T13:47:18.472-08:00</app:edited><title>Embedding web browser in Java application</title><content type="html">I found this &lt;a href="http://djproject.sourceforge.net/ns/"&gt;NativeSwing library&lt;/a&gt; an excellent library for embedding a web browser in a Java application, seemingly easier to use and much better documented that &lt;a href="https://jdic.dev.java.net/"&gt;JDIC&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/c8dVal5Sd8k" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1890711803060151813?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1890711803060151813?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/c8dVal5Sd8k/embedding-web-browser-in-java.html" title="Embedding web browser in Java application" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2008/12/embedding-web-browser-in-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkACQ30yfyp7ImA9WxRUFkU.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5851111159989288522</id><published>2008-11-25T22:16:00.000-08:00</published><updated>2008-11-25T22:26:02.397-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-25T22:26:02.397-08:00</app:edited><title>Primitive Java Collections (primitive hashset, etc.)</title><content type="html">Java's built-in collections such as hashmap, hashset, etc are not efficient when you have a lot of data (e.g., 1 million of items), it's because everything in the hashmap (i.e. its keys and values) and hashset (i.e. its values) are stored as objects, which are expensive to store and access. So if you want to store, say, 1 million int in a hashset, use a primitive hashset instead, such as &lt;a href="http://trove4j.sourceforge.net/"&gt;Trove&lt;/a&gt;, or &lt;a href="http://acs.lbl.gov/%7Ehoschek/colt/"&gt;COLT&lt;/a&gt;. They seem to be some of the best primitive collections. But I haven't compared their performace (memory consumption and access speed) so I don't know which one is better.&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/hwsE5CISP1c" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5851111159989288522?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5851111159989288522?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/hwsE5CISP1c/primitive-java-collections-primitive.html" title="Primitive Java Collections (primitive hashset, etc.)" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2008/11/primitive-java-collections-primitive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUARH09fSp7ImA9WxRUEEs.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5281232645722133701</id><published>2008-11-18T18:49:00.000-08:00</published><updated>2008-11-18T20:00:45.365-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-18T20:00:45.365-08:00</app:edited><title>Downloading full CiteSeerX data</title><content type="html">Here is, in my opinion, the easiest way to download the full dataset from &lt;a href="http://citeseerx.ist.psu.edu/"&gt;CiteSeerX&lt;/a&gt;. (Note that &lt;a href="http://citeseer.ist.psu.edu/"&gt;CiteSeer &lt;/a&gt;is the older version, which is no longer updated.)&lt;br /&gt;&lt;br /&gt;Steps for downloading the full dataset from CiteSeerX: &lt;ol&gt;&lt;li&gt;Download and extract the "Demo" from  &lt;a class="moz-txt-link-freetext" href="http://www.oclc.org/research/software/oai/harvester.htm"&gt;http://www.oclc.org/research/software/oai/harvester.htm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Go to the directory of the extracted files, type the following  command to download the full dataset of CiteSeerX to the file  "citeseerx_alldata.xml"&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;java -classpath .;oaiharvester.jar;xerces.jar  org.acme.oai.OAIReaderRawDump http://citeseerx.ist.psu.edu/oai2 -o  citeseerx_alldata.xml &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;I also wanted to thank &lt;a href="http://clgiles.ist.psu.edu/"&gt;Dr. Lee Giles&lt;/a&gt; from the CiteSeerX project for pointing me at the right directions to obtain the data and recommending me to try some Perl harvesters (though I didn't eventually use them).&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/sliFy8gpaEA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5281232645722133701?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5281232645722133701?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/sliFy8gpaEA/downloading-full-citeseerx-data.html" title="Downloading full CiteSeerX data" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2008/11/downloading-full-citeseerx-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcDQnc-eSp7ImA9WxZQF0w.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5779947593975373723</id><published>2008-02-22T13:00:00.000-08:00</published><updated>2008-02-22T13:01:13.951-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-22T13:01:13.951-08:00</app:edited><title>People won't buy what they don't understand</title><content type="html">"&lt;i&gt;People won't buy what they don't understand"&lt;br /&gt;A great sentence! That's why we need to write plain English. :-)&lt;br /&gt;&lt;/i&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/_LVyDo1xKP4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5779947593975373723?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/5779947593975373723?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/_LVyDo1xKP4/people-wont-buy-what-they-dont.html" title="People won't buy what they don't understand" /><author><name>Polo Chau</name><uri>http://www.blogger.com/profile/15238798675350370014</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://b010.blogspot.com/2008/02/people-wont-buy-what-they-dont.html</feedburner:origLink></entry></feed>
