<?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: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;D0MHQX49eyp7ImA9WhRUGE0.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106</id><updated>2012-01-28T18:50:30.063-08:00</updated><category term="Being Grad Students" /><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>28</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;D0MHQX48eCp7ImA9WhRUGE0.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-5029535706266613485</id><published>2012-01-14T16:05:00.000-08:00</published><updated>2012-01-28T18:50:30.070-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-28T18:50:30.070-08:00</app:edited><title>The Best, Easy, Delicious Desserts for Potluck Party</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w5HR7x1Fegya0rPHaR0gC3cDP1w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w5HR7x1Fegya0rPHaR0gC3cDP1w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w5HR7x1Fegya0rPHaR0gC3cDP1w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w5HR7x1Fegya0rPHaR0gC3cDP1w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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. I wanted to learn to make one thing that I could bring. Preferably something that tastes 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;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-5029535706266613485?l=b010.blogspot.com' alt='' /&gt;&lt;/div&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 Party" /><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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bicP8ULbmETUI1XTcurFRRuqs78/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bicP8ULbmETUI1XTcurFRRuqs78/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bicP8ULbmETUI1XTcurFRRuqs78/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bicP8ULbmETUI1XTcurFRRuqs78/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-5377030620267134373?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RJeQBCLtkU9C9vsafDXhxbqyz1w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RJeQBCLtkU9C9vsafDXhxbqyz1w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RJeQBCLtkU9C9vsafDXhxbqyz1w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RJeQBCLtkU9C9vsafDXhxbqyz1w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-2570676259538687090?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KWjK6GyII_87j0cMw2KSoccOsuY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KWjK6GyII_87j0cMw2KSoccOsuY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KWjK6GyII_87j0cMw2KSoccOsuY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KWjK6GyII_87j0cMw2KSoccOsuY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-5091678986708213393?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rNfiRmDqF5gVM6kWLN_o6wzfGGs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rNfiRmDqF5gVM6kWLN_o6wzfGGs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rNfiRmDqF5gVM6kWLN_o6wzfGGs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rNfiRmDqF5gVM6kWLN_o6wzfGGs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-1095907194558941578?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/inuGcJ5frgX4BpJpuZyYMGoWxjA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/inuGcJ5frgX4BpJpuZyYMGoWxjA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/inuGcJ5frgX4BpJpuZyYMGoWxjA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/inuGcJ5frgX4BpJpuZyYMGoWxjA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-7451405287992955436?l=b010.blogspot.com' alt='' /&gt;&lt;/div&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gw-kI34YRHfZn76vjPe-GnhX_ok/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gw-kI34YRHfZn76vjPe-GnhX_ok/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gw-kI34YRHfZn76vjPe-GnhX_ok/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gw-kI34YRHfZn76vjPe-GnhX_ok/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-5901283024194393691?l=b010.blogspot.com' alt='' /&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0OUBDRvQR1jHlYjZxK66xYU0M8k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0OUBDRvQR1jHlYjZxK66xYU0M8k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0OUBDRvQR1jHlYjZxK66xYU0M8k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0OUBDRvQR1jHlYjZxK66xYU0M8k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-31041966377668694?l=b010.blogspot.com' alt='' /&gt;&lt;/div&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rpd6RbuRaP2AtzqZ1oduNgjKWW4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rpd6RbuRaP2AtzqZ1oduNgjKWW4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rpd6RbuRaP2AtzqZ1oduNgjKWW4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rpd6RbuRaP2AtzqZ1oduNgjKWW4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-8789614347261997502?l=b010.blogspot.com' alt='' /&gt;&lt;/div&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6LSdHPZKAYQCTUxazpXZ4Ey8s6w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6LSdHPZKAYQCTUxazpXZ4Ey8s6w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6LSdHPZKAYQCTUxazpXZ4Ey8s6w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6LSdHPZKAYQCTUxazpXZ4Ey8s6w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-2024211075755762718?l=b010.blogspot.com' alt='' /&gt;&lt;/div&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/N3x6tTa7ctV5rbIYNnJAJoyPkGg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N3x6tTa7ctV5rbIYNnJAJoyPkGg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/N3x6tTa7ctV5rbIYNnJAJoyPkGg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N3x6tTa7ctV5rbIYNnJAJoyPkGg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-3757553452028477741?l=b010.blogspot.com' alt='' /&gt;&lt;/div&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Dn9cSRBhQAMOxMzEydBwNY5onvo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dn9cSRBhQAMOxMzEydBwNY5onvo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Dn9cSRBhQAMOxMzEydBwNY5onvo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dn9cSRBhQAMOxMzEydBwNY5onvo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-1890711803060151813?l=b010.blogspot.com' alt='' /&gt;&lt;/div&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CA8WjoZ1ooMmlHUfZ4H2SxaKH68/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CA8WjoZ1ooMmlHUfZ4H2SxaKH68/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CA8WjoZ1ooMmlHUfZ4H2SxaKH68/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CA8WjoZ1ooMmlHUfZ4H2SxaKH68/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-5851111159989288522?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&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">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TEZxJrpy0NZcb1e_yY4tA3vcFlc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TEZxJrpy0NZcb1e_yY4tA3vcFlc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TEZxJrpy0NZcb1e_yY4tA3vcFlc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TEZxJrpy0NZcb1e_yY4tA3vcFlc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-5281232645722133701?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&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;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dq30dcqTWYysdKcpJx1FWACvAiM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dq30dcqTWYysdKcpJx1FWACvAiM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dq30dcqTWYysdKcpJx1FWACvAiM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dq30dcqTWYysdKcpJx1FWACvAiM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;"&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-5779947593975373723?l=b010.blogspot.com' alt='' /&gt;&lt;/div&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><entry gd:etag="W/&quot;A08MRns5eyp7ImA9WxZRGUs.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-4183315849414322120</id><published>2008-02-13T22:12:00.000-08:00</published><updated>2008-02-13T22:18:07.523-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-13T22:18:07.523-08:00</app:edited><title>Two nice Java libraries for visualizing and exploring graphs (networks)</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uQ3tfL5sFriNQzOvk5K0IPNzKP0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQ3tfL5sFriNQzOvk5K0IPNzKP0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uQ3tfL5sFriNQzOvk5K0IPNzKP0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uQ3tfL5sFriNQzOvk5K0IPNzKP0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Prefuse (http://prefuse.org/)&lt;/li&gt;&lt;li&gt;JUNG (http://jung.sourceforge.net/)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Main observation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JUNG is designed for graphs, while Prefuse is designed for many different types of data (which include graphs).&lt;/li&gt;&lt;ul&gt;&lt;li&gt;JUNG has graph operations and algorithms that Prefuse doesn't have&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;JUNG seems to be better documented&lt;/li&gt;&lt;li&gt;JUNG seems to be more scalable&lt;/li&gt;&lt;li&gt;Examples from Prefuse seem to be more pretty&lt;/li&gt;&lt;li&gt;Prefuse provides nice interactivity and cool animations&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-4183315849414322120?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/bWhvocvR6FA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/4183315849414322120?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/4183315849414322120?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/bWhvocvR6FA/two-nice-java-libraries-for-visualizing.html" title="Two nice Java libraries for visualizing and exploring graphs (networks)" /><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/two-nice-java-libraries-for-visualizing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQMRnwyeip7ImA9WB5UEU8.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-2218962556964492169</id><published>2007-08-14T12:33:00.000-07:00</published><updated>2007-08-14T12:39:47.292-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-14T12:39:47.292-07:00</app:edited><title>Free WPF DataGrid from Xceed</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cxKMfZLQ3MO-jd_fGKDyBoAQBto/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cxKMfZLQ3MO-jd_fGKDyBoAQBto/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cxKMfZLQ3MO-jd_fGKDyBoAQBto/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cxKMfZLQ3MO-jd_fGKDyBoAQBto/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Exactly what I need for my current project. So glad I found this great stuff from Xceed before I try to build one myself! (URL: &lt;a href="http://xceed.com/Grid_WPF_Intro.html"&gt;http://xceed.com/Grid_WPF_Intro.html&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-2218962556964492169?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/V3kIztuQnwg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2218962556964492169?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2218962556964492169?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/V3kIztuQnwg/free-wpf-datagrid-from-xceed.html" title="Free WPF DataGrid from Xceed" /><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/2007/08/free-wpf-datagrid-from-xceed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEABQXs9eyp7ImA9WB5VGU0.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-7041929411471609422</id><published>2007-08-12T00:56:00.000-07:00</published><updated>2007-08-12T01:19:10.563-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-12T01:19:10.563-07:00</app:edited><title>Get the keywords associated with a result item returned by Google Desktop Search</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8LBE1b-VeEy7g3luwk8nv18QDik/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8LBE1b-VeEy7g3luwk8nv18QDik/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8LBE1b-VeEy7g3luwk8nv18QDik/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8LBE1b-VeEy7g3luwk8nv18QDik/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I've been programming with C# and Google Desktop Search (GDS) API for quite a while. Today, when I was browsing the &lt;span style="font-style: italic;"&gt;Interop library&lt;/span&gt; of GDS (Interop.GoogleDesktopAPI.LIB) in Visual Studio 2008, I found that it's actually possible to &lt;span style="font-style: italic; font-weight: bold;"&gt;obtain the keywords&lt;/span&gt; that Google Desktop has identified out of an indexed item. This hasn't been documented by Google GDS API guide yet. (I'm using GDS version &lt;span style=""&gt;&lt;/span&gt;5.1.0707.23222-en-pb.)&lt;br /&gt;&lt;br /&gt;Just call the function &lt;span style="font-weight: bold;font-family:courier new;" &gt;GetKeywords&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(int &lt;/span&gt;&lt;span style="font-style: italic;font-family:courier new;" &gt;numKeywords&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;, bool &lt;/span&gt;&lt;span style="font-style: italic;font-family:courier new;" &gt;includeWeight&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;) &lt;/span&gt;of any &lt;span style="font-weight: bold;font-family:courier new;" &gt;IGoogleDesktopQueryResultItem&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;3&lt;/span&gt; object and you'll get the keywords as a list of strings. Even better, if you set the input parameter &lt;span style="font-family:courier new;"&gt;includeWeight&lt;/span&gt; to &lt;span style="font-family:courier new;"&gt;true&lt;/span&gt;, then not only will you get the list of keywords, but following each keyword, you'll get the ranking score of that keyword as well.&lt;br /&gt;&lt;br /&gt;A sample output for &lt;span style="font-style: italic;font-family:courier new;" &gt;GetKeywords(10, true)&lt;/span&gt; is as follows:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;papers:10.78 workshop:9.62 layout:9.01 university:8.18&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Setting the input parameter &lt;span style="font-family:courier new;"&gt;10&lt;/span&gt; asks GDS to return the first 10 keywords, if there are more than 10. Notice that the keywords are always ranked by the ranking score in descending order.&lt;br /&gt;&lt;br /&gt;One last thing, it's important to &lt;span style="font-weight: bold;"&gt;cast a result object to &lt;span style="font-family:courier new;"&gt;IGoogleDesktopQueryResultItem3&lt;/span&gt;&lt;/span&gt;, since only this version 3 result object has the &lt;span style="font-family:courier new;"&gt;GetKeywords()&lt;/span&gt; function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-7041929411471609422?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/xM4_d6cHoYg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/7041929411471609422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/7041929411471609422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/xM4_d6cHoYg/get-keywords-associated-with-result.html" title="Get the keywords associated with a result item returned by Google Desktop Search" /><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/2007/08/get-keywords-associated-with-result.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYHQXw6fSp7ImA9WB5VEUs.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-7955679477594650751</id><published>2007-08-03T11:21:00.000-07:00</published><updated>2007-08-03T11:35:30.215-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-03T11:35:30.215-07:00</app:edited><title>Re-enabling the Aero glass effect in Windows Vista</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VJ7rPbr3j4SzmEbhFekp-86t-AY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VJ7rPbr3j4SzmEbhFekp-86t-AY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VJ7rPbr3j4SzmEbhFekp-86t-AY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VJ7rPbr3j4SzmEbhFekp-86t-AY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;If you're using Vista with a nVidia graphics card and you want to update the graphics card's driver, the chances are that after upgrading, you may loose the Aero glass effect (the semi-transparent and blurred windows title bars). That is, Vista may all of a sudden stop using the graphics card's hardware acceleration to draw windows and the desktop, causing the windows' backgrounds to become opaque and the "Switch between windows" 3D effect (the fancy-looking windows switching animation when you press Windows+Tab) to become disabled.&lt;br /&gt;&lt;br /&gt;If that hasn't happened to you, then congrats! It happened to me on two computers, one desktop and one laptop. Fortunately, the solution is simple. Just go to "Control Panel -&gt; System And Maintainence -&gt; Check your computer's Windows Experience Index base score" and click "update my score". After the new score has been calculated, you'll get back your graphics acceleration... Don't know why, but it works! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-7955679477594650751?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/EW2y0okgzjQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/7955679477594650751?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/7955679477594650751?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/EW2y0okgzjQ/re-enabling-aero-glass-effect-in.html" title="Re-enabling the Aero glass effect in Windows Vista" /><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/2007/08/re-enabling-aero-glass-effect-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNQH84eSp7ImA9WB5QEEg.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-4724430920528686149</id><published>2007-06-28T12:11:00.000-07:00</published><updated>2007-06-28T12:19:51.131-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-28T12:19:51.131-07:00</app:edited><title>WPF: getting a data-bound data template and the items within it</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n2_ZZ2NO94GTBMiNwDkTLngE7EI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n2_ZZ2NO94GTBMiNwDkTLngE7EI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n2_ZZ2NO94GTBMiNwDkTLngE7EI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n2_ZZ2NO94GTBMiNwDkTLngE7EI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I'm so happy to find out about &lt;a href="http://west-wind.com/WebLog/posts/78221.aspx"&gt;Rich Strahl's post on how to get the items within a data template&lt;/a&gt; that is data-bound to, say, a list box.&lt;br /&gt;&lt;br /&gt;It turns out the only way to get an item inside a data template is to programmatically go into the UI hierarchy of the template... not elegant at all!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-4724430920528686149?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/3TLP1WPnkRw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/4724430920528686149?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/4724430920528686149?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/3TLP1WPnkRw/wpf-getting-data-bound-data-template.html" title="WPF: getting a data-bound data template and the items within it" /><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/2007/06/wpf-getting-data-bound-data-template.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEICQX4zcCp7ImA9WB5RGU8.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-2617929911960170128</id><published>2007-06-26T22:32:00.000-07:00</published><updated>2007-06-26T22:36:00.088-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-26T22:36:00.088-07:00</app:edited><title>The best tutorial about data binding in WPF</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/owzDrhEMIq3sRqrR5TGSt4WSR4k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/owzDrhEMIq3sRqrR5TGSt4WSR4k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/owzDrhEMIq3sRqrR5TGSt4WSR4k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/owzDrhEMIq3sRqrR5TGSt4WSR4k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;It turns out that Microsoft's MSDN has &lt;a href="http://msdn2.microsoft.com/en-us/library/ms752347.aspx"&gt;the best tutorial&lt;/a&gt; around about how to do data binding in WPF. Everything is explained clearly; the diagrams, tables, and examples are just perfect. Double thumbs up. Waaaay better than many other online data binding tutorials.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-2617929911960170128?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/dDOAAnYl9Q4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2617929911960170128?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2617929911960170128?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/dDOAAnYl9Q4/best-tutorial-about-data-binding-in-wpf.html" title="The best tutorial about data binding in WPF" /><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/2007/06/best-tutorial-about-data-binding-in-wpf.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8BQns7cCp7ImA9WB5RGEQ.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-588634232120783023</id><published>2007-06-26T15:54:00.000-07:00</published><updated>2007-06-26T16:00:53.508-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-26T16:00:53.508-07:00</app:edited><title>Day of Silence</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/E5lms7TrK_dsClcEg4rCvEdZ9o8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E5lms7TrK_dsClcEg4rCvEdZ9o8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/E5lms7TrK_dsClcEg4rCvEdZ9o8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E5lms7TrK_dsClcEg4rCvEdZ9o8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;I sometimes listen to &lt;a href="http://www.pandora.com"&gt;Pandora&lt;/a&gt;, a popular Internet radio site. Today, June 26, 2007, is the Day of Silence -- hence, no music streaming for the day. It's becuase "an arbitration committee in Washington DC has drastically increased the licensing fees Internet radio sites must pay to stream songs."&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pandora, along with a lot of other Internet radio sites are going off the air today.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's something that music lovers (especially those who listen to internet music) can do. Call their Congressiona lrepresentatives and ask them to support the bill "Internet Radio Equality Act".&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-588634232120783023?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/zrjkKDVlNbA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/588634232120783023?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/588634232120783023?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/zrjkKDVlNbA/day-of-silence.html" title="Day of Silence" /><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/2007/06/day-of-silence.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMQHs_eyp7ImA9WB5RGEQ.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-1256258414553492234</id><published>2007-06-26T15:47:00.000-07:00</published><updated>2007-06-26T15:53:01.543-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-26T15:53:01.543-07:00</app:edited><title>LearnWPF.com</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6HpbnhcmIxT0yK-BuDhrUC2LmOE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6HpbnhcmIxT0yK-BuDhrUC2LmOE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6HpbnhcmIxT0yK-BuDhrUC2LmOE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6HpbnhcmIxT0yK-BuDhrUC2LmOE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Just found out about &lt;a href="http://www.learnwpf.com"&gt;LearnWPF.com&lt;/a&gt; today. It features some short WPF tutorials of some simple-and-common-yet-you-don't-know-how-to-do-it-right things. Some examples include data binding, creating image reflection (something like Apple's widgely used eye-candy visual effects), etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-1256258414553492234?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/AcEdygvit_o" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1256258414553492234?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/1256258414553492234?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/AcEdygvit_o/learnwpfcom.html" title="LearnWPF.com" /><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/2007/06/learnwpfcom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQFRn86fCp7ImA9WB5SGUo.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-2421186432847796797</id><published>2007-06-15T23:59:00.000-07:00</published><updated>2007-06-16T00:01:57.114-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-16T00:01:57.114-07:00</app:edited><title>The correct way to repaint a form or control in c#</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3YoRcV2YHKEdhztqscxQ42fFupc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3YoRcV2YHKEdhztqscxQ42fFupc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3YoRcV2YHKEdhztqscxQ42fFupc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3YoRcV2YHKEdhztqscxQ42fFupc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="remarksToggle"&gt;There are two ways to repaint a form and its contents: &lt;/a&gt;&lt;/p&gt;&lt;a name="remarksToggle"&gt; &lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a name="remarksToggle"&gt; &lt;/a&gt;&lt;p&gt;&lt;a name="remarksToggle"&gt;You can use one of the overloads of the &lt;/a&gt;&lt;a onclick="javascript:Track('ctl00_LibFrame_ctl16|ctl00_LibFrame_ctl17',this);" href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.invalidate.aspx"&gt;Invalidate&lt;/a&gt; method with the &lt;b&gt;Update&lt;/b&gt; method. &lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;You can call the &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl16|ctl00_LibFrame_ctl18',this);" href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.refresh.aspx"&gt;Refresh&lt;/a&gt; method, which forces the control to redraw itself and all its children. This is equivalent to setting the &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl16|ctl00_LibFrame_ctl19',this);" href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.invalidate.aspx"&gt;Invalidate&lt;/a&gt; method to &lt;b&gt;true&lt;/b&gt; and using it with &lt;b&gt;Update&lt;/b&gt;.&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The &lt;b style="font-weight: bold;"&gt;Invalidate&lt;/b&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;method governs what gets painted or repainted. The &lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt; method governs when the painting or repainting occurs. If you use the &lt;b&gt;Invalidate&lt;/b&gt; and &lt;b&gt;Update&lt;/b&gt; methods together rather than calling &lt;span style="font-weight: bold;"&gt;Refresh&lt;/span&gt;, what gets repainted depends on which overload of &lt;b&gt;Invalidate&lt;/b&gt; you use. The &lt;b&gt;Update&lt;/b&gt; method just forces the control to be painted immediately, but the &lt;b&gt;Invalidate&lt;/b&gt; method governs what gets painted when you call the &lt;b&gt;Update&lt;/b&gt; method.&lt;/p&gt;(Above info quoted from MSDN &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.update.aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.update.aspx&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-2421186432847796797?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/b99pfM_taF4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2421186432847796797?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/2421186432847796797?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/b99pfM_taF4/correct-way-to-repaint-form-or-control.html" title="The correct way to repaint a form or control in c#" /><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/2007/06/correct-way-to-repaint-form-or-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08ARHk8fCp7ImA9WB5SFk4.&quot;"><id>tag:blogger.com,1999:blog-3085503166137311106.post-4954969021378154922</id><published>2007-06-12T00:55:00.000-07:00</published><updated>2007-06-12T01:10:45.774-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-12T01:10:45.774-07:00</app:edited><title>Postable: convert codes to make them show up properly on a webpage</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MIV5bL-lZa5JospX-t9brXhvUUo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MIV5bL-lZa5JospX-t9brXhvUUo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MIV5bL-lZa5JospX-t9brXhvUUo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MIV5bL-lZa5JospX-t9brXhvUUo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://www.elliotswan.com/postable/"&gt;http://www.elliotswan.com/postable/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Great free web-based tool by Elliot Swan that converts special HTML characters like &lt;span style="color: rgb(255, 204, 0);"&gt;&lt;&lt;/span&gt; and &lt;span style="color: rgb(255, 204, 0);"&gt;&gt;&lt;/span&gt; into  &lt;span style="color: rgb(255, 204, 0);"&gt;&amp;amp;llt;&lt;/span&gt; and &lt;span style="color: rgb(255, 204, 0);"&gt;&amp;amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3085503166137311106-4954969021378154922?l=b010.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/bmdrm/~4/Z_VYZuJQuMA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/4954969021378154922?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3085503166137311106/posts/default/4954969021378154922?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/bmdrm/~3/Z_VYZuJQuMA/great-free-web-based-tool-that-converts.html" title="Postable: convert codes to make them show up properly on a webpage" /><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/2007/06/great-free-web-based-tool-that-converts.html</feedburner:origLink></entry></feed>

