<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-23591982</id><updated>2012-01-20T01:17:19.202-05:00</updated><title type='text'>Game developer Jay's blog</title><subtitle type='html'>Jay is a game developer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default?start-index=101&amp;max-results=100'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>173</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23591982.post-5579768277732010937</id><published>2011-03-04T17:38:00.011-05:00</published><updated>2011-03-04T20:03:36.915-05:00</updated><title type='text'>Stereotype on women and men.</title><content type='html'>Two funny videos from YouTube.&lt;br /&gt;&lt;br /&gt;Depending on which side you are, either of them may annoy you. Both are following social stereotype that women are not good at driving and men are blind on sex.&lt;br /&gt;&lt;br /&gt;Women parking:&lt;br /&gt;&lt;a href="http://youtu.be/rn0e6xA5G_8"&gt;http://youtu.be/rn0e6xA5G_8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pepsi-Max:&lt;br /&gt;&lt;a href="http://youtu.be/3N1aOZTTA-c"&gt;http://youtu.be/3N1aOZTTA-c&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you aren't annoyed, imagine that those movie clips are mentioned not for fun but for despising.&lt;br /&gt;&lt;br /&gt;When people stick on a stereotype, their perspective becomes less-sensitive.&lt;br /&gt;Even when a woman have never had a car accident, she is already considered as a troublesome driver. Same thing applies to men: a man who cares the value of family is considered as a play boy.&lt;br /&gt;&lt;br /&gt;There may exist some sort of statistics that support the idea that women are bad at driving.&lt;br /&gt;Those postulated conclusions may or may not help politicians to deal with car accidents caused by women. But when it comes to an individual case, we cannot just assume a woman is bad at driving.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-xAAAli8TTws/TXF4b_CHCvI/AAAAAAAAA0Q/1OOvrZx0zT0/s1600/quantum-image1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/-xAAAli8TTws/TXF4b_CHCvI/AAAAAAAAA0Q/1OOvrZx0zT0/s320/quantum-image1.jpg" alt="" id="BLOGGER_PHOTO_ID_5580373835460840178" border="0" /&gt;&lt;/a&gt;Notice that the statistics or any evidences that support the behavior of groups cannot be directly applied to individual of the group. You can measure the speed and direction of an object, but it doesn't tell either of speed nor direction of each quantum in the object.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5579768277732010937?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5579768277732010937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5579768277732010937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5579768277732010937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5579768277732010937'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/03/stereotype-on-women-and-men.html' title='Stereotype on women and men.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-xAAAli8TTws/TXF4b_CHCvI/AAAAAAAAA0Q/1OOvrZx0zT0/s72-c/quantum-image1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-2636710005362275228</id><published>2011-03-02T17:59:00.006-05:00</published><updated>2011-03-02T18:16:41.215-05:00</updated><title type='text'>Photoshop CS5 Magic: "Content-aware" feature</title><content type='html'>I am very surprised by finding what PhotoShop latest version can do. The most interesting feature was "Content-awareness".&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-Mm7ruWBAf7E/TW7M2MFcZhI/AAAAAAAAA0I/ab0CDEbWbD8/s1600/627715D9.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 100px; height: 100px;" src="http://1.bp.blogspot.com/-Mm7ruWBAf7E/TW7M2MFcZhI/AAAAAAAAA0I/ab0CDEbWbD8/s320/627715D9.png" alt="" id="BLOGGER_PHOTO_ID_5579622219687683602" border="0" /&gt;&lt;/a&gt;You can see the overview video here:&lt;br /&gt;&lt;a href="http://tv.adobe.com/watch/photoshop-cs5-feature-tour/photoshop-cs5-overview/"&gt;&lt;span style="text-decoration: underline;"&gt;http://tv.adobe.com/watch/photoshop-cs5-feature-tour/photoshop-cs5-overview/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A shorter version is here:&lt;br /&gt;&lt;a href="http://tv.adobe.com/watch/photoshop-cs5-feature-tour/terry-whites-top-5-photoshop-cs5-features/"&gt;http://tv.adobe.com/watch/photoshop-cs5-feature-tour/terry-whites-top-5-photoshop-cs5-features/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have seen the same functionality from SIGGRAPH papers in 2007, 2008 and 2009, but I haven't seen a practical software to do them. Now Photoshop integrated it and ready to use.&lt;br /&gt;&lt;br /&gt;Beside content-awareness feature, 3D features are also impressive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-2636710005362275228?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/2636710005362275228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=2636710005362275228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2636710005362275228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2636710005362275228'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/03/photoshop-cs5-magic-content-aware.html' title='Photoshop CS5 Magic: &quot;Content-aware&quot; feature'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Mm7ruWBAf7E/TW7M2MFcZhI/AAAAAAAAA0I/ab0CDEbWbD8/s72-c/627715D9.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7094797257867172207</id><published>2011-03-02T00:26:00.009-05:00</published><updated>2011-03-02T00:47:10.230-05:00</updated><title type='text'>New microphone and voice recognition</title><content type='html'>I got a new microphone from Woot. The product name is "Eye-ball" with USB 2.0. This has a HD quality web-cam that I can hide.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-S3mIpW6lutY/TW3XoIE94TI/AAAAAAAAAz4/8PXBDFxFGsE/s1600/unnamed.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 108px; height: 108px;" src="http://1.bp.blogspot.com/-S3mIpW6lutY/TW3XoIE94TI/AAAAAAAAAz4/8PXBDFxFGsE/s320/unnamed.jpg" alt="" id="BLOGGER_PHOTO_ID_5579352597744967986" border="0" /&gt;&lt;/a&gt;To test the microphone, I was tampering my Windows7 and I found Voice Recognition feature.&lt;br /&gt;I knew WindowsXP had it as well, but this version seems improved in that it had more interfaces for controlling Windows system and Mouse device.&lt;br /&gt;&lt;br /&gt;As a bottom line, I can say "press control c" "press a" to control Keyboard.&lt;br /&gt;I can also say "mousegrid" to control Mouse, then it will show a big grid that covers whole screen with numbers that indicate where to click. I can then say the numbers and a smaller grid will appear with numbers. When I narrowed down enough, I can say "click 4".&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-XdTJaIdDF7Q/TW3XoZ28l4I/AAAAAAAAA0A/Yn1UBrCJ7Gk/s1600/LNH_5.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/-XdTJaIdDF7Q/TW3XoZ28l4I/AAAAAAAAA0A/Yn1UBrCJ7Gk/s320/LNH_5.jpg" alt="" id="BLOGGER_PHOTO_ID_5579352602518001538" border="0" /&gt;&lt;/a&gt;Unfortunately "dictation" feature doesn't seem to work well for me. Possibly because of my poor English or it isn't working well yet.&lt;br /&gt;&lt;br /&gt;And I also found that the when the voice recognition system is parsing sound, my Firefox is unresponsive for a second; my computer is a good one tho.&lt;br /&gt;&lt;br /&gt;I think this is very useful when I watch some movie without Keyboard or Mouse. I don't need to bother Jumi-Mouse on iPhone anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7094797257867172207?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7094797257867172207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7094797257867172207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7094797257867172207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7094797257867172207'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/03/new-microphone-and-voice-recognition.html' title='New microphone and voice recognition'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-S3mIpW6lutY/TW3XoIE94TI/AAAAAAAAAz4/8PXBDFxFGsE/s72-c/unnamed.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5915676203126518923</id><published>2011-02-28T01:54:00.008-05:00</published><updated>2011-03-02T19:48:25.266-05:00</updated><title type='text'>Ponyo</title><content type='html'>I watched Ponyo, one of Japanimation made by Ghibri studio.&lt;br /&gt;&lt;br /&gt;** This article has many spoilers **&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-DVxHEV_24y0/TWtN9xJXlyI/AAAAAAAAAzo/MH0dX5a8vQU/s1600/ponyo.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 154px;" src="http://4.bp.blogspot.com/-DVxHEV_24y0/TWtN9xJXlyI/AAAAAAAAAzo/MH0dX5a8vQU/s320/ponyo.jpg" alt="" id="BLOGGER_PHOTO_ID_5578638286988482338" border="0" /&gt;&lt;/a&gt;I like to share why I found the animation was so interesting.&lt;br /&gt;&lt;br /&gt;Ponyo and ponyo-shaped-friends are analogy to a baby and sperms, respectively. Ponyo passes through a dark tunnel and gets into a transparent egg shaped room, which implies that a baby is carried to a mom's egg.&lt;br /&gt;&lt;br /&gt;Not everything are exactly mapped to the process of delivering a baby but some are added to make the analogy complete and some are exaggerated.&lt;br /&gt;&lt;br /&gt;The animation shows that Ponyo's visiting is causing a lot of troubles: the moon is falling down, ships are missing, and an entire city is submerged. This is very exaggerated but probably almost same level of troubles will be expected in a family once a baby is delivered or being delivered.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-iMWk51wy5r4/TWtOYJUPCCI/AAAAAAAAAzw/BN620GQTHzM/s1600/ponyo2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 173px;" src="http://1.bp.blogspot.com/-iMWk51wy5r4/TWtOYJUPCCI/AAAAAAAAAzw/BN620GQTHzM/s320/ponyo2.jpg" alt="" id="BLOGGER_PHOTO_ID_5578638740153108514" border="0" /&gt;&lt;/a&gt;The protagonist boy was too smart to be 5 years old boy. Five years old is obviously too early to take a responsibility of having a baby but who on the Earth will be fully ready to have a baby.&lt;br /&gt;&lt;br /&gt;By showing ancient fish, it reminded that human species is also from sea and shares many parts on DNA. Who would easily connect dots between delivering a baby with ancient fish.&lt;br /&gt;&lt;br /&gt;Ponyo was crossing the line between the world of magic and that of real. I thought this point of view was very romantic.&lt;br /&gt;&lt;br /&gt;I didn't find any political factors in this animation but there was a number "1907" on a door. I am guessing that there might be some events in the year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5915676203126518923?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5915676203126518923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5915676203126518923' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5915676203126518923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5915676203126518923'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/02/ponyo.html' title='Ponyo'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-DVxHEV_24y0/TWtN9xJXlyI/AAAAAAAAAzo/MH0dX5a8vQU/s72-c/ponyo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-576059355427098671</id><published>2011-02-22T21:17:00.003-05:00</published><updated>2011-02-24T03:25:24.501-05:00</updated><title type='text'>Ganglion Cyst</title><content type='html'>I went to a hospital and a Doctor told me that I have a Ganglion Cyst:&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Ganglion_cyst"&gt;http://en.wikipedia.org/wiki/Ganglion_cyst&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is a special case of Cyst and he also told me that it may go away or pop; I don't know what "pop" would mean tho.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-KpUrd-HDdKA/TWRwPgvZpgI/AAAAAAAAAzg/2kzYPRhp6cs/s1600/myganglioncyst.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://2.bp.blogspot.com/-KpUrd-HDdKA/TWRwPgvZpgI/AAAAAAAAAzg/2kzYPRhp6cs/s320/myganglioncyst.JPG" alt="" id="BLOGGER_PHOTO_ID_5576705650380613122" border="0" /&gt;&lt;/a&gt;I feel little bit of pressure on my hand and arm but not a big deal.&lt;br /&gt;Hopefully it goes away soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-576059355427098671?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/576059355427098671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=576059355427098671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/576059355427098671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/576059355427098671'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/02/ganglion-cyst.html' title='Ganglion Cyst'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-KpUrd-HDdKA/TWRwPgvZpgI/AAAAAAAAAzg/2kzYPRhp6cs/s72-c/myganglioncyst.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-241766710340231510</id><published>2011-02-12T03:43:00.003-05:00</published><updated>2011-02-12T03:50:58.129-05:00</updated><title type='text'>3D Mouse</title><content type='html'>After asking around several people, I finally decided to get one, 3D mouse.&lt;br /&gt;http://www.3dconnexion.com/products/spacenavigator.html&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-xLxMuGkiPhc/TVZJoHtgebI/AAAAAAAAAzQ/V1BCqqLYaf0/s1600/41Q38ZATQQL._SL500_AA300_.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 145px; height: 145px;" src="http://1.bp.blogspot.com/-xLxMuGkiPhc/TVZJoHtgebI/AAAAAAAAAzQ/V1BCqqLYaf0/s320/41Q38ZATQQL._SL500_AA300_.jpg" alt="" id="BLOGGER_PHOTO_ID_5572722542531082674" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-3PWZFobLxSU/TVZJoHfzXzI/AAAAAAAAAzY/npEFj6Y13Ps/s1600/Arrows-treo.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 92px;" src="http://4.bp.blogspot.com/-3PWZFobLxSU/TVZJoHfzXzI/AAAAAAAAAzY/npEFj6Y13Ps/s320/Arrows-treo.jpg" alt="" id="BLOGGER_PHOTO_ID_5572722542473600818" border="0" /&gt;&lt;/a&gt;Since our project is done at this moment, I will have some time to study others and I am thinking of learning Maya.&lt;br /&gt;&lt;br /&gt;If some one is already expert and used to the legacy way of navigating 3D modeling tools, they may not need such a fancy toy. But I am not comfortable navigating 3D space with a mouse yet, so I am expecting high... high... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-241766710340231510?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/241766710340231510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=241766710340231510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/241766710340231510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/241766710340231510'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/02/3d-mouse.html' title='3D Mouse'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-xLxMuGkiPhc/TVZJoHtgebI/AAAAAAAAAzQ/V1BCqqLYaf0/s72-c/41Q38ZATQQL._SL500_AA300_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4938180456965151343</id><published>2011-02-12T03:25:00.003-05:00</published><updated>2011-02-12T03:30:51.501-05:00</updated><title type='text'>Photoshop free video tutorial</title><content type='html'>It seems like Adobe provides free video tutorial for their products:&lt;br /&gt;&lt;a href="http://tv.adobe.com/channel/how-to/"&gt;http://tv.adobe.com/channel/how-to/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/--j0Ow269rmo/TVZFI2uGpVI/AAAAAAAAAzI/Rws2wtOR5pE/s1600/adobeTV.GIF"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 162px; height: 40px;" src="http://2.bp.blogspot.com/--j0Ow269rmo/TVZFI2uGpVI/AAAAAAAAAzI/Rws2wtOR5pE/s320/adobeTV.GIF" alt="" id="BLOGGER_PHOTO_ID_5572717607347725650" border="0" /&gt;&lt;/a&gt;I haven't seen them yet but I will soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4938180456965151343?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4938180456965151343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4938180456965151343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4938180456965151343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4938180456965151343'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/02/photoshop-free-video-tutorial.html' title='Photoshop free video tutorial'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/--j0Ow269rmo/TVZFI2uGpVI/AAAAAAAAAzI/Rws2wtOR5pE/s72-c/adobeTV.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-3049706025116537580</id><published>2011-02-11T13:50:00.006-05:00</published><updated>2011-02-11T14:21:30.171-05:00</updated><title type='text'>Optomologist</title><content type='html'>I have visited an office of Optomologist or optometry.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_qEs9r36R5kw/TVWHkBTSKqI/AAAAAAAAAy4/dMTlVVeEW-c/s1600/Opthamologist%2BGift.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 313px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/TVWHkBTSKqI/AAAAAAAAAy4/dMTlVVeEW-c/s320/Opthamologist%2BGift.jpg" alt="" id="BLOGGER_PHOTO_ID_5572509166835215010" border="0" /&gt;&lt;/a&gt;It is only because I wanted to have a new glasses. If I am in Korea, I can just go to a glasses shop and get one; they will measure my eye sights as well. I wasn't sure what the procedure of buying a glasses in USA, so I went to Optomologist. After all, I had an interesting experience.&lt;br /&gt;&lt;br /&gt;The office had several huge devices that measure something on my eyes. One was for taking picture of back side of my eyes, retina. Another one was for measuring my peripheral sights. Another one was to measure pressure inside of my eyes; that's what I heard anyway.&lt;br /&gt;&lt;br /&gt;The cost of most of them were covered by my Vision insurance that my company pays for me. Otherwise, it could cost about 150 dollars. I know that although it seems free because of the insurance, after all I must be paying for them somehow, so I didn't feel much good about those expensive and inefficient process to get a glasses. Although having a new experience was enjoyable, I will prefer to avoid them next time; if I can...&lt;a href="http://4.bp.blogspot.com/_qEs9r36R5kw/TVWLtZw_lWI/AAAAAAAAAzA/U20xmp6jirc/s1600/rimless_glasses_pic.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/TVWLtZw_lWI/AAAAAAAAAzA/U20xmp6jirc/s320/rimless_glasses_pic.jpg" alt="" id="BLOGGER_PHOTO_ID_5572513726067610978" border="0" /&gt;&lt;/a&gt;I haven't bought my glasses yet, which was the point of all. The office didn't have much variety of glasses in my favor. I will pick one later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-3049706025116537580?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/3049706025116537580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=3049706025116537580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3049706025116537580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3049706025116537580'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/02/optomologist.html' title='Optomologist'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/TVWHkBTSKqI/AAAAAAAAAy4/dMTlVVeEW-c/s72-c/Opthamologist%2BGift.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-6706691991976078508</id><published>2011-02-07T17:39:00.003-05:00</published><updated>2011-02-07T17:42:52.777-05:00</updated><title type='text'>Power XCell 8i as a PCI card</title><content type='html'>I went to an IBM web-page and I found that there is an PCI card that has one PPU and eight SPUs. What a surprise...&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_qEs9r36R5kw/TVB1E-WJPEI/AAAAAAAAAyw/hloreeslmrc/s1600/IMVEDec08ProductsMatrixVision.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 240px; height: 159px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/TVB1E-WJPEI/AAAAAAAAAyw/hloreeslmrc/s320/IMVEDec08ProductsMatrixVision.jpg" alt="" id="BLOGGER_PHOTO_ID_5571081467373108290" border="0" /&gt;&lt;/a&gt;More details are here:&lt;br /&gt;&lt;a href="http://www.matrix-vision.com/products/cell/mvxcell8i.php?lang=en"&gt;http://www.matrix-vision.com/products/cell/mvxcell8i.php?lang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, it doesn't seem cheap. I cannot just click and buy one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-6706691991976078508?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/6706691991976078508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=6706691991976078508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6706691991976078508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6706691991976078508'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/02/power-xcell-8i-as-pci-card.html' title='Power XCell 8i as a PCI card'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/TVB1E-WJPEI/AAAAAAAAAyw/hloreeslmrc/s72-c/IMVEDec08ProductsMatrixVision.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8698109608418587934</id><published>2011-02-07T17:18:00.005-05:00</published><updated>2011-02-07T17:25:57.362-05:00</updated><title type='text'>Toshiba's notebooks, G55, G50, F10, have four SPUs</title><content type='html'>Today I was surprised by finding that some of Notebooks (and super-computers) has SPUs that are used in PlayStation3. Unfortunately I cannot buy any of them at this time of writing and I don't know why they don't sell them anymore.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_qEs9r36R5kw/TVBwxI79i-I/AAAAAAAAAyo/wngn0ts9x0s/s1600/toshiba-qosmio-g55-gesture-control-laptop.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 234px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/TVBwxI79i-I/AAAAAAAAAyo/wngn0ts9x0s/s320/toshiba-qosmio-g55-gesture-control-laptop.jpg" alt="" id="BLOGGER_PHOTO_ID_5571076728572185570" border="0" /&gt;&lt;/a&gt;Little more details are here:&lt;br /&gt;&lt;a href="http://www.blogger.com/Little%20more%20details%20are%20here:%20http://en.wikipedia.org/wiki/SpursEngine"&gt;http://en.wikipedia.org/wiki/SpursEngine&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Those notebooks has 4 of SPUs whereas PlayStations3 has 8. So it is little simplified and smaller version of it. I also heard that it comes with some kind of manuals for SPU programmers, which is very interesting.&lt;br /&gt;&lt;br /&gt;I have also found that F10 had some defects on chips, so probably G50 and G55 should be available still...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8698109608418587934?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8698109608418587934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8698109608418587934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8698109608418587934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8698109608418587934'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/02/toshibas-notebooks-g55-g50-f10-has-four.html' title='Toshiba&apos;s notebooks, G55, G50, F10, have four SPUs'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/TVBwxI79i-I/AAAAAAAAAyo/wngn0ts9x0s/s72-c/toshiba-qosmio-g55-gesture-control-laptop.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5673246576242641113</id><published>2011-01-17T05:42:00.002-05:00</published><updated>2011-01-17T05:53:48.141-05:00</updated><title type='text'>Interesting book finding: Cuda by example.</title><content type='html'>I feel like the world is moving so fast and I am fall behind.&lt;br /&gt;&lt;br /&gt;I have kept reading a book, Mastering Unreal Technology Volume 1, for a few months. Since the book has about 1,000 pages, it is taking so long time for me to finish it.&lt;br /&gt;&lt;br /&gt;Today I found an interesting book where I was reading my book: Cuda by example. I always had questions how to start learning Cuda and didn't have chance to get involved in much. Now the world has a book about it.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/TTQfjNyFa0I/AAAAAAAAAyc/fxu-14FZT5E/s1600/0131387685.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 258px; height: 320px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/TTQfjNyFa0I/AAAAAAAAAyc/fxu-14FZT5E/s320/0131387685.jpg" alt="" id="BLOGGER_PHOTO_ID_5563106129565018946" border="0" /&gt;&lt;/a&gt;In computer technology, publishing a book about a software isn't happening often. One of the reasons is that those software or technologies changes faster so that any books or documents doesn't catch it up enough.&lt;br /&gt;&lt;br /&gt;Because of the reason, it always implies that if I see a book about something, I am already late to catch it up. It makes me blame myself.&lt;br /&gt;&lt;br /&gt;I haven't even started reading books in my posses: "Cell programming" and "Advanced lighting and materials with shaders".&lt;br /&gt;&lt;br /&gt;I wish I can make some time to catch them up after this project is done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5673246576242641113?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5673246576242641113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5673246576242641113' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5673246576242641113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5673246576242641113'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2011/01/interesting-book-finding-cuda-by.html' title='Interesting book finding: Cuda by example.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/TTQfjNyFa0I/AAAAAAAAAyc/fxu-14FZT5E/s72-c/0131387685.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-281460944749090545</id><published>2010-12-02T02:12:00.002-05:00</published><updated>2010-12-02T02:18:27.103-05:00</updated><title type='text'>Kinect works on PC</title><content type='html'>I found an article that says I can use Microsoft Kinect on my PC: http://www.pcmag.com/article2/0,2817,2373107,00.asp&lt;br /&gt;&lt;br /&gt;It reminds me of a similar history on PS3 side that Linux was allowed to be installed and later it was renounced.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/TPdIMdJFzhI/AAAAAAAAAyQ/63qFtlbUEl8/s1600/kinect_shot_1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/TPdIMdJFzhI/AAAAAAAAAyQ/63qFtlbUEl8/s320/kinect_shot_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5545980844948442642" border="0" /&gt;&lt;/a&gt;Although MS says it was open 'by design', who knows how long it will last; even MS wouldn't know.&lt;br /&gt;&lt;br /&gt;I may need to hurry to experience of the exciting device under my control.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-281460944749090545?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/281460944749090545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=281460944749090545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/281460944749090545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/281460944749090545'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/12/kinect-works-on-pc.html' title='Kinect works on PC'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/TPdIMdJFzhI/AAAAAAAAAyQ/63qFtlbUEl8/s72-c/kinect_shot_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5486079176276588247</id><published>2010-09-04T03:45:00.001-04:00</published><updated>2010-09-04T03:56:23.893-04:00</updated><title type='text'>Netflix is amazing</title><content type='html'>Netflix now provides streaming service on iPhone. In other words you can watch any movie anyplace.&lt;br /&gt;&lt;br /&gt;Notice that amazon sells kindle with free 3G and it gives customer experiences that they can read any book any place, which is awesome.&lt;br /&gt;&lt;br /&gt;Until now every iPhone users could use YouTube, but it wasn't enough in the sense of contents. Now it is expended to movies. What else can we expect more.&lt;br /&gt;&lt;br /&gt;Next thing that can surprise me will be streaming game service on iPhone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5486079176276588247?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5486079176276588247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5486079176276588247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5486079176276588247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5486079176276588247'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/09/netflix-is-amazing.html' title='Netflix is amazing'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-2539442663583517145</id><published>2010-07-18T23:09:00.003-04:00</published><updated>2010-07-18T23:16:46.918-04:00</updated><title type='text'>Artistic game</title><content type='html'>It is so cool. I wish we can make this kind of real games:&lt;br /&gt;http://www.todayandtomorrow.net/2009/12/02/arcade-expressionism/&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/TEPDKdNq0eI/AAAAAAAAAxw/659XzwFX6Qk/s1600/arcade_expressionism_1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 256px; height: 320px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/TEPDKdNq0eI/AAAAAAAAAxw/659XzwFX6Qk/s320/arcade_expressionism_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5495450554730205666" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/TEPDKkgoE8I/AAAAAAAAAx4/ZQJqQ9hPbWA/s1600/arcade_expressionism_2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 127px; height: 159px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/TEPDKkgoE8I/AAAAAAAAAx4/ZQJqQ9hPbWA/s320/arcade_expressionism_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5495450556688765890" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/TEPDKx1y31I/AAAAAAAAAyA/Ox1ah48hFVM/s1600/arcade_expressionism_3.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 127px; height: 159px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/TEPDKx1y31I/AAAAAAAAAyA/Ox1ah48hFVM/s320/arcade_expressionism_3.jpg" alt="" id="BLOGGER_PHOTO_ID_5495450560267214674" border="0" /&gt;&lt;/a&gt;Those pictures are from here, I believe:&lt;br /&gt;http://www.itistheworldthatmadeyousmall.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-2539442663583517145?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/2539442663583517145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=2539442663583517145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2539442663583517145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2539442663583517145'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/07/artistic-game.html' title='Artistic game'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/TEPDKdNq0eI/AAAAAAAAAxw/659XzwFX6Qk/s72-c/arcade_expressionism_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-132704667473595905</id><published>2010-07-18T19:06:00.005-04:00</published><updated>2010-07-18T19:16:11.182-04:00</updated><title type='text'>Customer Experience</title><content type='html'>I remember this presentation was introduced by some web sites, but I missed the chance to watch it at the time. Long time latter I got the same URL link and I held the URL:&lt;br /&gt;&lt;br /&gt;http://blog.businessofsoftware.org/2010/06/don-norman-at-business-of-software-2010.html&lt;br /&gt;&lt;br /&gt;I strongly recommend everybody watch it.&lt;br /&gt;It is a very nice talking about User Interface and Customer Experience.&lt;br /&gt;&lt;blockquote&gt;Imagine you’re on the first slide of your powerpoint presentation and  want to move to the next slide. Your remote control has two buttons.  They are unmarked, but one button points up and one button points down.&lt;br /&gt;&lt;br /&gt;Which button do you press?&lt;/blockquote&gt;The result is half and half.&lt;br /&gt;&lt;br /&gt;I like the statement Emotion wins over logical thinking. I think it really does.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/TEOLFjGmVRI/AAAAAAAAAxo/tL1d7laMH_0/s1600/cockpit.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 218px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/TEOLFjGmVRI/AAAAAAAAAxo/tL1d7laMH_0/s320/cockpit.jpg" alt="" id="BLOGGER_PHOTO_ID_5495388897760662802" border="0" /&gt;&lt;/a&gt;I also learned that complexity is fine but needs to be well organized.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-132704667473595905?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/132704667473595905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=132704667473595905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/132704667473595905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/132704667473595905'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/07/customer-experience.html' title='Customer Experience'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/TEOLFjGmVRI/AAAAAAAAAxo/tL1d7laMH_0/s72-c/cockpit.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-2832060773608254291</id><published>2010-07-16T20:39:00.000-04:00</published><updated>2010-07-16T20:40:58.436-04:00</updated><title type='text'>Turn on/off console dev kits: XBox360 and PS3.</title><content type='html'>Today I found Xbox360 also had a way to turn on and off remotely.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Turning off and on Xbox360&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"%XEDK%\bin\win32\xbemulate" /Power off&lt;br /&gt;"%XEDK%\bin\win32\xbemulate" /Process %errorlevel% /Quit&lt;br /&gt;&lt;br /&gt;choice /d y /t 5 /n /m "Wait 5 sec…"&lt;br /&gt;&lt;br /&gt;"%XEDK%\bin\win32\xbemulate" /Power on&lt;br /&gt;"%XEDK%\bin\win32\xbemulate" /Process %errorlevel% /Quit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Turning off and on PS3.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;D:\projects\Cell\host-win32\bin\dtpoff –d ip_address&lt;br /&gt;&lt;br /&gt;D:\projects\Cell\host-win32\bin\dtpon –d ip_address&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-2832060773608254291?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/2832060773608254291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=2832060773608254291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2832060773608254291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2832060773608254291'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/07/turn-onoff-console-dev-kits-xbox360-and.html' title='Turn on/off console dev kits: XBox360 and PS3.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7418774183410377021</id><published>2010-07-13T18:58:00.004-04:00</published><updated>2010-07-13T19:05:50.802-04:00</updated><title type='text'>Unbelievable eye illusion.</title><content type='html'>I still cannot believe the color on A is same with that on B.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/TDzv8I-To4I/AAAAAAAAAxY/4sq6d5SVDSE/s1600/illusion01.gif"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 255px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/TDzv8I-To4I/AAAAAAAAAxY/4sq6d5SVDSE/s320/illusion01.gif" alt="" id="BLOGGER_PHOTO_ID_5493529461965169538" border="0" /&gt;&lt;/a&gt;But they are the same...&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/TDzw4SoYZGI/AAAAAAAAAxg/5fHk6OU8MPg/s1600/illusion02.GIF"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 248px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/TDzw4SoYZGI/AAAAAAAAAxg/5fHk6OU8MPg/s320/illusion02.GIF" alt="" id="BLOGGER_PHOTO_ID_5493530495349711970" border="0" /&gt;&lt;/a&gt;Does it look same now???&lt;br /&gt;&lt;br /&gt;*PS: These images are from the homepage of edward H. adelson.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7418774183410377021?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7418774183410377021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7418774183410377021' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7418774183410377021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7418774183410377021'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/07/unbelievable-eye-illusion.html' title='Unbelievable eye illusion.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/TDzv8I-To4I/AAAAAAAAAxY/4sq6d5SVDSE/s72-c/illusion01.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-6405048448417659312</id><published>2010-07-10T04:01:00.006-04:00</published><updated>2010-07-10T04:29:28.038-04:00</updated><title type='text'>CHOICE for batch file</title><content type='html'>Last week, I found there is a command-line utility, CHOICE. It is for Batch files, *.BAT files.&lt;br /&gt;&lt;br /&gt;The usage is simple:&lt;br /&gt;&lt;blockquote&gt;CHOICE /M "Do you agree?"&lt;br /&gt;&lt;/blockquote&gt;This will print out a message "Do you agree? [Y,N]" and you can type in "y" key or "n" key to answer. Other keys are ignored and enter key after "y/n" is not needed.&lt;br /&gt;&lt;br /&gt;We can also change the key choices like this:&lt;br /&gt;&lt;blockquote&gt;CHOICE /C XPD /M "Do you like [X]box360 games or [P]layStation3 games? ([D]on't care)"&lt;br /&gt;&lt;/blockquote&gt;Now you will have "X", "P", and "D" choices instead of simply "Y/N".&lt;br /&gt;&lt;br /&gt;The user input is then cared out with "IF ERRORLEVEL" command, eg:&lt;br /&gt;&lt;blockquote&gt;CHOICE /C XPD /M "Do you like [X]box360 games or [P]layStation3 games?  ([D]on't care)"&lt;br /&gt;IF ERRORLEVEL 3 GOTO :DONT_CARE&lt;br /&gt;IF ERRORLEVEL 2 GOTO :LIKE_PS3&lt;br /&gt;IF ERRORLEVEL 1 GOTO :LIKE_XBOX&lt;br /&gt;&lt;/blockquote&gt;There is one more thing to note.&lt;br /&gt;&lt;br /&gt;It is always very hard to parse user input arguments. Let's say we have a batch file, "vote.bat", that takes an argument, "xbox" or "ps3".&lt;br /&gt;For example, when we want to vote for PS3, the command will be like this:&lt;br /&gt;&lt;blockquote&gt;vote.bat ps3&lt;br /&gt;&lt;/blockquote&gt;Then in the batch file, the argument is parsed in this way:&lt;br /&gt;&lt;blockquote&gt;@ECHO OFF&lt;br /&gt;IF "%1" == "ps3" GOTO :VOTE_FOR_PS3&lt;br /&gt;IF "%1" == "xbox" GOTO :VOTE_FOR_XBOX&lt;br /&gt;&lt;/blockquote&gt;Now, we need to remember that the batch file takes either "xbox" or "ps3". It shouldn't be "xbox360" or "pS3". So we now need to add HELP message like this:&lt;br /&gt;&lt;blockquote&gt;@ECHO OFF&lt;br /&gt;IF "%1" == "ps3" GOTO :VOTE_FOR_PS3&lt;br /&gt;IF "%1" == "xbox" GOTO :VOTE_FOR_XBOX&lt;br /&gt;GOTO :HELP&lt;br /&gt;:HELP&lt;br /&gt;ECHO USAGE: vote.bat [xbox|ps3]&lt;br /&gt;&lt;/blockquote&gt;With "CHOICE" command, we can make this batch file much simple:&lt;br /&gt;&lt;blockquote&gt;@ECHO OFF&lt;br /&gt;CHOICE /C XP /M "Vote for [X]box or [P]s3?"&lt;/blockquote&gt;There is no need to have dedicated Help sub-routine. And don't need to bother with Case-sensitiveness.&lt;br /&gt;&lt;br /&gt;In addition to that, we can also use the batch file  in this way:&lt;br /&gt;&lt;blockquote&gt;ECHO x | vote.bat&lt;/blockquote&gt;This will have a same effect to a command, "vote.bat xbox", without any interactive pause.&lt;br /&gt;&lt;br /&gt;I am thinking whenever a batch file needs to take additional input as its argument, it can be replaced with CHOICE.&lt;br /&gt;&lt;br /&gt;Unfortunately this useful command is not available on every Windows family. It seems like CHOICE.EXE is available from Windows XP with Service pack 3.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-6405048448417659312?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/6405048448417659312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=6405048448417659312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6405048448417659312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6405048448417659312'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/07/choice-for-batch-file.html' title='CHOICE for batch file'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-2732817834926470238</id><published>2010-07-06T03:24:00.004-04:00</published><updated>2010-07-06T04:05:05.219-04:00</updated><title type='text'>ShaderX 8 is published</title><content type='html'>This may not be a new to many of graphic programmers. The author changed its publisher and had to change the name of series, so the new name is not ShaderX8 but GPU Pro.&lt;br /&gt;&lt;br /&gt;I also found the author is preparing GPU Pro 2, so I guess now we need to remember this new name.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/TDLf53GXfJI/AAAAAAAAAxQ/Goa3PyU3O2g/s1600/gpupro.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 127px; height: 157px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/TDLf53GXfJI/AAAAAAAAAxQ/Goa3PyU3O2g/s320/gpupro.jpg" alt="" id="BLOGGER_PHOTO_ID_5490697080854248594" border="0" /&gt;&lt;/a&gt;I spent about an hour skimming the book here and there. One thing I  noticed is that now many of articles are based on Shader Model 4 and 5.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-2732817834926470238?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/2732817834926470238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=2732817834926470238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2732817834926470238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2732817834926470238'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/07/shaderx-8-is-published.html' title='ShaderX 8 is published'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/TDLf53GXfJI/AAAAAAAAAxQ/Goa3PyU3O2g/s72-c/gpupro.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-9017476709023720917</id><published>2010-07-01T20:25:00.005-04:00</published><updated>2010-07-01T20:37:04.539-04:00</updated><title type='text'>Automate physical action with batch file.</title><content type='html'>*PS : This is just an idea, meaning I am not doing this in this way....&lt;br /&gt;&lt;br /&gt;One of challenge for software testing automation is that sometimes we need to do some physical actions. In that case, we can "open CD-ROM tray". It may sound strange...&lt;br /&gt;&lt;br /&gt;For example, we need to turn on XBox360 devkit, before start the testing. Unfortunately XBox360 devkit does not have any way to turn on the machine remotely. We have to manually press the power button in order to turn on the machine. The same thing applies to turning off.&lt;br /&gt;&lt;br /&gt;We can place the computer and XBox360 devkit closely, so that when CD-Rom tray opens, it hits the power button of XBox360 devkit.&lt;br /&gt;&lt;br /&gt;There are several free utility to open/close CD-ROM try.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/TC0z5lA0S6I/AAAAAAAAAxI/3AXZrTXG8SE/s1600/baby-rocker.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 239px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/TC0z5lA0S6I/AAAAAAAAAxI/3AXZrTXG8SE/s320/baby-rocker.jpg" alt="" id="BLOGGER_PHOTO_ID_5489100585115601826" border="0" /&gt;&lt;/a&gt;&lt;object&gt;&lt;param name="movie" value="http://www.youtube.com/v/bYcF_xX2DE8&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xd0d0d0&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/bYcF_xX2DE8&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xd0d0d0&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;I found an interesting YouTube clip that does this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-9017476709023720917?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/9017476709023720917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=9017476709023720917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/9017476709023720917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/9017476709023720917'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/07/automate-physical-action-with-batch.html' title='Automate physical action with batch file.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/TC0z5lA0S6I/AAAAAAAAAxI/3AXZrTXG8SE/s72-c/baby-rocker.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4327409437374170998</id><published>2010-06-30T22:15:00.005-04:00</published><updated>2010-07-01T21:23:59.109-04:00</updated><title type='text'>Start Unreal Engine 3 for free</title><content type='html'>As many game programmers know, the famous game engine Unreal Engine is now free to the public. Although you need to pay when you want to sell your games, it is a great chance to get some experience from it. It will also give you better chance to get a job offer.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/TCv7iKVLSJI/AAAAAAAAAxA/P1cE-v6zY40/s1600/UDN-DevKit.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 78px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/TCv7iKVLSJI/AAAAAAAAAxA/P1cE-v6zY40/s320/UDN-DevKit.jpg" alt="" id="BLOGGER_PHOTO_ID_5488757135188379794" border="0" /&gt;&lt;/a&gt;One who don't find where to start, I recommend the official wiki web site:&lt;br /&gt;http://udn.epicgames.com/Three/DevelopmentKitHome.html&lt;br /&gt;Just focus on UnrealEngine3 not 2. And the name of free version is called Unreal Development Kit (UDK).&lt;br /&gt;&lt;br /&gt;You can download the engine for free:&lt;br /&gt;http://udn.epicgames.com/Three/DevelopmentKitGettingStarted.html&lt;br /&gt;&lt;br /&gt;There are books in Amazon too: "Mastering Unreal Engine". There are several volumes and several editions. Try to find the latest. As far as I know this book series doesn't cover Unreal Script. You will need to find other books that cover it or you can find the reference page here:&lt;br /&gt;http://udn.epicgames.com/Three/UnrealScriptReference.html&lt;br /&gt;&lt;br /&gt;There is also video tutorials which is an easiest and efficient way of learning a tool:&lt;br /&gt;http://udn.epicgames.com/Three/VideoTutorials.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4327409437374170998?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4327409437374170998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4327409437374170998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4327409437374170998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4327409437374170998'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/06/start-unreal-engine.html' title='Start Unreal Engine 3 for free'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/TCv7iKVLSJI/AAAAAAAAAxA/P1cE-v6zY40/s72-c/UDN-DevKit.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-211172532175546574</id><published>2010-06-29T15:00:00.001-04:00</published><updated>2010-06-29T15:01:42.264-04:00</updated><title type='text'>E3 Best game awards</title><content type='html'>There are game lists on list web site.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/TCpC1jM2KrI/AAAAAAAAAw4/6aBAraEfdVQ/s1600/gca-e32010.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 74px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/TCpC1jM2KrI/AAAAAAAAAw4/6aBAraEfdVQ/s320/gca-e32010.jpg" alt="" id="BLOGGER_PHOTO_ID_5488272583653993138" border="0" /&gt;&lt;/a&gt;http://www.gamecriticsawards.com/nominees.html&lt;br /&gt;&lt;br /&gt;I can save time by playing those games first....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-211172532175546574?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/211172532175546574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=211172532175546574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/211172532175546574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/211172532175546574'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/06/e3-best-game-awards.html' title='E3 Best game awards'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/TCpC1jM2KrI/AAAAAAAAAw4/6aBAraEfdVQ/s72-c/gca-e32010.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7906435893903686992</id><published>2010-06-27T03:27:00.004-04:00</published><updated>2010-06-27T03:58:52.951-04:00</updated><title type='text'>AutoIt - GUI Software automation script language</title><content type='html'>It is always hard to test GUI applications more than command line applications. One of the reason is GUI usually take inputs from mouse device and it is hard to simulate. There are several other reason though, I am trying to focus more on AutoIt: http://www.autoitscript.com/autoit3/index.shtml&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/TCcEiOOHu4I/AAAAAAAAAww/dlDSXFcRM80/s1600/autoit_6_240x100.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 100px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/TCcEiOOHu4I/AAAAAAAAAww/dlDSXFcRM80/s320/autoit_6_240x100.jpg" alt="" id="BLOGGER_PHOTO_ID_5487359656953625474" border="0" /&gt;&lt;/a&gt;AutoIt is a script language as far as I understand. Before I find AutoIt, I was trying to use Windows API "SendMessage" to mimic mouse click or keyboard short-cut: for example, SendMessage( hwnd, WM_KEYDOWN, xxx, xxx ). I found a utility to do this, SendMsg: http://www.maxoutput.com/SendMsg.html&lt;br /&gt;&lt;br /&gt;I soon found it is very hard to find a right window handler and to find a right windows message even with Spy++.&lt;br /&gt;&lt;br /&gt;At first time when I found AutoIt, I didn't expect something more than AutoMouse like simple features. My expectation was got suddenly raised after I read an sample example about notepad. It was a reliable script language rather than just sending some Windows messages.&lt;br /&gt;&lt;br /&gt;Here is an simple example from its website:&lt;br /&gt;&lt;blockquote&gt;Run("notepad.exe")&lt;br /&gt;WinWaitActive("Untitled - Notepad")&lt;br /&gt;Send("This is some text.")&lt;br /&gt;; from http://www.autoitscript.com/autoit3/docs/tutorials/notepad/notepad.htm&lt;br /&gt;&lt;/blockquote&gt;We can also send keyboard short-cut messages:&lt;br /&gt;&lt;blockquote&gt;Send("!f") ; Alt+f&lt;br /&gt;Send("^s") ; Ctrl+s&lt;br /&gt;Send("{ENTER}") ; Enter&lt;br /&gt;&lt;/blockquote&gt;I haven't seen mouse input functions yet. But there must be someway to do it; I will figure it later.&lt;br /&gt;&lt;br /&gt;I think this utility can save lot of time for testing GUI applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7906435893903686992?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7906435893903686992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7906435893903686992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7906435893903686992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7906435893903686992'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/06/autoit-gui-software-automation-script.html' title='AutoIt - GUI Software automation script language'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/TCcEiOOHu4I/AAAAAAAAAww/dlDSXFcRM80/s72-c/autoit_6_240x100.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7288479711614041358</id><published>2010-06-10T16:28:00.004-04:00</published><updated>2010-06-10T16:31:57.243-04:00</updated><title type='text'>Game Physics 2nd</title><content type='html'>David Eberly who is one of the famous game related authors published a new book last month: Game Physic 2nd.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/TBFLijhGjNI/AAAAAAAAAwo/Klicw_MAyck/s1600/game_physics.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 134px; height: 134px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/TBFLijhGjNI/AAAAAAAAAwo/Klicw_MAyck/s320/game_physics.jpg" alt="" id="BLOGGER_PHOTO_ID_5481245278508322002" border="0" /&gt;&lt;/a&gt;The book is based on Wild Magic new version, 5.1, according to the web page: http://www.geometrictools.com&lt;br /&gt;&lt;br /&gt;I was wondering for a while what he was doing now. I haven't read the 1st edition, but I like to grep the new edition sooner or later.&lt;br /&gt;&lt;br /&gt;*PS: It seems like he is now focusing more on physic parts than graphics or engine parts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7288479711614041358?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7288479711614041358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7288479711614041358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7288479711614041358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7288479711614041358'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/06/game-physics-2nd.html' title='Game Physics 2nd'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/TBFLijhGjNI/AAAAAAAAAwo/Klicw_MAyck/s72-c/game_physics.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8328338929617265974</id><published>2010-05-02T03:34:00.006-04:00</published><updated>2010-05-02T03:50:09.167-04:00</updated><title type='text'>Lighting on Final Fantasy 13.</title><content type='html'>I have played Final Fantasy 13 only about three hours. I think it is using forward shading; if I am wrong, I will be very surprised.&lt;br /&gt;&lt;br /&gt;I couldn't figure out how they lit the objects. It seems to use more than one light, but it is definitely not deferred shading nor pre-pass-lighting.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S90tFaU15II/AAAAAAAAAwg/yfadM4cg2Z0/s1600/final_fantasy_xiii.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 274px; height: 320px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S90tFaU15II/AAAAAAAAAwg/yfadM4cg2Z0/s320/final_fantasy_xiii.jpg" alt="" id="BLOGGER_PHOTO_ID_5466575093686985858" border="0" /&gt;&lt;/a&gt;The game heavily uses cut-scenes. They are pre-rendered movie clips. It is easy to differentiate because the movie clips use a lot more lights than the game play scene.&lt;br /&gt;&lt;br /&gt;I have seen pre-baked shadows as well as one high resolution shadow map with PCF; I guess.&lt;br /&gt;&lt;br /&gt;Forward shading is still effective method. It can utilize MSAA with low cost and allows transparency for any objects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8328338929617265974?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8328338929617265974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8328338929617265974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8328338929617265974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8328338929617265974'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/05/lighting-on-final-fantasy-13.html' title='Lighting on Final Fantasy 13.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S90tFaU15II/AAAAAAAAAwg/yfadM4cg2Z0/s72-c/final_fantasy_xiii.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5034212011960919680</id><published>2010-05-02T02:49:00.003-04:00</published><updated>2010-05-02T02:53:00.505-04:00</updated><title type='text'>Light buffer rendering with SPU</title><content type='html'>PhyreEngine implemented rendering Light buffer with SPU:&lt;br /&gt;&lt;br /&gt;http://www.technology.scee.net/files/presentations/gdc2009/DeferredLightingandPostProcessingonPS3.ppt&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S90hFWnhKHI/AAAAAAAAAwY/Qmk40IcrqwY/s1600/Picture+1.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 25px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S90hFWnhKHI/AAAAAAAAAwY/Qmk40IcrqwY/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5466561898552043634" border="0" /&gt;&lt;/a&gt;When I was reading the ppt first time, I didn't pay attention to the SPU implementation part. After I read an article on GPG8, I found it is very interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5034212011960919680?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5034212011960919680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5034212011960919680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5034212011960919680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5034212011960919680'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/05/light-buffer-rendering-with-spu.html' title='Light buffer rendering with SPU'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S90hFWnhKHI/AAAAAAAAAwY/Qmk40IcrqwY/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7487032855366716997</id><published>2010-05-01T19:16:00.002-04:00</published><updated>2010-05-01T19:23:35.293-04:00</updated><title type='text'>How about using PS3 for graphics data baking machine...</title><content type='html'>Occasionally the question comes to my mind whether we can use PS3 as a graphics data pre-baking tool. In that way, we will be able to take advantages of several SPUs.&lt;br /&gt;&lt;br /&gt;One thing I am not clear is how to store the result data. It wouldn't be a problem with PS3 DevKit, but I am not aware of any means to store data from normal PS3s. Since Sony blocked Linux support, it may be harder than before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7487032855366716997?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7487032855366716997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7487032855366716997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7487032855366716997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7487032855366716997'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/05/how-about-using-ps3-for-graphics-data.html' title='How about using PS3 for graphics data baking machine...'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7237944159773235871</id><published>2010-04-27T01:17:00.008-04:00</published><updated>2010-04-27T01:52:22.863-04:00</updated><title type='text'>Shadow blur with PCF and Gaussian filter</title><content type='html'>Long time back, GPU Gems introduced how to soften shadow with Percentage Closer Filter: http://http.developer.nvidia.com/GPUGems/gpugems_ch11.html&lt;br /&gt;&lt;br /&gt;The article fetches eight times and get a similar result to sixteen times fetching.&lt;br /&gt;&lt;br /&gt;I have tried both ways but I wasn't satisfied with them.&lt;br /&gt;&lt;br /&gt;As the article explains the problem on the shadow map is that we needs to get binary depth testing results first. We cannot just blur the shadow depth values.&lt;br /&gt;&lt;br /&gt;To get a correct Gaussian blur result, we first need to get sixteen texels from the shadow map. Then we compare those values with the actual depth value. Now we need to use Gaussian blur on those binary testing results.&lt;br /&gt;&lt;br /&gt;The article on the GPU Gems just takes the average on them, but the quality can be much more improved with Gaussian blur and/or Bilinear filter.&lt;br /&gt;&lt;br /&gt;We can use a 3x3 Gaussian mask on 4x4 texels. Thus we will get four boolean values. Then we can take bilinear filter on them.&lt;br /&gt;&lt;br /&gt;To improve the result even further, we can calculate floating values from the depth testing, rather than just boolean values.&lt;br /&gt;&lt;blockquote&gt;float depthOffset = 0.001;&lt;br /&gt;&lt;br /&gt;float depth00 = GetDepth( uv + float2( -1.5, -1.5 ) );&lt;br /&gt;&lt;br /&gt;float brightness00 = saturate( ( depth00 - ( actualDepth - depthOffset ) ) / ( 2* depthOffset ) );&lt;br /&gt;&lt;br /&gt;// do the same thing on different offsets.&lt;br /&gt;&lt;/blockquote&gt;This approach is trying to estimate how much the pixel is open to the light; I tried to apply SSAO trick on the shadow map, but in a simpler way.&lt;br /&gt;&lt;br /&gt;The result was looking good, but I am still looking for a better way, because sixteen texel fetching seems too expensive.&lt;br /&gt;&lt;br /&gt;One way to improve the performance can be to fetch half or quarter of them and fetch others only when those depth testing results differ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7237944159773235871?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7237944159773235871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7237944159773235871' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7237944159773235871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7237944159773235871'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/shadow-blur-with-gaussian-filter.html' title='Shadow blur with PCF and Gaussian filter'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-2108522956518498843</id><published>2010-04-25T03:43:00.046-04:00</published><updated>2010-04-26T14:43:24.481-04:00</updated><title type='text'>Why does light leak happen on the soft shadow map?</title><content type='html'>Today I have arrived at certain conclusion about soft shadow map technique. I am trying to describe it now.&lt;br /&gt;&lt;br /&gt;Variance shadow map (or VSM) Convolution shadow map (or CSM) and Exponential shadow map (or ESM) all have light leaking problem. On papers of VSM this problem is referred as "light bleeding". Here I assume "light bleeding" and "light leaking" are the same problem.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S9PzzGZxRWI/AAAAAAAAAvg/pIpfoN80fdA/s1600/pixelstoomany_vsm_bleeding.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 198px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S9PzzGZxRWI/AAAAAAAAAvg/pIpfoN80fdA/s320/pixelstoomany_vsm_bleeding.png" alt="" id="BLOGGER_PHOTO_ID_5463978832148120930" border="0" /&gt;&lt;/a&gt;The light leaking artifact is actually the source of softness of the shadow. What I am proposing here to solve the light leaking problem is to differentiate inner penumbra region from outer penumbra region; I will explain more latter.&lt;br /&gt;&lt;br /&gt;A screen shot of Exponential shadow map is below:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S9P0uyq1scI/AAAAAAAAAvo/OhYjrkAnHGc/s1600/pixelstoomany_newshadtech_nobleeding.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 198px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S9P0uyq1scI/AAAAAAAAAvo/OhYjrkAnHGc/s320/pixelstoomany_newshadtech_nobleeding.png" alt="" id="BLOGGER_PHOTO_ID_5463979857643155906" border="0" /&gt;&lt;/a&gt;The screen shot was referred as "no bleeding", but the fact is it is still bleeding and it has physically wrong softness on the contact points.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S9P2mbGadRI/AAAAAAAAAwA/f7kCkc79KU0/s1600/contactpointsoften.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 198px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S9P2mbGadRI/AAAAAAAAAwA/f7kCkc79KU0/s320/contactpointsoften.png" alt="" id="BLOGGER_PHOTO_ID_5463981912900662546" border="0" /&gt;&lt;/a&gt;The shadow around the contact points is supposed to be sharp because they are affected by high frequency light most. The contact point soften problem is actually a little bit different version of the light leaking problem. For example, if we put two pieces of papers very closely, the second paper which is supposed to be under shadow will get soften shadow due to the short distance.&lt;br /&gt;&lt;br /&gt;First the reason why we have light leaking problem on shadow map retrieving methods is that we are trying to estimate information of places under the shadow map while the shadow map hold non of information of them.&lt;br /&gt;&lt;br /&gt;There can be two types of penumbra region with respect to the shadow map. I call them inner penumbra and outer penumbra. Inner penumbra is penumbra region that is not visible from shadow map. Outer penumbra is penumbra region that is visible from shadow map.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S9P5mEVBGhI/AAAAAAAAAwI/eVUlQdrDs0Q/s1600/innterpenumbra.gif"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 256px; height: 300px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S9P5mEVBGhI/AAAAAAAAAwI/eVUlQdrDs0Q/s320/innterpenumbra.gif" alt="" id="BLOGGER_PHOTO_ID_5463985205322783250" border="0" /&gt;&lt;/a&gt;Whenever we attempt to soften "inner penumbra" region, we are using estimated values.  It is because the shadow map doesn't see the inner penumbra part so that there is no information on the shadow map. The way to estimate the information behind the shadow map is causing the light leaking problem.&lt;br /&gt;&lt;br /&gt;A physically correct shadow strength calculation should be like this:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S9P8FQzIUuI/AAAAAAAAAwQ/yRzrnYnWZzI/s1600/shadowstrength01.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 256px; height: 320px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S9P8FQzIUuI/AAAAAAAAAwQ/yRzrnYnWZzI/s320/shadowstrength01.png" alt="" id="BLOGGER_PHOTO_ID_5463987940269511394" border="0" /&gt;&lt;/a&gt;Note that we must differentiate "B and D" from "A and C". It is because B  part gets full of light while A part doesn't get any. If we use the  same calculation on inner penumbra region( A and C ) and outer penumbra  region ( B and D ), the result must be wrong.&lt;br /&gt;&lt;br /&gt;The problem is on "A and C" part with VSM and ESP.&lt;br /&gt;&lt;br /&gt;The calculation of VSM is like this:&lt;br /&gt;&lt;blockquote&gt;float bOuterPenumbra = ( depthOnShadowMap &gt;= actualDepth );&lt;br /&gt;&lt;br /&gt;float brightness = variance / ( variance + pow( actualDepth - depthOnShadowMap, 2 ) );&lt;br /&gt;&lt;br /&gt;float finalBrightness = max( bOuterPenumbra, brightness ); &lt;/blockquote&gt;This will make "A" part brighter than "C" part, which is opposite to the correct shadow model. This will make stronger shadow on "C" part and softer shadow on "A".&lt;br /&gt;&lt;br /&gt;Note that VSM does not count the outer penumbra region into the  calculation. In order words VSM is working with inner penumbra region  not with outer penumbra region.&lt;br /&gt;&lt;br /&gt;ESM does the smiliar calculation way of VSM. It reduced light leaking problem but now it causes contact point soften problem. It is because ESM considers depth values only regardless how much the depth values are interpolated. By this reason, the light leaking problem is moved from "C" part to "A" part so that it appears to be soften contact points.&lt;br /&gt;&lt;br /&gt;To address this light leaking problem, we need to give the softness on the outer penumbra rather than the inner penumbra. With respect to the fact that the shadow map holds no information of inner penumbra region, it makes more sense to apply shadow softening on the outer penumbra region.&lt;br /&gt;&lt;br /&gt;The calculation will be like this:&lt;br /&gt;&lt;blockquote&gt;const float e = 2.71828183;&lt;br /&gt;const expConst = -5.0;&lt;br /&gt;&lt;br /&gt;const bool bUnderShadow = ( actualDepth &gt; depthOnShadowMap );&lt;br /&gt;&lt;br /&gt;const float brightness = ( bUnderShadow ? 0.0 : ( 1 - saturate( pow( e, expConst * actualDepth )  / pow( e, expConst * expFromExpMap ) ) ) );&lt;br /&gt;&lt;/blockquote&gt;There are some problems on this approach.&lt;br /&gt;&lt;br /&gt;One of them is that we cannot use "second depth rendering" trick on shadow map rendering phase. Second depth rendering is to render back face on the shadow map rather than front face. It is very helpful to reduce the shadow swimming problem and "surface acne" problem. Since the softness calculation relies on the front face depth, we can no longer use second depth rendering.&lt;br /&gt;&lt;br /&gt;Another problem is that we must hold the original shadow map in order to differentiate inner penumbra and outer penumbra. When we want to pre-filter the shadow map as ESM does, we need to fetch texels on both.&lt;br /&gt;&lt;br /&gt;I have some of solutions in my mind and I will post more details after I get enough test results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-2108522956518498843?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/2108522956518498843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=2108522956518498843' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2108522956518498843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2108522956518498843'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/why-does-light-leak-happens-on-soft.html' title='Why does light leak happen on the soft shadow map?'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/S9PzzGZxRWI/AAAAAAAAAvg/pIpfoN80fdA/s72-c/pixelstoomany_vsm_bleeding.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5760665491006758267</id><published>2010-04-23T03:17:00.005-04:00</published><updated>2010-04-27T01:49:20.515-04:00</updated><title type='text'>Soft shadow with shadow map...</title><content type='html'>There were several new innovative shadow map techniques that promised soft shadow. There are Variance shadow map, and Exponential shadow map.&lt;br /&gt;&lt;br /&gt;They are using 32bit floating point surfaces and they assumes they work with linear hardware filter. Unfortunately PlayStation3 does not support linear nor bilinear filter for 32bit floating point surface. How am I supposed to get soft shadow?&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S9FOMOYHAVI/AAAAAAAAAvY/hW4_QfUCCf8/s1600/17_softedged_04.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S9FOMOYHAVI/AAAAAAAAAvY/hW4_QfUCCf8/s320/17_softedged_04.jpg" alt="" id="BLOGGER_PHOTO_ID_5463233794901737810" border="0" /&gt;&lt;/a&gt;My final choice was a little bit modified version of Percentage Closer Filter, which means I fall back to the bottom line. I modified it to mimic the bilinear filter.&lt;br /&gt;&lt;br /&gt;I am not quite happy because I cannot get any benefits from new hardware accelerations. But it seems to work fairly good.&lt;br /&gt;&lt;br /&gt;*PS: The screenshot it from &lt;a href="http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter17.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5760665491006758267?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5760665491006758267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5760665491006758267' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5760665491006758267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5760665491006758267'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/soft-shadow-with-shadow-map.html' title='Soft shadow with shadow map...'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/S9FOMOYHAVI/AAAAAAAAAvY/hW4_QfUCCf8/s72-c/17_softedged_04.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4370358082951827218</id><published>2010-04-20T02:41:00.011-04:00</published><updated>2010-04-20T12:46:44.199-04:00</updated><title type='text'>Depth buffer blur with Gaussian filter on PS3</title><content type='html'>These days I often look at the real shadows of trees or any objects. Strangely they don't look natural or real for me. It makes me thinking of what kind of soft shadow I want to see.&lt;br /&gt;&lt;br /&gt;The softness of shadows is from frequency of light. Around edges the shadow looks sharp, because it is resulted from high frequency. Some of soft shadows are from low light frequency.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S81QXPQGpSI/AAAAAAAAAvQ/m29eiGKpYtQ/s1600/treeshadow.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 205px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S81QXPQGpSI/AAAAAAAAAvQ/m29eiGKpYtQ/s320/treeshadow.jpg" alt="" id="BLOGGER_PHOTO_ID_5462110283231569186" border="0" /&gt;&lt;/a&gt;When we render a shadow map, it is analogous to the HIGH frequency light. It is proper to the shadows close to the object but improper to the shadow far from the object.&lt;br /&gt;&lt;br /&gt;We need LOW frequency shadow map for distance shadows. Low frequency shadow map can be retrieved by Gaussian blur. The blurred shadow map must have the same resolution to the original shadow map.&lt;br /&gt;&lt;br /&gt;One problem here is again how to blur the shadow buffer which contains encoded values.&lt;br /&gt;&lt;br /&gt;Simplest way is to sample nine times and calculate Gaussian blur, but this way will be too slow.&lt;br /&gt;&lt;br /&gt;I have already described how to get blurred depth buffer with linear filter before: http://wrice.blogspot.com/2010/04/blurring-depth-buffer-with-linear.html&lt;br /&gt;&lt;br /&gt;Today I found that I can also do this with the Gaussian filter on PS3. The trick is very similar to the one with linear filter, but it needs more buffer bits on each channel. And this is not for down sampling but only for blur.&lt;br /&gt;&lt;br /&gt;The Gaussian filter on PS3 does "[ 1, 2, 1 ] [ 2, 4, 2 ] [ 1, 2, 1 ] / 16".&lt;br /&gt;Since it divides by 16 ( =2^4 ), we need to have 4 bits as buffer on each color channel.&lt;br /&gt;&lt;br /&gt;It means that we can use 4bits on Red channel, 4 bits on Blue channel, 4 bits on Green channel, and 8 bits on Alpha channel. Therefore, we can use total 20bits, which is large enough.&lt;br /&gt;&lt;br /&gt;The way to use those shadow maps is to sample on the non-blurred shadow map first and sample one more time on the most blurred shadow map. The difference value between those two sampled values will represent how much the shadow needs to be blurred.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4370358082951827218?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4370358082951827218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4370358082951827218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4370358082951827218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4370358082951827218'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/depth-buffer-blur-on-ps3.html' title='Depth buffer blur with Gaussian filter on PS3'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S81QXPQGpSI/AAAAAAAAAvQ/m29eiGKpYtQ/s72-c/treeshadow.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-610158947325388725</id><published>2010-04-19T04:38:00.007-04:00</published><updated>2010-04-19T05:02:31.035-04:00</updated><title type='text'>From gran turismo 5 movie clips</title><content type='html'>Today I was looking closer to Gran Turismo 5 movie clip.&lt;br /&gt;&lt;br /&gt;I found that they are using two types of shadows of cars. One is from directional light and another is ambient occlusion.&lt;br /&gt;&lt;br /&gt;The shadow from the directional light is done by shadow map. Each car  seems to hold their own shadow map.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S8wX2z_jv4I/AAAAAAAAAvA/UpYJDODPdVY/s1600/Picture+5.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 202px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S8wX2z_jv4I/AAAAAAAAAvA/UpYJDODPdVY/s320/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5461766678530736002" border="0" /&gt;&lt;/a&gt;As you can see from the screen shot above, those two types of shadows don't seem to get along well.&lt;br /&gt;&lt;br /&gt;An impressive part is reflections on the car's body. The reflection looks very clear and covers body and glasses part very nicely. I guess they are stream in and out pre-baked environment map rather than rendering them at run-time.&lt;br /&gt;&lt;br /&gt;I will be very surprised if the environment map is rendered at run-time. One way to figure out is to see whether other cars are reflected on the car's body or not. I couldn't find that kind of situations from the movie clip but I can test it latter.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S8wcDAR7FkI/AAAAAAAAAvI/AakrdOst05Y/s1600/Picture+6.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 179px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S8wcDAR7FkI/AAAAAAAAAvI/AakrdOst05Y/s320/Picture+6.png" alt="" id="BLOGGER_PHOTO_ID_5461771286033929794" border="0" /&gt;&lt;/a&gt;I tried to see aliasing issues but the movie clip did not carry enough details on edges. HDR was covering edge parts smoothly and Depth of Filed made the look smoother. Slightly shaking camera up and down made the scene more realistic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-610158947325388725?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/610158947325388725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=610158947325388725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/610158947325388725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/610158947325388725'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/from-gran-turismo-5-movie-clips.html' title='From gran turismo 5 movie clips'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/S8wX2z_jv4I/AAAAAAAAAvA/UpYJDODPdVY/s72-c/Picture+5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-293988880233191324</id><published>2010-04-19T04:22:00.004-04:00</published><updated>2010-04-19T04:38:06.153-04:00</updated><title type='text'>God Of War 3 has seamless pre rendered cut scenes</title><content type='html'>Today I am very sure that the cut scenes in god of war 3 are pre-rendered not real-time rendering.&lt;br /&gt;&lt;br /&gt;The way I figured out is that the shadow looks very very nicer and softer on the pre-rendered cut scenes while the shadow isn't that much smooth during the game play.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S8wWUsoiwqI/AAAAAAAAAu4/KXMBd4tL3PQ/s1600/Picture+4.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 218px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S8wWUsoiwqI/AAAAAAAAAu4/KXMBd4tL3PQ/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5461764992927974050" border="0" /&gt;&lt;/a&gt;I should say it was almost indistinguishable if I didn't pay enough attention on the shadow.&lt;br /&gt;&lt;br /&gt;It is often hard tasks to match the pre-rendered cut scenes and the actual game scenes, because 3DS Max or Maya generates quite different look and feel of the background or characters from what the actual game engine generates. I am guessing that they might have pre-rendering tools with the game engine, not directly from Max/Maya.&lt;br /&gt;&lt;br /&gt;It could probably save some face motion animation data by using pre-rendered cut scenes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-293988880233191324?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/293988880233191324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=293988880233191324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/293988880233191324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/293988880233191324'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/god-of-war-3-has-seamless-pre-rendered.html' title='God Of War 3 has seamless pre rendered cut scenes'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/S8wWUsoiwqI/AAAAAAAAAu4/KXMBd4tL3PQ/s72-c/Picture+4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-674557444726870234</id><published>2010-04-18T05:05:00.005-04:00</published><updated>2010-04-18T05:16:09.525-04:00</updated><title type='text'>Real-time Ray-tracing with PS3s.</title><content type='html'>I found some of YouTube movie clips of Real-time ray-tracing with several PS3s.&lt;br /&gt;&lt;br /&gt;http://www.youtube.com/watch?v=oLte5f34ya8&amp;amp;feature=related&lt;br /&gt;http://www.youtube.com/watch?v=nUouN-NJVF4&lt;br /&gt;&lt;br /&gt;It is very interesting. They are using SPUs only due to the limitation of supervisor mode. Each PS3 has six SPUs available.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S8rM538CnmI/AAAAAAAAAuw/Wb_OVFYPeWs/s1600/Picture+2.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 237px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S8rM538CnmI/AAAAAAAAAuw/Wb_OVFYPeWs/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5461402792780537442" border="0" /&gt;&lt;/a&gt;However, it still does not look fast enough for game rendering.&lt;br /&gt;The first demonstration uses three PS3s and the scene is static.&lt;br /&gt;The next one is using seven PS3s and the scene is dynamic.&lt;br /&gt;&lt;br /&gt;I think if real-time ray-tracing is feasible with two or three PS3, then we may be able to see any commercial or non-commercial games potentially.. :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-674557444726870234?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/674557444726870234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=674557444726870234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/674557444726870234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/674557444726870234'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/real-time-ray-tracing-with-ps3s.html' title='Real-time Ray-tracing with PS3s.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S8rM538CnmI/AAAAAAAAAuw/Wb_OVFYPeWs/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-3202702598613289021</id><published>2010-04-18T03:36:00.004-04:00</published><updated>2010-04-18T04:02:57.211-04:00</updated><title type='text'>God of war 3 uses light cube</title><content type='html'>Today I found two interesting visual bugs on God Of War 3.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/S8q4B_QcEyI/AAAAAAAAAuI/HpnR-Ly0tLo/s1600/IMG_0203.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/S8q4B_QcEyI/AAAAAAAAAuI/HpnR-Ly0tLo/s320/IMG_0203.JPG" alt="" id="BLOGGER_PHOTO_ID_5461379842439910178" border="0" /&gt;&lt;/a&gt;The screen shot above shows it uses light cube. Note the light boundary bends on leg part. It means that the light boundary is aligned to the world space not to the screen space. In other words it is not screen quad but light cube in the world space.&lt;br /&gt;&lt;br /&gt;It also means that they are using deferred shading or light pre-pass. I  don't know which one it is. I don't see much variety of materials, so it  can be deferred but I don't think there can be any reasons to use  deferred shading over light pre-pass these days. If I can see any sophisticated shaders such as parallax mapping, I will be able to conclude it is using light pre-pass, but I haven't seen any of them yet.&lt;br /&gt;&lt;br /&gt;It is common to use light cube than light sphere which I am using on our project currently. I think saving the cost on fragment shader will be more efficient than saving that of vertex shader. I may be wrong, because I haven't seen any games using light sphere yet.&lt;br /&gt;&lt;br /&gt;Another visual bug is about shadow.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/S8q4COVXTbI/AAAAAAAAAuQ/kCKiLAlbzs8/s1600/IMG_0206.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/S8q4COVXTbI/AAAAAAAAAuQ/kCKiLAlbzs8/s320/IMG_0206.JPG" alt="" id="BLOGGER_PHOTO_ID_5461379846487100850" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S8q4C3ifpjI/AAAAAAAAAuY/eiAY_-MJZlY/s1600/IMG_0207.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S8q4C3ifpjI/AAAAAAAAAuY/eiAY_-MJZlY/s320/IMG_0207.JPG" alt="" id="BLOGGER_PHOTO_ID_5461379857548027442" border="0" /&gt;&lt;/a&gt;The first screen shot shows a badly aliased shadow on the wall. The second screen shot shows anti-aliased shadow on the character. In other words, the shadow on the wall looks jig-jagged while the same shadow looks very smooth on the character.&lt;br /&gt;&lt;br /&gt;I am guess it is because they use different resolutions on different objects for shadow map. It makes sense to handle the shadows differently on characters from on static objects.&lt;br /&gt;&lt;br /&gt;One more interesting thing is the aliased shadow on the wall looks still not too bad and somehow blurred. I don't know how they did it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-3202702598613289021?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/3202702598613289021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=3202702598613289021' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3202702598613289021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3202702598613289021'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/god-of-war-3-uses-light-cube.html' title='God of war 3 uses light cube'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/S8q4B_QcEyI/AAAAAAAAAuI/HpnR-Ly0tLo/s72-c/IMG_0203.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-3848259248065197985</id><published>2010-04-13T02:24:00.005-04:00</published><updated>2010-04-13T23:52:06.432-04:00</updated><title type='text'>Projection matrix and inversed depth value.</title><content type='html'>On DirectX coordination system, which is left hand coordinate, the center of the screen is ( x, y, z ) = ( 0, 0, [0~1] ); "[0-1]" means from zero to one. Top right corner of the screen is ( x, y , z ) = ( 1, 1, 0 ) and bottom left of the screen is ( x, y, z ) = ( -1, -1, 0 ).&lt;br /&gt;&lt;br /&gt;When we show the 3D points or lines on the screen, we use perspective way rather than orthographical way. In other word, a far object appears to be smaller while a closer object appears to be bigger.&lt;br /&gt;&lt;br /&gt;The way we do this is to divide x and y values by z value. When z value is bigger, x/z and y/z get smaller. In other words the points or lines get closer to the center of the screen when the z value is bigger, because the center is ( 0, 0, [0-1] ).&lt;br /&gt;&lt;br /&gt;The matrix will be like this:&lt;br /&gt;[ 1, 0, 0, 0 ] [ x ]&lt;br /&gt;[ 0, 1, 0, 0 ] [ y ]&lt;br /&gt;[ 0, 0, 1, 0 ] [ z ]&lt;br /&gt;[ 0, 0, 1, 0 ] [ 1 ]&lt;br /&gt;=&lt;br /&gt;[ x ]&lt;br /&gt;[ y ]&lt;br /&gt;[ z ]&lt;br /&gt;[ z ]&lt;br /&gt;&lt;br /&gt;We always divide x, y, and z values by the last value, w, in order to make the w value to be 1.&lt;br /&gt;[ x / z ]&lt;br /&gt;[ y / z ]&lt;br /&gt;[ z / z ]&lt;br /&gt;[ 1 ]&lt;br /&gt;&lt;br /&gt;Now we see there is a problem on Z value. Z will be always 1. In computer graphics, Z value 1 means deepest inside of the screen. In order words, the most far objects have z value one, while the closest objects have z value zero in DirectX.&lt;br /&gt;&lt;br /&gt;In order to solve this problem we use this matrix instead:&lt;br /&gt;[ 1, 0, 0, 0 ]&lt;br /&gt;[ 0, 1, 0, 0 ]&lt;br /&gt;[ 0, 0, 1, -1 ]&lt;br /&gt;[ 0, 0, 1, 0 ]&lt;br /&gt;&lt;br /&gt;The result is:&lt;br /&gt;[ x / z ]&lt;br /&gt;[ y / z ]&lt;br /&gt;[ ( z - 1 ) / z ]&lt;br /&gt;[ 1 ]&lt;br /&gt;&lt;br /&gt;Note the z value is now ( z - 1 ) / z. It is equals to ( 1 - 1 / z ).&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S8QdnX7xE9I/AAAAAAAAAuA/XAerjfeuWec/s1600/Picture+4.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 256px; height: 98px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S8QdnX7xE9I/AAAAAAAAAuA/XAerjfeuWec/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5459521210556683218" border="0" /&gt;&lt;/a&gt;Now far objects will have less than one but closer to one. Since the Z value is inversed the values are not evenly distributed. For far objects, the projected Z values would not vary much. For example, projected Z for Z value, 100, is 1 - 1/100 = 0.99 and projected Z of Z value, 200, is 0.995. The Z values are double times different but the projected Z value differs only 0.005. In other words, for far objects the projected Z value is less sensitive while for closer objects the projected Z value is more sensitive.&lt;br /&gt;&lt;br /&gt;This is a preferable result on perspective view, because we can notice depth difference of closer objects more than far objects.&lt;br /&gt;&lt;br /&gt;One problem I realized is that by this projection matrix the negative Z value may result in a very big positive value. For example, for Z value, -2, which means the object is behind of the camera, the projected Z value is 1 + 1 / 2 = 1.5, meaning that it is at infinitely far front side not on back side. To solve this problem, we need to make sure the Z value always ranges from zero or positive value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-3848259248065197985?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/3848259248065197985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=3848259248065197985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3848259248065197985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3848259248065197985'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/projection-matrix-and-inversed-depth.html' title='Projection matrix and inversed depth value.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/S8QdnX7xE9I/AAAAAAAAAuA/XAerjfeuWec/s72-c/Picture+4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8755161509903935131</id><published>2010-04-13T02:07:00.003-04:00</published><updated>2010-04-13T02:17:29.317-04:00</updated><title type='text'>Lawyers</title><content type='html'>Lawyers may do good if you hired them.&lt;br /&gt;They are definitely mean if someone else hired them.&lt;br /&gt;Thus they are either definitely mean or may do good.&lt;br /&gt;In other words they are averagely closer to mean:&lt;br /&gt;&lt;blockquote&gt;( "may do good" + "definitely mean" ) / 2 = "mean"&lt;/blockquote&gt;We may need them sometimes but I don't think their job is productive. It is like soldiers, which are powerful but don't produce any.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S8QL0pRBbeI/AAAAAAAAAt4/-NuCA8GMMxQ/s1600/lawyer-vulture.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 129px; height: 159px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S8QL0pRBbeI/AAAAAAAAAt4/-NuCA8GMMxQ/s320/lawyer-vulture.JPG" alt="" id="BLOGGER_PHOTO_ID_5459501647338237410" border="0" /&gt;&lt;/a&gt;I wish not to face them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8755161509903935131?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8755161509903935131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8755161509903935131' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8755161509903935131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8755161509903935131'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/lawyers.html' title='Lawyers'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S8QL0pRBbeI/AAAAAAAAAt4/-NuCA8GMMxQ/s72-c/lawyer-vulture.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-48479531235549883</id><published>2010-04-13T01:42:00.003-04:00</published><updated>2010-04-13T01:54:10.114-04:00</updated><title type='text'>Tessellation on XBox360</title><content type='html'>Today I found that XBox360 has tessellation feature.&lt;br /&gt;&lt;br /&gt;I thought tessellation or geometry shader is supported from DirectX10 so that I was very excited by finding this. Tessellation is simply saying when I pass one triangle, I can use more than one triangles as the result. It is supposed to be fast and efficient due to hardware support.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S8QGurKQcUI/AAAAAAAAAtw/XYa9S9QnjPg/s1600/3763.gif"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 122px; height: 123px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S8QGurKQcUI/AAAAAAAAAtw/XYa9S9QnjPg/s320/3763.gif" alt="" id="BLOGGER_PHOTO_ID_5459496047209378114" border="0" /&gt;&lt;/a&gt;Actually I haven't been paying attention on geometry shader or tessellation, because I thought we cannot use it yet. I always skipped those parts when I read books. Now I need to track back and check what kind of techniques I can use with it.&lt;br /&gt;&lt;br /&gt;It seems like PS3 doesn't have any similar functionality. Sony might think of SPU as the counter part.&lt;br /&gt;&lt;br /&gt;Unfortunately the XBox360 SDK document doesn't explain about the tessellation at detail; for example performance or caveats. In addition, I haven't heard any XBox360 games have been using the tessellation feature before. It makes me wonder how useful it will be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-48479531235549883?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/48479531235549883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=48479531235549883' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/48479531235549883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/48479531235549883'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/tessellation-on-xbox360.html' title='Tessellation on XBox360'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/S8QGurKQcUI/AAAAAAAAAtw/XYa9S9QnjPg/s72-c/3763.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4089173298804142697</id><published>2010-04-13T01:19:00.003-04:00</published><updated>2010-04-13T01:57:37.401-04:00</updated><title type='text'>Observation of shadow map in God Of War3</title><content type='html'>Today I have played a little bit of God Of War 3.&lt;br /&gt;&lt;br /&gt;I know there was a presentation on GDC 2010 about shadow in God Of War3, but I cannot get it. Therefore I had to guess by looking at the result.&lt;br /&gt;&lt;br /&gt;From by observation, it is definitely doing multi-sampling on a shadow map. Probably it does percentage closer sampling, because the penumbra reason is almost one pixel distance on shadow map. It is more clearly noticeable when the shadow is drawn on a edge.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S8QD2F-e4OI/AAAAAAAAAto/pXYDMD1j0Eg/s1600/god-of-war-iii-20100310054646278_640w.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 180px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S8QD2F-e4OI/AAAAAAAAAto/pXYDMD1j0Eg/s320/god-of-war-iii-20100310054646278_640w.jpg" alt="" id="BLOGGER_PHOTO_ID_5459492876131950818" border="0" /&gt;&lt;/a&gt;I saw the shadow is often jumping. It gives me the impression that the shadow map is dynamically moving. It may moved to find the best angle between shadow map and the shadow receiver. It is also possible the position of shadow map is predefined by artists. This way reminded me of the shadow implementation of Halo series.&lt;br /&gt;&lt;br /&gt;The character has only one shadow even when there are many lights around him.&lt;br /&gt;Black shadow like texture appears when the character is under a shadow, which is similar result with assassin creed 2.&lt;br /&gt;&lt;br /&gt;The game also uses static shadows from static objects with the dynamic shadows from characters. They get along well. When a character is inside of the static shadow, the dynamic shadow merges and disappear naturally.&lt;br /&gt;&lt;br /&gt;I want to know how actually it works....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4089173298804142697?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4089173298804142697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4089173298804142697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4089173298804142697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4089173298804142697'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/observation-of-shadow-map-in-god-of.html' title='Observation of shadow map in God Of War3'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/S8QD2F-e4OI/AAAAAAAAAto/pXYDMD1j0Eg/s72-c/god-of-war-iii-20100310054646278_640w.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7442972345904457379</id><published>2010-04-05T01:45:00.004-04:00</published><updated>2010-04-05T01:59:53.958-04:00</updated><title type='text'>Penumbra shadow map screen shot</title><content type='html'>I have implemented some part of the penumbra soft shadow map idea. I need more time to implement the actual shadow part, but today I got the penumbra map.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I found that we can use shader programs even with wire frame fill mode; I am not sure whether or not it can be faster than solid fill mode. Therefore I could implement shaders that generate a derivative image directly with rendering wire-frame model.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I like to show some of screen shots.&lt;/div&gt;&lt;div&gt;The first image is the scene from light perspective:&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S7l6PlEf7KI/AAAAAAAAAtA/ZTY92KCnebk/s1600/penumbra01.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 220px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S7l6PlEf7KI/AAAAAAAAAtA/ZTY92KCnebk/s320/penumbra01.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5456526831603674274" /&gt;&lt;/a&gt;Then, the depth map is generated. The depth values are stored at Red and Green channels.&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S7l6QTg89jI/AAAAAAAAAtQ/wADjMXClNhk/s1600/penumbra02.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 194px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S7l6QTg89jI/AAAAAAAAAtQ/wADjMXClNhk/s320/penumbra02.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5456526844071048754" /&gt;&lt;/a&gt;Finally, the derivative image is generated by rendering wire-frame fill mode:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/S7l6P7A9kqI/AAAAAAAAAtI/6TvmgQVZ260/s1600/penumbra03.bmp"&gt;&lt;img style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 320px; height: 236px; " src="http://4.bp.blogspot.com/_qEs9r36R5kw/S7l6P7A9kqI/AAAAAAAAAtI/6TvmgQVZ260/s320/penumbra03.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5456526837494420130" /&gt;&lt;/a&gt;Note that the leg parts of the elephant looks like blurred. It hasn't been blurred but because their derivative values are small. Thus I can expect that contact points between the disk and the elephant will have sharp shadow.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It fetches five times at quarter resolution and I didn't see any false-positive edges. Since the derivative values are 8bit data, they can be retrieved by linear filter.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7442972345904457379?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7442972345904457379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7442972345904457379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7442972345904457379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7442972345904457379'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/penumbra-shadow-map-screen-shot.html' title='Penumbra shadow map screen shot'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/S7l6PlEf7KI/AAAAAAAAAtA/ZTY92KCnebk/s72-c/penumbra01.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-998605974024212078</id><published>2010-04-04T04:02:00.016-04:00</published><updated>2010-04-04T06:49:58.055-04:00</updated><title type='text'>Soft shadow map with wire-frame lines.</title><content type='html'>After lots of thoughts, I came up with another idea about soft-shadow map.&lt;br /&gt;&lt;br /&gt;The basic idea is that we render objects on Wire-frame mode on the shadow map as fourth channel. This wire-frame information is used as edges. Then when we retrieve the depth information from the depth map, we multi-sample on pixels where the wire-frame is rendered; otherwise, we sample only one time.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S7hc9pQZVNI/AAAAAAAAAsw/CfmWvLYdNpo/s1600/1990610552_60ba4967ef.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S7hc9pQZVNI/AAAAAAAAAsw/CfmWvLYdNpo/s320/1990610552_60ba4967ef.jpg" alt="" id="BLOGGER_PHOTO_ID_5456213162675754194" border="0" /&gt;&lt;/a&gt;The idea is based on multi-sampling shadow mapping; for example, Percentage-closer filtering (PCF). It will be very costly if we just multi-sample on every pixels. We want to multi-sample only on edges. However edge detection on shadow map by doing image processing is very hard. My idea is to use 3D model information to get those edges by rendering wire-frame lines.&lt;br /&gt;&lt;br /&gt;If we can control the width of wire-frame lines, we can increase the size of penumbra region, which will require more multi-sampling. It will be better if we can have different width on different depth, but it would not be possible sadly. If the fixed width give us bad result, we may need to blur the lines; possibly at lower resolution.&lt;br /&gt;&lt;br /&gt;It is also possible to use stencil buffer instead of rendering actual lines on a color buffer. If we are already using a depth buffer on console machines for shadow map, we can reuse the stencil channel at free.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S7hgzGJLxZI/AAAAAAAAAs4/ahLggTzTogg/s1600/08fig05.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S7hgzGJLxZI/AAAAAAAAAs4/ahLggTzTogg/s320/08fig05.jpg" alt="" id="BLOGGER_PHOTO_ID_5456217379498083730" border="0" /&gt;&lt;/a&gt;I haven't seen any rendering tricks that use wire-frame information yet. It makes me wonder whether this idea is feasible or not. And although I assume that wire-frame rendering will be cheaper than normal rendering, it may not be true; I need to test this.&lt;br /&gt;&lt;br /&gt;I kept looking for any ways to eliminate the multi-sampling cost at all by doing some of pre-processing on the wire-frame image; for example, blurring or pre-calculating. However, I found that it may not be worthy, because each pixel on the shadow map does not correspond to each pixel on the screen. In other words, some of pixels on the shadow map will be used several times while others may not be used at all. In addition, image processing on the shadow depth map is relatively expensive, because each pixel needs to fetch at least two or normally five texels.&lt;br /&gt;&lt;br /&gt;Edge detection with wire-frame rendering will give us false-positive a lot. It will be nicer if we can eliminate those wrong edge lines. One way to do this is to use normal information, but I'm not sure whether I can use shader programs on wire-frame mode.&lt;br /&gt;&lt;br /&gt;It is also possible to use a derivative image of the shadow map. The derivative image can eliminate those false-positive edges. Taking derivative image will require at least three times of texture fetching per pixel, which is expensive. But if the number of multi-sampling on edge side will be more than three times, taking derivative can be an option as pre-processing. After updating stencil buffer by rendering the wire-frame, we can  reduce the cost of 2D image processing with stencil early cull.&lt;br /&gt;&lt;br /&gt;Another thing I want to mention is that there are lots of missing information on the shadow map that is necessary for softening penumbra region. Even after the costly pre-calculation on the shadow map, those reconstructed inner-penumbra information is not correct; by inner-penumbra I mean penumbra region inside shadow, while outer-penumbra will be penumbra region out side of shadow. Thus I think it is better to multi-sample latter with the actual depth.&lt;br /&gt;&lt;br /&gt;I will try to implement this idea to see feasibility.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-998605974024212078?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/998605974024212078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=998605974024212078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/998605974024212078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/998605974024212078'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/soft-shadow-map-with-wire-frame-lines.html' title='Soft shadow map with wire-frame lines.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S7hc9pQZVNI/AAAAAAAAAsw/CfmWvLYdNpo/s72-c/1990610552_60ba4967ef.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4441359336776018285</id><published>2010-04-01T13:58:00.002-04:00</published><updated>2010-04-01T14:02:08.626-04:00</updated><title type='text'>Blurring depth buffer with linear filter.</title><content type='html'>It happens sometimes that we need to blur the depth buffer, but we cannot use linear filter for depth value.&lt;br /&gt;&lt;br /&gt;The reason is that the depth value is encoded into three channels. We use 24 bits for the depth values, and each color channel consists of only 8 bits, so that we have to split the depth value onto three separate color channels. By the reason, if we linearly interpolate each channel of the encoded values, the value will be broken.&lt;br /&gt;&lt;br /&gt;My idea to use linear filter for the depth buffer requires two preconditions.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;We store the depth values on color buffer not on the depth buffer so that we can control the encoding way.&lt;/li&gt;&lt;li&gt;We want to get the average values from four texels. In order words, this way does not work if we want to linearly interpolate at arbitrary ratio. It has to be exactly at the middle of four texels.&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S7QDTs-Q3zI/AAAAAAAAAso/dOFip5PU3T0/s1600/depthbuffer.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 243px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S7QDTs-Q3zI/AAAAAAAAAso/dOFip5PU3T0/s320/depthbuffer.jpg" alt="" id="BLOGGER_PHOTO_ID_5454988685677223730" border="0" /&gt;&lt;/a&gt;Let's see the reason why depth values cannot be linearly interpolated.&lt;br /&gt;For example we have two values: 257 and 254. Of course the actual depth value ranges from zero to one, but floating point expression is hard to read as an example.&lt;br /&gt;&lt;br /&gt;The encoding formula is like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blue channel = value % 256&lt;/li&gt;&lt;li&gt;Green channel = ( value / 256 ) % 256&lt;/li&gt;&lt;li&gt;Red channel = ( value / ( 256 * 256 ) ) % 256&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;*PS: "%" is modulation operator, which gives us reminder after division.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For the value, 257, the encoded value is [ R, G, B ] = [ 0, 1, 1 ]. For the value, 254, the encoded value is [ R, G, B ] = [ 0, 0, 254 ].&lt;br /&gt;&lt;br /&gt;When we sample at exactly middle of the texels, the hardware linear filter will give us the interpolated value, [ R, G, B ] = [ 0, 0, 127 ], because first it calculate values for each channels, and it will truncate the values lower than zero.&lt;br /&gt;&lt;br /&gt;The decoded value will be 127; The way to decode is the opposite process of the encoding way: 0 * (256*256) + 0 * 256 + 127. The result we expect is "255", but we got 127.&lt;br /&gt;&lt;br /&gt;The problem is at under-flow part. The averaged value on the Green channels is supposed to be 0.5. If we can get the value below than zero, we can correctly reverse back the original value.&lt;br /&gt;0.5 * 256 + 127 = 255.&lt;br /&gt;&lt;br /&gt;Thus we need some buffer bits for the truncation. The encoding formula must be changed to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blue channel = value % 256&lt;/li&gt;&lt;li&gt;Green channel = ( ( value / 256 ) % 128 ) * 2&lt;/li&gt;&lt;li&gt;Red channel = ( ( value / ( 256 * 128 ) ) % 128 ) * 2&lt;/li&gt;&lt;/ul&gt;By this encoding way, we will store a value, [ R, G, B ] = [ 0, 2, 1 ], for the value 257 and another value, [ R, G, B ] = [ 0, 0, 254 ], for the value, 254. The linearly interpolated value for each channel is [ R, G, B ] = [ 0, 1, 127 ], and now we can reverse back to the correct average value, 255: ( 0 / 2 ) * ( 256 * 128 ) + ( 1 / 2 ) * 256 + 127.&lt;br /&gt;&lt;br /&gt;Since we need to use bilinear filter for 2D image, we need to reserve 2 bits for each channel. Fortunately overflow never happens due to the characteristics of average. Now we can use 6 bits for the Red channel, 6 bits for Green channel, and 8 bits for Blue channel; total 20bits. I assume that each channel has only 8 bits available.&lt;br /&gt;&lt;br /&gt;In case that 20 bits are not enough, we can also use the fourth channel, alpha. Then we can use 6 bits for Red, 6 bits for Green, 6 bits for Blue and 8 bits for Alpha; total 26bits, which is big enough for the most cases.&lt;br /&gt;&lt;br /&gt;This way should work for depth value blur with the trick I explained before: http://wrice.blogspot.com/2010/03/gaussian-filter-for-anti-alias.html&lt;br /&gt;&lt;br /&gt;Please note that this trick does not work when we expect arbitrary linear interpolation; the texel coordinate is not exactly at the middle. It will cause under-flow problem with much higher precision.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4441359336776018285?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4441359336776018285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4441359336776018285' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4441359336776018285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4441359336776018285'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/04/blurring-depth-buffer-with-linear.html' title='Blurring depth buffer with linear filter.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/S7QDTs-Q3zI/AAAAAAAAAso/dOFip5PU3T0/s72-c/depthbuffer.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-566991578553404398</id><published>2010-03-28T03:00:00.005-04:00</published><updated>2010-03-28T03:44:31.342-04:00</updated><title type='text'>Anti-alias after edge detection on 4xMSAA with Light pre-pass</title><content type='html'>This article is after the prior article, "Fast Edge Detection on 4xMSAA with Light pre-pass": http://wrice.blogspot.com/2010/03/fast-edge-detection-on-msaa-with-light.html&lt;br /&gt;&lt;br /&gt;Today I found that I can run fragment shaders per sampling point on PS3. It wasn't quite obvious on the document so that I wasn't sure until I see the result. The way PS3 allows us to run at sampling point is to set "sample mask" on MSAA surface. By doing that, I can decide which sampling point I will store the result from the fragment shader. It is a bit mask style, so that the result can go to more than one sampling point.&lt;br /&gt;&lt;br /&gt;On my prior article, I said "we need to calculate light value at sampling points and then we need to  average the light values." Now we can fetch only one normal sampling point and one depth sampling point per sampling point; no need to average any. After this, I found the Light buffer became more like MSAA buffer.&lt;br /&gt;&lt;br /&gt;There were several things to notice on the major change. Since we store the light values per sampling point, we don't need sum up or average it. Later, we can get the averaged value by using linear filter on the light buffer. I expect this can buy us some time.&lt;br /&gt;&lt;br /&gt;A downside is that now we need to render the light geometry, or quad, three times more on the edges. Including non-edge lighting, we need to render the light geometry total five times; one for non-edge and four for each sampling point.&lt;br /&gt;&lt;br /&gt;Although we need to run 4 times of the edge fragment shader, each fragment shader became lighter. Now it does only two times of texture fetching: one on the normal buffer and one on the depth buffer. It was eight times before: four on normal buffer and four on depth. Therefore the total cost seems almost same; in fact, I need to do the performance test more.&lt;br /&gt;&lt;br /&gt;The next change was to use Centroid on the fragment shader that actually renders each object with materials. Without centroid, the last result may not have any difference. :-)&lt;br /&gt;&lt;br /&gt;I was very happy. The result looked just perfect. I kept seeing dark pixels around edges even after I adopted the fast edge detection. Now the result is very very nice and even beautiful.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*PS : please leave any similar papers or articles so that I can improve this method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-566991578553404398?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/566991578553404398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=566991578553404398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/566991578553404398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/566991578553404398'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/anti-alias-after-edge-detection-on.html' title='Anti-alias after edge detection on 4xMSAA with Light pre-pass'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8234268384383116260</id><published>2010-03-27T03:53:00.014-04:00</published><updated>2010-03-27T06:01:34.458-04:00</updated><title type='text'>Gaussian filter at run-time</title><content type='html'>Today I found that PlayStation3 has "3x3 Gaussian filter" as a texture filter. I was surprised, because Gaussian filter is known as an expensive filter.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S627hCx-EQI/AAAAAAAAArI/90mailNc08I/s1600/220px-Gaussian_Filter.svg.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 220px; height: 158px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S627hCx-EQI/AAAAAAAAArI/90mailNc08I/s320/220px-Gaussian_Filter.svg.png" alt="" id="BLOGGER_PHOTO_ID_5453220900172075266" border="0" /&gt;&lt;/a&gt;On second thought, I found that it is actually not too crazy expensive. 3x3 Gaussian filter is like this:&lt;br /&gt;[ 1 2 1]&lt;br /&gt;[ 2 4 2]&lt;br /&gt;[1 2 1] / 16&lt;br /&gt;&lt;br /&gt;To get the filtered result, we can actually do it by 4 times of texture fetching with bilinear filter, which most of graphic cards support.&lt;br /&gt;&lt;br /&gt;(&lt;br /&gt;[ 0.25  0.25 0 ]&lt;br /&gt;[  0.25  0.25 0 ]&lt;br /&gt;[ 0 0 0 ]&lt;br /&gt;+&lt;br /&gt;[ 0  0.25  0.25 ]&lt;br /&gt;[ 0  0.25  0.25 ]&lt;br /&gt;[ 0 0 0 ]&lt;br /&gt;+&lt;br /&gt;[ 0 0 0 ]&lt;br /&gt;[ 0.25  0.25 0 ]&lt;br /&gt;[ 0.25  0.25 0 ]&lt;br /&gt;+&lt;br /&gt;[ 0 0 0 ]&lt;br /&gt;[ 0  0.25  0.25 ]&lt;br /&gt;[ 0  0.25  0.25 ] ) /4&lt;br /&gt;&lt;br /&gt;I haven't thought that I can use Gaussian filter at run-time. I wonder why I haven't heard from anybody else or any books. Did I just forget with getting older? :-)&lt;br /&gt;&lt;br /&gt;It can be useful on blur or glow effects. It can also help alias problems.&lt;br /&gt;&lt;br /&gt;By doing the same trick double times, we can get 5x5 Gaussian result. 5x5 Gaussian filter requires 25 pixel colors for each result pixel. With the trick, it takes only 8 times of texture fetching rather than 25 times. If the PS3 hardware Gaussian filter is fast enough, it will cost only two times of texture fetching.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/S63QM-0V6kI/AAAAAAAAArY/9AQI1izF9Wk/s1600/Picture+2.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 199px; height: 125px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/S63QM-0V6kI/AAAAAAAAArY/9AQI1izF9Wk/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5453243645255084610" border="0" /&gt;&lt;/a&gt;Tomorrow I will try this idea and see how much it will cost. I'm guessing it will cost about 5ms... And I will also test the PS3 Hardware Gaussian filter too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8234268384383116260?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8234268384383116260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8234268384383116260' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8234268384383116260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8234268384383116260'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/gaussian-filter-for-anti-alias.html' title='Gaussian filter at run-time'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S627hCx-EQI/AAAAAAAAArI/90mailNc08I/s72-c/220px-Gaussian_Filter.svg.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-1481340935082956784</id><published>2010-03-26T01:50:00.025-04:00</published><updated>2010-03-28T20:16:28.953-04:00</updated><title type='text'>Fast edge detection on MSAA with Light Pre-Pass</title><content type='html'>I have spent a whole week for solving an aliasing problem on 4xMSAA and Light pre-pass technique. I think it is a time for me to write about my experience.&lt;br /&gt;&lt;br /&gt;Light pre-pass consists of three steps: rendering normal/depth buffer, rendering lights and rendering objects with proper materials.&lt;br /&gt;&lt;br /&gt;Light pre-pass is more friendly to MSAA than deferred shading, because on the last rendering phase objects can utilize MSAA. On the other hand, objects on deferred shading cannot get any benefits from MSAA while lights may get some. I believe this is why Wolfgang said "It works with MSAA definitely": http://diaryofagraphicsprogrammer.blogspot.com/2008/03/light-pre-pass-renderer.html&lt;br /&gt;&lt;br /&gt;However, there are two problems: one is between the light buffer and the last accumulation buffer, and another problem is on between normal/depth buffer and the light buffer.&lt;br /&gt;&lt;br /&gt;When we render lights on the light buffer, MSAA doesn't work. It means that even if we use 4xMSAA setting for the light buffer, the result values on the four colors of each pixel are all the same. It is because light geometries are usually a simple sphere or a small quad. Thus when we render objects as the last step, we cannot get light values at MSAA sampling level, because we don't have enough light information for each sampling point.&lt;br /&gt;&lt;br /&gt;One possible way to solve this problem is to do the light rendering per  MSAA sampling point. Executing the pixel shader per sampling point will  allow us to store each light value per sampling point. Then the light value will be selected by centroid value. Since not  every graphic cards allows to run at sampling point, storing the averaged light values  is an alternative way.&lt;br /&gt;&lt;br /&gt;Another problem is on between the normal/depth buffers and light buffer. Since we are rendering objects on the normal and depth buffers, MSAA properly works on the normal/depth buffers. Then when we render the light buffer, we need to fetch four sampling points from the normal buffer and four sampling points from the depth buffer. It is because we need to calculate light value at sampling points and then we need to average the light values. If we just use linear filter for normal buffer and take the average of the normal values on a pixel, the normal value will have no proper meaning. The depth value is also the same. For example if we have 4 depth values on a pixel: 0, 0, 1, and 1. Then the linearly averaged value will be 0.5, but there was no objects at the depth position.&lt;br /&gt;&lt;br /&gt;Since the pixel shader needs to fetch 8 texels, it is very expensive. One way to solve this problem is to differentiate edge pixels from non-edge pixels. On non-edge pixel, we perform one time calculation, while we still do four times calculation on edge pixels.&lt;br /&gt;&lt;br /&gt;To practically implement this idea, a cheap edge detection step is required. On Wolfgang's blog, a guy, benualdo, left an interesting idea: http://diaryofagraphicsprogrammer.blogspot.com/2010/03/edge-detection-trick.html&lt;br /&gt;&lt;br /&gt;From his idea, I postulated an interesting characteristics of normal values. The length of a normal value is always one by the definition. However, if we linearly interpolate two normal values, the length may decrease. The length will be kept at one only when the normal values are the same. By this characteristics, we can determine whether a pixel includes four same normal values or not by checking the length of the averaged normal value. In other words, by one time of texture fetching with linear filter, we are able to check four normal values; we save three times of texture fetching. I will call this "normal length checking".&lt;br /&gt;&lt;br /&gt;The bigger problem was on the depth checking part. I spent about 3 days thinking of depth checking with any similar way to the normal length checking trick. The first way I came up with is to make the 1 dimensional depth value to be 2 dimensional value; ( y = depth, x = 1 - depth ), and normalize it. When the depth values are different, linearly interpolating the normalized value will make the length smaller. This interesting idea didn't work, because we usually use 24 bits for depth and we need 24bits + 24bits to do this. Although I found that 24bits + 16bits is enough to detect edges, I could not accommodate the 2 bytes on any buffers. Normal buffer needs to use 3 channels for the normal and only one channel is left. I tried to encode the normal values onto 2 channels, but I found 2 channels are not enough to do the normal length checking trick. Thus I had to find another way.&lt;br /&gt;&lt;br /&gt;My last choice was to use normal direction checking. The way is similar to the toon shading edge detection. When a normal value points to outward from the screen, the pixel is an edge pixel; edge = 0.2 &gt; dot( normal, (0, 0, 1) ). A difference is that on our case false-positive is allowed. In  other words, the result will be fine even if we misjudge a non-edge as  an edge; we will need little bit more calculations but the result will  be the same. On toon shading, this kind of false-positive will make the  edge line thicker, which make the result bad.&lt;br /&gt;&lt;br /&gt;To prevent too much  performance leak, I adopted the Centroid trick that is well explained  on ShaderX7. The assumption is that if a pixel is inside of a triangle,  it is not an edge pixel, so that we can easily reject those non-edge  pixels by checking the centroid value. This reduces a big amount of  false-positive edges from the normal direction checking. The centroid  information is stored on the alpha channel of the normal buffer.&lt;br /&gt;&lt;br /&gt;I  like to add some of comments about the centroid trick. The basic idea  was very interesting. However, after I implemented it, I soon found that  it gave me almost wire-frame-like edges. For example if we have a  sphere which consists of several triangles, the centroid trick will  indicate those seam parts between triangles as edges. But those pixels  are not edges in the sense of normal continuity and depth continuity. In  addition, if we use normal map during the normal buffer rendering,  pixels in the middle of triangles may need to be considered as edges due  to the normal discontinuity. Furthermore, PS3 is based on tiles. The  wire-frame-like edges are actually covering almost every screen,  although they are sparse. The Stencil cull implementation on PS3 was  almost disabled in the situation.&lt;br /&gt;&lt;br /&gt;PS3 had another problem with  the Centroid trick. PS3 sends the identical value as a centroid value  where a pixel is partially covered if the polygon covers the middle of  the pixel. It was mentioned on the document and a DevNet supporting guy  told me the behavior is hardware-wired so that they have no way to  change it. According to my rough calculation only 2/3 of actual edges  are detected by the Centroid trick. In other words 1/3 are missed. I  couldn't give up this trick, because it makes the edge detection very  fast, although the quality may decrease.&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 184px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S68Gp3nNY_I/AAAAAAAAArw/il5E00qHTG4/s320/outline.gif" alt="" id="BLOGGER_PHOTO_ID_5453584990141768690" border="0" /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S68GqF9wSUI/AAAAAAAAAr4/wTAuw7LnNmY/s1600/upscale.gif"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 186px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S68GqF9wSUI/AAAAAAAAAr4/wTAuw7LnNmY/s320/upscale.gif" alt="" id="BLOGGER_PHOTO_ID_5453584993994426690" border="0" /&gt;&lt;/a&gt;On my implementation, first the normal length checking will return edges. Remain pixels are tested with the centroid trick, and then the normal direction checking takes place. This requires only 1 time of texture fetching and was fast enough to perform in 1.25ms at 720p.&lt;br /&gt;&lt;br /&gt;The result between the normal direction checking and the depth checking on four texels, which is expensive, was little bit different, but the direction checking was very good enough with respect to the cost.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-1481340935082956784?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/1481340935082956784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=1481340935082956784' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1481340935082956784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1481340935082956784'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/fast-edge-detection-on-msaa-with-light.html' title='Fast edge detection on MSAA with Light Pre-Pass'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S68Gp3nNY_I/AAAAAAAAArw/il5E00qHTG4/s72-c/outline.gif' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-6943374737198142974</id><published>2010-03-22T13:35:00.004-04:00</published><updated>2010-03-22T13:47:22.705-04:00</updated><title type='text'>Version control system: Mercury</title><content type='html'>On Joel on blog, I found an interesting article posted: http://www.joelonsoftware.com/items/2010/03/17.html&lt;br /&gt;&lt;br /&gt;It is a kind of introductory of Mercury source version control system.&lt;br /&gt;&lt;br /&gt;First I thought we have already enough number of source version control systems such as Subversion, CVS, and AlienBrain.&lt;br /&gt;&lt;br /&gt;The very first time I have heard about Mercury is from Google code. They actively supported it and they even had a video clip for it. I watched it but I didn't get how different it is from others.&lt;br /&gt;&lt;br /&gt;Joel introduced it in a easy way, and I also think it is a very important big progress in software engineering. He also kindly made a tutorial of it: http://hginit.com&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S6er-ep7B0I/AAAAAAAAArA/Kl6UhkAFh1E/s1600-h/17hginit.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 250px; height: 128px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S6er-ep7B0I/AAAAAAAAArA/Kl6UhkAFh1E/s320/17hginit.png" alt="" id="BLOGGER_PHOTO_ID_5451514963824412482" border="0" /&gt;&lt;/a&gt;I will try it on google code at a next personal project.&lt;br /&gt;&lt;br /&gt;In a nut shell, Mercury is different from others in the sense that it stores "changes between versions" while previous systems store each version.&lt;br /&gt;&lt;br /&gt;*PS: I don't see eclipse plugin for Mercury yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-6943374737198142974?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/6943374737198142974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=6943374737198142974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6943374737198142974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6943374737198142974'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/source-control-system-mercury.html' title='Version control system: Mercury'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S6er-ep7B0I/AAAAAAAAArA/Kl6UhkAFh1E/s72-c/17hginit.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-521589385136766030</id><published>2010-03-16T02:48:00.003-04:00</published><updated>2010-03-16T02:56:01.279-04:00</updated><title type='text'>GPG8 is published.</title><content type='html'>Today I was checking Amazon and I found Game Programming Gems 8 is published.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S58rRYAUxtI/AAAAAAAAAq4/XbNG5K55Pio/s1600-h/Picture+2.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 202px; height: 258px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S58rRYAUxtI/AAAAAAAAAq4/XbNG5K55Pio/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5449121651643172562" border="0" /&gt;&lt;/a&gt;This time I expect more than usual, because last year there were big progress in graphics programming such as SSAO, and pre-lighting. And there were several impressive games published.&lt;br /&gt;&lt;br /&gt;From the table of contents, it contains about SPUs, Code coverage and face rendering... I must read it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-521589385136766030?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/521589385136766030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=521589385136766030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/521589385136766030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/521589385136766030'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/gpg8-is-published.html' title='GPG8 is published.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/S58rRYAUxtI/AAAAAAAAAq4/XbNG5K55Pio/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5530216747160510743</id><published>2010-03-15T14:29:00.004-04:00</published><updated>2010-03-15T14:31:24.415-04:00</updated><title type='text'>GCC converts variables into SSA form</title><content type='html'>I was gathering some information of GCC with respect to my prior  article. And I found that GCC is converting code into SSA form:  http://gcc.gnu.org/wiki/SSA. SSA stands for "Single Static Assignment."&lt;br /&gt;&lt;br /&gt;It  is quite surprising me, because DEF-USE relationship is used for  software testing and I haven't thought testing and compiler is related;  indeed they must be able to share big amount of parsing technique.&lt;br /&gt;&lt;br /&gt;In  addition, personally I prefer to use "const" keyword for every single  local variables. Some programmer don't like to see const keywords, because it makes source code longer. And they may think  it increases the number of local variables and therefore it increases the  size of the binary code. If compiler is internally converting to SSA form,  then there is no way to reduce the binary code size by not using "const".&lt;br /&gt;&lt;br /&gt;Hence  I found a better excuse to keep using const keyword for local  variables. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5530216747160510743?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5530216747160510743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5530216747160510743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5530216747160510743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5530216747160510743'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/gcc-convert-variables-into-ssa-form.html' title='GCC converts variables into SSA form'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5484762011216148748</id><published>2010-03-14T14:46:00.012-04:00</published><updated>2010-03-14T17:38:00.726-04:00</updated><title type='text'>Use Perfect Hash Table for alternative way of switch.</title><content type='html'>My question I had yesterday is how better "switch" performs comparing to "else if". For example, when we have a piece of code like this:&lt;br /&gt;&lt;blockquote&gt;if( a == 1 ) doSomething1();&lt;br /&gt;else if( a == 2 ) doSomething2();&lt;br /&gt;else if( a == 3 ) doSomething3();&lt;br /&gt;....&lt;br /&gt;else if( a == 40000 ) doSomething40000();&lt;br /&gt;&lt;/blockquote&gt;For each line, CPU, more precisely ALU, will evaluate each statement: "a == 1", "a == 2" and so on. In other words, CPU need to calculate 40000 times for the same value "a".&lt;br /&gt;&lt;br /&gt;More intuitive representation for this testing can be like this:&lt;br /&gt;&lt;blockquote&gt;switch( a )&lt;br /&gt;{&lt;br /&gt;case 1: doSomething1(); break;&lt;br /&gt;case 2: doSomething2(); break;&lt;br /&gt;case 3: doSomething3(); break;&lt;br /&gt;...&lt;br /&gt;case 40000: doSomething4000(); break;&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;This "switch statement" gives us an illusion that CPU will evaluate the value of "a" only one time.&lt;br /&gt;&lt;br /&gt;According to an article on CodeGuru, however, "switch" statement will be replaced by "else if". See the article: http://www.codeguru.com/cpp/cpp/cpp_mfc/comments.php/c4007/?thread=48816&lt;br /&gt;&lt;br /&gt;A faster and ideal implementation will be like this:&lt;br /&gt;&lt;blockquote&gt;typedef void (*CB)();&lt;br /&gt;CB doSomethings[] = { doSomething0(), doSomething1(), ... doSomething40000() };&lt;br /&gt;(*(doSomethings[ a ]))();&lt;br /&gt;&lt;/blockquote&gt;This idea is called "jump table". In this implementation, CPU does not evaluate the "a" value 40000 times but does only once. In other words, this way is faster.&lt;br /&gt;&lt;br /&gt;One problem of "jump table" is that the jump table can be too big. When we have a big gap between two values, like "0", and "40000", we still need to have values for 1, 2, 3,... 39999, which will never be used.&lt;br /&gt;&lt;br /&gt;The article also mentions the jump table. However, when the table became ridiculously big in some cases, it retreats to "else if".&lt;br /&gt;&lt;br /&gt;According to another article, GCC does test "density" of values on "cases". See the article: http://old.nabble.com/Switch-statement-optimization-td5248739.html&lt;br /&gt;&lt;br /&gt;The article says when some of values are close enough, GCC will use jump table for those values only, while it still uses "else if" for other sparse values. For example, when we have values like "1", "2", "3", and "40000", GCC will use jump table for those close values "1", "2", and "3", and it will use "else if" for the distant value "40000".&lt;br /&gt;&lt;br /&gt;The problem that I am still not happy is that it still uses "else if", although it does use jump table partially.&lt;br /&gt;&lt;br /&gt;My idea to improve this problem is to use Perfect Hash Table.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S503Qg9bChI/AAAAAAAAAqQ/lndCZMIcW5g/s1600-h/240px-Hash_table_4_1_1_0_0_1_0_LL.svg.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 240px; height: 184px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S503Qg9bChI/AAAAAAAAAqQ/lndCZMIcW5g/s320/240px-Hash_table_4_1_1_0_0_1_0_LL.svg.png" alt="" id="BLOGGER_PHOTO_ID_5448571881053162002" border="0" /&gt;&lt;/a&gt;Hash table is a table that contains both key value and mapped value. For the example above, "1" is mapped to "doSomething1" and "40000" is mapped to "doSomething40000".&lt;br /&gt;&lt;blockquote&gt;std::map&amp;lt; int, CB &amp;gt; hashTable;&lt;br /&gt;hashTable[ 1 ] = doSomething1;&lt;br /&gt;hashTable[ 40000 ] = doSomething40000;&lt;br /&gt;(*(hashTable[ a ]))();&lt;br /&gt;&lt;/blockquote&gt;One better property of hash table over "jump table" is that the memory space that the hash table requires does not depend on the values but depends on the number of values, which is preferred. Although hash table need little bit more space than the number of  values, it is much less than the size of jump table in this case.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;One down side of Hash Table idea is that "hash function" may not as fast as jump table address calculation.&lt;br /&gt;&lt;br /&gt;For this down side, it is unavoidable that Hash Function  calculation is expensive than direct address calculation by its nature.&lt;br /&gt;&lt;br /&gt;However, the cost of Hash function varies depending on what Hash Function we are  going to use. So we should be able to control the cost by selecting the hash function.&lt;br /&gt;&lt;br /&gt;There are several well-known hash functions. It seems like most of Hash Function Implementations are focusing on String key values, while I need optimal Hash functions for Integer values; for example, gperf and CMPH. An article I found shows Integer Hash Functions: http://www.concentric.net/~Ttwang/tech/inthash.htm&lt;br /&gt;&lt;br /&gt;For one case of the article, "32 bit Mix function", it does 11 CPU cycle on HP9000, which is relatively old platform. In addition, those hash function can utilize parallel operations, which can perform faster.&lt;br /&gt;&lt;br /&gt;A point is that Hash function for integer is not crazily expensive. Since it doesn't have Branch operation, it should be faster then a bunch of "else if".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Another down side is that hash values may conflict for different key values, then it needs to take additional steps to resolve it.&lt;br /&gt;&lt;br /&gt;For this down side, we can use the idea of "Perfect hash table". &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S504md1iFFI/AAAAAAAAAqg/vOzGVSRpEWU/s1600-h/Picture+2.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 289px; height: 316px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S504md1iFFI/AAAAAAAAAqg/vOzGVSRpEWU/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5448573357683512402" border="0" /&gt;&lt;/a&gt;Perfect hash table is a hash table that does not have confliction at all. In a easy way to think of the perfect hash table is an hash table whose reserved size is very big while the number of values in the hash table is small.&lt;br /&gt;&lt;br /&gt;Therefore we can avoid confliction problem by using Perfect Hash Table. Mose of cases, Perfect Hash Table is not good at inserting and deleting in the middle of process. In other words, we need to know every values that are going to be in the table when we create the perfect hash table. Fortunately C/C++ requires the values on "case" to be constant values. So we know every values at compile time; in other words, compiler knows every values at compile time.&lt;br /&gt;&lt;br /&gt;There is another concept, "Minimal Perfect Hash Table".&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S504mvolYgI/AAAAAAAAAqo/LO40c-MM9Jw/s1600-h/Picture+4.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 291px; height: 262px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S504mvolYgI/AAAAAAAAAqo/LO40c-MM9Jw/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5448573362461041154" border="0" /&gt;&lt;/a&gt;Minimal Perfect Hash Table is a hash table whose reserved size is same with the number of keys on it without any conflict.&lt;br /&gt;&lt;br /&gt;It sounds very nice, but the hash function for minimal perfect hash function is at least 4 times expensive than normal hash function. One example of Minimal Perfect Hash Function is BDZ algorithm: http://cmph.sourceforge.net/bdz.html&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S50_KxU6pWI/AAAAAAAAAqw/v-sb0jj63GQ/s1600-h/img50.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 123px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S50_KxU6pWI/AAAAAAAAAqw/v-sb0jj63GQ/s320/img50.png" alt="" id="BLOGGER_PHOTO_ID_5448580578460476770" border="0" /&gt;&lt;/a&gt;The basic idea of BDZ was surprisingly simple to me. The idea seems very useful for data compression. But it does 3 times of normal hash function to get perfect hash table and it does additional calculation to achieve minimal perfect hash table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In brief, using Perfect Hash Table saves memory space than jump table and it performs faster than a bunch of "else if". On the other hand, it is slower than jump table and it may (or may not) take more space than "else if" way. Therefore, using Perfect Hash Table for "switch statement" is an alternative way in between "else if" replacement way and "jump table" way. It can certainly perform better for the cases that jump table does not fit. In addition, this evaluation can be done by compiler at compile time, so I believe a better compiler should consider this option for internal optimization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5484762011216148748?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5484762011216148748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5484762011216148748' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5484762011216148748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5484762011216148748'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/use-perfect-hash-table-for-alternative.html' title='Use Perfect Hash Table for alternative way of switch.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/S503Qg9bChI/AAAAAAAAAqQ/lndCZMIcW5g/s72-c/240px-Hash_table_4_1_1_0_0_1_0_LL.svg.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-3034951147934554914</id><published>2010-03-04T16:12:00.007-05:00</published><updated>2010-03-04T23:33:16.912-05:00</updated><title type='text'>Features for next generation game engine.</title><content type='html'>In my mind, there are several unsatisfied demand for game engines. It is because most of game engines have been improved from long time ago. For example, game bryo, Unreal, Quake, and Half-Life. Those game engines did not have chance to adopt new concepts.&lt;br /&gt;&lt;br /&gt;The features that I want to have are listed here:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Interface and contract driven design.&lt;/li&gt;&lt;li&gt;Support for Unit-Testing.&lt;/li&gt;&lt;li&gt;Pre-lighting as well as deferred shading and forward shading.&lt;/li&gt;&lt;/ol&gt;Additionally and personally I prefer these features as well:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Progressive rendering.&lt;/li&gt;&lt;li&gt;SPU support on PS3.&lt;/li&gt;&lt;li&gt;XNA support through C++ DLL.&lt;/li&gt;&lt;li&gt;No preprocessor codes such as #ifdef.&lt;/li&gt;&lt;/ol&gt;Other external tool supports such as Max/Maya plug-in, UI tool, and sound system are second level issue. Once we have the reliable corner stone, people will join the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-3034951147934554914?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/3034951147934554914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=3034951147934554914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3034951147934554914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3034951147934554914'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/features-for-next-generation-game.html' title='Features for next generation game engine.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5842844095065420363</id><published>2010-03-04T02:25:00.006-05:00</published><updated>2010-03-04T02:44:16.469-05:00</updated><title type='text'>Truck number or lucky number.</title><content type='html'>Truck number is the minimum number of people who can mess up a project. The higher, the better.&lt;br /&gt;&lt;br /&gt;For example, the truck number is 1 for a project, meaning that when one person got hit by a truck then the project cannot go on anymore.&lt;br /&gt;&lt;br /&gt;If the example is too cruel, then we can also call it lucky number. For example, a person get big money by a lottery, he quit the company and the project cannot go on anymore. It means the lucky number is one.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S49iw3h9CyI/AAAAAAAAAqI/EaZ6nRAtsyM/s1600-h/florida-lottery.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 298px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S49iw3h9CyI/AAAAAAAAAqI/EaZ6nRAtsyM/s320/florida-lottery.jpg" alt="" id="BLOGGER_PHOTO_ID_5444679066193824546" border="0" /&gt;&lt;/a&gt;Now our company has one HR person. He is out of country more than 30 days. I need to talk to him about my Visa but I cannot process it; I'm wondering he might actually get a lottery.&lt;br /&gt;&lt;br /&gt;One may think higher lucky number means less efficient, because of too much redundancy. Well, it may be true. Insurance is for reducing risk not to increase efficiency. And the risk may mess up your company or your life.&lt;br /&gt;&lt;br /&gt;My company is small as a matter of fact. But I do not think it is as small as it can afford only one HR person. I do believe it is rather a matter of experience. People who don't have various experiences tend not to prepare for other risky situations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5842844095065420363?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5842844095065420363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5842844095065420363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5842844095065420363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5842844095065420363'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/truck-number-of-lucky-number.html' title='Truck number or lucky number.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S49iw3h9CyI/AAAAAAAAAqI/EaZ6nRAtsyM/s72-c/florida-lottery.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-1754412497924288537</id><published>2010-03-02T00:56:00.007-05:00</published><updated>2010-03-02T01:52:20.275-05:00</updated><title type='text'>An idea to enhance SSAO.</title><content type='html'>AO here means Ambient Occlusion. As well known, AO increases realism in a scene. Some of concave shaped corner of objects are exposed to out side less then convex corners. The concave part will look darker than convex part. AO calculates how much a point is occluded by other geometries.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S4yvQKh_o9I/AAAAAAAAApQ/ZuDzBP3A7eo/s1600-h/ambient-occlusion.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 134px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S4yvQKh_o9I/AAAAAAAAApQ/ZuDzBP3A7eo/s320/ambient-occlusion.jpg" alt="" id="BLOGGER_PHOTO_ID_5443918741823792082" border="0" /&gt;&lt;/a&gt;One problem of AO is that it is expansive to calculate. We cannot afford to calculate AO at run-time. So people pre-calculate AO values and they are used at run-time. In this way, AO values are valid only for static objects, because if objects move AO values must be re-calculated and we cannot afford it.&lt;br /&gt;&lt;br /&gt;One novel approach was known as SSAO. AO calculation is done in screen-space with depth buffer; optionally with normal buffer.&lt;br /&gt;&lt;br /&gt;SSAO does not give as good looking as pre-calculated AO values although  it is still better than not using at all. In addition, one thing we need  to notice is that SSAO is still not cheap at run-time.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/S4yuj7VfM6I/AAAAAAAAApI/YjwvDRnq3sY/s1600-h/SSAO2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/S4yuj7VfM6I/AAAAAAAAApI/YjwvDRnq3sY/s320/SSAO2.jpg" alt="" id="BLOGGER_PHOTO_ID_5443917981830558626" border="0" /&gt;&lt;/a&gt;For the screen-shot above, you can see a sofa on right side which has two cushions. And you can see a table. The screen-shot shows AO between the sofa and table which is represented by darker color. But actually the distance between table and sofa is relatively far, although it appears to be closer on the screen space. So the SSAO result is not quite correct. I feel it is more like dark glow effect from sofa or some kind of wrong shadow.&lt;br /&gt;&lt;br /&gt;My idea is a kind of hybrid way between SSAO and pre-calculated AO. When a object is moving, we use SSAO, and when the object stop moving, we use a better AO value that is calculated at run-time. Although AO calculation is expensive then SSAO, once the AO values are calculated, it does not need to be recalculated until the object moves again.&lt;br /&gt;&lt;br /&gt;First, we can detect whether or not a object is stabilized from physic engine API. Once stabilizing objects or sleeping objects were a big issue on physic implementations. People have improved it year by year. Since physic engines are handling this big issue, we can easily find which objects are about to be static.&lt;br /&gt;&lt;br /&gt;Second, we can use SSAO until the better AO values are calculated. It is ok to spend more time than two or several frames as long as SSAO plays its role. Once the AO calculation is done, we replace SSAO with the better AO values. Then we will get a better look and don't need to do the expensive SSAO for the static objects.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/S4y1bI_QE0I/AAAAAAAAApY/8dPo_QqNvrM/s1600-h/ssao.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/S4y1bI_QE0I/AAAAAAAAApY/8dPo_QqNvrM/s320/ssao.jpg" alt="" id="BLOGGER_PHOTO_ID_5443925527457960770" border="0" /&gt;&lt;/a&gt;This is just an idea. I haven't tested it yet.&lt;br /&gt;&lt;br /&gt;One thing I'm afraid of is that when we replace SSAO with the better AO, player may notice the changes. It may give wrong information that something was moving there. So it should be gradually changing. Another thing is that I don't know how much expensive the better AO calculation will be. It may not feasible at run-time at all. Lastly, I am not quite sure how to differentiate SSAO rendering and AO rendering in a scene. Since SSAO will use just a big screen-quad, we may or may not be able to selectively calculate SSAO with a stencil buffer.&lt;br /&gt;&lt;br /&gt;I wish I can have a chance to implement this idea sooner or later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-1754412497924288537?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/1754412497924288537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=1754412497924288537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1754412497924288537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1754412497924288537'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/idea-to-enhance-ssao.html' title='An idea to enhance SSAO.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S4yvQKh_o9I/AAAAAAAAApQ/ZuDzBP3A7eo/s72-c/ambient-occlusion.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-3018579361471247587</id><published>2010-03-01T23:13:00.002-05:00</published><updated>2010-03-01T23:25:44.331-05:00</updated><title type='text'>Sony leap year problem.</title><content type='html'>Today is March 1st, but PlayStation3 hardware recognized it as Feb 29th, because its internal clock had a problem.&lt;br /&gt;&lt;br /&gt;Because of this reason, game players of play station 3 could not log-in the server; in fact, I'm not quite understanding why and how. In addition, I also could not work on PS3 this morning, because our game needed to log-in, due to Trophy system.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S4yTFZZCOaI/AAAAAAAAAo8/Lv1A452-KO8/s1600-h/214223-1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 195px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S4yTFZZCOaI/AAAAAAAAAo8/Lv1A452-KO8/s320/214223-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5443887770508605858" border="0" /&gt;&lt;/a&gt;I was thinking that Microsoft people who developed X-Box must be laughing; indeed X-Box was fine today.&lt;br /&gt;&lt;br /&gt;Game related programmers must learn how important Unit-Testing is...; I have never seen any game engine that support unit testing yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-3018579361471247587?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/3018579361471247587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=3018579361471247587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3018579361471247587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3018579361471247587'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/03/sony-leap-year-problem.html' title='Sony leap year problem.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S4yTFZZCOaI/AAAAAAAAAo8/Lv1A452-KO8/s72-c/214223-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8349795574745423777</id><published>2010-02-28T01:54:00.011-05:00</published><updated>2010-03-01T03:17:49.188-05:00</updated><title type='text'>Uncharted2 after 1 chapter play</title><content type='html'>Today I have played uncharted 2 little bit. It has very beautiful graphics as people said. I like to share some of my findings.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/S4ocfjybpxI/AAAAAAAAAo0/oWiwha4F9ho/s1600-h/uncharted-2-among-thieves-artwork-big.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 228px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/S4ocfjybpxI/AAAAAAAAAo0/oWiwha4F9ho/s320/uncharted-2-among-thieves-artwork-big.jpg" alt="" id="BLOGGER_PHOTO_ID_5443194428138956562" border="0" /&gt;&lt;/a&gt;The game uses shadow map for each light, each flash light and sky light. I think the sky light shadow map moves according to the camera; I can notice the boundary some times.&lt;br /&gt;&lt;br /&gt;Shadow doesn't appear when the characters are already inside of shadow. Instead SSAO is used under shadow. This is first time for me to see implemented SSAO. It was very nice but not as much as I expected. The ambient intensity changes by changing camera position. Especially grass had a bad look AO.&lt;br /&gt;&lt;br /&gt;Although the playground is half-out-door, it is actually indoor rendering. I guess they used portal culling for each zone as usual for indoor engines.&lt;br /&gt;&lt;br /&gt;Reflection on water surface was very very impressive. My best guess is that they redraw objects one more time with proper culling.&lt;br /&gt;&lt;br /&gt;Most of walls or any surfaces were wrapped with high resolution textures and normal maps. This raises the quality of this game very high.&lt;br /&gt;&lt;br /&gt;Some of specular with low EXP values gave very much realism. I have always thought specular must be shining, but I might be wrong. Especially one of white statues looks so nice.&lt;br /&gt;&lt;br /&gt;Foot of the protagonist are implemented by Inverse-Kinematics, but sometimes it looks weird; it bends too much and too rounded.&lt;br /&gt;&lt;br /&gt;I heard that Depth of field  on Uncharted 2 is run by SPU. It was very natural and helped players to focus on the target. I think it might be better if DOF was used also for cut-scenes.&lt;br /&gt;&lt;br /&gt;Eyes of characters get too much specular. It shines too much and got my attention unnecessarily.&lt;br /&gt;&lt;br /&gt;I don't see motion-blur and I don't feel alias problems, so I guess it is using pre-lighting not deferred shading. I wonder whether lighting calculation is done by SPU or shaders.&lt;br /&gt;&lt;br /&gt;Interestingly bullet decals are rendered by parallex mapping. Unlike unreal games, parallex mapping is not much used.&lt;br /&gt;&lt;br /&gt;Generally the colors of buildings were well balanced from any point of view. I am guessing it is due to artists' effort or good supporting tools. If artists work on Max or Maya and have to pass through a long contents pipe line then they can hardly response to the final result.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8349795574745423777?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8349795574745423777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8349795574745423777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8349795574745423777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8349795574745423777'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2010/02/uncharted2-after-1-chapter-play.html' title='Uncharted2 after 1 chapter play'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/S4ocfjybpxI/AAAAAAAAAo0/oWiwha4F9ho/s72-c/uncharted-2-among-thieves-artwork-big.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-309705092879394171</id><published>2009-11-27T10:29:00.007-05:00</published><updated>2009-11-27T10:51:26.811-05:00</updated><title type='text'>I got PS3 slim on Black Friday.</title><content type='html'>Today is Black Friday.&lt;br /&gt;I set alarm at 3AM, but I got up at 4:40am.&lt;br /&gt;I though it was already too late, because I have heard that people line up from 1AM.&lt;br /&gt;&lt;br /&gt;However, I was lucky enough to get a PlayStation3 Slim. It was 5AM exactly, but there was only one boy and his mother who were waiting from 3AM to buy PS3. There were no one else. It was because the shopping mall was relatively new and the GameStop wasn't known much. One people who came later said the GameStop is almost like hidden one.&lt;br /&gt;&lt;br /&gt;We saw two PlayStation3 boxes on display, so I though I need to pick the box as soon as an employee open the door. But the boxes were empty. By the time that we were figuring out why they are empty, there were some people who rushed to the counter; they were right. Two new line appeared from the counter and the order in the lines changed. I became a guy who bought the very first PS3.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/Sw_0WuR7aBI/AAAAAAAAAoM/qLaOtz_XfgE/s1600/blackfriday.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 202px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/Sw_0WuR7aBI/AAAAAAAAAoM/qLaOtz_XfgE/s320/blackfriday.jpg" alt="" id="BLOGGER_PHOTO_ID_5408810348712781842" border="0" /&gt;&lt;/a&gt;It was interesting and I'm happy that I didn't have bad experience. Some people who were in the line said people often became aggressive especially when they are hungry and waited long. One guy who came to the GameStop from WalMart and BestBuy said there were a hundred people from 3AM. I remember that CNN once broadcasted that there were people who got injured by rushing crowd at Black Friday. I actually expected to see that kind of crowd but I'm satisfied by my new PS3.&lt;br /&gt;&lt;br /&gt;The price was 299 dollars for PS3 and two game titles; little big planet and god of war 1/2. Although PS3 itself is 299 dollars, those games cost more than 100 dollars, so it was a good deal; indeed, I will play those anyway.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/Sw_z7vzqhVI/AAAAAAAAAoE/h-B6sPcSqO4/s1600/photo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/Sw_z7vzqhVI/AAAAAAAAAoE/h-B6sPcSqO4/s320/photo.jpg" alt="" id="BLOGGER_PHOTO_ID_5408809885266249042" border="0" /&gt;&lt;/a&gt;I took a picture in front of the game stop with my new PS3.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-309705092879394171?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/309705092879394171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=309705092879394171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/309705092879394171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/309705092879394171'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/11/i-got-ps3-slim-on-black-friday.html' title='I got PS3 slim on Black Friday.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/Sw_0WuR7aBI/AAAAAAAAAoM/qLaOtz_XfgE/s72-c/blackfriday.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-3111167164592909866</id><published>2009-11-20T23:20:00.002-05:00</published><updated>2009-11-20T23:23:11.878-05:00</updated><title type='text'>Dog like tennis ball</title><content type='html'>There are several dogs in my company.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SwdrCyEeqUI/AAAAAAAAAn8/nV8FBqVnMSE/s1600/ballandtennisball.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SwdrCyEeqUI/AAAAAAAAAn8/nV8FBqVnMSE/s320/ballandtennisball.jpg" alt="" id="BLOGGER_PHOTO_ID_5406407573226039618" border="0" /&gt;&lt;/a&gt;Today I found that a small dog like a tennis ball very much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-3111167164592909866?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/3111167164592909866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=3111167164592909866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3111167164592909866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3111167164592909866'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/11/dog-like-tennis-ball.html' title='Dog like tennis ball'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/SwdrCyEeqUI/AAAAAAAAAn8/nV8FBqVnMSE/s72-c/ballandtennisball.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4484806307954054759</id><published>2009-11-09T01:03:00.004-05:00</published><updated>2009-11-09T01:09:18.875-05:00</updated><title type='text'>Zaisu chair</title><content type='html'>Today I organized my new room. First I set up my X-Box360 and HD-monitor. Then I washed all of my clothes and hanged them almost all into the closet. After then I found one thing is missing to make my room a comfortable place: Chair.&lt;br /&gt;&lt;br /&gt;I have a bed, a carpet and a bookshelf. I put the monitor on the shelf, but it is a bit far from bed, so that it is good to see the detail on the monitor by leaning on the bed.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/Svex0Yv8NsI/AAAAAAAAAn0/-ZVZB36BYC8/s1600-h/adaptdesign_zaisu.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 147px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/Svex0Yv8NsI/AAAAAAAAAn0/-ZVZB36BYC8/s320/adaptdesign_zaisu.jpg" alt="" id="BLOGGER_PHOTO_ID_5401981791609042626" border="0" /&gt;&lt;/a&gt;It took a little bit of effort to figure out what a proper keyword in English for the chair that I used in Korea. I found that Japaneses call legless chairs, Zaisu.&lt;br /&gt;&lt;br /&gt;I will check more on internet and probably buy one soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4484806307954054759?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4484806307954054759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4484806307954054759' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4484806307954054759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4484806307954054759'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/11/zaisu-chair.html' title='Zaisu chair'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/Svex0Yv8NsI/AAAAAAAAAn0/-ZVZB36BYC8/s72-c/adaptdesign_zaisu.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4164817271546228215</id><published>2009-10-28T19:12:00.003-04:00</published><updated>2009-10-28T19:19:58.224-04:00</updated><title type='text'>The sound of Skype</title><content type='html'>What is actual sound of "Skype", which is one of the famous internet voice phone service.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SujRkwI7TwI/AAAAAAAAAns/2qtyIsmiQ1U/s1600-h/skype_logo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 105px; height: 47px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SujRkwI7TwI/AAAAAAAAAns/2qtyIsmiQ1U/s320/skype_logo.png" alt="" id="BLOGGER_PHOTO_ID_5397794582731378434" border="0" /&gt;&lt;/a&gt;Some of Chinese friends around me keep sounding "Sky-py" or "Sky-Pee", but I believe American doesn't sound "pee".&lt;br /&gt;&lt;br /&gt;One of example sound is from &lt;a href="http://www.ted.com/talks/david_pogue_on_cool_phone_tricks.html"&gt;one of Ted presentations&lt;/a&gt;: http://www.ted.com/talks/david_pogue_on_cool_phone_tricks.html&lt;br /&gt;&lt;br /&gt;He sounds "Sky-ee-p" or "Sky-ip".&lt;br /&gt;&lt;br /&gt;One of rules on English sound is that if "e" follows any consonant, the sound of "e" comes first.&lt;br /&gt;&lt;br /&gt;Examples are "Swipe", "Plane" and "Pane".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4164817271546228215?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4164817271546228215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4164817271546228215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4164817271546228215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4164817271546228215'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/10/sound-of-skype.html' title='The sound of Skype'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/SujRkwI7TwI/AAAAAAAAAns/2qtyIsmiQ1U/s72-c/skype_logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4977701954807243659</id><published>2009-10-14T12:01:00.003-04:00</published><updated>2009-10-14T12:17:50.297-04:00</updated><title type='text'>House Centipede in my house</title><content type='html'>From Sep 1st, I am living in a new house, which was owned by a chines. I have lived there about one and half month so far.&lt;br /&gt;&lt;br /&gt;One of the serious problems the house has is house centipedes; there are other serious problems as well.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/StX4q51p3XI/AAAAAAAAAnk/VeTAycbwX7I/s1600-h/180px-Scutigera_coleoptrata.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 180px; height: 108px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/StX4q51p3XI/AAAAAAAAAnk/VeTAycbwX7I/s320/180px-Scutigera_coleoptrata.JPG" alt="" id="BLOGGER_PHOTO_ID_5392489544810093938" border="0" /&gt;&lt;/a&gt;Today I found that what kind of centipedes they are from Wikipedia. There are &lt;a href="http://en.wikipedia.org/wiki/Scutigera_coleoptrata#Interaction_with_humans"&gt;House Centipedes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It says that it is generally considered as harmless to human, dogs and cats, because their bites cannot penetrate human skin; I hope they don't attempt on my skin at night.&lt;br /&gt;&lt;br /&gt;As the Wikipedia says, they seem nocturnal. Interestingly they seem to have well developed eyes, because whenever I try to hit it, it run away fast.&lt;br /&gt;&lt;br /&gt;Fortunately they eat many harmful insects such as cockroaches, bedbugs, spiders and termites. In addition, they are harmless to human. I like to give some credit for them in this sense.&lt;br /&gt;&lt;br /&gt;Only one problem of them is, however, that they look extremely ugly. One day I saw one centipede in my room, and it was as big as my palm. I even had a bad dream in the night; I was killing several centipedes in the dream.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4977701954807243659?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4977701954807243659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4977701954807243659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4977701954807243659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4977701954807243659'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/10/house-centipede-in-my-house.html' title='House Centipede in my house'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/StX4q51p3XI/AAAAAAAAAnk/VeTAycbwX7I/s72-c/180px-Scutigera_coleoptrata.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-1595116631969538219</id><published>2009-09-18T21:26:00.003-04:00</published><updated>2009-09-18T21:28:41.329-04:00</updated><title type='text'>virtual methods and polymorphism</title><content type='html'>&lt;div&gt;Today I had an interview. One of questions was about polymorphism in C++. The questions was whether we need to have "virtual" keyword in order to use polymorphism in C++. The correct answer is that C++ doesn't allow any methods to be used as polymorphism if it is not virtual method.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The confusion came from Java syntax, because every methods in Java are virtual methods. Although it is an understandable mistake for Java programmers, it should be always clear for C++ programmers.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's see an example here:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;#include windows.h&lt;windows.h&gt;&lt;/windows.h&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;class BaseClass&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;public:&lt;/div&gt;&lt;div&gt;void printSome() { OutputDebugStr( L"&lt;b&gt;Base&lt;/b&gt;\n" ); }&lt;/div&gt;&lt;div&gt;};&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;class DerivedClass : public BaseClass&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;public:&lt;/div&gt;&lt;div&gt;void printSome() { OutputDebugStr( L"&lt;b&gt;Derived&lt;/b&gt;\n" ); }&lt;/div&gt;&lt;div&gt;};&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int _tmain(int argc, _TCHAR* argv[])&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;BaseClass * const obj = new &lt;b&gt;DerivedClass&lt;/b&gt;();&lt;/div&gt;&lt;div&gt;obj-&gt;printSome();&lt;/div&gt;&lt;div&gt;delete obj;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;return 0;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;Which message should we expect to see? A correct answer is "Base" not "Derived", because it doesn't have "virtual" keyword.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The guy who raised this question to me was evaluating my technical skills on my interview. I doubt whether he graded me fairly. I wish he can find this article and correct his misunderstanding.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-1595116631969538219?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/1595116631969538219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=1595116631969538219' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1595116631969538219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1595116631969538219'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/09/virtual-methods-and-polymorphism.html' title='virtual methods and polymorphism'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4724422340976680183</id><published>2009-09-10T18:22:00.006-04:00</published><updated>2009-09-10T23:53:23.451-04:00</updated><title type='text'>Billiard game</title><content type='html'>I have spent about 5 weeks for this personal project. The purpose of this project is to show my technical fluency. I have chosen to develop a simple billiard game with Collada, PhysX, and Shader programs.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Requirement:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;DirectX 9 end-user runtime&lt;/li&gt;&lt;li&gt;Graphic card that can support Shader Model 2. ( Pixel shader 2.0 will be enough )&lt;/li&gt;&lt;li&gt;PhysX must be installed.&lt;/li&gt;&lt;li&gt;OpenAL must be installed.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Demo video&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-e15d2f2bb2fd163b" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v9.nonxt3.googlevideo.com/videoplayback?id%3De15d2f2bb2fd163b%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330246580%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4601AA1FA41FEDA473C07C446EDE0199CD020552.7B5E5843A6F9031E95D1DDDF2D4D33B36A013F34%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3De15d2f2bb2fd163b%26offsetms%3D5000%26itag%3Dw160%26sigh%3DVLrs8ZV4IAzRp6SAJk8MOv8vzHY&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v9.nonxt3.googlevideo.com/videoplayback?id%3De15d2f2bb2fd163b%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330246580%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4601AA1FA41FEDA473C07C446EDE0199CD020552.7B5E5843A6F9031E95D1DDDF2D4D33B36A013F34%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3De15d2f2bb2fd163b%26offsetms%3D5000%26itag%3Dw160%26sigh%3DVLrs8ZV4IAzRp6SAJk8MOv8vzHY&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Source code is available on Google Code: &lt;a href="http://code.google.com/p/mybilliard01/"&gt;http://code.google.com/p/mybilliard01&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Used technique&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;PhysX&lt;/li&gt;&lt;li&gt;Collada&lt;/li&gt;&lt;li&gt;DirectX 9&lt;/li&gt;&lt;li&gt;HLSL&lt;/li&gt;&lt;li&gt;OpenAL&lt;/li&gt;&lt;li&gt;Microsoft C++/CLI unit testing framework&lt;/li&gt;&lt;li&gt;std::tr1&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;Note&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The balls colliding to each other under Physical calculations. Shadow is drawn by shadow map. The graphic model data are from 3DS Max through Collada XML standard. Sound is powered by OpenAL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Screen shots&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The captured video lost some graphical details, so that I like to attach some screen shots here. Click each image to enlarge it.&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SqnJBhHZMYI/AAAAAAAAAnc/UpDqQreiNFk/s1600-h/billiard.05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SqnJBhHZMYI/AAAAAAAAAnc/UpDqQreiNFk/s320/billiard.05.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5380052257777201538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SqnJBdLaPBI/AAAAAAAAAnU/N7EBdO-prx8/s1600-h/billiard.04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SqnJBdLaPBI/AAAAAAAAAnU/N7EBdO-prx8/s320/billiard.04.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5380052256720305170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SqnJA63LcyI/AAAAAAAAAnM/uhqx-UzzI-8/s1600-h/billiard.03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SqnJA63LcyI/AAAAAAAAAnM/uhqx-UzzI-8/s320/billiard.03.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5380052247508644642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SqnJAe9vrAI/AAAAAAAAAnE/AOxB1PSaqHw/s1600-h/billiard.02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SqnJAe9vrAI/AAAAAAAAAnE/AOxB1PSaqHw/s320/billiard.02.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5380052240019991554" /&gt;&lt;/a&gt;&lt;div&gt;*PS : Background needs to be added soon.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4724422340976680183?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=e15d2f2bb2fd163b&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4724422340976680183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4724422340976680183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4724422340976680183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4724422340976680183'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/09/billiard-game.html' title='Billiard game'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/SqnJBhHZMYI/AAAAAAAAAnc/UpDqQreiNFk/s72-c/billiard.05.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5899513270256471642</id><published>2009-07-25T00:18:00.004-04:00</published><updated>2009-07-25T00:36:56.865-04:00</updated><title type='text'>My first Torque X game on XBox 360</title><content type='html'>Today I spent about 2 hours making this simple game. I just followed the chapter 2 on a book, "The complete Guide to Torque X for XNA."&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SmqLhIsCtgI/AAAAAAAAAm8/BbCgwZrX_YY/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 262px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SmqLhIsCtgI/AAAAAAAAAm8/BbCgwZrX_YY/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5362251707722151426" border="0" /&gt;&lt;/a&gt;I found that TorqueX is a very easy and fast game developing engine. Although I don't think we can use it for commercial game development, it seemed good for personal use.&lt;br /&gt;&lt;br /&gt;I'm still reading the book, and I expect to see some interesting functionality for 3D part on latter chapters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5899513270256471642?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5899513270256471642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5899513270256471642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5899513270256471642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5899513270256471642'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/07/my-first-torque-x-game-on-xbox-360.html' title='My first Torque X game on XBox 360'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/SmqLhIsCtgI/AAAAAAAAAm8/BbCgwZrX_YY/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7013262788333900895</id><published>2009-07-22T01:43:00.002-04:00</published><updated>2009-07-22T01:45:42.726-04:00</updated><title type='text'>My distinguished academic achievement award.</title><content type='html'>I got a distinguished academic achievement award from my department when I graduate. Here is the evidence. :-)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SmanWD46koI/AAAAAAAAAm0/3qBo-469Q7s/s1600-h/IMG_1136.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SmanWD46koI/AAAAAAAAAm0/3qBo-469Q7s/s320/IMG_1136.JPG" alt="" id="BLOGGER_PHOTO_ID_5361156403874140802" border="0" /&gt;&lt;/a&gt;I thank BB for taking the pictures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7013262788333900895?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7013262788333900895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7013262788333900895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7013262788333900895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7013262788333900895'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/07/my-distinguished-academic-achievement.html' title='My distinguished academic achievement award.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/SmanWD46koI/AAAAAAAAAm0/3qBo-469Q7s/s72-c/IMG_1136.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-6689161053437087347</id><published>2009-07-13T01:46:00.002-04:00</published><updated>2009-07-13T01:48:15.142-04:00</updated><title type='text'>My M.S. certification</title><content type='html'>I got a certification for my M.S degree.&lt;br /&gt;It went to my house in Korea directly, so that my father took a picture of it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SlrKeNtcfiI/AAAAAAAAAms/FIKVFzqBaGs/s1600-h/graduation.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SlrKeNtcfiI/AAAAAAAAAms/FIKVFzqBaGs/s320/graduation.jpg" alt="" id="BLOGGER_PHOTO_ID_5357817327135784482" border="0" /&gt;&lt;/a&gt;I haven't seen the real one yet. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-6689161053437087347?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/6689161053437087347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=6689161053437087347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6689161053437087347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6689161053437087347'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/07/my-ms-certification.html' title='My M.S. certification'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/SlrKeNtcfiI/AAAAAAAAAms/FIKVFzqBaGs/s72-c/graduation.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-1911552993974616620</id><published>2009-05-13T21:43:00.004-04:00</published><updated>2009-05-13T21:59:52.311-04:00</updated><title type='text'>The result of my term project.</title><content type='html'>I have finished &lt;a href="http://wrice.blogspot.com/2009/03/my-project-for-computer-vision-is.html"&gt;my term project that I have mentioned earlier&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Although it gave me a lot of pain and fear that I get F grade because I couldn't finished it, I finally finished it and I feel a kind of achievement.&lt;br /&gt;&lt;br /&gt;I have made a demonstration video clip, so that you can see what I have done briefly.&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-4b85e127e00e3cc8" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v24.nonxt1.googlevideo.com/videoplayback?id%3D4b85e127e00e3cc8%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330246580%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D5540FF17A19052947DC988AB4F21CCC66179C333.6EBB48E37F41D3971283EF1C92DDB5C0006226D%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D4b85e127e00e3cc8%26offsetms%3D5000%26itag%3Dw160%26sigh%3DID0HnZE6yrjpUJU1dwdEaZA3BvU&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v24.nonxt1.googlevideo.com/videoplayback?id%3D4b85e127e00e3cc8%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330246580%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D5540FF17A19052947DC988AB4F21CCC66179C333.6EBB48E37F41D3971283EF1C92DDB5C0006226D%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D4b85e127e00e3cc8%26offsetms%3D5000%26itag%3Dw160%26sigh%3DID0HnZE6yrjpUJU1dwdEaZA3BvU&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;You can find the source codes and download it from Google Code:&lt;br /&gt;&lt;a href="http://code.google.com/p/mysimplevideotrace/"&gt;http://code.google.com/p/mysimplevideotrace&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have also tried to model a human body, but I found it is very difficult to do, because body is very rounded while a car consists of several surfaces and sharp edges. Therefore I had to give up in the middle.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/Sgt5YDhcLqI/AAAAAAAAAmc/xHZiCMIjaAY/s1600-h/c0025902_4a08cb7fa3b72.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 278px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/Sgt5YDhcLqI/AAAAAAAAAmc/xHZiCMIjaAY/s320/c0025902_4a08cb7fa3b72.png" alt="" id="BLOGGER_PHOTO_ID_5335491637719871138" border="0" /&gt;&lt;/a&gt;My professor said it was very nice presentation so that I guess I can expect A grade. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-1911552993974616620?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=4b85e127e00e3cc8&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/1911552993974616620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=1911552993974616620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1911552993974616620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1911552993974616620'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/05/result-of-my-term-project.html' title='The result of my term project.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/Sgt5YDhcLqI/AAAAAAAAAmc/xHZiCMIjaAY/s72-c/c0025902_4a08cb7fa3b72.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-3729060305826775524</id><published>2009-04-22T18:45:00.006-04:00</published><updated>2009-04-22T20:52:54.662-04:00</updated><title type='text'>HeteroVector for software testing.</title><content type='html'>I spend almost 3 days making this simple package, HeteroVector.&lt;br /&gt;&lt;br /&gt;HeteroVector is a kind of std::vector. A difference is that HeteroVector can contain different types as 2 dimensional array. Let me give you an simple test case here:&lt;br /&gt;&lt;blockquote&gt;    int arg1[ ] = &lt;span style="font-weight: bold;"&gt;{ 1, 2 };&lt;/span&gt;&lt;br /&gt;char arg2[ ] = &lt;span style="font-weight: bold;"&gt;"amz";&lt;/span&gt;&lt;br /&gt;float arg3[ ] = &lt;span style="font-weight: bold;"&gt;{ 1.1f, 2.2f };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;typedef LOKI_TYPELIST_3(int, char, float) MyInputTypes; // from Loki library&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HeteroVector&lt; &lt;/span&gt;&lt;span style="font-style: italic;"&gt;MyInputTypes&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&gt; values;&lt;/span&gt;&lt;br /&gt;values.set&lt; &lt;span style="font-style: italic;"&gt;0&lt;/span&gt; &gt;( arg1 );&lt;br /&gt;values.set&lt; &lt;span style="font-style: italic;"&gt;1&lt;/span&gt; &gt;( arg2 );&lt;br /&gt;values.set&lt; &lt;span style="font-style: italic;"&gt;2&lt;/span&gt; &gt;( arg3 );&lt;br /&gt;&lt;br /&gt;ASSERT_EQ(1, values.get&lt; &lt;span style="font-style: italic;"&gt;0&lt;/span&gt; &gt;( 0 ));&lt;br /&gt;ASSERT_EQ(2, values.get&lt; &lt;span style="font-style: italic;"&gt;0&lt;/span&gt; &gt;( 1 ));&lt;br /&gt;ASSERT_EQ('a', values.get&lt; &lt;span style="font-style: italic;"&gt;1&lt;/span&gt; &gt;( 0 ));&lt;br /&gt;ASSERT_EQ('m', values.get&lt; &lt;span style="font-style: italic;"&gt;1&lt;/span&gt; &gt;( 1 ));&lt;br /&gt;ASSERT_EQ('z', values.get&lt; &lt;span style="font-style: italic;"&gt;1&lt;/span&gt; &gt;( 2 ));&lt;br /&gt;ASSERT_EQ(1.1f, values.get&lt; &lt;span style="font-style: italic;"&gt;2&lt;/span&gt; &gt;( 0 ));&lt;br /&gt;ASSERT_EQ(2.2f, values.get&lt; &lt;span style="font-style: italic;"&gt;2&lt;/span&gt; &gt;( 1 ));&lt;/blockquote&gt;Here the object "values" represent this 2 dimensional array.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/Se-txCFvpbI/AAAAAAAAAl8/oxbetT16A5U/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 148px; height: 101px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/Se-txCFvpbI/AAAAAAAAAl8/oxbetT16A5U/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5327667942088746418" border="0" /&gt;&lt;/a&gt;Note that it contains three different types. Each row can contain different type but each columns in a same row must be the same type. The type is forced by compiler so that nobody can make mistake; it was possible because I was using template meta programming.&lt;br /&gt;&lt;br /&gt;You may noticed that the way to access each value is not usual. For example, the code accessing the value 1 is "values.set &lt; &lt;span style="font-style: italic;"&gt;0&lt;/span&gt; &gt; ( 0 );" The first value, which is for "row", is not method argument, but template argument so that it is "&lt;" and "&gt;". The second value is the method argument. The value for the template argument is technically type indicator, which is "int, char, float" in this case.&lt;br /&gt;&lt;br /&gt;Let's go one more step. A testing code for "Factorial" is below:&lt;br /&gt;&lt;blockquote&gt;int &lt;span style="font-weight: bold;"&gt;factorial&lt;/span&gt;(int nThStep) {&lt;br /&gt;  if(nThStep == 0) return 1;&lt;br /&gt;  return factorial(nThStep -1) * nThStep;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;TEST(HeteroVector, Factorial) {&lt;br /&gt;// This example shows how input and output values can be paired.&lt;br /&gt;typedef LOKI_TYPELIST_2(int, int) FactorialTypes;&lt;br /&gt;const unsigned int &lt;span style="font-weight: bold;"&gt;input&lt;/span&gt; = 0;&lt;br /&gt;const unsigned int &lt;span style="font-weight: bold;"&gt;output&lt;/span&gt; = 1;&lt;br /&gt;&lt;br /&gt;HeteroVector&lt; &lt;span style="font-style: italic;"&gt;FactorialTypes&lt;/span&gt; &gt; &lt;span style="font-weight: bold;"&gt;inputs_outputs&lt;/span&gt;;&lt;br /&gt;int inputs[] = &lt;span style="font-weight: bold;"&gt;{ 0, 1, 2, 3, 4 };&lt;/span&gt;&lt;br /&gt;int outputs[]= &lt;span style="font-weight: bold;"&gt;{ 1, 1, 2, 6, &lt;/span&gt;23&lt;span style="font-weight: bold;"&gt; };&lt;/span&gt;&lt;br /&gt;inputs_outputs.set&lt; &lt;span style="font-style: italic;"&gt;input&lt;/span&gt; &gt;( inputs );&lt;br /&gt;inputs_outputs.set&lt; &lt;span style="font-style: italic;"&gt;output&lt;/span&gt; &gt;( outputs );&lt;br /&gt;inputs_outputs.replace&lt; &lt;span style="font-style: italic;"&gt;output&lt;/span&gt; &gt;( 4, &lt;span style="font-weight: bold;"&gt;24&lt;/span&gt; );&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;for&lt;/span&gt;(unsigned int nTh = 0; nTh &lt;span style="font-style: italic;"&gt;&lt;&lt;/span&gt; &lt;span style="font-style: italic;"&gt;inputs&lt;/span&gt;_outputs.size&lt; &lt;span style="font-style: italic;"&gt;input&lt;/span&gt; &gt;&gt;(); ++nTh)&lt;br /&gt;      ASSERT_EQ(inputs_outputs.get&lt; &lt;span style="font-weight: bold;"&gt;output&lt;/span&gt; &gt;(nTh),&lt;br /&gt;              &lt;span style="font-weight: bold;"&gt;factorial&lt;/span&gt;( inputs_outputs.get&lt; &lt;span style="font-weight: bold;"&gt;input&lt;/span&gt; &gt;(nTh) ) );&lt;br /&gt;}&lt;/blockquote&gt;The data for testing is all managed by the HeteroVector. The variable "inputs_outputs" represent this 2 dimensional array:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/Se-t29NyPfI/AAAAAAAAAmE/wDVQYvB6IOI/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 255px; height: 62px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/Se-t29NyPfI/AAAAAAAAAmE/wDVQYvB6IOI/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5327668043859508722" border="0" /&gt;&lt;/a&gt;Note that the values for the template arguments can be replaced by meaningful name. In next example, I will show you that we can also use "enum".&lt;br /&gt;&lt;br /&gt;Here you may think we don't need to use HeteroVector for this factorial function testing. We can also replace it with two vectors, which will be "vector&lt;int&gt; inputs", and "vector&lt;int&gt; outputs". But it is just an example that I want to show how to use.&lt;br /&gt;&lt;br /&gt;Let me give you an example for testing Switch function.&lt;br /&gt;&lt;blockquote&gt;bool &lt;span style="font-weight: bold;"&gt;switchOnOff&lt;/span&gt;( bool switch1, bool switch2, bool switch3 ) {&lt;br /&gt;  return switch1 &amp;amp;&amp;amp; (switch2 || switch3);&lt;br /&gt;}&lt;/blockquote&gt;The function, switchOnOff, requires three boolean arguments. Therefore we need to test 8 cases ( = 2 * 2 * 2 ). I drawn a table here:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/Se-t2wFxekI/AAAAAAAAAmM/bQBLPR7BEm0/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 241px; height: 136px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/Se-t2wFxekI/AAAAAAAAAmM/bQBLPR7BEm0/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5327668040336243266" border="0" /&gt;&lt;/a&gt;My additional implementation for HeteroVector generate those Combination of three "true/false" values. The testing code is here:&lt;br /&gt;&lt;blockquote&gt;TEST(CoverageTest, AllCombinationsCoverage) {&lt;br /&gt;typedef LOKI_TYPELIST_3(bool, bool, bool) Booleans;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;enum { switch1, switch2, switch3 };&lt;/span&gt;&lt;br /&gt;HeteroVector&lt; &lt;span style="font-style: italic;"&gt;Booleans&lt;/span&gt; &gt; inputs;&lt;br /&gt;&lt;br /&gt;bool true_false[] = { true, false };&lt;br /&gt;bool true_only[]  = { true };&lt;br /&gt;&lt;br /&gt;inputs.set&lt; &lt;span style="font-weight: bold;"&gt;switch1&lt;/span&gt; &gt;( &lt;span style="font-weight: bold;"&gt;true_false&lt;/span&gt; );&lt;br /&gt;inputs.set&lt; &lt;span style="font-weight: bold;"&gt;switch2&lt;/span&gt; &gt;( &lt;span style="font-weight: bold;"&gt;true_only&lt;/span&gt; );&lt;br /&gt;inputs.set&lt; &lt;span style="font-weight: bold;"&gt;switch3&lt;/span&gt; &gt;( &lt;span style="font-weight: bold;"&gt;true_false&lt;/span&gt; );&lt;br /&gt;const bool &lt;span style="font-weight: bold;"&gt;expected&lt;/span&gt;[] = {&lt;br /&gt;     &lt;span style="font-weight: bold;"&gt;/*TTT*/ true,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;            /*FTT*/ false,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;            /*TTF*/ true,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;            /*FTF*/ false&lt;/span&gt; };&lt;br /&gt;&lt;br /&gt;HeteroVector&lt; &lt;span style="font-style: italic;"&gt;Booleans&lt;/span&gt; &gt; ACoC = &lt;span style="font-weight: bold;"&gt;allCombinationsCoverage&lt;/span&gt;(inputs);&lt;br /&gt;ASSERT_EQ(sizeof(expected)/sizeof(bool), ACoC.size&lt; &lt;span style="font-style: italic;"&gt;switch1&lt;/span&gt; &gt;());&lt;br /&gt;ASSERT_TRUE( ACoC.size&lt; &lt;span style="font-style: italic;"&gt;switch1&lt;/span&gt; &gt;() == ACoC.size&lt; &lt;span style="font-style: italic;"&gt;switch2&lt;/span&gt; &gt;() );&lt;br /&gt;ASSERT_TRUE( ACoC.size&lt; &lt;span style="font-style: italic;"&gt;switch2&lt;/span&gt; &gt;() == ACoC.size&lt; &lt;span style="font-style: italic;"&gt;switch3&lt;/span&gt; &gt;() );&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;for&lt;/span&gt;(unsigned int idx = 0; idx &lt; &lt;span style="font-style: italic;"&gt;ACoC&lt;/span&gt;.size&lt; &lt;span style="font-style: italic;"&gt;switch1&lt;/span&gt; &gt;(); ++idx)&lt;br /&gt; ASSERT_EQ( &lt;span style="font-weight: bold;"&gt;expected&lt;/span&gt;[idx],&lt;br /&gt;     &lt;span style="font-weight: bold;"&gt;switchOnOff&lt;/span&gt;(&lt;br /&gt;         ACoC.get&lt; &lt;span style="font-weight: bold;"&gt;switch1&lt;/span&gt; &gt;(idx),&lt;br /&gt;         ACoC.get&lt; &lt;span style="font-weight: bold;"&gt;switch2&lt;/span&gt; &gt;(idx),&lt;br /&gt;         ACoC.get&lt; &lt;span style="font-weight: bold;"&gt;switch3&lt;/span&gt; &gt;(idx)&lt;br /&gt; ) ) &lt; &lt; &lt;span style="font-style: italic;"&gt;idx&lt;/span&gt;;  }  &lt;/blockquote&gt; This code is a little bit different from the table, because I fixed the second argument in a value, "true," in order to show that we don't always need to generate for every possible cases but we can select some input values for our interest. By the constrain the code generate only 4 cases ( 2 * 1 * 2), but we can, of course, generate 8 cases easily.&lt;br /&gt;&lt;br /&gt;Note that the template argument is replaced by ENUM values, which makes easier to read.&lt;br /&gt;&lt;br /&gt;I have also implemented Base Choice Coverage, which is introduced in my professors book, "&lt;a href="http://cs.gmu.edu/%7Eoffutt/softwaretest/"&gt;Introduction to Software Testing&lt;/a&gt;" (written by &lt;a href="http://www.cs.gmu.edu/%7Epammann/"&gt;Paul Ammann&lt;/a&gt; and &lt;a href="http://cs.gmu.edu/%7Eoffutt/"&gt;Jeff Offutt&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;The basic idea of Base Choice Coverage is that we choose a default set of input values and change only one value from it rather than using all combination. Therefore the input set of BCC will be like this table:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/Se-t20rxsYI/AAAAAAAAAmU/37fThBeGvU8/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 243px; height: 92px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/Se-t20rxsYI/AAAAAAAAAmU/37fThBeGvU8/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5327668041569382786" border="0" /&gt;&lt;/a&gt;The testing case will give you how to use my implementation for BCC:&lt;br /&gt;&lt;blockquote&gt;TEST(CoverageTest, BaseChoicesCoverage) {&lt;br /&gt;typedef LOKI_TYPELIST_3(bool, bool, bool) Booleans;&lt;br /&gt;enum { switch1, switch2, switch3 };&lt;br /&gt;HeteroVector&lt; &lt;span style="font-style: italic;"&gt;Booleans&lt;/span&gt; &gt; inputs;&lt;br /&gt;&lt;br /&gt;bool true_false[] = { true, false };&lt;br /&gt;bool false_only[] = { false };&lt;br /&gt;&lt;br /&gt;inputs.set&lt; &lt;span style="font-style: italic;"&gt;switch1&lt;/span&gt; &gt;( true_false );&lt;br /&gt;inputs.set&lt; &lt;span style="font-style: italic;"&gt;switch2&lt;/span&gt; &gt;( true_false );&lt;br /&gt;inputs.set&lt; &lt;span style="font-style: italic;"&gt;switch3&lt;/span&gt; &gt;( &lt;span style="font-weight: bold;"&gt;false_only&lt;/span&gt; );&lt;br /&gt;const bool expected[] = {&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;            /*TTF*/ true,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;            /*FTF*/ false,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;            /*TFF*/ false };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;HeteroVector&lt; &lt;span style="font-style: italic;"&gt;Booleans&lt;/span&gt; &gt; BCC = &lt;span style="font-weight: bold;"&gt;baseChoiceCoverage&lt;/span&gt;(inputs);&lt;br /&gt;ASSERT_EQ(sizeof(expected)/sizeof(bool), BCC.size&lt; &lt;span style="font-style: italic;"&gt;switch1&lt;/span&gt; &gt;());&lt;br /&gt;ASSERT_TRUE( BCC.size&lt; &lt;span style="font-style: italic;"&gt;switch1&lt;/span&gt; &gt;() == BCC.size&lt; &lt;span style="font-style: italic;"&gt;switch2&lt;/span&gt; &gt;() );&lt;br /&gt;ASSERT_TRUE( BCC.size&lt; &lt;span style="font-style: italic;"&gt;switch2&lt;/span&gt; &gt;() == BCC.size&lt; &lt;span style="font-style: italic;"&gt;switch3&lt;/span&gt; &gt;() );&lt;br /&gt;&lt;br /&gt;for(unsigned int idx = 0; idx &lt; &lt;span style="font-style: italic;"&gt;BCC&lt;/span&gt;.size&lt; &lt;span style="font-style: italic;"&gt;switch1&lt;/span&gt; &gt;(); ++idx)&lt;br /&gt; ASSERT_EQ( expected[idx],&lt;br /&gt;     &lt;span style="font-weight: bold;"&gt;switchOnOff&lt;/span&gt;(&lt;br /&gt;         BCC.get&lt; &lt;span style="font-style: italic;"&gt;switch1&lt;/span&gt; &gt;(idx),&lt;br /&gt;         BCC.get&lt; &lt;span style="font-style: italic;"&gt;switch2&lt;/span&gt; &gt;(idx),&lt;br /&gt;         BCC.get&lt; &lt;span style="font-style: italic;"&gt;switch3&lt;/span&gt; &gt;(idx)&lt;br /&gt; ) ) &lt; &lt; &lt;span style="font-style: italic;"&gt;idx&lt;/span&gt;;  }  &lt;/blockquote&gt;The code is, again, different from the table that I showed above. The testing code fixed 3rd value at "false". Therefore it generates only 3 cases but it is, again, easy to generate 4 cases, which satisfies BCC correctly. I just wanted to show the implementation has flexability for choice.&lt;br /&gt;&lt;br /&gt;I spent 3 days implementing this code. It was very hard because I used template meta programming which gives programmers desperate. In other word, my implementation strongly check Type. Compiler will forece users not to make mistake at compile time not at run-time. And it also increases run-time speed, because many parts of calculation will be done at compile time.&lt;br /&gt;&lt;br /&gt;I like to share my effort with everybody. Any comments are welcome. You can download the source code here: &lt;a href="http://pds10.egloos.com/pds/200904/23/02/HeteroVector.zip"&gt;HeteroVector&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I used Loki library, which is famous meta programming library. It is open source so that anybody can download; in fact my implementation requires Loki library. You can find the most recent version of Loki &lt;a href="http://loki-lib.sourceforge.net/index.php?n=Main.Download"&gt;here&lt;/a&gt;.&lt;/int&gt;&lt;/int&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-3729060305826775524?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/3729060305826775524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=3729060305826775524' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3729060305826775524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/3729060305826775524'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/04/heterovector-for-software-testing.html' title='HeteroVector for software testing.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/Se-txCFvpbI/AAAAAAAAAl8/oxbetT16A5U/s72-c/Picture+1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4961201671179970376</id><published>2009-04-20T10:47:00.005-04:00</published><updated>2009-04-20T10:56:36.608-04:00</updated><title type='text'>Using interface in C++</title><content type='html'>Yesterday I found that this article has some problem:&lt;br /&gt;http://www.codeguru.com/cpp/cpp/cpp_mfc/oop/article.php/c9989&lt;br /&gt;&lt;br /&gt;By its nature interface brings multi-inheritance and it can cause "&lt;a href="http://en.wikipedia.org/wiki/Diamond_problem"&gt;diamond problem&lt;/a&gt;".&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SeyLlQns-oI/AAAAAAAAAl0/lWrrqTHmgYg/s1600-h/180px-Diamond_inheritance.svg.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 180px; height: 270px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SeyLlQns-oI/AAAAAAAAAl0/lWrrqTHmgYg/s320/180px-Diamond_inheritance.svg.png" alt="" id="BLOGGER_PHOTO_ID_5326785931505367682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In order to solve this problem you have to make sure the "implements" always use "public &lt;span style="font-weight: bold;"&gt;virtual&lt;/span&gt;" rather than just "public". See &lt;a href="http://en.wikipedia.org/wiki/Virtual_inheritance"&gt;virtual inheritance&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My implementation is here:&lt;br /&gt;&lt;blockquote&gt;#define IMPLEMENTS( INTERFACE_CLASS_NAME ) public &lt;span style="font-weight: bold;"&gt;virtual&lt;/span&gt; INTERFACE_CLASS_NAME&lt;br /&gt;&lt;br /&gt;#define EXTENDS_INTERFACE( INTERFACE_CLASS_NAME ) public &lt;span style="font-weight: bold;"&gt;virtual&lt;/span&gt; INTERFACE_CLASS_NAME&lt;br /&gt;&lt;/blockquote&gt;The virtual destructor problem is less important because compiler will notice the programmer when a class has some virtual method without a virtual destructor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4961201671179970376?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4961201671179970376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4961201671179970376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4961201671179970376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4961201671179970376'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/04/using-interface-in-c.html' title='Using interface in C++'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SeyLlQns-oI/AAAAAAAAAl0/lWrrqTHmgYg/s72-c/180px-Diamond_inheritance.svg.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-1503118295281925977</id><published>2009-04-12T12:21:00.004-04:00</published><updated>2009-04-12T13:14:05.230-04:00</updated><title type='text'>Jumble and muJava</title><content type='html'>I'm reading a book, "Test-Driven Development, Kent Beck, 2003". And the book briefly mentioned "defect insertion, page86". Thus I curiously checked the software, "&lt;a href="http://jester.sourceforge.net/"&gt;Jester&lt;/a&gt;" and I found it was (surprisingly) &lt;span style="font-weight: bold;"&gt;Mutation testing tool&lt;/span&gt;, which my professor, Jeff Offutt is strong at.&lt;br /&gt;&lt;br /&gt;However, the software, Jester, seems not to be maintained anymore. I found another interesting software, "&lt;a href="http://jumble.sourceforge.net/"&gt;Jumble&lt;/a&gt;". The usage was very easy and simple. BUT a big shortcoming is that it doesn't support as many mutation operations as &lt;a href="http://cs.gmu.edu/%7Eoffutt/mujava/"&gt;muJava&lt;/a&gt; does.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SeIXQZSOVAI/AAAAAAAAAls/q0aCKzAmYwg/s1600-h/jumble_icon.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 256px; height: 86px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SeIXQZSOVAI/AAAAAAAAAls/q0aCKzAmYwg/s320/jumble_icon.png" alt="" id="BLOGGER_PHOTO_ID_5323843279938016258" border="0" /&gt;&lt;/a&gt;Unfortunately, muJava, which is developed by Jeff Offutt, doesn't support JUnit while Jumble does. Somebody need to make muJava work with JUnit sooner or later. Or we need to make Jumble support other operations.&lt;br /&gt;&lt;br /&gt;I recommend you use Jumble rather than muJava due to the supporting JUnit; it is better than not using. But we still don't have any free mutation testing tool for C++, although there are some commercial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-1503118295281925977?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/1503118295281925977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=1503118295281925977' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1503118295281925977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1503118295281925977'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/04/jumble-and-mujava.html' title='Jumble and muJava'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SeIXQZSOVAI/AAAAAAAAAls/q0aCKzAmYwg/s72-c/jumble_icon.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-423253316935682476</id><published>2009-04-09T16:56:00.019-04:00</published><updated>2009-04-14T18:00:58.359-04:00</updated><title type='text'>Center point as Interest point.</title><content type='html'>Today I came up with an idea about "interest point". Briefly it is that "we can use not only corner points as interest point but also center points of circle".&lt;br /&gt;&lt;br /&gt;I was using the &lt;a href="http://www.digilab.uni-hannover.de/docs/manual.html"&gt;Voodoo Camera Tracker&lt;/a&gt;.&lt;br /&gt;Let me explain how it works briefly.&lt;br /&gt;&lt;br /&gt;It first finds "corner points" from each image of a movie file.&lt;br /&gt;And it figures out which corner point on the prior image is correspond to the point on the next image.&lt;br /&gt;Finally it reconstructs the 3D coordinate position of the camera.&lt;br /&gt;&lt;br /&gt;Here is the example. The first image is with the detected corner points. A green cross line indicates a corner.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/Sd5hfy72JxI/AAAAAAAAAkM/QGnFJtUgQtU/s1600-h/08sr3_286_pnt.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/Sd5hfy72JxI/AAAAAAAAAkM/QGnFJtUgQtU/s320/08sr3_286_pnt.jpg" alt="" id="BLOGGER_PHOTO_ID_5322799008475129618" border="0" /&gt;&lt;/a&gt;The second image shows yellow lines which represent the corner point is traced from the prior image to the next image.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/Sd5hkGXh6gI/AAAAAAAAAkU/Kd0PJPqeaBQ/s1600-h/exx.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 269px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/Sd5hkGXh6gI/AAAAAAAAAkU/Kd0PJPqeaBQ/s320/exx.jpg" alt="" id="BLOGGER_PHOTO_ID_5322799082410994178" border="0" /&gt;&lt;/a&gt;A problem that I found by using the Voodoo is that most of objects we are familiar in our life are round shape. And detecting corner doesn't give the enough information.&lt;br /&gt;&lt;br /&gt;Thus I came up with the idea detecting and tracing the center of circle. We can find the center of a circle by this steps:&lt;br /&gt;1. calculate the edges.&lt;br /&gt;2. pick a point on the edges.&lt;br /&gt;3. calculate the tangential line on the point.&lt;br /&gt;4. find a perpendicular line from the tangential line.&lt;br /&gt;5. pick an adjacent point of the point.&lt;br /&gt;6. calculate a perpendicular line of the tangential line for the point.&lt;br /&gt;7. find out the intersection of those perpendicular lines; this intersection will is a center of the circle or a part of circle.&lt;br /&gt;7-a. if the intersecting point is too far from those points, those points doesn't share a same center.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/Sd5qKSh6GhI/AAAAAAAAAkc/Wiw2eC0HcD0/s1600-h/step1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/Sd5qKSh6GhI/AAAAAAAAAkc/Wiw2eC0HcD0/s320/step1.jpg" alt="" id="BLOGGER_PHOTO_ID_5322808534603799058" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/Sd5qVLifL8I/AAAAAAAAAkk/nWEJShPt-sk/s1600-h/step2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/Sd5qVLifL8I/AAAAAAAAAkk/nWEJShPt-sk/s320/step2.jpg" alt="" id="BLOGGER_PHOTO_ID_5322808721705742274" border="0" /&gt;&lt;/a&gt;As you can see above, this way doesn't require a complete circle. A part of arc is sufficient.&lt;br /&gt;&lt;br /&gt;We can repeatedly calculate this process and we can segment arcs that consist of those points that shares a identical center. Here the segmenting is not the purpose but we can drop some of too short arcs from our further calculations by segmenting arcs.&lt;br /&gt;&lt;br /&gt;A problem raises when we consider the fact that a circle shape can become a ellipse shape when the camera moves. See the image below. The position of the camera moved to down and the shape became ellipse from circle. In order to use the center point as interest point the position of the center point must be stable.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/Sd5qlrPA5WI/AAAAAAAAAks/9kXSrka9pfs/s1600-h/circle2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/Sd5qlrPA5WI/AAAAAAAAAks/9kXSrka9pfs/s320/circle2.jpg" alt="" id="BLOGGER_PHOTO_ID_5322809005091906914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here the question is how to find the center of the ellipse.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd5rf82d5aI/AAAAAAAAAk0/SbkEY2eQdKM/s1600-h/180px-Drawing_an_ellipse_via_two_tacks_a_loop_and_a_pen.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 180px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd5rf82d5aI/AAAAAAAAAk0/SbkEY2eQdKM/s320/180px-Drawing_an_ellipse_via_two_tacks_a_loop_and_a_pen.jpg" alt="" id="BLOGGER_PHOTO_ID_5322810006253200802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The formula of the ellipse is here:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/Sd5rww3UoTI/AAAAAAAAAk8/3c0RByjU3mY/s1600-h/94bc0fbfc1ace2e887afbc22be6d3520.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 102px; height: 43px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/Sd5rww3UoTI/AAAAAAAAAk8/3c0RByjU3mY/s320/94bc0fbfc1ace2e887afbc22be6d3520.png" alt="" id="BLOGGER_PHOTO_ID_5322810295093338418" border="0" /&gt;&lt;/a&gt;We want to find the center of the ellipse, so that we need to add the variable for the center like this:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd5timKOWbI/AAAAAAAAAlE/ahZwMqzVyzY/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 192px; height: 56px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd5timKOWbI/AAAAAAAAAlE/ahZwMqzVyzY/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5322812250724915634" border="0" /&gt;&lt;/a&gt;where (h,k) is the center of the ellipse.&lt;br /&gt;&lt;br /&gt;The formula now consists of x, y variables and 4 constants. We want to find out the constants: a, b, h, and k. We pick 4 sample points which are all adjacent from the edge image. And we can calculate the center: h, and k.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd5uiZ5H2XI/AAAAAAAAAlM/bSIe5KLM8Cs/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 279px; height: 62px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd5uiZ5H2XI/AAAAAAAAAlM/bSIe5KLM8Cs/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5322813346943588722" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/Sd5uikE4KYI/AAAAAAAAAlU/kWqCjyyYf3o/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 287px; height: 57px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/Sd5uikE4KYI/AAAAAAAAAlU/kWqCjyyYf3o/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5322813349677246850" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/Sd5uiob8pcI/AAAAAAAAAlc/5Qyd3l_pR5w/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 285px; height: 55px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/Sd5uiob8pcI/AAAAAAAAAlc/5Qyd3l_pR5w/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5322813350847751618" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd5uijp6NbI/AAAAAAAAAlk/CYERVZJ7wAc/s1600-h/Picture+5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 288px; height: 56px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd5uijp6NbI/AAAAAAAAAlk/CYERVZJ7wAc/s320/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5322813349564134834" border="0" /&gt;&lt;/a&gt;x1, x2, x3, x4, y1, y2, y3 and y4 are all actual numbers from the edge images so that we can solve these 4 formula and get the center of the ellipse.&lt;br /&gt;&lt;br /&gt;This way gives a stable center point of circles, arcs, and ellipses, regardless the angle from the camera. Finally we can use the stable center points as interest points.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-423253316935682476?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/423253316935682476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=423253316935682476' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/423253316935682476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/423253316935682476'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/04/center-point-as-interest-point.html' title='Center point as Interest point.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/Sd5hfy72JxI/AAAAAAAAAkM/QGnFJtUgQtU/s72-c/08sr3_286_pnt.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5228704474147881524</id><published>2009-04-08T19:55:00.005-04:00</published><updated>2009-04-08T20:14:33.384-04:00</updated><title type='text'>My project is going on..</title><content type='html'>Today I spend a whole day figuring out how to use Voodoo Camera Track. It was supposed to be easy to use, but I found that it is very sensitive for the contents of the movie clip. I tried several different objects and different options in Voodoo Camera Track. It turned out that the vehicle movie clips are easiest objects for Voodoo.&lt;br /&gt;&lt;br /&gt;Thus I decided to use the movie clip of my car; BB helped me to take it. The movie clip comprise about 400 frames and I took the sequential image files with &lt;a href="http://www.virtualdub.org/"&gt;VirtualDub&lt;/a&gt;. VirtualDub had very simple and nice exporting functionality; I also want to mention that I spent several hours to find a software to get the sequential images from a movie file. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd08n276EtI/AAAAAAAAAkE/OQzKB6rIYsA/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 244px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/Sd08n276EtI/AAAAAAAAAkE/OQzKB6rIYsA/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5322476990081143506" border="0" /&gt;&lt;/a&gt;On the movie clip, the camera moves around the car clock-wise.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/Sd072TbS6-I/AAAAAAAAAj0/yV0MRMrCnU4/s1600-h/voodoo1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 238px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/Sd072TbS6-I/AAAAAAAAAj0/yV0MRMrCnU4/s320/voodoo1.jpg" alt="" id="BLOGGER_PHOTO_ID_5322476138735528930" border="0" /&gt;&lt;/a&gt;Finally VooDoo Camera Tracker gave me the position data of the camera. The visualized figure in 3D coordinate is below:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/Sd08CJS0M1I/AAAAAAAAAj8/vYcsa3uZwJ0/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 202px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/Sd08CJS0M1I/AAAAAAAAAj8/vYcsa3uZwJ0/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5322476342174036818" border="0" /&gt;&lt;/a&gt;The green lines represent the direction of down side of the camera, the blue lines indicate the direction that the camera is directing at each point. I believe the red lines represent the position of the camera. The white dots are called interest clouds. Each white dot indicates a corner point of images in 3D coordinate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5228704474147881524?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5228704474147881524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5228704474147881524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5228704474147881524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5228704474147881524'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/04/my-project-is-going-on.html' title='My project is going on..'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/Sd08n276EtI/AAAAAAAAAkE/OQzKB6rIYsA/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-724950206880901591</id><published>2009-04-01T23:32:00.006-04:00</published><updated>2009-04-02T00:09:06.287-04:00</updated><title type='text'>How to get optimized code in Agile process.</title><content type='html'>These days I'm fascinated by the idea of Agile process. I have read the 500 page book, &lt;a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/"&gt;"Agile software development" 2002&lt;/a&gt;, in 4 days, and I borrowed several more books about agile and eXtreme Programming.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SdQ3leJ6wwI/AAAAAAAAAjk/fEZM3sGO2Tg/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 116px; height: 153px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SdQ3leJ6wwI/AAAAAAAAAjk/fEZM3sGO2Tg/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5319938176720749314" border="0" /&gt;&lt;/a&gt;This morning when I was reading a book, "&lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;Clean Code&lt;/a&gt;", I was thinking what if clients want my program to be faster. The book mainly focuses on Maintainability and Readability of source code rather than Optimization. Generally optimization harms maintainability and increases complexity.&lt;br /&gt;&lt;br /&gt;However the performance is very important for game programming, so that optimization is inevitable.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SdQ35u1H21I/AAAAAAAAAjs/4rIzEht9yF8/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 94px; height: 124px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SdQ35u1H21I/AAAAAAAAAjs/4rIzEht9yF8/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5319938524794313554" border="0" /&gt;&lt;/a&gt;The book, "Clean Code", said, "Make your program work first and then make it right." I want to add here: "Make it work, make it right and make it fast".&lt;br /&gt;&lt;br /&gt;How do we make a program work? It assumes that we uses "Test cases first", and we can make a program working for the test cases. And then we need to clean the code, making right for short.&lt;br /&gt;&lt;br /&gt;What I want to suggest here is once we got the right code, we keep the right code as the "base code" and we build "Temporary Fast Codes". Since we have the right code, the behavior of the right code and the fast code must be identical. Thus we can use the right code as an automatic test case generator, for example:&lt;br /&gt;&lt;blockquote&gt;GameComponent rightCode = new RightImpl();&lt;br /&gt;GameComponent fastCode = new FastImpl();&lt;br /&gt;for ( int i = 0; i &amp;lt; 1000; ++i )&lt;br /&gt;  assertEquals( rightCode.do(i), fastCode.do(i) );&lt;/blockquote&gt;The point is that we don't expect we can maintain the optimized fast code. It should be treated as "Temporary Code". When the requirements change, the right code will grow up while the temporary code doesn't. We throw the fast code away and we will use the right code until we get the temporary fast code again.&lt;br /&gt;&lt;br /&gt;Following this idea, we keep the basic principle of Agile process and we can also get the optimized (temporary) code. In game development process, we may develop the optimized code only at the last phase of the process, so that we can focus solely on right code during most of iterations without worrying about optimization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-724950206880901591?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/724950206880901591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=724950206880901591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/724950206880901591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/724950206880901591'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/04/how-to-get-optimized-code-in-agile.html' title='How to get optimized code in Agile process.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SdQ3leJ6wwI/AAAAAAAAAjk/fEZM3sGO2Tg/s72-c/Picture+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7243004308818069947</id><published>2009-03-18T11:03:00.004-04:00</published><updated>2009-03-18T19:42:24.703-04:00</updated><title type='text'>My project for Computer Vision is decided.</title><content type='html'>Yesterday professor assented my project so that I'm going to implement &lt;a href="http://portal.acm.org/citation.cfm?id=1275808.1276485"&gt;this impressive paper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vda2RAEuW_g&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/vda2RAEuW_g&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt; First time, I thought I can try &lt;a href="http://java.sun.com/javase/technologies/desktop/media/jmf/"&gt;JMF&lt;/a&gt; at this chance, but I found it doesn't support Mac yet. Therefore I decided to use &lt;a href="http://opencv.willowgarage.com/wiki/#Welcome.2BAC8-Introduction.Tutorials"&gt;OpenCV&lt;/a&gt; with Eclipse and &lt;a href="http://code.google.com/p/googletest/"&gt;GoogleTest&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anybody can find &lt;a href="http://code.google.com/p/mysimplevideotrace/wiki/UseCaseDescription"&gt;my use cases&lt;/a&gt; and &lt;a href="http://code.google.com/p/mysimplevideotrace/"&gt;my source code&lt;/a&gt; from Google Code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7243004308818069947?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7243004308818069947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7243004308818069947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7243004308818069947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7243004308818069947'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/03/my-project-for-computer-vision-is.html' title='My project for Computer Vision is decided.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4363527118336384493</id><published>2009-03-18T00:25:00.005-04:00</published><updated>2009-03-18T00:49:42.328-04:00</updated><title type='text'>Goolge Unit Testing Framework for C++</title><content type='html'>I had hard time to find a good unit testing library for C++ not for Java; Java already have a good one, JUnit.&lt;br /&gt;&lt;br /&gt;First name we can came up with for unit testing tool for C++ is CUnit or CppUnit. There are several unit testing libraries for C++. However, most of them are complex to use and doesn't get updated anymore.&lt;br /&gt;&lt;br /&gt;I planned to use &lt;a href="http://opencv.willowgarage.com/wiki/#Welcome.2BAC8-Introduction.Tutorials"&gt;OpenCV&lt;/a&gt; with C++ in Mac, so that I wanted to find a good unit testing tools. I'm kind of get used to JUnit so much. Now I can hardly image I code without unit testing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/ScB8qBeMXoI/AAAAAAAAAjc/UYoKbV2dGxM/s1600-h/google-test-framework.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 175px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/ScB8qBeMXoI/AAAAAAAAAjc/UYoKbV2dGxM/s320/google-test-framework.png" alt="" id="BLOGGER_PHOTO_ID_5314384621688610434" border="0" /&gt;&lt;/a&gt;First time, I tried &lt;a href="http://www.eclipseplugincentral.com/Web_Links-index-req-visit-lid-931.html"&gt;CUTE&lt;/a&gt;. I found it is pretty complex and I cannot find any good document from internet; people don't use this. And &lt;a href="http://wiki.hsr.ch/PeterSommerlad/revs.cgi?CuTe"&gt;the last update in its Wiki&lt;/a&gt; is 2 years ago. I felt like it is abandond.&lt;br /&gt;&lt;br /&gt;Second, I tried &lt;a href="http://apps.sourceforge.net/mediawiki/cppunit/index.php?title=Main_Page"&gt;CppUnit&lt;/a&gt;. I found it is also complex and outdated; &lt;a href="http://sourceforge.net/projects/cppunit"&gt;last update is made 3 years ago&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Today I found a good one, &lt;a href="http://code.google.com/p/googletest/"&gt;GoogleTest&lt;/a&gt;. Last update is Dec 11 2008. And it seems pretty handy. One thing I mind is it doesn't show green/red bar. I guess it is possible to draw some visual bars by parsing XML file that is generated by GoogleTest, but I need to read more detail to figure out how it works.&lt;br /&gt;&lt;br /&gt;I strongly believe most of C++ programmers still don't understand how important and strong unit testing techniques are. Otherwise, it cannot explain why they are all outdated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4363527118336384493?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4363527118336384493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4363527118336384493' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4363527118336384493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4363527118336384493'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/03/goolge-unit-testing-framework-for-c.html' title='Goolge Unit Testing Framework for C++'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/ScB8qBeMXoI/AAAAAAAAAjc/UYoKbV2dGxM/s72-c/google-test-framework.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8716669358360410142</id><published>2009-03-17T11:38:00.008-04:00</published><updated>2009-03-17T12:02:49.763-04:00</updated><title type='text'>Computer Vision Assignment 2</title><content type='html'>My professor asked us to post our assignment on web site, so that I'm posting it here.&lt;br /&gt;&lt;br /&gt;The instruction for the 2nd assignment is &lt;a href="http://cs.gmu.edu/%7Ezduric/cs682/Homeworks/Hwk2-s09.txt"&gt;here&lt;/a&gt;.&lt;ol&gt;&lt;li&gt;(15p) Computing edges for a background image and for an image with a   human in it.&lt;/li&gt;&lt;li&gt;(10p) Subtracting edge images to create a difference image and   classifying edges in the difference image.&lt;/li&gt;&lt;li&gt;(10p) Connected component analysis to identify the human in the image.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;For the 1st instruction, I computed edges of background for each color channel (you can enlarge it by clicking the image):&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/Sb_EzCCcAoI/AAAAAAAAAi8/gHmKoUIcqT8/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 199px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/Sb_EzCCcAoI/AAAAAAAAAi8/gHmKoUIcqT8/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5314182466319942274" border="0" /&gt;&lt;/a&gt;Each blue image consists of arrows that indicate direction of each edge:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/Sb_Gf6LWPrI/AAAAAAAAAjE/uoQkAjXJQvA/s1600-h/quiver01"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 264px; height: 320px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/Sb_Gf6LWPrI/AAAAAAAAAjE/uoQkAjXJQvA/s320/quiver01" alt="" id="BLOGGER_PHOTO_ID_5314184336815570610" border="0" /&gt;&lt;/a&gt;For the 2nd instruction, I have classified three edges: background, occluding(foreground), and occluded edges.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/Sb_HVTknYCI/AAAAAAAAAjM/VeHFz9nOVlI/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 199px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/Sb_HVTknYCI/AAAAAAAAAjM/VeHFz9nOVlI/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5314185254165504034" border="0" /&gt;&lt;/a&gt;For the 3rd instruction, I have drawn a box for the human.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/Sb_Izf7B6QI/AAAAAAAAAjU/CvTn_Oq8PEQ/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 253px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/Sb_Izf7B6QI/AAAAAAAAAjU/CvTn_Oq8PEQ/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5314186872388446466" border="0" /&gt;&lt;/a&gt;You can find my MatLab program &lt;a href="http://pds13.egloos.com/pds/200903/18/02/c0025902_cv2.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8716669358360410142?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8716669358360410142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8716669358360410142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8716669358360410142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8716669358360410142'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/03/computer-vision-assignment-2.html' title='Computer Vision Assignment 2'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/Sb_EzCCcAoI/AAAAAAAAAi8/gHmKoUIcqT8/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5116742226601204721</id><published>2009-02-16T09:52:00.005-05:00</published><updated>2009-02-16T10:02:20.643-05:00</updated><title type='text'>Syslog widget for Mac</title><content type='html'>I made a widget application for Apple dashboard.&lt;br /&gt;It is a widget version of "tail -f /var/log/system.log"&lt;br /&gt;You can check system log often with this widget.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SZl-OM4qCDI/AAAAAAAAAik/Z14YwQN37SU/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 106px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SZl-OM4qCDI/AAAAAAAAAik/Z14YwQN37SU/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5303408818647599154" border="0" /&gt;&lt;/a&gt;This is incomplete. I planed to add more functionality such as changing target file not only for system.log but also for any file we want to "tail". But it is not done yet.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pds10.egloos.com/pds/200902/16/02/Tail.wdgt.zip"&gt;Download&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5116742226601204721?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5116742226601204721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5116742226601204721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5116742226601204721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5116742226601204721'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/02/syslog-widget-for-mac.html' title='Syslog widget for Mac'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SZl-OM4qCDI/AAAAAAAAAik/Z14YwQN37SU/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8671833203581073116</id><published>2009-02-07T11:34:00.004-05:00</published><updated>2009-02-07T11:50:22.407-05:00</updated><title type='text'>Using Custom Shader for XNA in MacBook with Paralles.</title><content type='html'>I have tried to use Pixel Shader in my MacBook, but it didn't work.&lt;br /&gt;I hope anybody has same problem can get some help from this page.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SY27vCNqQgI/AAAAAAAAAic/4tFuBUtuzy4/s1600-h/xna_meetup.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 255px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SY27vCNqQgI/AAAAAAAAAic/4tFuBUtuzy4/s320/xna_meetup.jpg" alt="" id="BLOGGER_PHOTO_ID_5300098753207353858" border="0" /&gt;&lt;/a&gt;First I tried to use some example from a book. But it didn't work. It turned out GameStudio 3.0 has changed some interfaces.&lt;br /&gt;&lt;br /&gt;I tried another example "&lt;a href="http://msdn.microsoft.com/en-us/library/bb203926.aspx"&gt;How to: Use BasicEffect&lt;/a&gt;". The example in the page uses pixel shader and it worked well, but it wasn't a custom pixel shader.&lt;br /&gt;&lt;br /&gt;Next I tried another example, "&lt;a href="http://msdn.microsoft.com/en-us/library/bb203872.aspx"&gt;How to: Create and Apply Custom Effect&lt;/a&gt;." The example in the page uses a custom pixel shader, but it didn't work. It thrown an exception, "InvalidOperationException." It complained that I didn't use valid vertext and pixel shader. Man, it is an example from MS...&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SY27UFOrYHI/AAAAAAAAAiU/j0kyOcDuJMc/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 207px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SY27UFOrYHI/AAAAAAAAAiU/j0kyOcDuJMc/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5300098290160459890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally I changed the custom Effect file, which is pixel shader code.&lt;br /&gt;I already knew that MacBook support only one type of vertex and pixel shader among severals. Thus I tried to use older version than the one in the example, and finally it worked out.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SY268VYeDfI/AAAAAAAAAiM/dUpxDZybaCo/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 247px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SY268VYeDfI/AAAAAAAAAiM/dUpxDZybaCo/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5300097882179636722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The original code is here:&lt;br /&gt;&lt;blockquote&gt;technique TransformTechnique&lt;br /&gt;{&lt;br /&gt;    pass P0&lt;br /&gt;      {&lt;br /&gt;              vertexShader = compile vs_2_0 Transform();&lt;br /&gt;              pixelShader = compile ps_1_1 PixelShader();&lt;br /&gt;      }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;The version number of "vs_2_0" should be "vs_1_1" for MacBook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8671833203581073116?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8671833203581073116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8671833203581073116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8671833203581073116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8671833203581073116'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/02/using-custom-shader-for-xna-in-macbook.html' title='Using Custom Shader for XNA in MacBook with Paralles.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SY27vCNqQgI/AAAAAAAAAic/4tFuBUtuzy4/s72-c/xna_meetup.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5914452525179822558</id><published>2009-01-16T19:54:00.002-05:00</published><updated>2009-01-16T20:10:01.979-05:00</updated><title type='text'>After watching Hancock.</title><content type='html'>Today I watched HanCock. Unfortunately it was not as interesting as I expected. They may consider to make its part two, but I don't get the whole story completely, especially what the woman said.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SXEvynlyrnI/AAAAAAAAAiE/2Eh4fJbHjSY/s1600-h/hancock-1-1600.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SXEvynlyrnI/AAAAAAAAAiE/2Eh4fJbHjSY/s320/hancock-1-1600.jpg" alt="" id="BLOGGER_PHOTO_ID_5292063583804501618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;First of all, the actor of Hancock is not appropriate. I think if the actor looked less hansom, it fits better. Will Smite is too hansom for the role.&lt;br /&gt;&lt;br /&gt;Second, the actions in the movie is too brutal. It is too simple and not so much fun.&lt;br /&gt;&lt;br /&gt;It is just fine if I take it as just a simple action movie, but the story is too messy, and I expected higher.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5914452525179822558?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5914452525179822558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5914452525179822558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5914452525179822558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5914452525179822558'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/01/after-watching-hancock.html' title='After watching Hancock.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SXEvynlyrnI/AAAAAAAAAiE/2Eh4fJbHjSY/s72-c/hancock-1-1600.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4059664653173689687</id><published>2009-01-15T17:45:00.010-05:00</published><updated>2009-01-15T19:03:13.906-05:00</updated><title type='text'>How to decide value of goods: customers vs producers</title><content type='html'>These days how can we know which items are good and which one is bad?&lt;br /&gt;Most of cases we are affected by advertisements via mess medias such as TV or newspapers.&lt;br /&gt;&lt;br /&gt;It is reasonable to say that the items that spend expensive advertisement cost are probably valuable. Because if the producers are not so much confident for their items, they would not spend that much costs.&lt;br /&gt;&lt;br /&gt;I think cars are good examples for that. Most of people don't have enough knowledge for details of cars. We rely on their reputations which is built up by advertisements, or more simply rely on their price tags.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SW_Finbu9gI/AAAAAAAAAh0/V0MS2Mmby1M/s1600-h/price_tag.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 243px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SW_Finbu9gI/AAAAAAAAAh0/V0MS2Mmby1M/s320/price_tag.jpg" alt="" id="BLOGGER_PHOTO_ID_5291665285675152898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, it doesn't always work. A good example is some of advertisements in mess medias in order to cover their shortcomings. In Korea most of big companies purchase big advertisements whenever they attack union activities. They pay their money to mess media themselves in order to control the articles of the media.&lt;br /&gt;&lt;br /&gt;Those information from advertisements are all from producers not from customers. Producers value their own items, which seems weird in some sense.&lt;br /&gt;&lt;br /&gt;In contrast, there are several ways to spread information for some items from customers not from producers. A good example for this is probably Google.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SW_DP4FsHaI/AAAAAAAAAhs/W7YuGpsNmx8/s1600-h/google-yahoo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 318px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SW_DP4FsHaI/AAAAAAAAAhs/W7YuGpsNmx8/s320/google-yahoo.jpg" alt="" id="BLOGGER_PHOTO_ID_5291662764705324450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;How could Google prevailed Yahoo. It is certainly because of the quality of searching results. Yahoo showed searching results, with ranking each URL by how much the owners of the URL payed to Yahoo, while Google showed searching results, with ranking each URL by how many other web sites linked the URL. I think the prior way relies on the information from producers, as I mentioned earlier, and the latter way does with the information from customers.&lt;br /&gt;&lt;br /&gt;Many of economists believed in the story that "price" indicates where resources should go to; in other word the price embraces information to go. However, it cannot explain the difference between Yahoo and Google.  The searching results of Yahoo are, of course, evaluated by "the price" either.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SW_K5sSyeQI/AAAAAAAAAh8/hGTX3WeiyjE/s1600-h/610x.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SW_K5sSyeQI/AAAAAAAAAh8/hGTX3WeiyjE/s320/610x.jpg" alt="" id="BLOGGER_PHOTO_ID_5291671179674941698" border="0" /&gt;&lt;/a&gt;I like to conclude that we need to see where the information for the price came from. I agree that "the price" is a good way to evaluate how much a item is valuable. However when we see the source of the price information, it may vary from certain numbers of producers only to countless customers. Furthermore, the information can appear without any price tag, as we have seen in Google and some of protests.&lt;br /&gt;&lt;br /&gt;*PS: This article is influenced by a Ted movie clip: &lt;a href="http://www.ted.com/index.php/talks/yochai_benkler_on_the_new_open_source_economics.html"&gt;Open source economics&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4059664653173689687?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4059664653173689687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4059664653173689687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4059664653173689687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4059664653173689687'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/01/how-decide-value-of-goods-customers-vs.html' title='How to decide value of goods: customers vs producers'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SW_Finbu9gI/AAAAAAAAAh0/V0MS2Mmby1M/s72-c/price_tag.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-6752675338021030694</id><published>2009-01-14T03:44:00.003-05:00</published><updated>2009-01-14T03:50:01.356-05:00</updated><title type='text'>WalMart the high cost of low price.</title><content type='html'>This is a brief summary of the movie, "&lt;a href="http://www.walmartmovie.com/"&gt;WalMart the high cost of low price&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SW2msA3w5GI/AAAAAAAAAhk/_rs-pe1KZRE/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 235px; height: 320px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SW2msA3w5GI/AAAAAAAAAhk/_rs-pe1KZRE/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5291068412308546658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;1. Many many employees in Wal-Mart had to rely on Medicaid, which is federal health insurance. It is because Wal-Mart doesn't provide health care for their employee.&lt;br /&gt;&lt;br /&gt;2. Wal-Mart doesn't allow people to have union. They attack and distroy any attempting of unionizing.&lt;br /&gt;&lt;br /&gt;3. The average payment in Wal-Mart is $10.78 per hour, but the starting pay can be far lower, which can be below the poverty line. The average Wal-Mart Hourly sales employee wages is $13,861, while the federal poverty level family of four is $17.650.&lt;br /&gt;&lt;br /&gt;4. Wal-Mart had legal conflicting of cheating for over time working payment  in 32 different states.&lt;br /&gt;&lt;br /&gt;5. WalMart comes to local and many of family business had to be closed. And states help them to build roads and parking facilities, which is unfair to local competes. Moreover WalMart receives lots of subsidy from states, which had assigned to other facilities such as school and fire department.&lt;br /&gt;&lt;br /&gt;6. The WalMart factory in China charges employee for dormitory even when they move out. The environment in the dormitory is unpleasant: very warm in summer, and very narrow. WalMart cheat for employee's working hour as well as they do in america.&lt;br /&gt;&lt;br /&gt;7. The employee in India works from 8am to 10pm, which is 14 hours a day. Other companies in India follows the standard that WalMart do, and WalMart suck down every standards in India.&lt;br /&gt;&lt;br /&gt;8. There is no security camera or anything in parking lots of WalMart. WalMart is aware that more than 80% of crimes happen in their own parking lots. While there are lots of security camera inside of WalMart, outside of WalMart there is nothing. Even when there are some of security camera for outside, nobody watches the camera.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From my individual experience, WalMart was the most boring and inactive place in america. I don't understand why WalMart is so popular.&lt;br /&gt;&lt;br /&gt;I don't think WalMart is symbol of evil. They are just following money. It is just one face of capitalism. Any of company where humanity lost on money will have this kind of face.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-6752675338021030694?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/6752675338021030694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=6752675338021030694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6752675338021030694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6752675338021030694'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/01/walmart-high-cost-of-low-price.html' title='WalMart the high cost of low price.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SW2msA3w5GI/AAAAAAAAAhk/_rs-pe1KZRE/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-6696344684387368259</id><published>2009-01-12T14:14:00.005-05:00</published><updated>2009-01-12T14:31:05.461-05:00</updated><title type='text'>Free movie tutorials for 3D-Max and Maya - 3D Buzz</title><content type='html'>I have found lots of good free moive tutorials in a web site, &lt;a href="http://www.3dbuzz.com/"&gt;3DBuzz&lt;/a&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SWuXUd_rSwI/AAAAAAAAAhc/zNbPSbkawOg/s1600-h/logo.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 82px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SWuXUd_rSwI/AAAAAAAAAhc/zNbPSbkawOg/s320/logo.gif" alt="" id="BLOGGER_PHOTO_ID_5290488565181664002" border="0" /&gt;&lt;/a&gt;The web site has more than 100 hours tutorial movie clips for 3D Max and Maya.&lt;br /&gt;These days I'm studying 3D Max first, and I plan to study Maya as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-6696344684387368259?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/6696344684387368259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=6696344684387368259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6696344684387368259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6696344684387368259'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2009/01/free-max-and-maya-tutorials-3d-buzz.html' title='Free movie tutorials for 3D-Max and Maya - 3D Buzz'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SWuXUd_rSwI/AAAAAAAAAhc/zNbPSbkawOg/s72-c/logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4405233654681518046</id><published>2008-12-03T23:47:00.003-05:00</published><updated>2008-12-04T00:03:38.288-05:00</updated><title type='text'>HttpUnit - web page testing</title><content type='html'>Two weeks ago my professor gave us an assignment about testing web applications.&lt;br /&gt;It is well-known fact that testing web pages is very hard by its characteristics.&lt;br /&gt;&lt;br /&gt;One tool that professor suggested is HttpUnit:&lt;br /&gt;&lt;a href="http://httpunit.sourceforge.net/doc/cookbook.html"&gt;http://httpunit.sourceforge.net/doc/cookbook.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is not so much surprising in the sense of technology. However, it had very interesting interface to test web pages. Most of web page testing tools mocks the behaviors of web browser. Some of them actually records tester's clicking.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/STdkMpEBQ3I/AAAAAAAAAhM/iscv-40NYx0/s1600-h/HttpUnit.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 167px; height: 60px;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/STdkMpEBQ3I/AAAAAAAAAhM/iscv-40NYx0/s320/HttpUnit.jpg" alt="" id="BLOGGER_PHOTO_ID_5275795656831746930" border="0" /&gt;&lt;/a&gt;One way I have come up with is using cURL to retrieve a web page and find out certain text messages by Regular-expression. By its nature web pages contains very flexible format, so that it should be check by powerful text message checker such as Regular-exp.&lt;br /&gt;&lt;br /&gt;One of the approach of HttpUnit is parsing the HTML page into DOM tree, and returns some of parts that are interested to testers. The syntax gave me the impression that it seems like JavaScript syntax.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/STdki45_p9I/AAAAAAAAAhU/wVrOoVDFrWI/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 29px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/STdki45_p9I/AAAAAAAAAhU/wVrOoVDFrWI/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5275796039041787858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;However, we still have difficulty of web page testing. HttpUnit requires that the target web pages had to be deploied on web server, which takes fairly long time. I don't think we can skip the deploying part for testing. We need to test the very last result, which should be resulted by a web container. For this problem, we may need a light-weight web application server inside of IDEs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4405233654681518046?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4405233654681518046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4405233654681518046' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4405233654681518046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4405233654681518046'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/12/httpunit-web-page-testing.html' title='HttpUnit - web page testing'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/STdkMpEBQ3I/AAAAAAAAAhM/iscv-40NYx0/s72-c/HttpUnit.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-6657779214031219290</id><published>2008-12-03T19:28:00.004-05:00</published><updated>2008-12-03T19:37:16.589-05:00</updated><title type='text'>Flight searching system on J2EE</title><content type='html'>I just have finished one of my project for this semester. It was SWE642, "Software Engineering for WWW". The class was mainly about J2EE, which I hadn't know much.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/STcl7nfLaRI/AAAAAAAAAg8/VD1u903js-o/s1600-h/Picture+8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 301px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/STcl7nfLaRI/AAAAAAAAAg8/VD1u903js-o/s320/Picture+8.png" alt="" id="BLOGGER_PHOTO_ID_5275727194630088978" border="0" /&gt;&lt;/a&gt;The class asked us to develop a flight reservation system. It gave me a big chance to catch up modern web programming technologies:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spring Framework. &lt;/li&gt;&lt;li&gt;Hibernate persistence framework with Hyper Sonic database. &lt;/li&gt;&lt;li&gt;Log4j log library. &lt;/li&gt;&lt;li&gt;ANT building system. &lt;/li&gt;&lt;li&gt;AXIS2 &lt;/li&gt;&lt;li&gt;Google Map 2 &lt;/li&gt;&lt;li&gt;Tomcat, of course. &lt;/li&gt;&lt;/ul&gt;You can download it and deploy it on your local computer, if you are familiar with SVN and Tomcat:&lt;br /&gt;&lt;a href="http://code.google.com/p/weneedourownproject/"&gt;http://code.google.com/p/weneedourownproject&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm proud of myself, and I have learned a lot about Spring Framework. It was nice especially for JUnit testing. It gave me unit testing and integration testing environment.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/STcmIENhZaI/AAAAAAAAAhE/HGsAxvC3ZrA/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 204px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/STcmIENhZaI/AAAAAAAAAhE/HGsAxvC3ZrA/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5275727408499090850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;However, I don't think I will have any more chance to touch web programming technology, because I wouldn't develop web application, unfortunately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-6657779214031219290?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/6657779214031219290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=6657779214031219290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6657779214031219290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6657779214031219290'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/12/flight-searching-system-on-j2ee.html' title='Flight searching system on J2EE'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/STcl7nfLaRI/AAAAAAAAAg8/VD1u903js-o/s72-c/Picture+8.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-9014272168736595449</id><published>2008-11-07T20:18:00.003-05:00</published><updated>2008-11-07T20:32:58.373-05:00</updated><title type='text'>Maximum compression.</title><content type='html'>One of my best interest is file archiving.&lt;br /&gt;I actually spent lots of time thinking and implementing compression algorithm.&lt;br /&gt;Today I encountered a good web page:&lt;br /&gt;Maximum Compression : &lt;a href="http://www.maximumcompression.com/"&gt;http://www.maximumcompression.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It showed me which one is good compression software.&lt;br /&gt;And it stroke me there are two good compression software which I haven't heard at all.&lt;br /&gt;I know "winzip," "gzip," and "bzip2."&lt;br /&gt;But the web page showed me PAQ8 is best in the sense of size.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SRTsHcK-oZI/AAAAAAAAAg0/RJbP8axJIyg/s1600-h/hmedal.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 173px; height: 173px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SRTsHcK-oZI/AAAAAAAAAg0/RJbP8axJIyg/s320/hmedal.gif" alt="" id="BLOGGER_PHOTO_ID_5266093476868432274" border="0" /&gt;&lt;/a&gt;"What is PAQ8???"&lt;br /&gt;It was newly developed archiving software. And it has GPL license, which is totally free.&lt;br /&gt;It does not seem anybody can use yet. It is still changing fast.&lt;br /&gt;&lt;br /&gt;One of interesting point is we can choose how much memory we will use for archiving, from 35MB to 1.7G.&lt;br /&gt;The more memory you use, the smaller file you can get.&lt;br /&gt;I love to see its algorithm when I can afford.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-9014272168736595449?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/9014272168736595449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=9014272168736595449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/9014272168736595449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/9014272168736595449'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/11/maximum-compression.html' title='Maximum compression.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SRTsHcK-oZI/AAAAAAAAAg0/RJbP8axJIyg/s72-c/hmedal.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5206315136624551486</id><published>2008-11-04T00:55:00.009-05:00</published><updated>2008-11-04T11:11:19.393-05:00</updated><title type='text'>Google is getting suck.</title><content type='html'>Once google was famous for simple user interface.&lt;br /&gt;It is still true in some part.&lt;br /&gt;But now most of web pages getting sucks.&lt;br /&gt;&lt;br /&gt;One of the big problems is it gets complex.&lt;br /&gt;Since they have many many good programmers, they may want to add many many functions on pages.&lt;br /&gt;But now it harms user interface.&lt;br /&gt;&lt;br /&gt;Let's see the Google search first.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_kssfcL8I/AAAAAAAAAgE/tpZRYNp7pbE/s1600-h/Picture+5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 178px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_kssfcL8I/AAAAAAAAAgE/tpZRYNp7pbE/s320/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5264677945927806914" border="0" /&gt;&lt;/a&gt;This main page is still good while other web searching engine has an complex page.&lt;br /&gt;But the searching result page is wasting space at the end of the page.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SQ_k7c5faII/AAAAAAAAAgM/kIG-NPcIJPI/s1600-h/Picture+6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 115px;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SQ_k7c5faII/AAAAAAAAAgM/kIG-NPcIJPI/s320/Picture+6.png" alt="" id="BLOGGER_PHOTO_ID_5264678199440140418" border="0" /&gt;&lt;/a&gt;When have they changed that? I though the famous link buttons, "Goooooooooogle" was at the end of the page. But now they added 3 lines with meaningless vertical gaps.&lt;br /&gt;&lt;br /&gt;Gmail also get sucks.&lt;br /&gt;Today I was surprised that the top most line becomes double lines in this way:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_lm6_r4wI/AAAAAAAAAgU/YVrpYVyG6z8/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 30px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_lm6_r4wI/AAAAAAAAAgU/YVrpYVyG6z8/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5264678946253562626" border="0" /&gt;&lt;/a&gt;The problem came by the new red text, "New! A bunch of stuff."&lt;br /&gt;Why is it not a single noun but several words?&lt;br /&gt;I though once I click it, it will disappear, but it didn't.&lt;br /&gt;Actually the other Google services tends to have a longer and complex top most line.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_me4GnEjI/AAAAAAAAAgc/CRQGgpYcplw/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 28px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_me4GnEjI/AAAAAAAAAgc/CRQGgpYcplw/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5264679907549975090" border="0" /&gt;&lt;/a&gt;I don't know what is "My notebooks," I don't want to know it, I don't want to use it, and I don't want to keep it there. "Web history" is also same. I have never used it, and I have no interest for "History."&lt;br /&gt;Why do they make user interface worse?&lt;br /&gt;&lt;br /&gt;Google Reader is also sucks.&lt;br /&gt;Most of Google services does not use "Frame" style, which is forbidden tag in HTML.&lt;br /&gt;But Google reader has fixed frames.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_p4LZWBsI/AAAAAAAAAgs/obb0t_h-DUo/s1600-h/Picture+8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 74px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_p4LZWBsI/AAAAAAAAAgs/obb0t_h-DUo/s320/Picture+8.png" alt="" id="BLOGGER_PHOTO_ID_5264683640760436418" border="0" /&gt;&lt;/a&gt;If I scroll down the web page, then the top most links should go out of the screen. But it doesn't.&lt;br /&gt;I hardly use "searching" in RSS reader. Why do I need to keep it there all the time.&lt;br /&gt;Because of them, I cannot use my screen for reading articles.&lt;br /&gt;&lt;br /&gt;I believe Google need more competitors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5206315136624551486?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5206315136624551486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5206315136624551486' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5206315136624551486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5206315136624551486'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/11/google-is-getting-sucks.html' title='Google is getting suck.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_kssfcL8I/AAAAAAAAAgE/tpZRYNp7pbE/s72-c/Picture+5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-6739736917143036918</id><published>2008-11-04T00:29:00.007-05:00</published><updated>2008-11-04T00:47:53.147-05:00</updated><title type='text'>Faster fox - an add-on for fire fox</title><content type='html'>I want to introduce a great add-on for fire fox.&lt;br /&gt;It is FasterFox: http://fasterfox.mozdev.org/&lt;br /&gt;It makes your Firefox faster.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_f-0pza1I/AAAAAAAAAf8/JRpKBVA9aF0/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 255px; height: 109px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_f-0pza1I/AAAAAAAAAf8/JRpKBVA9aF0/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5264672759798262610" border="0" /&gt;&lt;/a&gt;One of the great functions is "Prefetching."&lt;br /&gt;After you install the add-on, fasterfox will pre-load every possible links while you read the web page.&lt;br /&gt;The meaning of the word, "Prefetching," is ambiguous.&lt;br /&gt;FasterFox explains the meaning in its setting dialog:&lt;blockquote&gt;Utilizes idle bandwidth to silently download and cache links in the background so they may be ready for immediate display by the time you click them.&lt;/blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_f4WxFsoI/AAAAAAAAAf0/FUXmdII47LE/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 77px;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_f4WxFsoI/AAAAAAAAAf0/FUXmdII47LE/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5264672648696541826" border="0" /&gt;&lt;/a&gt;Actually it is dangerous in some cases, because the prefetching presses every links in order to get the next pages. Some of links might be "delete something" or "purchase something." Therefore fasterfox has limited policy for the prefetching.&lt;br /&gt;You can find more information here:&lt;br /&gt;&lt;a href="http://fasterfox.mozdev.org/faq.html#Can_prefetching_mess_things_up"&gt;http://fasterfox.mozdev.org/faq.html#Can_prefetching_mess_things_up&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This add-on increased not only quantitative speed, but also qualitative feeling. I strongly recommend you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-6739736917143036918?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/6739736917143036918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=6739736917143036918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6739736917143036918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/6739736917143036918'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/11/faster-fox-add-on-for-fire-fox.html' title='Faster fox - an add-on for fire fox'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SQ_f-0pza1I/AAAAAAAAAf8/JRpKBVA9aF0/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8737276697181037155</id><published>2008-10-28T13:43:00.004-04:00</published><updated>2008-10-28T13:56:57.937-04:00</updated><title type='text'>NuSMV</title><content type='html'>Today I have installed &lt;a href="http://nusmv.fbk.eu/index.html"&gt;NuSMV&lt;/a&gt;, which is one of the SMV model checker.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SQdSH1suP3I/AAAAAAAAAXs/EXNC1cy6ml0/s1600-h/nusmv.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 199px; height: 173px;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SQdSH1suP3I/AAAAAAAAAXs/EXNC1cy6ml0/s320/nusmv.gif" alt="" id="BLOGGER_PHOTO_ID_5262264984232935282" border="0" /&gt;&lt;/a&gt;SMV, Simbol Model Verification, is a famous &lt;a href="http://en.wikipedia.org/wiki/Symbolic_model_verification"&gt;Model checking&lt;/a&gt; way.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cs.gmu.edu/%7Epammann"&gt;Professor. Ammann&lt;/a&gt; gave students an assignment which I have to grade next week.&lt;br /&gt;The assignment was about SMV which I don't have enough knowledge.&lt;br /&gt;&lt;br /&gt;I have heard SMV can represent finite automata.&lt;br /&gt;It is very interesting that somebody made a tool that we can use freely.&lt;br /&gt;There are several SMV checkers and NuSMV is one of them: &lt;a href="http://www.kenmcmil.com/"&gt;Cadence SMV&lt;/a&gt;, &lt;a href="http://www.cs.cmu.edu/%7Emodelcheck/"&gt;VCEGAR&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a backup, I refer &lt;a href="http://cs.gmu.edu/%7Epammann/619/code/tlk.smv"&gt;professor's example&lt;/a&gt; here:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;-- SMV Specification for simple EW,NS intersection&lt;br /&gt;-- Paul Ammann&lt;br /&gt;&lt;br /&gt;MODULE main&lt;br /&gt;VAR&lt;br /&gt;EW       : direction; NS : direction;&lt;br /&gt;&lt;br /&gt;EWGreen  : process ToGreen(EW, NS);&lt;br /&gt;NSGreen  : process ToGreen(NS, EW);&lt;br /&gt;&lt;br /&gt;EWYellow : process ToYellow(EW);&lt;br /&gt;NSYellow : process ToYellow(NS);&lt;br /&gt;&lt;br /&gt;EWRed    : process ToRed(EW);&lt;br /&gt;NSRed    : process ToRed(NS);&lt;br /&gt;&lt;br /&gt;--ASSIGN&lt;br /&gt;&lt;br /&gt;-- (EW, NS) check for P1&lt;br /&gt;SPEC&lt;br /&gt; AG((EW.light = red | NS.light = red))&lt;br /&gt;SPEC&lt;br /&gt; AG((NS.light = green ) -&gt; AX (EW.light = red))&lt;br /&gt;&lt;br /&gt;-- spec for test generation&lt;br /&gt;--SPEC&lt;br /&gt;--   AG((NS.light = green ) -&gt; (AG !(NS.light = red)))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MODULE direction&lt;br /&gt;VAR&lt;br /&gt; light : {red, yellow, green};&lt;br /&gt;ASSIGN&lt;br /&gt; init(light) := red;&lt;br /&gt;&lt;br /&gt;MODULE ToGreen(dir1, cdir1)&lt;br /&gt;&lt;br /&gt;ASSIGN&lt;br /&gt; next(dir1.light) :=&lt;br /&gt;    case&lt;br /&gt;     (dir1.light = red) &amp;amp; (cdir1.light = red) : green;&lt;br /&gt;     1 : dir1.light;&lt;br /&gt;    esac;&lt;br /&gt;&lt;br /&gt;MODULE ToYellow(dir1)&lt;br /&gt;&lt;br /&gt;ASSIGN&lt;br /&gt; next(dir1.light) :=&lt;br /&gt;    case&lt;br /&gt;     (dir1.light = green) : yellow;&lt;br /&gt;     1 : dir1.light;&lt;br /&gt;    esac;&lt;br /&gt;&lt;br /&gt;MODULE ToRed(dir1)&lt;br /&gt;&lt;br /&gt;ASSIGN&lt;br /&gt; next(dir1.light) :=&lt;br /&gt;    case&lt;br /&gt;     (dir1.light = yellow) : red;&lt;br /&gt;     1 : dir1.light;&lt;br /&gt;    esac;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;This seems complex, but it will be very powerful if we can have formal specification using these kind of Model Checking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8737276697181037155?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8737276697181037155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8737276697181037155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8737276697181037155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8737276697181037155'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/10/nusmv.html' title='NuSMV'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/SQdSH1suP3I/AAAAAAAAAXs/EXNC1cy6ml0/s72-c/nusmv.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-1125543113923114065</id><published>2008-10-09T12:56:00.008-04:00</published><updated>2008-10-10T23:09:00.649-04:00</updated><title type='text'>Adeona - LoJack for laptop</title><content type='html'>BB told me a interesting free software: &lt;a href="http://adeona.cs.washington.edu/"&gt;Adeona&lt;/a&gt;.&lt;br /&gt;http://adeona.cs.washington.edu&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SO44elGmzyI/AAAAAAAAAXA/IVLgUAiPndw/s1600-h/adeonalogo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SO44elGmzyI/AAAAAAAAAXA/IVLgUAiPndw/s320/adeonalogo.jpg" alt="" id="BLOGGER_PHOTO_ID_5255199913194999586" border="0" /&gt;&lt;/a&gt;This program is for the case that your laptop is stolen.&lt;br /&gt;This software periodically run on background, gather network information and give you some hints where your laptop is.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The website recommend you do *not* try to catch the thief by yourself even when you find out where it is.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One interesting thing is the software can take a picture of the thief when your computer is MacBook series, which has a camera at top of the LCD.&lt;br /&gt;&lt;br /&gt;The logic was simple, so that I made similar one by myself.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SO4_aUJiLOI/AAAAAAAAAXY/ojG_EX1G9c0/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SO4_aUJiLOI/AAAAAAAAAXY/ojG_EX1G9c0/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5255207536505793762" border="0" /&gt;&lt;/a&gt;Using my shell program will get some network information and picture file onto your email box every half hour; you may be able to use some "filters" for the spam-like emails.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SO53ZE2BStI/AAAAAAAAAXg/49tMrZotTkI/s1600-h/Picture+5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SO53ZE2BStI/AAAAAAAAAXg/49tMrZotTkI/s320/Picture+5.jpg" alt="" id="BLOGGER_PHOTO_ID_5255269087868701394" border="0" /&gt;&lt;/a&gt;In order to use this, you need to set your email address on the script file, "email", and install two software: &lt;a href="http://www.intergalactic.de/pages/iSight.html"&gt;iSightCapture&lt;/a&gt;, mutt.&lt;br /&gt;I don't know which way is easiest way to install mutt, but I used "&lt;a href="http://www.macports.org/"&gt;Mac Port&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;You can add a schedule onto your "crontab" like this:&lt;br /&gt;&lt;blockquote&gt;0,30 * * * * /Users/wrice/Applications/sendPicture.sh&lt;/blockquote&gt;Enjoy your safer environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-1125543113923114065?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/1125543113923114065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=1125543113923114065' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1125543113923114065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/1125543113923114065'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/10/adeona-lojack-for-laptop.html' title='Adeona - LoJack for laptop'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/SO44elGmzyI/AAAAAAAAAXA/IVLgUAiPndw/s72-c/adeonalogo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4894891436027554606</id><published>2008-10-08T23:28:00.003-04:00</published><updated>2008-10-08T23:32:07.956-04:00</updated><title type='text'>Game Maker 7</title><content type='html'>I haven't heard about this before today.&lt;br /&gt;There is a game making tool called "&lt;a href="http://www.yoyogames.com/gamemaker"&gt;Game Maker&lt;/a&gt;."&lt;br /&gt;The recent version is 7 now.&lt;br /&gt;It is free to download.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SO17K047klI/AAAAAAAAAWg/FaroI3jo-y8/s1600-h/gm-logo.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SO17K047klI/AAAAAAAAAWg/FaroI3jo-y8/s320/gm-logo.gif" alt="" id="BLOGGER_PHOTO_ID_5254991766137573970" border="0" /&gt;&lt;/a&gt;You can see 100 games that are made by the tool in you tube.&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=bdgQyOIyWPY"&gt;100 Game Maker games in 10 minutes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The movie clip inspires me a lot of new ideas for game design.&lt;br /&gt;And it is also surprising that a game tool is that much flexible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4894891436027554606?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4894891436027554606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4894891436027554606' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4894891436027554606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4894891436027554606'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/10/game-maker-7.html' title='Game Maker 7'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SO17K047klI/AAAAAAAAAWg/FaroI3jo-y8/s72-c/gm-logo.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7955852509032657932</id><published>2008-10-02T13:12:00.010-04:00</published><updated>2008-10-02T14:48:10.945-04:00</updated><title type='text'>The tendency of the profit ratio to fall</title><content type='html'>One of Korean economy professor, SungJin Jung, claimed that the profit ratio in America industry has &lt;a href="http://en.wikipedia.org/wiki/Tendency_of_the_rate_of_profit_to_fall"&gt;tendency of the ratio of profit to fall&lt;/a&gt;, which is one of the famous Marx's theory.&lt;br /&gt;In &lt;a href="http://jbreview.jinbo.net/maynews/readview.php?table=organ&amp;amp;item=2&amp;amp;no=623"&gt;his article&lt;/a&gt; he was using America government data, which is open data to public.&lt;br /&gt;&lt;br /&gt;The diagram he was using is here:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SOUGqKnOJyI/AAAAAAAAAWA/-ZicdCfR1d4/s1600-h/Picture+6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SOUGqKnOJyI/AAAAAAAAAWA/-ZicdCfR1d4/s320/Picture+6.png" alt="" id="BLOGGER_PHOTO_ID_5252611861870683938" border="0" /&gt;&lt;/a&gt;The data is from one of the government web site: http://www.bea.gov&lt;br /&gt;Non- financial corporate sector  ratio = &lt;span class="read_text"&gt;&lt;span style="font-family:verdana;"&gt;National Income and Product Accounts, Table 1.14. line 24(net operating surplus)-line 26 (business current tr&lt;/span&gt;&lt;/span&gt;&lt;span class="read_text"&gt;&lt;span style="font-family:verdana;"&gt;ansfer payment) / &lt;/span&gt;&lt;/span&gt;&lt;span class="read_text"&gt;&lt;span style="font-family:verdana;"&gt;Fixed Asset Table, Table 4.1. line 28(non-financial)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Considering the non-financial corporate sector ratio as profit ratio, the point of this article is that the diagram indicates the profit ratio has tendency to fall.&lt;br /&gt;&lt;br /&gt;I wanted to get the diagram by myself, so I made it; this means everybody can draw the diagram.&lt;br /&gt;There is two reason why the diagrams are different.&lt;br /&gt;One is that the web site revised the data after the article is written. The other reason is that I included two more years: 2006, and 2007. And the government web site doesn't have data before 1930.&lt;span class="read_text"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SOUINoEylzI/AAAAAAAAAWI/Qs6HvAN8tZ4/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SOUINoEylzI/AAAAAAAAAWI/Qs6HvAN8tZ4/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5252613570586384178" border="0" /&gt;&lt;/a&gt;You can see the Trend line is declining.&lt;br /&gt;&lt;br /&gt;I, however, found one interesting point.&lt;br /&gt;Two of them averaging the data by 5 years.&lt;br /&gt;But if I just use raw data, which is year by year, then I get different diagram here:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SOUKLTP3PhI/AAAAAAAAAWY/sCs8hdKm7cE/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SOUKLTP3PhI/AAAAAAAAAWY/sCs8hdKm7cE/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5252615729659198994" border="0" /&gt;&lt;/a&gt;If you click the diagram above, you can see bigger one.&lt;br /&gt;The new line looks like *flat*, not declining.&lt;br /&gt;The reason is the new diagram is wider.&lt;br /&gt;If I make it narrow, then you can see the same declining line like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SOUJ8OsFEJI/AAAAAAAAAWQ/5kxnWCrdEZM/s1600-h/Picture+5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SOUJ8OsFEJI/AAAAAAAAAWQ/5kxnWCrdEZM/s320/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5252615470737330322" border="0" /&gt;&lt;/a&gt;In brief, although different analysis way shows different diagram, it is definitely not increasing. It is opposite result from the opinions of some of famous leftists who claims that the falling tendency problem is overcame.&lt;br /&gt;&lt;br /&gt;In addition, even though we can say it is declining, it does not look significant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7955852509032657932?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7955852509032657932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7955852509032657932' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7955852509032657932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7955852509032657932'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/10/tendency-of-profit-ratio-to-fall.html' title='The tendency of the profit ratio to fall'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SOUGqKnOJyI/AAAAAAAAAWA/-ZicdCfR1d4/s72-c/Picture+6.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-282917159507544</id><published>2008-09-30T22:56:00.005-04:00</published><updated>2008-10-02T14:55:24.168-04:00</updated><title type='text'>Stupid MS office searching.</title><content type='html'>Mac has good User Interface for searching services.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SOLntSfNvuI/AAAAAAAAAVo/i0JZw00eHQI/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SOLntSfNvuI/AAAAAAAAAVo/i0JZw00eHQI/s320/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5252014880710311650" border="0" /&gt;&lt;/a&gt;And MS Office also has similar one.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SOLn0PPw9II/AAAAAAAAAVw/uumHjS0rUus/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SOLn0PPw9II/AAAAAAAAAVw/uumHjS0rUus/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5252015000099288194" border="0" /&gt;&lt;/a&gt;But it works poorly.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SOLowavSdxI/AAAAAAAAAV4/mBpcv785jc4/s1600-h/Picture+5.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SOLowavSdxI/AAAAAAAAAV4/mBpcv785jc4/s320/Picture+5.gif" alt="" id="BLOGGER_PHOTO_ID_5252016033976448786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hmmmm Stupid MS...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-282917159507544?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/282917159507544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=282917159507544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/282917159507544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/282917159507544'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/stupid-ms-office-searching.html' title='Stupid MS office searching.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qEs9r36R5kw/SOLntSfNvuI/AAAAAAAAAVo/i0JZw00eHQI/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-194073895275897673</id><published>2008-09-26T12:39:00.007-04:00</published><updated>2008-09-26T13:21:14.466-04:00</updated><title type='text'>Democracy in China</title><content type='html'>I like to summarize &lt;a href="http://blog.hani.co.kr/gategateparagate/15923"&gt;one of the articles&lt;/a&gt; written by noza park, who is a professor in Oslo public University in Norge.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SN0XZUZf8CI/AAAAAAAAAVY/437Dq6I76N0/s1600-h/data.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SN0XZUZf8CI/AAAAAAAAAVY/437Dq6I76N0/s320/data.jpg" alt="" id="BLOGGER_PHOTO_ID_5250378464323694626" border="0" /&gt;&lt;/a&gt;One of my students who are interested in the movement in Tibet asked me "Do you think China will have democracy when they arrive at a certain level of economy?"&lt;br /&gt;I answered that:&lt;br /&gt;The example of Singapore shows that the relationship between the level of economy and democracy is not always related.&lt;br /&gt;Even when economy grow up fast with a lot of investment, democracy is impossible unless middle class support workers, so called "union for democracy."&lt;br /&gt;Unlike Korea Singapore didn't have that kind of cooperation, and Democracy remained as a dream of a few scholars.&lt;br /&gt;Let's see the middle class in China.&lt;br /&gt;Can we expect they will support workers?&lt;br /&gt;The answer is certainly no unless world depression stops their growth.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SN0YZhd3wPI/AAAAAAAAAVg/DkS-k5xIE3Q/s1600-h/ChineseDemocracy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SN0YZhd3wPI/AAAAAAAAAVg/DkS-k5xIE3Q/s320/ChineseDemocracy.jpg" alt="" id="BLOGGER_PHOTO_ID_5250379567343321330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"Why do you not believe that China can be democratic"&lt;br /&gt;This is a typical question from Norge students.&lt;br /&gt;When I ask "what do you think", then most of them mention "Economics level" or "Regime difference for the different regions."&lt;br /&gt;I, of course, think they are the part of the truth, but it is not able to explain all.&lt;br /&gt;Now China shows GDP is about 3 thousand dollars per person.&lt;br /&gt;This is almost like the level of Korea in mid 1980.&lt;br /&gt;At the time in Korea the popular topics for young people were "Resigning dictator", or "Democracy."&lt;br /&gt;In contrast the popular topic in China now is "Raising up China (中華堀起)."&lt;br /&gt;&lt;br /&gt;*PS:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SN0V_RjHxuI/AAAAAAAAAVI/m6c6vSsUIh0/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: left; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SN0V_RjHxuI/AAAAAAAAAVI/m6c6vSsUIh0/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5250376917370521314" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SN0WDCfkzvI/AAAAAAAAAVQ/4-uDhygwnqw/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: left; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SN0WDCfkzvI/AAAAAAAAAVQ/4-uDhygwnqw/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5250376982048591602" border="0" /&gt;&lt;/a&gt;10,170,000,000,000 / 1,321,851,888 = 7,694 dollars / person&lt;br /&gt;(* Notice the difference of years for each.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-194073895275897673?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/194073895275897673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=194073895275897673' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/194073895275897673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/194073895275897673'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/democracy-in-china.html' title='Democracy in China'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SN0XZUZf8CI/AAAAAAAAAVY/437Dq6I76N0/s72-c/data.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8668658020710726542</id><published>2008-09-23T11:34:00.016-04:00</published><updated>2008-09-23T21:22:33.762-04:00</updated><title type='text'>Contradiction of Neoliberalism</title><content type='html'>This is brief summary of this page:&lt;br /&gt;Capitalism is going down, and it is the time to think about next.&lt;br /&gt;&lt;a href="http://www.leejeonghwan.com/media/archives/001225.html"&gt;http://www.leejeonghwan.com/media/archives/001225.html&lt;/a&gt;&lt;br /&gt;This is an interview article with one of Korean economy professors.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold;"&gt;first&lt;/span&gt; crisis started from 1873 to 1895.&lt;br /&gt;Since productivity increases dramatically, the profit ratio decreased fast.&lt;br /&gt;So that many of factories stopped, and it results in depression.&lt;br /&gt;At the time, &lt;span style="font-weight: bold;"&gt;big monopolized capital&lt;/span&gt; appears and it recovered profit ratio.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold;"&gt;second&lt;/span&gt; crisis started from 1930.&lt;br /&gt;The giant monopolized capitals also could not avoid the dilemma that high productivity decreases profit ratio.&lt;br /&gt;This time states are involved to save the reproductivity of labors by public services and social security.&lt;br /&gt;It is called &lt;span style="font-weight: bold;"&gt;Keynesian&lt;/span&gt; or national monopolizing capitalism.&lt;br /&gt;Market could survive, because it replied on States.&lt;br /&gt;&lt;br /&gt;Now the solution for the &lt;span style="font-weight: bold;"&gt;third&lt;/span&gt; crisis was the &lt;span style="font-weight: bold;"&gt;Neoliberalism&lt;/span&gt;.&lt;br /&gt;The Keynesian brought profit to monopolized capitals, but it failed to increase actual productivity.&lt;br /&gt;In order to overcome the limit Neoliberalism chosen to abolish the functionalities of State, which was supporting the market.&lt;br /&gt;It is self-contradiction.&lt;br /&gt;Neoliberalism tries to abolish States, but it also have to rely on the States.&lt;br /&gt;&lt;br /&gt;It is dilemma that market abolishes States.&lt;br /&gt;State does not let market die.&lt;br /&gt;Depression can be overcame by the way that giant capitals die out and preparing new circumstance.&lt;br /&gt;State involves in the situation and tries to alleviate the contradiction so that it slows down, and prolongs the period of depression.&lt;br /&gt;All the cost come from Tax, and the burden goes to everybody.&lt;br /&gt;It is clear that the reason why the world economics doesn't go to critical depression is because States work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8668658020710726542?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8668658020710726542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8668658020710726542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8668658020710726542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8668658020710726542'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/neoliberalism.html' title='Contradiction of Neoliberalism'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-2840331632840167149</id><published>2008-09-22T23:48:00.002-04:00</published><updated>2008-09-22T23:52:33.295-04:00</updated><title type='text'>Windows 7</title><content type='html'>Puhahaha...&lt;br /&gt;Microsoft is making new version of Windows, called Windows7.&lt;br /&gt;I can guess how much they have failed by Windows Vista.&lt;br /&gt;I think Vista failed at the competing with its competitor, which is Windows XP.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SNhn7KzfbKI/AAAAAAAAAU4/iQM6UzjQrLQ/s1600-h/windows7_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SNhn7KzfbKI/AAAAAAAAAU4/iQM6UzjQrLQ/s320/windows7_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5249059631910579362" border="0" /&gt;&lt;/a&gt;Why did Vista fail?&lt;br /&gt;One of the reasons I guess is that it requires too much high performance hardware.&lt;br /&gt;&lt;br /&gt;I don't have much information for Windows7. But I hope this version get faster than Vista, which is hardly expectable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-2840331632840167149?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/2840331632840167149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=2840331632840167149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2840331632840167149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2840331632840167149'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/windows-7.html' title='Windows 7'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SNhn7KzfbKI/AAAAAAAAAU4/iQM6UzjQrLQ/s72-c/windows7_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-7193577091493582590</id><published>2008-09-18T14:17:00.003-04:00</published><updated>2008-09-22T23:55:40.621-04:00</updated><title type='text'>First They Came - Martin Niemoller</title><content type='html'>http://en.wikipedia.org/wiki/First_they_came...&lt;br /&gt;&lt;blockquote&gt;"In Germany, they came first for the Communists, And I didn’t speak up because I wasn’t a Communist;&lt;br /&gt;And then they came for the trade unionists, And I didn’t speak up because I wasn’t a trade unionist;&lt;br /&gt;And then they came for the Jews, And I didn’t speak up because I wasn’t a Jew;&lt;br /&gt;And then . . . they came for me . . . And by that time there was no one left to speak up."&lt;/blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SNhoqsLZrwI/AAAAAAAAAVA/VO9nzl8uAhQ/s1600-h/Timbre_Allemagne_1992_Martin_Niemoller_obl.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SNhoqsLZrwI/AAAAAAAAAVA/VO9nzl8uAhQ/s320/Timbre_Allemagne_1992_Martin_Niemoller_obl.jpg" alt="" id="BLOGGER_PHOTO_ID_5249060448323088130" border="0" /&gt;&lt;/a&gt;This is Korean version.&lt;br /&gt;&lt;blockquote&gt;그들이 처음 왔을때 / 마르틴 니묄러.&lt;br /&gt;&lt;br /&gt;나치는 우선 공산당을 숙청했다. 나는 공산당원이 아니었으므로 침묵했다.&lt;br /&gt;그 다음엔 노동조합원을 숙청했다. 나는 노동조합원이 아니므로 침묵했다.&lt;br /&gt;그 다음엔 유태인을 숙청했다, 나는 유태인이 아니었으므로 침묵했다.&lt;br /&gt;그 다음엔 나에게 왔다. 그 순간에 이르자, 나서줄 사람이 아무도 남지 않았다.&lt;/blockquote&gt;This is Germany version, I believe:&lt;br /&gt;&lt;blockquote&gt;Als die Nazis die Kommunisten holten,&lt;br /&gt;habe ich geschwiegen;&lt;br /&gt;ich war ja kein Kommunist.&lt;br /&gt;&lt;br /&gt;Als sie die Sozialdemokraten einsperrten,&lt;br /&gt;habe ich geschwiegen;&lt;br /&gt;ich war ja kein Sozialdemokrat.&lt;br /&gt;&lt;br /&gt;Als sie die Gewerkschafter holten,&lt;br /&gt;habe ich nicht protestiert;&lt;br /&gt;ich war ja kein Gewerkschafter.&lt;br /&gt;&lt;br /&gt;Als sie die Juden holten,&lt;br /&gt;habe ich geschwiegen;&lt;br /&gt;ich war ja kein Jude.&lt;br /&gt;&lt;br /&gt;Als sie mich holten,&lt;br /&gt;gab es keinen mehr, der protestieren konnte.&lt;/blockquote&gt;Although just small group of people suffer, it is related with my life. Don't forget.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-7193577091493582590?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/7193577091493582590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=7193577091493582590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7193577091493582590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/7193577091493582590'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/first-they-came-martin-niemoller.html' title='First They Came - Martin Niemoller'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SNhoqsLZrwI/AAAAAAAAAVA/VO9nzl8uAhQ/s72-c/Timbre_Allemagne_1992_Martin_Niemoller_obl.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-4536251185253223017</id><published>2008-09-18T13:29:00.003-04:00</published><updated>2008-09-18T13:44:01.917-04:00</updated><title type='text'>The difference between LIBERAL and CONSERVATIVES</title><content type='html'>I found a good movie article in TED.&lt;br /&gt;It is about politics and psychology.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ted.com/index.php/talks/jonathan_haidt_on_the_moral_mind.html"&gt;Jonathan Haidt: The real difference between liberals and conservatives&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SNKTGS5iPgI/AAAAAAAAAUw/YbGfDzvq6Jo/s1600-h/Picture+6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SNKTGS5iPgI/AAAAAAAAAUw/YbGfDzvq6Jo/s320/Picture+6.png" alt="" id="BLOGGER_PHOTO_ID_5247418252201704962" border="0" /&gt;&lt;/a&gt;Now we found a connection between psychology and politics based on human nature.&lt;br /&gt;I think this is great.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-4536251185253223017?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/4536251185253223017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=4536251185253223017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4536251185253223017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/4536251185253223017'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/difference-between-liberal-and.html' title='The difference between LIBERAL and CONSERVATIVES'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SNKTGS5iPgI/AAAAAAAAAUw/YbGfDzvq6Jo/s72-c/Picture+6.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-8500655215010864033</id><published>2008-09-16T20:48:00.002-04:00</published><updated>2008-09-16T20:56:07.061-04:00</updated><title type='text'>EJB ( Enterprise Java Bean )</title><content type='html'>I have heard about EJB all the time since 5 years ago.&lt;br /&gt;And yesterday I have found what it is.&lt;br /&gt;It was actually not so complex.&lt;br /&gt;&lt;br /&gt;I though it was a big library collection like STL or MFC.&lt;br /&gt;But it wasn't.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qEs9r36R5kw/SNBVlFQf0MI/AAAAAAAAAUo/SG6BMspVbhg/s1600-h/8406.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_qEs9r36R5kw/SNBVlFQf0MI/AAAAAAAAAUo/SG6BMspVbhg/s320/8406.jpg" alt="" id="BLOGGER_PHOTO_ID_5246787661441519810" border="0" /&gt;&lt;/a&gt;The EJB technique reminded me of the memory pool technique in C++.&lt;br /&gt;EJB container instantiates some of Bean classes, which is Business logic classes.&lt;br /&gt;And then it manage them, allocate them, and release them.&lt;br /&gt;&lt;br /&gt;There are three different types of beans: stateless, statefull and message driven.&lt;br /&gt;I don't know the details for each one yet. But it must be basically same.&lt;br /&gt;&lt;br /&gt;One can find good tutorial Here:&lt;br /&gt;http://java.sun.com/javaee/5/docs/tutorial/doc/bnblt.html&lt;br /&gt;&lt;br /&gt;I recommend one see the example files first:&lt;br /&gt;http://java.sun.com/javaee/5/docs/tutorial/doc/bnbnb.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-8500655215010864033?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/8500655215010864033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=8500655215010864033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8500655215010864033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/8500655215010864033'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/ejb-enterprise-java-bean.html' title='EJB ( Enterprise Java Bean )'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qEs9r36R5kw/SNBVlFQf0MI/AAAAAAAAAUo/SG6BMspVbhg/s72-c/8406.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-2983229427077546309</id><published>2008-09-13T14:38:00.004-04:00</published><updated>2008-09-13T14:49:12.152-04:00</updated><title type='text'>Checking capital characters for password.</title><content type='html'>One of my favorite web site is We Disk: http://global.wedisk.co.rk&lt;br /&gt;One day I have typed in Captial characters as my password, and the web site showed this pop-up message.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SMwJTNB2jsI/AAAAAAAAAUY/JTL4_uGsMXM/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SMwJTNB2jsI/AAAAAAAAAUY/JTL4_uGsMXM/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5245577891499380418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The meaning is that&lt;br /&gt;&lt;blockquote&gt;if your "Caps lock" is turned on, password will be wrong.&lt;/blockquote&gt;I think some of people might intentionally use "Caps lock" when they type in password. But it is good to notice the users all the time.&lt;br /&gt;&lt;br /&gt;In addition, I like the simple image that the pop-up message uses. It is instinctive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-2983229427077546309?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/2983229427077546309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=2983229427077546309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2983229427077546309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/2983229427077546309'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/checking-capital-characters-for.html' title='Checking capital characters for password.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/SMwJTNB2jsI/AAAAAAAAAUY/JTL4_uGsMXM/s72-c/Picture+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5890849746140079957</id><published>2008-09-11T19:20:00.005-04:00</published><updated>2008-09-13T14:54:19.576-04:00</updated><title type='text'>No end in sight, 2007</title><content type='html'>This is summary of the documentary, "No end in sight, 2007". This is for Iraq war.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qEs9r36R5kw/SMmoNfkH_SI/AAAAAAAAAUI/zXWgtVrj0fk/s1600-h/Picture+5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_qEs9r36R5kw/SMmoNfkH_SI/AAAAAAAAAUI/zXWgtVrj0fk/s320/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5244908190814436642" border="0" /&gt;&lt;/a&gt;US army didn't stop Looting. Army stand in each intersection and do nothing but saying that we are here not for stopping lotting. It encouraged robbery to other places.&lt;br /&gt;&lt;br /&gt;In side of US government, they didn't communicate well. People who are charged in significant role had no experience, no plan, no frequent communication. And they most of time stay in Washington not in Iraq.&lt;br /&gt;&lt;br /&gt;CPA made three bad decisions.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Stopping the formation of an interim Iraq government.&lt;/li&gt;&lt;li&gt;De-Ba'athification.&lt;/li&gt;&lt;li&gt;Disbanding the iraqi Military.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Baath Party had played significant role for Iraq society in education and techniques. But since they are founded and supported by Saddam, CPA dismissed the party and all of them become unemployed.&lt;br /&gt;&lt;br /&gt;Soldiers are suddenly unemployed. Iraq become worse not only in the sense of security but also in the sense of economy. There was demonstration by former soldiers, and become more violent. Their way for insurgency is professional: bombing and ambushing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SMwMPN18-UI/AAAAAAAAAUg/W6TmcMj71GI/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SMwMPN18-UI/AAAAAAAAAUg/W6TmcMj71GI/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5245581121533311298" border="0" /&gt;&lt;/a&gt;$18 billion in reconstruction money was made available on Oct 1, 2003 by congress. One year later, only $1 billion had actually been spent. There are a lot of corruption and wasting.&lt;br /&gt;&lt;br /&gt;US soldiers arrest a lot of Iraqis. Even in mid night when people hear sound of helicopter or tanks, they wake up and prepare to be investigated. Many of them are just missing or die. Army doesn't disclose the number of Iraqis arrested or detained in Iraq since 2003 and even now.&lt;br /&gt;&lt;br /&gt;All of this kind of insurgency result in the growth of religious group can giving them political power. They are explosive and aggressive to America.&lt;br /&gt;&lt;br /&gt;Security is horrible. Kidnapping, bombing, and killing are happening. Kidnapping is not only for one or two people, but for group of people. Violent gangs or private security guards just kill people on street. Some of them made a home video that shows just killing people in cars without any reason.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SMmoleCUUtI/AAAAAAAAAUQ/yHOL9KDjASc/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SMmoleCUUtI/AAAAAAAAAUQ/yHOL9KDjASc/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5244908602721063634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Direct war cost to date: 379 Billion.&lt;br /&gt;Future military operating costs: 389 Billion.&lt;br /&gt;Veterans health care and lost productivity: 482 Billion.&lt;br /&gt;Other defense equip and personnel cost: 160 Billion.&lt;br /&gt;Oil price effects: 450 Billion&lt;br /&gt;Total costs of Iraq war: $1.860 Trillion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5890849746140079957?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5890849746140079957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5890849746140079957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5890849746140079957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5890849746140079957'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/no-end-in-sight-2007.html' title='No end in sight, 2007'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qEs9r36R5kw/SMmoNfkH_SI/AAAAAAAAAUI/zXWgtVrj0fk/s72-c/Picture+5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-538515724992926822</id><published>2008-09-05T12:07:00.005-04:00</published><updated>2008-09-05T12:18:38.088-04:00</updated><title type='text'>Why is summer hotter than winter?</title><content type='html'>I have found &lt;a href="http://www.ted.com/index.php/talks/jonathan_drori_on_what_we_think_we_know.html"&gt;a interesting question&lt;/a&gt; at TED site.&lt;br /&gt;&lt;blockquote&gt;Why is summer warmer than winter?&lt;br /&gt;&lt;/blockquote&gt;Is it because during summer, the earth gets closer to sun?&lt;br /&gt;Then you might imagine ellipse shape of the path of earth around sun like this:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SMFaL2KKYjI/AAAAAAAAAT4/P9XMYg7FSJU/s1600-h/Solar+System.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SMFaL2KKYjI/AAAAAAAAAT4/P9XMYg7FSJU/s320/Solar+System.jpg" alt="" id="BLOGGER_PHOTO_ID_5242570600799167026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But actually it is not true. It is not ellipse.&lt;br /&gt;In fact it never gets closer at all like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qEs9r36R5kw/SMFaXe0C1kI/AAAAAAAAAUA/xNygidAT9_o/s1600-h/Solar-System.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_qEs9r36R5kw/SMFaXe0C1kI/AAAAAAAAAUA/xNygidAT9_o/s320/Solar-System.gif" alt="" id="BLOGGER_PHOTO_ID_5242570800690812482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The real question is that why do we come up with the ellipse shape for the path?&lt;br /&gt;I think it is because we have never experienced about solar system ever.&lt;br /&gt;Or we have not had any chance to think about the path.&lt;br /&gt;I have never seen the Mars by my eyes.&lt;br /&gt;I have never checked any path of any star.&lt;br /&gt;&lt;br /&gt;Lack of experience stupifys us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-538515724992926822?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/538515724992926822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=538515724992926822' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/538515724992926822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/538515724992926822'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/09/why-is-summer-hotter-than-winter.html' title='Why is summer hotter than winter?'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/SMFaL2KKYjI/AAAAAAAAAT4/P9XMYg7FSJU/s72-c/Solar+System.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23591982.post-5499540795337864707</id><published>2008-08-19T01:02:00.004-04:00</published><updated>2008-08-19T01:12:44.033-04:00</updated><title type='text'>Weta in North America.</title><content type='html'>I think my house has Cave Weta.&lt;br /&gt;According to wikipedia, they live only in New Zealand, but my house has.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qEs9r36R5kw/SKpV9WxzGpI/AAAAAAAAATg/P88OArGeQck/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_qEs9r36R5kw/SKpV9WxzGpI/AAAAAAAAATg/P88OArGeQck/s320/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5236092029346454162" border="0" /&gt;&lt;/a&gt;Actually I'm not sure what they are.&lt;br /&gt;1. They don't have any wing, so I don't think they are cricket.&lt;br /&gt;2. I have never heard they make sound, and only cave weta among all kind of wetas doesn't have ears.&lt;br /&gt;3. They appear usually at night, and weta is nocturnal.&lt;br /&gt;4. They look like grasshopper, but they have too small eyes; actually I cannot see their eyes.&lt;br /&gt;5. I suspect they come from basement of my house, which feels like cave.&lt;br /&gt;6. They are easy to be caught; they don't run away much. I guess this means their eyes are so bad.&lt;br /&gt;&lt;br /&gt;Only one strange thing is all of web pages says they live only in New Zealand. But I'm living in North America. This might be a big discovery in Entomology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23591982-5499540795337864707?l=wrice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wrice.blogspot.com/feeds/5499540795337864707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23591982&amp;postID=5499540795337864707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5499540795337864707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23591982/posts/default/5499540795337864707'/><link rel='alternate' type='text/html' href='http://wrice.blogspot.com/2008/08/weta-in-north-america.html' title='Weta in North America.'/><author><name>Jay</name><uri>http://www.blogger.com/profile/05307417533099324352</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_qEs9r36R5kw/R7o3-qfJiSI/AAAAAAAAAJI/jubkFe7RTJE/S220/c0025902_395498.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qEs9r36R5kw/SKpV9WxzGpI/AAAAAAAAATg/P88OArGeQck/s72-c/Picture+4.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
