<?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-15747968</id><updated>2012-01-27T19:55:21.067-08:00</updated><title type='text'>Actualize</title><subtitle type='html'>We are all dream actualizers. We have a dream and we make it true.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-15747968.post-6397775544120455854</id><published>2012-01-27T19:44:00.000-08:00</published><updated>2012-01-27T19:55:21.079-08:00</updated><title type='text'>"What does love mean?"</title><content type='html'>I saw this post on on g+, by &lt;a href="https://plus.google.com/115329145716512485595/posts" target="_blank"&gt;V C Willow&lt;/a&gt;. I don't want it to be lost, post here so that I can come back and ground myself.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;A group of professionals posed this question to a group of 4 to 8 year-olds ,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'What does love mean?'&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;The answers they got were broader and deeper than anyone could have imagined&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'When my grandmother got arthritis, she couldn't bend over and paint her toenails anymore.. So my grandfather does it for her all the time, even when his hands got arthritis too. That's love.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Rebecca- age 8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'When someone loves you, the way they say your name is different.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;You just know that your name is safe in their mouth.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Billy - age 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when a girl puts on perfume and a boy puts on shaving cologne and they go out and smell each other.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Karl - age 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when you go out to eat and give somebody most of your French fries without making them give you any of theirs.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Chrissy - age 6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is what makes you smile when you're tired.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Terri - age 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when my mommy makes coffee for my daddy and she takes a sip before giving it to him, to make sure the taste is OK.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Danny - age 7&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when you kiss all the time. Then when you get tired of kissing, you still want to be together and you talk more. My Mommy and Daddy are like that.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;They look gross when they kiss'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Emily - age 8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is what's in the room with you at Christmas if you stop opening presents&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;And listen.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Bobby - age 7&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'If you want to learn to love better, you should start with a friend who you hate , '&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Nikka - age 6&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;(we need a few million more Nikka's on this planet)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when you tell a guy you like his shirt, then he wears it every day.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Noelle - age 7&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is like a little old woman and a little old man who are still friends even after they know each other so well.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Tommy - age 6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'During my piano recital, I was on a stage and I was scared. I looked at all the people watching me and saw my daddy waving and smiling.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;He was the only one doing that. I wasn't scared anymore.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Cindy - age 8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'My mommy loves me more than anybody&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;You don't see anyone else kissing me to sleep at night.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Clare - age 6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when Mommy gives Daddy the best piece of chicken.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Elaine-age 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when Mommy sees Daddy smelly and sweaty and still says he is handsomer than Robert Redford .'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Chris - age 7&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when your puppy licks your face even after you left him alone all day.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Mary Ann - age 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'I know my older sister loves me because she gives me all her old clothes and has to go out and buy new ones.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Lauren - age 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'When you love somebody, your eyelashes go up and down and little stars come out of you.'(what an image)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Karen - age 7&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Love is when Mommy sees Daddy on the toilet and she doesn't think it's gross..'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Mark - age 6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'You really shouldn't say 'I love you' unless you mean it. But if you mean it, you should say it a lot. People forget.'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Jessica - age 8&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;And the final one&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;The winner was a four year old child whose next door neighbour was an elderly gentleman who had recently lost his wife.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Upon seeing the man cry, the little boy went into the old gentleman's yard , climbed onto his lap, and just sat there.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;When his Mother asked what he had said to the neighbour, the little boy said ,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;'Nothing, I just helped him cry'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-6397775544120455854?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/6397775544120455854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=6397775544120455854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/6397775544120455854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/6397775544120455854'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2012/01/what-does-love-mean.html' title='&quot;What does love mean?&quot;'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-151502112071126013</id><published>2011-11-24T07:39:00.001-08:00</published><updated>2011-11-24T07:40:24.209-08:00</updated><title type='text'>Stereo Camera</title><content type='html'>Here is a link that I will try to make a stereo vision input with.&lt;br /&gt;&lt;a href="http://code.google.com/p/sentience/wiki/HowToMakeAStereoCamera"&gt;http://code.google.com/p/sentience/wiki/HowToMakeAStereoCamera&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-151502112071126013?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/151502112071126013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=151502112071126013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/151502112071126013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/151502112071126013'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2011/11/stereo-camera.html' title='Stereo Camera'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-8941226804120224333</id><published>2011-11-21T19:57:00.001-08:00</published><updated>2011-11-21T20:03:20.460-08:00</updated><title type='text'>EXOdesk</title><content type='html'>I saw this post and many other post about the exodesk. It's an affordable version of Microsoft Surface.&lt;br /&gt;&lt;br /&gt;I believe it can be replaced with CV + AR. It's going to happen. 8-]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mashable.com/2011/11/21/exodesk/"&gt;http://mashable.com/2011/11/21/exodesk/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/5dlUi3DnrzA/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5dlUi3DnrzA&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/5dlUi3DnrzA&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-8941226804120224333?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/8941226804120224333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=8941226804120224333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8941226804120224333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8941226804120224333'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2011/11/exodesk.html' title='EXOdesk'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-7541052191424074849</id><published>2011-11-13T19:28:00.001-08:00</published><updated>2011-11-13T19:31:29.349-08:00</updated><title type='text'>Linear Algebra</title><content type='html'>I never thought that you can find the lecture and the text online:&lt;br /&gt;This is the lecture given by W. Gilbert Strang at MIT.&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=ZK3O402wf1c"&gt;http://www.youtube.com/watch?v=ZK3O402wf1c&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Textbook: Introduction to Linear Algebra&lt;br /&gt;&lt;a href="http://math.mit.edu/linearalgebra/"&gt;http://math.mit.edu/linearalgebra/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-7541052191424074849?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/7541052191424074849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=7541052191424074849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/7541052191424074849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/7541052191424074849'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2011/11/linear-algebra.html' title='Linear Algebra'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-7502268955670797952</id><published>2011-11-01T18:49:00.000-07:00</published><updated>2011-11-01T18:56:50.379-07:00</updated><title type='text'>Some resource for AR and 3D computer vision</title><content type='html'>Thanks to Fred Chen's help. Fred is currently a PHD students in University of Alberta.&lt;br /&gt;&lt;br /&gt;1. The idea I am passionate about is augmented reality. &lt;a href="http://en.wikipedia.org/wiki/Augmented_reality"&gt;http://en.wikipedia.org/wiki/Augmented_reality&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. The advanced man-machine interface lab, CS department of UofA. &lt;a href="http://spaces.facsci.ualberta.ca/ammi/projects/"&gt;http://spaces.facsci.ualberta.ca/ammi/projects/&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;3. Some of the advanced CV labs (Following UC Berkeley, CMU, and Microsoft research)&lt;br /&gt;&lt;a href="http://www.eecs.berkeley.edu/Research/Projects/CS/vision/"&gt;http://www.eecs.berkeley.edu/Research/Projects/CS/vision/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ri.cmu.edu/research_project_view.html?menu_id=261"&gt;http://www.ri.cmu.edu/research_project_view.html?menu_id=261&lt;/a&gt;&lt;br /&gt;&lt;a href="http://research.microsoft.com/en-us/groups/vision/"&gt;http://research.microsoft.com/en-us/groups/vision/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. Computer vision(CV) has developed into a huge area with many directions. &amp;nbsp;This book has a comprehensive covering of the whole domain, "Computer Vision: Algorithms and Applications". An electronic version is available here (&lt;a href="http://szeliski.org/Book/"&gt;http://szeliski.org/Book/&lt;/a&gt;) for free.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-7502268955670797952?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/7502268955670797952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=7502268955670797952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/7502268955670797952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/7502268955670797952'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2011/11/some-resource-for-ar-and-3d-computer.html' title='Some resource for AR and 3D computer vision'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-804433769179632165</id><published>2011-09-25T21:44:00.000-07:00</published><updated>2011-09-25T21:44:25.879-07:00</updated><title type='text'>350 Edmonton Sept 24,2011</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;It wasn't a surprise to me that we had about 40 people showed up for the 350 moving the planet rally. Most people were either young or old.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;We started at the 150-whyte ave intersection. I learned that the construction site has been polluted by a gas station. It has been there for 14 years. Hard to believe. A big piece of land on Whyte ave not used for anything for 14 years. What a waste.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Green Party candidate David Parker had some very practical tips for what you can do if you care about the environment. Meteorologist Julian Brimelow gave a techy speech. Very educational.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XsqSQqbPWt4/Tn_9Xg5wR7I/AAAAAAAAAWQ/QzqvTtT_RP0/s1600/DSC05213.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-XsqSQqbPWt4/Tn_9Xg5wR7I/AAAAAAAAAWQ/QzqvTtT_RP0/s320/DSC05213.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;MP Linda Duncan came and had a nice speech. It was inspiring.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ESAkNtXO0TM/ToAAHFT2b2I/AAAAAAAAAWk/UfNxQBEW3jY/s1600/DSC05217.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-ESAkNtXO0TM/ToAAHFT2b2I/AAAAAAAAAWk/UfNxQBEW3jY/s320/DSC05217.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;Raging Grannies:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-z2ceB8BxJOU/Tn_-u-u09BI/AAAAAAAAAWY/wrvb2tVjT0M/s1600/DSC05216.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-z2ceB8BxJOU/Tn_-u-u09BI/AAAAAAAAAWY/wrvb2tVjT0M/s320/DSC05216.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;It's a good start.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-804433769179632165?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/804433769179632165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=804433769179632165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/804433769179632165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/804433769179632165'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2011/09/350-edmonton-sept-242011.html' title='350 Edmonton Sept 24,2011'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-XsqSQqbPWt4/Tn_9Xg5wR7I/AAAAAAAAAWQ/QzqvTtT_RP0/s72-c/DSC05213.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-2024325266392043568</id><published>2011-07-15T21:57:00.000-07:00</published><updated>2011-11-01T18:39:30.002-07:00</updated><title type='text'>Another view of the problem I try to solve</title><content type='html'>&lt;b&gt;The issue&lt;/b&gt;:&lt;br /&gt;I found that paper is essential in current business work. Having a hard-copy of a document, a copy of design, it's the most effective way for discussion, for making notes, and recording a decision. To work effectively, it's important to have a hard copy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Goal&lt;/b&gt;:&lt;br /&gt;I wish that we can work smoothly without the hard copy of docs, note books.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Possible solution&lt;/b&gt;:&lt;br /&gt;I wonder AR and computer 3D vision may bring this to reality. Virtual "hard copy" of the docs. You can spread it out over your desk, flip through it, write on it and what ever else that you can think of that you may do with a real paper. Maybe not paper air plane. Why not?&lt;br /&gt;Virtual note book that you can write on. The pen can be your finger or a pen, or something that your computer treat as a pen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Water down version&lt;/b&gt;: (Need to check the current tech level and might be a first step toward a better version)&lt;br /&gt;Is there some window manager that can work with AR or VR&amp;nbsp;eye-wears? It's might be able to simulate a huge virtual screen around the user.&lt;br /&gt;Is there 3D computer vision close to the market?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-2024325266392043568?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/2024325266392043568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=2024325266392043568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2024325266392043568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2024325266392043568'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2011/07/another-view-of-problem-i-try-to-solve.html' title='Another view of the problem I try to solve'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-4498938043462916237</id><published>2011-04-30T21:18:00.000-07:00</published><updated>2011-05-04T19:30:26.603-07:00</updated><title type='text'>The possible solution to Iron man's holograph UI</title><content type='html'>To implement the UI that we see in that Iron man holograph UI, using the current technology without the cost of an arm or a leg, here is the possible solution. Please see my previous post.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Using the augment reality glasses to project the model into our eyes&lt;/li&gt;&lt;li&gt;Give 3D vision to our computer&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Questions I have are:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Do we have the product? Probably. I hope it works with Linux, has a simple/easy API to work with.&lt;br /&gt;It is not the&amp;nbsp;critical&amp;nbsp;part for this moment. If a Linux friendly 3D display is not ready yet, a stub can be used for development.&lt;br /&gt;(Action item, find what's out there)&lt;/li&gt;&lt;li&gt;Do we have 3D vision implemented for computers? Probably not, maybe not as well as mouse and keyboard. Maybe implement a simple version, for example, build the 3D tracking ability to a pen. (Action item, find a product, the&amp;nbsp;hardware. If it doesn't exist, maybe put together of two webcams.)&lt;/li&gt;&lt;li&gt;What libraries, softwares and existing knowledge we can leverage. (Action item, learn)&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-4498938043462916237?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/4498938043462916237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=4498938043462916237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/4498938043462916237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/4498938043462916237'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2011/04/possible-solution-to-iron-mans.html' title='The possible solution to Iron man&apos;s holograph UI'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-3703163679137272527</id><published>2011-04-28T21:45:00.000-07:00</published><updated>2011-04-30T20:51:26.804-07:00</updated><title type='text'>My vision of project Ava</title><content type='html'>I sought, and I found what I was looking for. &lt;br /&gt;&lt;br /&gt;Having watched too many sci-fi movies, to name a few, the interface in minority report, the Zion control in Matrix.&amp;nbsp;Every time when I have to work with paper, either at work or at home, I wish augmented reality and virtual reality is available for mundane usage instead of gaming or military.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/ZPPBzmn6Fh4/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZPPBzmn6Fh4&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/ZPPBzmn6Fh4&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;The UI in iron man movies is the most exciting and most attractive UI to me. I want to bring this into reality.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/wKyQhriOrD0/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/wKyQhriOrD0&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/wKyQhriOrD0&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I wish that one day, the user interface that we need to work with is as simple as paper documents, photos; models projected as 3D objects. &amp;nbsp;Using 3D tracking and augmented reality, the environment can be our computer screen. The input device can be our hands, or a real pen. You grab a piece of "paper", put it on the table, pick up a "pen" or using your finger, dip in to a color that you like to write or draw in, start writing.&lt;br /&gt;&lt;br /&gt;This is not a dream in a far future anymore. There is VideoMan&amp;nbsp;&lt;a href="http://videomanlib.sourceforge.net/"&gt;http://videomanlib.sourceforge.net/&lt;/a&gt;. It is an open source library for video applications. There is OpenCV, it has been there for years. I am also impressed by the work of&amp;nbsp;Javier Barandiaran Martirena. Here is one of his work&amp;nbsp;&lt;a href="http://sites.google.com/site/jbarandiaran/3dtracking"&gt;http://sites.google.com/site/jbarandiaran/3dtracking&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is the plan:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Clarify the vision&lt;/li&gt;&lt;li&gt;Meet the right people&lt;/li&gt;&lt;li&gt;Dream comes true&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;The value of the document is the information it contains. Paper is only the&amp;nbsp;media. What we need is the information on it, it's time to remove the carrier.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-3703163679137272527?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/3703163679137272527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=3703163679137272527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/3703163679137272527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/3703163679137272527'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2011/04/my-vision-of-project-ava.html' title='My vision of project Ava'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-2107918840905923835</id><published>2009-11-07T07:53:00.000-08:00</published><updated>2009-11-07T07:53:31.660-08:00</updated><title type='text'>"I, Robot, am the Buddha in a teenager's skin"</title><content type='html'>&lt;a href="http://www.geocities.com/meindzai/buddhamap.html" rel="nofollow"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="postholder" style="overflow-y: hidden;"&gt;&lt;span&gt;Here is a post I found on the shroomery forum, I like it, afraid it's going to disappear before I have time to contemplate on it, so I &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="postholder" style="overflow-y: hidden;"&gt;&lt;span&gt;quoted it from this URL: http://www.shroomery.org/forums/showflat.php/Cat/0/Number/6501917&lt;/span&gt;&lt;/div&gt;&lt;div class="postholder" style="overflow-y: hidden;"&gt;&lt;span&gt;----------------------------------------------------------------------------------------------------------- &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="postholder" style="overflow-y: hidden;"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="postholder" style="overflow-y: hidden;"&gt;&lt;span&gt; You are a robot.  This is the first thing you must accept on the road to liberation.  Whether or not you are a &lt;i&gt;tabula rasa&lt;/i&gt;, a blank slate, when you are born, or there is some spark of uniqueness which allows your mind to react differently to the world than someone else would in your exact situation, the undeniable fact remains: you are a robot.&lt;br /&gt;&lt;br /&gt;You are biologically programmed through the act of human reproduction, you are emotionally and linguistically programmed by your parents and all those with whom you interact, and you are programmed to live within certain systems (rational, calendric, numeric, religious, scholastic, etc.) by your parent-culture.&lt;br /&gt;&lt;br /&gt;So, you're a freakin' robot. Get over yourself already. The way you act and react is pre-determined by the reality you are born into.&lt;br /&gt;&lt;br /&gt;Yet, you seek. What are most of us here on The Shroomery seeking? We are seeking to alter the chemical base on which our consciousness rests in order to understand our consciousness in and of itself. When you reach a certain point in this chemical experimentation, you discover that you, like everyone else, is a robot absorbing a billion inputs and outputting signals based on the sum of your programming: we are all connected in that we receive signals, synthesize them, and produce new signals. The 9/11 hijackers received paranoid/hateful signals, and produced them, causing their own demise and the demise of thousands of others: they were paranoid robots.&lt;br /&gt;&lt;br /&gt;What you have to do to break the chain of paranoia is WAKE UP. By waking up, I mean you have to realize that you are the product of the fears and hopes of others: once you begin to see clearly what those fears and hopes are, you are able to alter your reality in order to wake the other robots up, and in doing so you realize that being Enlightened means giving and receiving compassionate signals with your fellow robots and learning how to rid yourself of paranois signals.&lt;br /&gt;&lt;br /&gt;So, a human is someone who feels compassion and paranoia but is not awake enough to understand his own intent as part of a larger whole - he thus acts according to the ratio of compassionate to paranoid inputs which he has received in his life: obviously this varies in every single individual. &lt;br /&gt;&lt;br /&gt;A robot is a thing which cannot compute compassion or paranoia, but which has an unbending computational (input-synthesis-output) intent with regards to its reality.&lt;br /&gt;&lt;br /&gt;What is a holy [wo]man, then? A holy man, a realized being, is someone who is able to compute levels of compassion and paranoia in his fellow hum-bots, and act with unbending intent to tip their scales towards compassion.&lt;br /&gt;&lt;br /&gt;You can't run away. Your karma is not your own, it is the karma of your family, your peers, the old woman serving you your hotdog at the ballpark - and as you gain a larger perspective, your karma is the karma of the World: you cannot transcend this earthly plane through meditation or psychedelics: you can either Be Here Now, acting on compassionate impulse, or you can be an input-output drone and wander around confused and frustrated (and, of course, occassionally compassionate) until you die and cease to exist. &lt;/span&gt;&lt;/div&gt;&lt;div class="postholder" style="max-height: 320px; overflow: hidden;"&gt;&lt;span&gt;&lt;span&gt; &lt;br /&gt;&lt;br /&gt;--------------------&lt;br /&gt;The only certainty is &lt;del&gt;death&lt;/del&gt; life. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;em&gt;Edited by Lion (01/27/07 10:40 AM)&lt;/em&gt;&lt;/span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-2107918840905923835?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/2107918840905923835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=2107918840905923835' title='34 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2107918840905923835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2107918840905923835'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2009/11/i-robot-am-buddha-in-teenagers-skin.html' title='&quot;I, Robot, am the Buddha in a teenager&apos;s skin&quot;'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-8960579756803437774</id><published>2009-10-31T22:52:00.000-07:00</published><updated>2009-10-31T22:56:24.553-07:00</updated><title type='text'>Shocking fact about your life</title><content type='html'>There are 36500 days if you are going to live 100 years.&lt;br /&gt;What are you going to do with it?&lt;br /&gt;What matters the most?&lt;br /&gt;Apparently, I am still looking for the "meaning" of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-8960579756803437774?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/8960579756803437774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=8960579756803437774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8960579756803437774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8960579756803437774'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2009/10/shoking-fact-about-your-life.html' title='Shocking fact about your life'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-8388629467867388118</id><published>2007-10-05T22:01:00.000-07:00</published><updated>2007-10-06T02:06:24.042-07:00</updated><title type='text'>WoW Ubuntu gusty 64 setup</title><content type='html'>I received a WoW invitation from a friend. Downloaded the install package from their website. First thing I tried is install it on my VM. That is a win xp guest of my Ubuntu amd64 gusty. Which did not work for some reason. The WoW crashes.&lt;br /&gt;&lt;br /&gt;I talked with my friend again, and find out that "many" uses Wine to run it. It's a surprise to me. Wine wasn't friendly at all back to 5 years ago. The open source world did so many great things.&lt;br /&gt;&lt;br /&gt;&gt;sudo apt-get install wine&lt;br /&gt;&gt;winecfg&lt;br /&gt;&lt;br /&gt;I set the virtual desktop to 1280x900 as another friend suggested.&lt;br /&gt;&lt;br /&gt;&gt;wine ./Installer.exe&lt;br /&gt;&lt;br /&gt;Everything seems okay except the font is a little funny in that window. After everything is done, I try to start the WoW from the installer. It failed. Before that it was trying to install a html engine. That's where it failed.&lt;br /&gt;&lt;br /&gt;My heart sink a bit. I tried to run the WoW from it's ~/.wine/drive_c/..... /WoW.exe location. It's like a charm. The application stated, with a small problem. The mouse "hand" is gray. I sure can live with a gray hand.&lt;br /&gt;&lt;br /&gt;It then want to download a patch. Everything seems okay until it says "waiting for files to close". It stop there and does nothing. Did a little search on this, find out that running the patch exe file directly works.&lt;br /&gt;&lt;br /&gt;It seems okay at first, but will froze after a couple minutes playing. I think I better use Ubuntu 7.0.4.  Hope I can get some luck there. 8-]&lt;br /&gt;&lt;br /&gt;First I add the repository key:&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;&gt;&lt;/span&gt;wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -&lt;br /&gt;&lt;br /&gt;Then change the /etc/apt/sources.list file. Added:&lt;br /&gt;&lt;pre&gt;deb http://wine.budgetdedicated.com/apt feisty main #WineHQ - Ubuntu 7.04 "Feisty Fawn"&lt;br /&gt;deb-src http://wine.budgetdedicated.com/apt feisty main #WineHQ - Ubuntu 7.04 "Feisty Fawn"&lt;/pre&gt;It's from file:&lt;br /&gt;&lt;pre&gt;http://wine.budgetdedicated.com/apt/sources.list.d/feisty.list&lt;/pre&gt;&gt;sudo apt-get update&lt;br /&gt;&gt;sudo apt-get install wine&lt;br /&gt;&lt;br /&gt;&gt;wine WoW.exe -opengl&lt;br /&gt;&lt;br /&gt;Everything really worked this time. Thanks Wine development team, thanks to Ubuntu development team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-8388629467867388118?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/8388629467867388118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=8388629467867388118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8388629467867388118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8388629467867388118'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2007/10/wow-ubuntu-gusty-64-setup.html' title='WoW Ubuntu gusty 64 setup'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-8160791691922539770</id><published>2007-03-10T20:30:00.000-08:00</published><updated>2007-03-10T20:37:25.077-08:00</updated><title type='text'>Apache mod_ssl tomcate Axis https user authentication</title><content type='html'>package com.tiandao.ws.util;&lt;br /&gt;&lt;br /&gt;import java.io.ByteArrayInputStream;&lt;br /&gt;import java.security.Principal;&lt;br /&gt;import java.security.cert.CertificateException;&lt;br /&gt;import java.security.cert.CertificateFactory;&lt;br /&gt;import java.security.cert.X509Certificate;&lt;br /&gt;&lt;br /&gt;import javax.servlet.ServletContext;&lt;br /&gt;import javax.servlet.http.HttpServlet;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;&lt;br /&gt;import org.apache.axis.MessageContext;&lt;br /&gt;import org.apache.axis.transport.http.HTTPConstants;&lt;br /&gt;import org.springframework.web.context.WebApplicationContext;&lt;br /&gt;import org.springframework.web.context.support.WebApplicationContextUtils;&lt;br /&gt;&lt;br /&gt;public class AxisUtil&lt;br /&gt;{&lt;br /&gt;  /**&lt;br /&gt;   * This method read all possible certificate from request. If the apache&lt;br /&gt;   * passes certificate to tomcate in "SSL_CLIENT_CERT", this method will&lt;br /&gt;   * reads and create the certificate.&lt;br /&gt;   *&lt;br /&gt;   * @param request&lt;br /&gt;   * @return&lt;br /&gt;   */&lt;br /&gt;  public static X509Certificate getX509Certificate(HttpServletRequest request)&lt;br /&gt;  {&lt;br /&gt;      X509Certificate ret = null;&lt;br /&gt;      String certString = null;&lt;br /&gt;      Object obj = request&lt;br /&gt;              .getAttribute("javax.servlet.request.X509Certificate");&lt;br /&gt;      if (obj != null)&lt;br /&gt;      {&lt;br /&gt;          if (obj instanceof String)&lt;br /&gt;          {&lt;br /&gt;              certString = (String) obj;&lt;br /&gt;              ret = stringToX509(certString);&lt;br /&gt;          } else if (obj instanceof X509Certificate[])&lt;br /&gt;          {&lt;br /&gt;              if (((X509Certificate[]) obj) != null&lt;br /&gt;                      &amp;&amp;amp;amp;amp; ((X509Certificate[]) obj).length &gt; 0)&lt;br /&gt;                  ret = ((X509Certificate[]) obj)[0];&lt;br /&gt;          }&lt;br /&gt;      } else&lt;br /&gt;      {&lt;br /&gt;          certString = (String) request.getAttribute("SSL_CLIENT_CERT");&lt;br /&gt;          ret = stringToX509(certString);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      return ret;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * A string of a PEM format certificate as input, will return a&lt;br /&gt;   * X509Certificate.&lt;br /&gt;   *&lt;br /&gt;   * @param cert&lt;br /&gt;   * @return&lt;br /&gt;   */&lt;br /&gt;  public static X509Certificate stringToX509(String cert)&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;      CertificateFactory cf;&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;          cf = CertificateFactory.getInstance("X.509");&lt;br /&gt;&lt;br /&gt;          X509Certificate ret = null;&lt;br /&gt;          byte[] bytes = cert.getBytes();&lt;br /&gt;          ByteArrayInputStream bais = new ByteArrayInputStream(bytes);&lt;br /&gt;          ret = (X509Certificate) cf.generateCertificate(bais);&lt;br /&gt;          return ret;&lt;br /&gt;      } catch (CertificateException e)&lt;br /&gt;      {&lt;br /&gt;          e.printStackTrace();&lt;br /&gt;          return null;&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static Principal getUserPrincipal(MessageContext mctx)&lt;br /&gt;  {&lt;br /&gt;      HttpServletRequest req = (HttpServletRequest) mctx&lt;br /&gt;              .getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);&lt;br /&gt;      X509Certificate[] certificate = (X509Certificate[]) req&lt;br /&gt;              .getAttribute("javax.servlet.request.X509Certificate");&lt;br /&gt;      Principal principal = certificate[0].getSubjectDN();&lt;br /&gt;&lt;br /&gt;      return principal;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static WebApplicationContext getAppContext(MessageContext mctx)&lt;br /&gt;  {&lt;br /&gt;      HttpServlet servlet = (HttpServlet) mctx&lt;br /&gt;              .getProperty(HTTPConstants.MC_HTTP_SERVLET);&lt;br /&gt;&lt;br /&gt;      ServletContext servletContext = servlet.getServletContext();&lt;br /&gt;&lt;br /&gt;      WebApplicationContext webAppContext = WebApplicationContextUtils&lt;br /&gt;              .getRequiredWebApplicationContext(servletContext);&lt;br /&gt;      return webAppContext;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static String getUserDN(MessageContext mctx)&lt;br /&gt;  {&lt;br /&gt;      Principal principal = getUserPrincipal(mctx);&lt;br /&gt;      return principal.getName();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Here are some explanation.&lt;br /&gt;&lt;br /&gt;Apache was configured to pass the user certificate to tomcat. "javax.servlet.request.X509Certificate" and request attribute "SSL_CLIENT_CERT" will all be filled up with the proper certificate information.&lt;br /&gt;&lt;br /&gt;Some wrapping method was in there for my own convenient.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-8160791691922539770?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/8160791691922539770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=8160791691922539770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8160791691922539770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8160791691922539770'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2007/03/apache-modssl-tomcate-axis-https-user.html' title='Apache mod_ssl tomcate Axis https user authentication'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-7483369490665742730</id><published>2007-02-04T21:44:00.000-08:00</published><updated>2007-02-06T14:45:30.812-08:00</updated><title type='text'>Exposed Domain Object implemented with Spring Aspect Transaction Control + AspectJ</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OCV3rUj7LZA/RcbF94r56pI/AAAAAAAAAAY/Uew93x6Kx_0/s1600-h/UseCase+Diagram.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_OCV3rUj7LZA/RcbF94r56pI/AAAAAAAAAAY/Uew93x6Kx_0/s400/UseCase+Diagram.jpg" alt="" id="BLOGGER_PHOTO_ID_5027923700984965778" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OCV3rUj7LZA/RcjaQor56vI/AAAAAAAAABc/0FV9qMjYsc0/s1600-h/Class+Diagram.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_OCV3rUj7LZA/RcjaQor56vI/AAAAAAAAABc/0FV9qMjYsc0/s400/Class+Diagram.jpg" alt="" id="BLOGGER_PHOTO_ID_5028508963293489906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OCV3rUj7LZA/RcjaMYr56uI/AAAAAAAAABU/vAiycewBUVI/s1600-h/Sequence+Diagram0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_OCV3rUj7LZA/RcjaMYr56uI/AAAAAAAAABU/vAiycewBUVI/s400/Sequence+Diagram0.jpg" alt="" id="BLOGGER_PHOTO_ID_5028508890279045858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;"&gt;This application was designed and implemented as my first web app following the DDD principles. There are some interesting issues to solve. I had the domain models exposed to the presentation layer.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;No facade!??? Yeeeeaah, but not exactly.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;I did not see the similar design at other places yet. Which has no facade in front of domain models, no facade between presentation and business layers. I can imagine the reaction from people who are so used to facade. Spring+AspectJ allow you have this design. Using domain object that has the supporting DAO injected and letting "spring's annotation transaction aspect" handles the transaction. It can work.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;Although, using Spring+AspectJ can implement this design, it doesn't necessarily mean this design is good for all applications. An evaluation needs to be done.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Here are the pros and cons .&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Faster development. It accelerates the development. No Facade for the exposed domain model. When a domain object is a natural entry point of the business layer, it can serve as the facade, performing business process and returning the results. Within a group of domain models, there usually is one object that is the core. It plays a role to communicate with outside world. If you can find it, that object will be the entry. If you are the same type of person as I am, I don't like those delegating code, it probably has a interface in front of it too, so to write one method in the domain object, I need to change two interfaces, the facade interface and the domain object interface, then write two methods in each implementations of them. The one in the facade implementation is probably only one line. Looks close to: return user.findInboxEmails();&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No more value object. Some people call it DTO. The domain object is the VO/DTO in this design. Service and factory methods need only return the object as the VO interface.&lt;/li&gt;&lt;li&gt;Nicer Encapsulation. It is also an item in Cons. This is all depend on how you write the code. The business logic will be side by side with the states information of this object. On the contrary, in a traditional design, a facade will need to access domain objects' information one way or another.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Encapsulation. Again? Yes, same item in Pros. When working on the client side, in our case is the presentation layer, without a "careful" design, it is easy for the business logic to leak into the presentation layer. However, with a clear mind, after picking the right business layer entry point, create a good aggregation structure, this is totally avoidable. The entry domain object will play the facade role in this design. This is what I mean,  "not exactly without a facade".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tight Coupling. The changes with domain model can impact the presentation layer sometimes. Good way to deal with this problem is having a business interface for the exposed domain object. The Value Object interface and Business Interface for the domain model are used to reduce the potential errors that clients might make. That's why interface exists, doesn't it? &lt;/li&gt;&lt;li&gt;Performance. The fine grain style of communication between presentation layer and the domain object, can be an issue for some applications. &lt;/li&gt;&lt;li&gt;No Remote Access. There are ways when you really think about it, but so far there is not a easy answer for this. I might will look into write an Aspect for it. That means more coding. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;My feeling about DDD, it worth a try, if you are willing to get your mind exercised a  bit. Most DDD rejectors are probably used to what we were doing too much. Letting the Entities have their business knowledge is natural. The methods I have for my app look like: user.findEmail(emailId), user.moveEmailToFolder(email, folder). Compair to the popular way of using a service: userService.findEmail(user, emailId), emailService.moveEmailToFolder(user, email, forder). These methods are really state aware methods. To have them handled by a stateless service, extra information will have to be passed into the method as a parameter.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;This app uses Spring 2.0.2, Hibernate 3, AspectJ5, LTW, JSF, Facelets for its template and “jsfc”.&lt;br /&gt;&lt;p style="margin-bottom: 0cm;"&gt;AspectJ LTW looks for META-INF/aop.xml files. Here is the aop.xml file I used for configuring the @Configurable and transaction control. Not much details for why and how. I will write my notes inside the xml file from here.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;DOCTYPE&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;aspectj &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;PUBLIC &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 128);"&gt;"-//AspectJ//DTD//EN"&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;"http://www.eclipse.org/aspectj/dtd/aspectj.dtd"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;aspectj&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&amp;lt;!--&lt;br /&gt;Mentioned in my previous post, the CGLIB lazy initialized object need&lt;br /&gt;to be excluded from aspectj weaver lists. We have the Model/Entity&lt;br /&gt;take cared by the Load-Time Weaving --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;weaver &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;options&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;"-showWeaveInfo &lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;-XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;include &lt;span style="color: rgb(127, 0, 127);"&gt;within&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;"com.myapp.model..*"&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;exclude&lt;span style="color: rgb(127, 0, 127);"&gt; within&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;"com.myapp.model..*CGLIB*"&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;include &lt;span style="color: rgb(127, 0, 127);"&gt;within&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;"com.myapp.service..*"&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;weaver&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&amp;lt;!--&lt;br /&gt;You can remove the following aspects, If you trust the weaver. It is going to work without the following aspects tag, at least in theory.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;http://www.eclipse.org/aspectj/doc/released/faq.php#q:aspectj5ltw&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt; --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;aspects&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;include&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;within&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;include&lt;span style="color: rgb(127, 0, 127);"&gt; within&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;"org.springframework.transaction.aspectj.AnnotationTransactionAspect"&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;aspects&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;aspectj&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;That was all for AspectJ. Wasn't hard at all. Maybe I lied about this LTW thing. It isn't hard in some cases. To have LTW working, you need -javaagent:aspectjweaver.jar in your JVM command link. To have it in place can be tricky sometimes. Or impossible. It's not a solution for your project if this -javaagent: can't be used. It also give me a hard time on unit test, integration test. Other then that, Springframe provided the aspect for configure the domain object and LTW the transaction control around your business logic. Let's have a look at the spring application context xml file. I have them in one xml file so it's easy to be explained and understand. For your real world project, organize them in different files by functional or logical group, is a good practice.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;?&lt;/span&gt;xml&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(127, 0, 127);"&gt; version&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"1.0"&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt; encoding&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"UTF-8"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;beans&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(127, 0, 127);"&gt; xmlns&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"http://www.springframework.org/schema/beans"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(42, 0, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;xmlns:aop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"http://www.springframework.org/schema/aop"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(42, 0, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;xmlns:tx&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"http://www.springframework.org/schema/tx"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(42, 0, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;xsi:schemaLocation&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;http://www.springframework.org/schema/beans &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;http://www.springframework.org/schema/tx&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt; http://www.springframework.org/schema/tx/spring-tx-2.0.xsd &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;http://www.springframework.org/schema/aop&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt; http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;!-- Data Source --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"dataSource"  &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"org.springframework.jdbc.datasource.DriverManagerDataSource"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&amp;lt;!--&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;Maven will filter out these parameters. This is a trick Yuan Ji suggested. What a genius! Maven is used for this app for building, distributing, continuous testing and a bunch other stuff. To let Maven produce the product, in my case a war file, for different env, using filter files is the nature solution. However, developers are using Eclipse, compiling, running, and debugging, working with a template file is not that convenient. Every time the developer changed the template files, maven command has to be fired to generate the working copy for local env. Developers would like to work with the original file, without running the maven command, "mvn web:inplace" to generate the runtime copy. Then refresh project in Eclipse after every generating process.   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;Yuan suggested to use the PropertyPlaceholderConfigurer. Config one configurer, does the filter property replacing at dev run time, and when the Maven build process take place, the parameter will be replaced with the real values come from different maven filter files. You can have filter-dev.properties, filter-sys.properties files and so on. This way, even the spring property configurer is in the context.xml file, it will has no property to replace.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;This trick has only one drawback, the filter-local.properties file will be in your final product, unless you play another trick to get the following spring &amp;lt;bean&amp;gt; configure removed during your packaging process.    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;"propertyConfigurer"&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"locations"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;list&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;classpath*:filters/filter-local.properties&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;list&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt; --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"driverClassName" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"${hibernate.connection.driver_class}"  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"url" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"${hibernate.connection.url}" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"username" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"${hibernate.connection.username}" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"password" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"${hibernate.connection.password}" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;!-- Hibernate SessionFactory --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"sessionFactory" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"org.springframework.orm.hibernate3.LocalSessionFactoryBean"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"dataSource" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"dataSource" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"mappingResources"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&amp;lt;!--&lt;br /&gt;Did not use JPA annotation here. I hope you know what to do. --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;list&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;com/myapp/model/Role.hbm.xml&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;com/myapp/model/User.hbm.xml&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;com/myapp/model/Email.hbm.xml&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;com/myapp/model/Folder.hbm.xml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;list&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"hibernateProperties"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;props&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;prop &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;key&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"hibernate.dialect"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;org.hibernate.dialect.MySQLInnoDBDialect&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;prop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;prop&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt; key&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"hibernate.query.substitutions"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;true 'Y', false 'N' &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;prop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;prop &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;key&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"hibernate.show_sql"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;prop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;prop &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;key&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"hibernate.connection.autocommit"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;false&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;prop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;props&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;!-- Transaction manager, used by --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"transactionManager" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"org.springframework.orm.hibernate3.HibernateTransactionManager"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"sessionFactory" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"sessionFactory" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;!-- Datastore bean for persistence --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"com.myapp.dao.hibernate.DatastoreHibernate"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"sessionFactory" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"sessionFactory" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;!-- Transaction controlled service/factory --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"userManager" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"com.myapp.service.impl.UserManagerImpl"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"emailManager" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"com.myapp.service.impl.EmailManagerImpl"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt; &amp;lt;!-- *************************************************&lt;br /&gt;Remember the AnnotationTransactionAspect in aop.xml file. It does the transaction control. The AspectJ runtime itself is responsible for aspect creation, and the means of configuring the AspectJ created aspects via Spring depends on the AspectJ instantiation model (per-clause) used by the aspect. The majority of AspectJ aspects are singleton aspects. Configuration of these aspects is very easy, simply create a bean definition referencing the aspect type as normal, and include the bean attribute 'factory-method="aspectOf"'. This ensures that Spring obtains the aspect instance by asking AspectJ for it rather than trying to create an instance itself.     &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;bean &lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"org.springframework.transaction.aspectj.AnnotationTransactionAspect" &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;factory-method&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"aspectOf"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;property &lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;"transactionManager" &lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;"transactionManager" &lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt; &amp;lt;!--&lt;br /&gt;To let AspectJ dependency inject domain objects with Spring context configurations, We need @Configurable on the java class. We also need to define and configure the Entity/Model class in the "prototype" scope. Spring will do the rest work for us. Bean factory will do some magic that I did not know much yet.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;Remember the AnnotationBeanConfigurerAspect in aop.xml file. Itself needs configuring by Spring (in order to obtain a reference to the bean factory that is to be used to configure new objects). That's why aop:spring-configured is here.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;Instances  of EmailEntity, UserEntity, and FolderEntity are going to be injected with datastore, emailManager, etc. at runtime. "New" and Hibernate queries will create these instances, with AspectJ, spring can have these domain objects equiped with all the services and database support.   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;--&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;aop:spring-configured &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;/&amp;gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"com.myapp.model.EmailEntity" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;scope&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"prototype"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"emailManager" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"emailManager" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"mailEngine" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"mailEngine" &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"com.myapp.model.UserEntity" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;scope&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"prototype"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;" align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"com.myapp.model.FolderEntity" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;scope&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"prototype"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;ref&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;"datastore" &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(63, 127, 127);"&gt;beans&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;"&gt;Properly created aggregation structure is the key of this design. In my example, the FolderEntity is not going to be exposed as an Entity/Model to the client. I only need a value object interface to be returned by userEntity.findFolderById(). I didn't see the needs of expose EmailEntity as a business object yet. When the domain models reach to the complication point, it can be done.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;These UML diagrams is a very high level overview. Suggestions and all opinions are welcomed.&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;One more word, you probably don't really want to have a findInboxMails() exposed to the presentation. It's not safe in speaking of the performance and memory consuming. Have a method let user define a range or a page size for the returned email list.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-7483369490665742730?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/7483369490665742730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=7483369490665742730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/7483369490665742730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/7483369490665742730'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2007/02/spring-aspectj-domain-object-injection.html' title='Exposed Domain Object implemented with Spring Aspect Transaction Control + AspectJ'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OCV3rUj7LZA/RcbF94r56pI/AAAAAAAAAAY/Uew93x6Kx_0/s72-c/UseCase+Diagram.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-7789499400371305540</id><published>2007-02-02T14:38:00.000-08:00</published><updated>2007-02-06T14:45:30.650-08:00</updated><title type='text'>New Stuffs Making Me Feel the Passion Again</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Facelets&lt;/span&gt;&lt;br /&gt;Before knowing this, I can hardly think of a reason to use JSF. There are many benefits from using Facelets with your JSF app. I like the most is the "jsfc" attribute. What it does is converting xml element to another at runtime. With this feature, JSF can finally be "designer friendly". Although I haven't find a way to get the facelets template also friendly to html designers. It's hundred miles better than using bare JSF.&lt;br /&gt;&lt;pre&gt;From:&lt;br /&gt;&amp;lt;input type="text" jsfc="h:inputText" value="#{hello.world}" /&amp;gt;&lt;br /&gt;to:&lt;br /&gt;&amp;lt;h:inputText value="#{hello.world}" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://www.jsfcentral.com/facelets/"&gt;Inside Facelets&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www-128.ibm.com/developerworks/java/library/j-facelets/"&gt;Facelets fits JSF like a glove&lt;/a&gt;&lt;br /&gt;&lt;a href="https://facelets.dev.java.net/nonav/docs/dev/docbook.html"&gt;Developer Doc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TestNG&lt;/span&gt;&lt;br /&gt;I like its annotation, data provider, dependent methods, and some other flexible features.&lt;br /&gt;&lt;a href="http://testng.org/doc/documentation-main.html"&gt;TestNG Doc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EasyMock&lt;/span&gt;&lt;br /&gt;Doesn't matter you are a classical or mockist styles of Test Driven Developer, you will find EasyMock is a good tool in your pocket.&lt;br /&gt;&lt;a href="http://www.martinfowler.com/articles/mocksArentStubs.html"&gt;Mocks Aren't Stubs&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.easymock.org/EasyMock2_2_Documentation.html"&gt;EasyMock Doc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Shale&lt;/span&gt;&lt;br /&gt;Ever wondered how to Unit Test your Backing-bean of JSF? Here you go, &lt;a href="http://www.thearcmind.com/confluence/display/SHJFT/TestNG,+JMock+and+Spring+integration+tests"&gt;check this article out&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://shale.apache.org/shale-test/index.html"&gt;Shale test home&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Maven&lt;/span&gt;&lt;br /&gt;At last, but without it the development will be lot tougher. I use it run all my tests, UT, IT, Smoke Test. Developers are doing TestNG suite xml files inside Eclipse. Which provides the nice GUI. Maven links all these stuff together, checkout code from repository, compile, test, report, depoly. Continuum is the one I use for continuous building.&lt;br /&gt;&lt;a href="http://docs.codehaus.org/display/MAVENUSER/introduction-to-the-lifecycle"&gt;Maven Life Cycle Introduction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mirrors.ibiblio.org/pub/mirrors/maven2/"&gt;I try to find stuff in ibiblio repository&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The list will go on and on. I haven't put Spring, AspectJ, JPA(I use Hibernate3) on this post yet.&lt;br /&gt;&lt;br /&gt;Geeeee, arn't they too much for todays Java develpers. From my experienced development or projects, most of development teams are cross-functional type of development. Each developer has the relatively same level of knowledge. Look at the list above, things are getting a little bit out of control, aren't they? It means the technique lead of the team must know them all, that's reasonable, since you are the lead. You are the one who put all this together. You must have all this knowledge, if you don't, go get educated. To all the rest, if you are going to ask everyone know all of this, that's not impossible, but you must have a lot of money, otherwise how can you hire that many senior resources. 8-]&lt;br /&gt;&lt;br /&gt;It's more realistic to have some people working on different layers. Write their Unit Test code. Mind their own business. From them, some will eventually have a big picture of the application's architecture design.  They are the super stars in the future.&lt;br /&gt;&lt;br /&gt;Are you one of them? If you are reading, I can tell that you are!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-7789499400371305540?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/7789499400371305540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=7789499400371305540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/7789499400371305540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/7789499400371305540'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2007/02/new-stuffs-making-me-feel-passion-again.html' title='New Stuffs Making Me Feel the Passion Again'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-2939874908190794934</id><published>2007-01-30T21:20:00.000-08:00</published><updated>2007-02-01T18:29:50.084-08:00</updated><title type='text'>Domain Driven Design</title><content type='html'>What I can say, still a new new thing to do if you are working with a serious project, think it twice. It had given me some interesting challenge. Spring, aspectj, and Hibernate, the domain object are injected with the repository. Some how, domain driven design made me think that Eric Even's "Entity" are similar to EJB's "Entity" bean. They are all heavy objects. They all hide the details about the database operations. They all need this factory and service to complete the life cycle. Let me know if I am wrong about this. &lt;br /&gt;&lt;br /&gt;This is about a subtle problem during my development of a project. It related to hibernate lazy initialization. When the domain object loaded with hibernate configured lazy="true", and spring + run time aspectjweaver was trying to inject in the data store, I had this "CGLIB Enhancement failed [classname]" failure from hibernate. . Took me an hour to find out what really happened. Had no clue at first. Then there is no other choice other than hopping into the source code. What I found is that the hibernate is returning a cglib class instead of a real domain object, so when spring is doing the setDataStore as the aspectj aop.xml file instructed to, it fail:&lt;br /&gt;.. nested exception is org.springframework.beans.PropertyBatchUpdateException;&lt;br /&gt;&lt;br /&gt;To get arround of this, exclude the CGLIB classes.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;aspectj&amp;gt;&lt;br /&gt; &amp;lt;weaver options=&amp;quot;-showWeaveInfo&lt;br /&gt;-XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;include&lt;br /&gt;within=&amp;quot;com.my.model..*&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;exclude&lt;br /&gt;within=&amp;quot;com.my.model..*CGLIB*&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;/exclude&amp;gt;&lt;br /&gt; &amp;lt;aspects&amp;gt;&lt;br /&gt;   &amp;lt;include&lt;br /&gt;within=&amp;quot;org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;/include&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;/aspects&amp;gt;&lt;br /&gt;&amp;lt;/include&amp;gt;&lt;br /&gt;&amp;lt;/weaver&amp;gt;&lt;br /&gt;&amp;lt;/aspectj&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-2939874908190794934?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/2939874908190794934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=2939874908190794934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2939874908190794934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2939874908190794934'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2007/01/domain-drive-almost-nuts.html' title='Domain Driven Design'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-2238291938558975481</id><published>2007-01-22T22:14:00.000-08:00</published><updated>2007-02-01T11:34:32.258-08:00</updated><title type='text'>Blizzard</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_OCV3rUj7LZA/RbWpLIr56oI/AAAAAAAAAAM/S6V5BOmTwNo/s1600-h/IMAGE_00098.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_OCV3rUj7LZA/RbWpLIr56oI/AAAAAAAAAAM/S6V5BOmTwNo/s400/IMAGE_00098.jpg" alt="" id="BLOGGER_PHOTO_ID_5023106968176945794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here was what Edmonton just had on Jan 10, 2007.&lt;br /&gt;&lt;br /&gt;I was looking at Maven2 and am very convinced by its power.  To have a project going, maven 2 can save you a lot of time on those small things. Testing report, build, dependency jar files and more. The Continuous Integration tool I used is continuum. A very nice tool, it works with Maven nicely.&lt;br /&gt;&lt;br /&gt;Another thing that is worth to mention is that JSF is not that bad after all. I spent a little time on JSF and found it's not hard to pick-up. It is going to win a bigger market share soon. Because it's "standard". A lot people will buy it just because of that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-2238291938558975481?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/2238291938558975481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=2238291938558975481' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2238291938558975481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2238291938558975481'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2007/01/blizzard.html' title='Blizzard'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_OCV3rUj7LZA/RbWpLIr56oI/AAAAAAAAAAM/S6V5BOmTwNo/s72-c/IMAGE_00098.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-6808712232826165244</id><published>2006-12-18T12:55:00.000-08:00</published><updated>2006-12-18T13:10:47.409-08:00</updated><title type='text'>JDK 6</title><content type='html'>JDK 6? I felt 5 was just out for not long, wait a minute, it has been out more then a year ago. Am I too old!? Do you guys have to same feeling? Java grows like crazy.&lt;br /&gt;&lt;br /&gt;Had a look at JDK 6, I love it. You can feel it's faster, some say it's two digits performance improvement. The script engine is a brilliant idea! I was thinking that JCP was only stealing ideas from open source projects. Of cause there are lots other improvements. Such as the new debugger. Looking forward to use that function soon.&lt;br /&gt;&lt;br /&gt;It made me exited and proud to be in Java field. Give me some challenges.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-6808712232826165244?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/6808712232826165244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=6808712232826165244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/6808712232826165244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/6808712232826165244'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/12/jdk-6.html' title='JDK 6'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-2681336044521293823</id><published>2006-11-05T21:24:00.000-08:00</published><updated>2006-11-14T16:58:21.669-08:00</updated><title type='text'>Scripting</title><content type='html'>Have been thinking about learning a powerful script language for a while. I am not bad on Bash. Bash probably is the most guaranteed tool when you need a scripting language. You can find it on every machine these days. It definitly worth to spend sometime if you use *nix.&lt;br /&gt;&lt;br /&gt;Last night, I felt that I have to do something about my scripting skills. Walked up to my computer, did a quick search on google, before long, I found I need to choose one from Python and Ruby. Did 30 minutes reading, among these two languages, I decided I will learn Ruby. Why, here are the reasons.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I live in Java world. Python use "indent" to mark the boundary, made me feel unsecure.&lt;/li&gt;&lt;li&gt;I do web applications. Ruby on Rails is another attraction that Ruby have on me.&lt;/li&gt;&lt;li&gt;Ruby's Completely OO. I am curious about what Ruby's OO looks like.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;IMO, to learn which one probably doesn't really matter. Ruby just happened fit in my knowledge base better.&lt;br /&gt;&lt;br /&gt;===============================================&lt;br /&gt;After about two weeks learning, tried Ruby on Rails. I have to say it's impressive. The language is not bad. However, I feel the amount I know about it is good for now. Ruby and Rails are good for some certain type of applications. People who love Ruby and Rails might will try to push Ruby and Rails to its limit. But if I am asked to implement the web site I am working on again, I will still choose Java.&lt;br /&gt;&lt;br /&gt;Anyway, I am back to my comfort Java corner again. When I was on my bus, I was reading about the Spring 2. Feel I appreciate the Spring AOP. I believe, to most Aspect issues, Spring AOP is a quick answer. It's not a comprehensive AOP impl, however, without introducing AspectJ into a project and it allows you enjoy Aspect programming. This is more impotent for those Java 1.4- versions users, Spring AOP is a good choice to Aspect issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-2681336044521293823?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/2681336044521293823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=2681336044521293823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2681336044521293823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/2681336044521293823'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/11/scripting.html' title='Scripting'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-1379786526003994595</id><published>2006-11-01T20:29:00.000-08:00</published><updated>2006-11-07T09:17:01.709-08:00</updated><title type='text'>Spring framework, Hibernate and MySQL Replication</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/2944/1922/1600/IMAGE_00059.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Laterly we have our site grown to the stage that a single mysql server will not able to do the job anymore. That's something we realy like to see. The CPU usage had reached more then 90% at peak traffic time. MySQL even crashed a couple time when we were running an early version. 5.0.x. Don't remember what it was exactly. But when we upgrade to 5.0.24, it stopped crashing. It was also unacceptablely slow under the heavy loads. We need some heavy duty database solution.&lt;br /&gt;&lt;br /&gt;I have read a couple articals about mysql cluster. So my first thought is cluster. But when we ask our hosting company to set up a MySQL cluster, they suggested replication instead. Sometimes you just could not judge things by their name. Have run into the word "replication" a couple times in the mysql ref book. I miss judged the replication function. My sql does not like some other databases, this replication is real-time replication.&lt;br /&gt;&lt;br /&gt;To set up a master/slave replication system up is really a straight forward thing to do. I installed FC6 on my desktop. Enjoyed the new tool FC6 provided for xen vertiual machine. As others said, it's like using VMWare. A big improvement from FC5. Followed the mysql reference book, made it work after a couple tries. Xen is such a good thing to have. Doesn't have to be big, Xen is a perfect fit for this low cost testing environment.&lt;br /&gt;&lt;br /&gt;So far, we had the database ready for testing. We had one more thing now quite figured out by the time. How does the app use this master/slave system. With the question, did a little search on google. Found the ReplicationDriver that is provided by MySQL Connecter/J is what we need.&lt;br /&gt;&lt;br /&gt;Our application is a Sping+Hibernate J2ee web application. App is doing declarative transaction by using "org.springframework.transaction.interceptor.TransactionProxyFactoryBean". The connection pool we used is Apache DBCP. Rock solid connection pool. I like to have all things controlled and configured in one place. So had the driver changed in our sping applicationContext config, Ant build, deploy, and start my local environment. Everything was fine. I had my both mysql instances general logging on. Look at the log files, everything was what we expected. Reads and searchs were on slave. Updates were on master. We had a little concern about Spring. The mysql ref book's sample code explained the setReadOnly(). We were not sure what Spring is doing. Once we saw it's working. We had no more concerns.&lt;br /&gt;&lt;br /&gt;The second day, it only took me a couple minutes to have the replication set up. The firewall gave us a small supprise. Did not take long to relise the port is not open. Had the app configuration change to the new master/slave servers. Restart our app, master mysql's cpu drop to 10%. Slaves are about 20%.&lt;br /&gt;&lt;br /&gt;Although it's working, we had to do a trick for a small problem. Our connection pool seems only use the first slave server. So I fooled the app by giving it different ips for the same hostname. A group of our app servers are using one slave server, the other group is using the second. The ReplicationDriver is probably picking the first slave by default. Because it was said, the slave connection is sticky. It probably will not use other slaves unlease something bad happen. I am going to check it out when I have a chance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-1379786526003994595?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/1379786526003994595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=1379786526003994595' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/1379786526003994595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/1379786526003994595'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/11/spring-hibernate-and-mysql-replication.html' title='Spring framework, Hibernate and MySQL Replication'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-1673767097176019072</id><published>2006-10-29T15:35:00.000-08:00</published><updated>2006-10-29T16:58:57.709-08:00</updated><title type='text'>FC6 LiVES amr_nb amr_wb audio</title><content type='html'>I was trying to connect a couple video clips from my daughter's Halloween party. My home computer has Fedora Core 6 Linux. The video editing tool is &lt;a href="http://lives.sourceforge.net/"&gt;LiVES&lt;/a&gt;. Under the hood, it's using mplayer to load my videos. But with my installed mplayer options, the amr_nb audio wasn't enabled. It's time for source code digging. Into the libavcodec directory of mplayer, noticed the amr.c file, it says:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;    This code implements amr-nb and amr-wb audio encoder/decoder through external reference&lt;br /&gt;code from www.3gpp.org. The licence of the code from 3gpp is unclear so you&lt;br /&gt;have to download the code separately. Two versions exists: One fixed-point&lt;br /&gt;and one with floats. For some reason the float-encoder is significant faster&lt;br /&gt;atleast on a P4 1.5GHz (0.9s instead of 9.9s on a 30s audio clip at MR102).&lt;br /&gt;Both float and fixed point is supported for amr-nb, but only float for&lt;br /&gt;amr-wb.&lt;br /&gt;&lt;br /&gt;--AMR-NB--&lt;br /&gt;The fixed-point (TS26.073) can be downloaded from:&lt;br /&gt;http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip&lt;br /&gt;Extract the soure into ffmpeg/libavcodec/amr&lt;br /&gt;To use the fixed version run "./configure" with "--enable-amr_nb-fixed"&lt;br /&gt;&lt;br /&gt;The float version (default) can be downloaded from:&lt;br /&gt;http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip&lt;br /&gt;Extract the soure into ffmpeg/libavcodec/amr_float&lt;br /&gt;&lt;br /&gt;The specification for amr-nb can be found in TS 26.071&lt;br /&gt;(http://www.3gpp.org/ftp/Specs/html-info/26071.htm) and some other&lt;br /&gt;info at http://www.3gpp.org/ftp/Specs/html-info/26-series.htm&lt;br /&gt;&lt;br /&gt;--AMR-WB--&lt;br /&gt;The reference code can be downloaded from:&lt;br /&gt;http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip&lt;br /&gt;It should be extracted to "libavcodec/amrwb_float". Enable it with&lt;br /&gt;"--enable-amr_wb".&lt;br /&gt;&lt;br /&gt;The specification for amr-wb can be downloaded&lt;br /&gt;from:http://www.3gpp.org/ftp/Specs/archive/26_series/26.171/26171-500.zip&lt;br /&gt;&lt;br /&gt;If someone want to use the fixed point version it can be downloaded&lt;br /&gt;from: http://www.3gpp.org/ftp/Specs/archive/26_series/26.173/26173-571.zip&lt;/code&gt;&lt;/pre&gt;I downloaded the float version nb and wb source code by using following wget command:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip&lt;br /&gt;#wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip&lt;/code&gt;&lt;/pre&gt;Extracted nb to libavcodec/amr_float, wb to libavcodec/amrwb_float. After that, run ./configure under mplayer directory again. Should be able to see the following lines in config.mak file:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;CONFIG_AMR=yes&lt;br /&gt;CONFIG_AMR_NB=yes&lt;br /&gt;CONFIG_AMR_NB_FIXED=no&lt;br /&gt;CONFIG_AMR_WB=yes&lt;/code&gt;&lt;/pre&gt;Make clean and make install the mplayer again. You can find more information in my other post about mencoder. After all of these typing done, I have my video clips loaded into LiVES again, audio worked. Cut/Pasted them together and export them to a new file. Noticed it's a little too big for just one minutes video. It was encoded using mjpeg, manually converted it to mpeg4:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#mencoder cindy-halloween-2006.mp4 -o cindy-halloween-2006.mpeg -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The size of it dropped a little. Not as small as I expected. I will play with it later. It's time to do my grocery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-1673767097176019072?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/1673767097176019072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=1673767097176019072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/1673767097176019072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/1673767097176019072'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/10/amrnb-amrwb-audio.html' title='FC6 LiVES amr_nb amr_wb audio'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-8049853334056622861</id><published>2006-10-28T08:24:00.000-07:00</published><updated>2006-11-01T22:27:25.818-08:00</updated><title type='text'>Fedora core 6 update</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/2944/1922/1600/IMAGE_00038.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger2/2944/1922/320/IMAGE_00038.jpg" alt="" border="0" /&gt;&lt;/a&gt;First snow of 2006 Edmonton.&lt;br /&gt;&lt;br /&gt;Noticed that the Fedora 6 was out when I had the "baseurl" yum error. So I just could not stop myself from downloading a copy. Started Bittorrent and run out for a whole day. After my daughter's halloween party, the dvd iso downloading is complete. Did not stop the seeding until I have the DVD burned. That was about 11:00pm. Try to give something back instead only taking. That's what p2p about.&lt;br /&gt;&lt;br /&gt;I did not use yum to upgrade my home machine from 5 to 6, because when I tried yum, it met some dependency issues. I also don't have time to figure it out. My wife is always checking our financial status on this machine. There are some instructions about using yum to upgrade from other FC to FC5. Haven't seen one talking about 5 to 6 yet.&lt;br /&gt;&lt;br /&gt;Had the machine booted from the new dvd. Selected "upgrade" instead of install a new system. Then it's the waiting game. I went to bed to catch some sleep. All my family had not enough sleep for a week. That's another story. The next day, I woke up and the machine had the cd tray open, waiting for the reboot. When it was up and running, nothing went wrong.&lt;br /&gt;&lt;br /&gt;One thing I noticed right away is that the transperent effect of the top and bottom bars are better. It used to be not complete, part of it is transperent, part is not. Looks like a half done job. In FC6, it's one piece of transparent manu bar. Happily clicked around for a couple minutes, nothing really bothered me. Glad to see GAIM worked again. My FC5 GAIM broke down a couple days ago. It was around the time I switched to "windows live", a new version of MSN.  The aMSN was helping me out for those days without GAIM.&lt;br /&gt;&lt;br /&gt;After that, I was debating with myself, should I try the AIGLX or not. I had my video card fan unplugged last week, it's making too much noise. Tried FutureShop for a new fan, they don't have fans for video card in store. So I just unplugged the fan, I don't have heavy graphic stuff for it to work on anyways. But before I know AIGLX better, I should stop here. But definitely I could not.&lt;br /&gt;&lt;br /&gt;I educated myself a little at &lt;a href="http://www.freesoftwaremagazine.com/node/1797"&gt;Mitch Meyran's blog&lt;/a&gt; It is a good place to go. My home machine has an ATI Radeon 9200SE. Followed &lt;a href="http://fedoraproject.org/wiki/RenderingProject/aiglx#head-f27a8da1e10954cd54b433490e1c30764e445835"&gt;this one line instruction&lt;/a&gt;. Turned on the effects, saw it, nice! However my windows lost their title and borders, all decorators were gone. Not good.&lt;br /&gt;&lt;br /&gt;(Please feel free to skip all these following steps, cause I screwed up my home machine eventurally. Jump to the end of this post, I have it figured out there.)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Warning! Please don't follow these steps, I had my machine reinstalled after all. &lt;/span&gt;I have my home on its own partation, there was no dimage. Here is what I did to get me into reinstallation.&lt;br /&gt;&lt;br /&gt;I disabled the Desktop Effects. Started reading again. Found that Lunapark6 has a good FC6 review, it have a good step to follow to set up the nVidia card. So I just replace the nvidia with "fglrx".&lt;br /&gt;&lt;pre&gt;&lt;code&gt;rpm -ivh http://rpm.livna.org/livna-release-6.rpm&lt;/code&gt;&lt;/pre&gt;That installs the livna repo for yum. Probably did some other tricks, but it's going to let you use livna's drivers. Since my FC6 drivers did not work. It worth a try.&lt;pre&gt;&lt;code&gt;yum install kmod-fglrx&lt;/code&gt;&lt;/pre&gt; But I run into this problem:Transaction Check Error:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;package kernel-2.6.18-1.2798.fc6 is already installed&lt;br /&gt;file /boot/System.map-2.6.18-1.2798.fc6 from install of kernel-2.6.18-1.2798.fc6&lt;br /&gt;conflicts with file from package kernel-2.6.18-1.2798.fc6&lt;/code&gt;&lt;/pre&gt;Run yum list all|grep kernel, found out that instead of kernel.i686 my machine had kernel.i586 installed.  As Luna6 said, FC guys probably got them massed up. So I tried his/her way to get arround, no luck.  Then I removed kernel package. After that my hands are sweaty.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;!!! Before you do this, back up your /boot/grub/grub.conf file. Cause I have to use my&lt;br /&gt;!!! rescue dvd, manually add the grub menu item back. Below is what I added after the shock.&lt;br /&gt;!!! I am sure it's not what it used to be.&lt;br /&gt;title fedora core 6&lt;br /&gt; kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/hdc1&lt;br /&gt; initrd /boot/initrd-2.6.18-1.2798.fc6.img&lt;br /&gt;!!!----Here are the commands--------------&lt;br /&gt;# yum remove kernel&lt;br /&gt;Removing:&lt;br /&gt;kernel                  i586       2.6.18-1.2798.fc6  installed          43 M&lt;br /&gt;Removing for dependencies:&lt;br /&gt;compiz                  i386       0.0.13-0.32.20060817git.fc6  installed         1.9 M&lt;br /&gt;fuse                    i386       2.5.3-4.fc6      installed         145 k&lt;br /&gt;gnome-session           i386       2.16.0-3.fc6     installed         1.3 M&lt;br /&gt;gnome-volume-manager    i386       2.15.0-2.fc6     installed         1.9 M&lt;br /&gt;ntfs-3g                 i386       1:0-0.4.20070920.fc6  installed         285 k&lt;br /&gt;pcmciautils             i386       014-5            installed          57 k&lt;br /&gt;systemtap               i386       0.5.9-1.fc6      installed         1.3 M&lt;br /&gt;# yum install kernel.i686&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Then run the yum install kmod-fglrx again. Everything is okay. -_-b&lt;br /&gt;Next thing, I am going to do is get all the removed stuff back!&lt;br /&gt;&lt;pre&gt;&lt;code&gt;yum install compiz fuse gnome-session gnome-volume-manager ntfs-3g pcmciautils systemtap&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;With my finger crossed. They were all reinstalled. It's time to enable the desktop effects again. Did not work still. 8-[&lt;br /&gt;&lt;br /&gt;If you have an idea, please let me know. I will update this soon.&lt;br /&gt;================================================&lt;br /&gt;I am back and updating this post again. I had this compiz window manager worked at work. It is really exciting to see the cube looking desktops flipping back and force. Menus and windows like jellow. My 8 years old daughter was hopping up and down when she saw this. OK, let me get to the point. What caused my home machine did not have the effects working is my old home directory. I should not have this trouble at all if I did not used my old home directory. It had something screwed the compiz somehow. It served a couple different Linux distributions, without talking about differnt versions of them. I created a clean user home directory for myself, start x session again, turn on the desktop effects, ta-da, everything worked.&lt;br /&gt;&lt;br /&gt;It should be a really straight forward process to have this eye candy going. Install compiz, go to menu System/Preferences/Desktop Effects, click at the button. It should be this simple.&lt;br /&gt;&lt;br /&gt;Fedora Core 6 is a great release!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-8049853334056622861?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/8049853334056622861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=8049853334056622861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8049853334056622861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/8049853334056622861'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/10/fedora-core-6-update.html' title='Fedora core 6 update'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-116197298545128450</id><published>2006-10-27T11:00:00.000-07:00</published><updated>2006-11-01T22:12:07.787-08:00</updated><title type='text'>UTstarcom</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.flickr.com/89/280732625_357e5882cc.jpg?v=0"&gt;&lt;img style="cursor: pointer; width: 320px;" src="http://static.flickr.com/89/280732625_357e5882cc.jpg?v=0" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a photo I took a couple days ago using an UTstartcom pocket PC.&lt;br /&gt;&lt;br /&gt;Finally I had a Pocket PC. UTstarcom, 3 years contract with Telus. I have played with it for two weeks now. Nice device. Runs Microsoft Windows Mobile 5.0. OS dead twice. Had it resetted once. I guess it's what MS famouse about.&lt;br /&gt;&lt;br /&gt;I like it very much.&lt;br /&gt;&lt;br /&gt;Tried wireless network, worked perfectly. So I can surf the Internet while I am on the toilet.&lt;br /&gt;&lt;br /&gt;Downloaded &lt;a href="http://www.ebswift.com/PocketPC/WordNet/"&gt;WordNet CE&lt;/a&gt; version. It's a free dictionary. It works, only crushes from time to time. Didn't bother to buy a dictionary.&lt;br /&gt;&lt;br /&gt;Downloaded &lt;a href="http://www.pocketputty.net/"&gt;PocketPutty&lt;/a&gt;, the cvs nightly build version. Worked very well. Only thing I don't like is that it doesn't work with ssh port higher then 9999.  I am really excited about being able to connect to my machines from anywhere at any moment. Although I doublt that I will use it for a real situations.&lt;br /&gt;&lt;br /&gt;I had this photo taken a couple minutes ago. I am going to have it on my profile. 8-]&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/2944/1922/1600/me.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger2/2944/1922/320/me.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-116197298545128450?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/116197298545128450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=116197298545128450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/116197298545128450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/116197298545128450'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/10/something-about-me.html' title='UTstarcom'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-116196693792559940</id><published>2006-10-27T09:15:00.000-07:00</published><updated>2006-10-29T21:06:48.245-08:00</updated><title type='text'>Mplayer mencoder converting videos to flv files</title><content type='html'>The website I worked on is a casual game and video type website. Lately I have got a chance to revisit the back end media conversion engine we built half year ago. Instead of using ffmpeg, this time I used mplayer project to do the trick.&lt;br /&gt;&lt;br /&gt;I like mencode better. FFmpeg is good, does everything, except did not give me enough options, switches to adjust. I did not find a middle way to have the quality and the size of the flv meet our needs.&lt;br /&gt;&lt;br /&gt;In our environment, I have faac, faad2, lame installed. Faac and faad2 are a little trouble-some. I downloaded their release first, the source code just would not compile. So I tried their cvs version. It worked perfectly. I think I was too cautious.&lt;br /&gt;&lt;br /&gt;Here is the mencode command I used:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#mencoder $1 -o $2 -ofps 15 -of lavf \&lt;br /&gt;         -oac mp3lame -lameopts abr:br=64 -srate 22050 -ovc lavc \&lt;br /&gt;         -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames \&lt;br /&gt;         -lavcopts vcodec=flv:keyint=25:vbitrate=300:mbd=2:mv0\&lt;br /&gt;         :trell:v4mv:cbp:last_pred=3 \&lt;br /&gt;         -vf harddup,expand=:::::4/3,scale=320:240 \&lt;br /&gt;         -msglevel all=4 -mc 0/10&lt;/code&gt;&lt;/pre&gt;Those options are all doing something for us.&lt;br /&gt;&lt;br /&gt;I had some result video sound out of sync problem first. The filter: harddup solved that problem. Then another file had sound out of sync half second, so I put the -mc 0/10. That's solved.&lt;br /&gt;&lt;br /&gt;I had the video aspect sets to 4/3, then scaled to 320:240, that's what the -vf filters about. It's going to add black borders to the top/bottom or left/right accordingly.&lt;br /&gt;&lt;br /&gt;The -lavcopts options are the longest and too much to explain. Try to find explanation from mplayer's website. &lt;a href="http://www.mplayerhq.hu/design7/news.html"&gt;mplayer site&lt;/a&gt; These options are switchs for qualities, frame rate and some other stuff. Spend some time on mplayer's document, and make your choices. It worths.&lt;br /&gt;&lt;br /&gt;I was really worried about the gcc version of our website. It was between 3.1 and 3.2, the gcc version not recommended by the mplayer guys. Suppressingly, everything was fine.&lt;br /&gt;&lt;br /&gt;Here is more detailed installations.&lt;br /&gt;I had Lame 3.97. Downloaded from &lt;a href="http://prdownloads.sourceforge.net/lame/"&gt;http://prdownloads.sourceforge.net/lame/&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#tar -zxvf lame-3.97.tar.gz&lt;br /&gt;#cd lame&lt;br /&gt;#./configure&lt;br /&gt;#make&lt;br /&gt;#su -c "make install"&lt;/code&gt;&lt;/pre&gt;Then had faac and faad2 downloaded from &lt;a href="http://www.audiocoding.com/modules/mydownloads/"&gt;AudioCoding.com&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#tar -zxvf faac-18102004.tar.gz&lt;br /&gt;#cd faac&lt;br /&gt;#chmod a+x bootstrap&lt;br /&gt;#./bootstrap&lt;br /&gt;#./configure&lt;br /&gt;#make &amp;&amp;amp; su -c "make install"&lt;/code&gt;&lt;/pre&gt;Faac installation should be trouble free. But I had to change a couple faad2 .h and .c files. The errors are:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;mp4ff_int_types.h:23:7: warning: no newline at end of file&lt;br /&gt;mp4ffint.h:373:7: warning: no newline at end of file&lt;br /&gt;mp4ff.c:104: error: static declaration of ‘mp4ff_track_add’ follows non-static declaration&lt;br /&gt;mp4ffint.h:348: error: previous declaration of ‘mp4ff_track_add’ was here&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;So I added a new line to the end of ./common/mp4ff/mp4ffint.h and mp4ff_int_types.h files. For file mp4ff.c, removed "static" at line 104:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;static void mp4ff_track_add(mp4ff_t *f)&lt;/code&gt;&lt;/pre&gt;Make again, everything was okay. Then use command:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;su -c "make install"&lt;/code&gt;&lt;/pre&gt;So far we had faad2, faac, lame installed. Before we download mplayer, a couple link need to be created.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib/libmp3lame.so.0&lt;br /&gt;#ln -s /usr/local/lib/libfaad.so.0 /usr/lib/libfaad.so.0&lt;br /&gt;#ln -s /usr/local/lib/libfaac.so.0 /usr/lib/libfaac.so.0&lt;/code&gt;&lt;/pre&gt;These links were created for mplayer. Mplayer is going to look for these libs at /usr/lib/ by default. There are config options to switch to /usr/local/lib. Although I did it in this way. There are cleaner solutions. Eather install faac,faad2, and lame into the /usr/lib/ or config mplayer to look for them at /usr/local/lib. Please let me know your solutions if you have this done.&lt;br /&gt;&lt;br /&gt;Mplayer installation should be easy. Only mistake I made is I downloaded the windows codec package instead of linux. To have all codecs supported, I had the ftp://ftp1.mplayerhq.hu/MPlayer/releases/codecs/all-20061022.tar.bz2 downloaded from &lt;a href="http://www.mplayerhq.hu/design7/dload.html"&gt;mplayer site&lt;/a&gt;.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#bunzip2 all-20061022.tar.bz2&lt;br /&gt;#tar -xvf all-20061022.tar.bz2&lt;br /&gt;#su -c "mv all-20061022 /usr/local/lib/codecs"&lt;/code&gt;&lt;/pre&gt;The /usr/local/lib/codecs is a relative new place for these dll files. They used to be somewhere else. At this point mplayer is ready to be configured and made. Run following command in mplayer source directory.&lt;br /&gt;I used the svn version of mplayer.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer&lt;br /&gt;#cd mplayer&lt;br /&gt;#./configure&lt;br /&gt;#make&lt;br /&gt;#su -c "make install"&lt;/code&gt;&lt;/pre&gt;Everything should be working now. I haven't turn on a lot of things for mplayer, we don't need most of them, we don't play videos on screen anyways. It runs on a set of RHEL3 servers.&lt;br /&gt;&lt;br /&gt;Here is another trick worth to mention. I need to take screenshots for uploaded videos. FFMpeg was used in our last version. Since I have switched to mplayer, to use ffmpeg for screenshots make me feel this job is unfinished. I did try to find a way for screenshots by using mencoder. It seems not able to. I have to turn to mplayer and here is the command for screenshots:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#mplayer \&lt;br /&gt;       -vf framestep=${4},scale=${2} -framedrop -nosound ${1} \&lt;br /&gt;       -speed 100 -vo jpeg:outdir=${3}&lt;/code&gt;&lt;/pre&gt;$4 is how many frames to skip for each screenshot.&lt;br /&gt;$2 is a string looks like this: 320:240. It gives width:height information for the created jpeg files.&lt;br /&gt;$1 is the media file.&lt;br /&gt;-vo jpeg:outdir=$3 tells mplayer create jpeg files instead of playing it on the screen. :outdir=$3 is the output directory of those jpeg files.&lt;br /&gt;-speed 100 is playing in a 100 times faster speed. So you don't have to wait for those screenshots for hours.&lt;br /&gt;&lt;br /&gt;Beside all that, generated flv files has no meta information yet, &lt;a href="http://rubyforge.org/projects/flvtool2/"&gt;FLVTool2&lt;/a&gt; is what you need. This post is super large already. Let's give it a break.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-116196693792559940?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/116196693792559940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=116196693792559940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/116196693792559940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/116196693792559940'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/10/mplayer-mencoder-converting-videos-to.html' title='Mplayer mencoder converting videos to flv files'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-115173091185919881</id><published>2006-06-30T21:59:00.000-07:00</published><updated>2006-10-27T16:42:47.281-07:00</updated><title type='text'>Day trip to Miquelon Lake</title><content type='html'>Had invited a couple friends to have a day trip to Miquelon Lake at South-East Edmonton. About one hours driving from Edmonton.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/1132/1468/1600/MiquelonLakeMap.0.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/1132/1468/400/MiquelonLakeMap.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here is what I am going to bring:&lt;br /&gt;Food, water, salad bow, forks, cups, dishs, knife, cutting board. Swimming suite, sun screen, off, lighter, axe, tower, chairs, shade, soccer, camera, map, first-aids, leatherMan SuperTool.&lt;br /&gt;&lt;br /&gt;We met at The Brick Store at 23Av-Calgary Trail at 10:00 AM. Had a quick discuss about the trip and route, and hand every driver a map.&lt;br /&gt;&lt;br /&gt;The funniest thing happened after 30 mins driving. We found out that the park is closed for improvements. Then we changed our plan and went to the hw 16, and spent a day at Elk island. It's the last thing you would expect that a lake shore was closed in summer.&lt;br /&gt;&lt;br /&gt;We took the yellowhead high way 16 and had a nice day in Elk Island.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-115173091185919881?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/115173091185919881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=115173091185919881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/115173091185919881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/115173091185919881'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/06/day-trip-to-miquelon-lake.html' title='Day trip to Miquelon Lake'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-114986625365714461</id><published>2006-06-09T08:04:00.000-07:00</published><updated>2006-10-27T16:42:47.103-07:00</updated><title type='text'>Things can get better</title><content type='html'>Seems things are getting better, it has been a while I did not get kneed at my ribs. Started taking Brazillian Jujutsu classes. Only two classes so far. It's very interesting. At the same time, I noticed that my kicking skills are not as good as it used to be. More practic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-114986625365714461?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/114986625365714461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=114986625365714461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/114986625365714461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/114986625365714461'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/06/things-can-get-better.html' title='Things can get better'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-114331221797859544</id><published>2006-03-25T10:25:00.000-08:00</published><updated>2006-10-27T16:42:47.038-07:00</updated><title type='text'></title><content type='html'>Was kneed on my rib last Friday and kneed on my leg yesterday. It hurts. It is still a long way to go. All these weapons, elbow, knee, punch and kicks, they are slowly getting effective during the sparring.&lt;br /&gt;&lt;br /&gt;I am going to take a rest this Saturday. Not used to the bike riding yet. Hopefully it will be better next week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-114331221797859544?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/114331221797859544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=114331221797859544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/114331221797859544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/114331221797859544'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2006/03/was-kneed-on-my-rib-last-friday-and.html' title=''/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15747968.post-112489494947885712</id><published>2005-08-24T07:48:00.000-07:00</published><updated>2006-10-27T16:42:46.968-07:00</updated><title type='text'>First day</title><content type='html'>This is the first post. It gives life to this blog. 8-]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15747968-112489494947885712?l=neilhan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://neilhan.blogspot.com/feeds/112489494947885712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15747968&amp;postID=112489494947885712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/112489494947885712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15747968/posts/default/112489494947885712'/><link rel='alternate' type='text/html' href='http://neilhan.blogspot.com/2005/08/first-day.html' title='First day'/><author><name>Neil Han</name><uri>http://www.blogger.com/profile/05680164664254366420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://photos1.blogger.com/blogger2/2944/1922/400/IMAGE_00059.0.jpg'/></author><thr:total>0</thr:total></entry></feed>
