<?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-5594845</id><updated>2011-04-21T20:44:28.526-07:00</updated><title type='text'>Ivaturi's Java Blog</title><subtitle type='html'>This is all I feel about J2EE.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ivaturis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>83</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5594845.post-108452848345493644</id><published>2004-05-14T02:54:00.000-07:00</published><updated>2004-05-14T02:54:43.456-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;These are Good to share -----&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; Friends may b old. friends may b new but real friends r very few,So&lt;br /&gt; whenever u r lonely,Remember its true... Someone at some where, is&lt;br /&gt; thinking of u...missing u&lt;br /&gt;****************&lt;br /&gt;If u love some one its nothing ,if someone loves u its something but,if&lt;br /&gt; u love someone n someone also loves u its every thing.&lt;br /&gt; *****************&lt;br /&gt; life ends when u stop dreaming, hope ends when u stop believing, love&lt;br /&gt; ends when u stop caring.. friendship ends when u stop sharing.. so&lt;br /&gt; always be in touch my friend!!!!&lt;br /&gt; **************************&lt;br /&gt; A girl asked a guy if he thought she was pretty, he said...no. She&lt;br /&gt; asked him if he would want to be with her forever....and he said no.&lt;br /&gt; She then asked him if she were to leave would he cry? and once again&lt;br /&gt; he replied with a no. She had heard enough . As she walked away, tears&lt;br /&gt;  streaming down her face the boy grabbed her arm and said....You're&lt;br /&gt; not pretty you're beautiful. i dont want to be with you forever. i&lt;br /&gt; NEED to be with you forever, and i wouldnt cry if you walked away...&lt;br /&gt; i'd die...&lt;br /&gt; ******************************&lt;br /&gt; A Guy &amp; a Girl  can just be frends but at one point of time they will&lt;br /&gt; fall 4 each other....May be temporarily ,may be at wrong time,may be&lt;br /&gt;too&lt;br /&gt; late or may be forever...&lt;br /&gt; *******************************&lt;br /&gt; Someone asked me how much i miss u .I said ::Try catching raindrops,the&lt;br /&gt; ones u catch is perhaps how much u miss me &amp; the ones u miss is how&lt;br /&gt;much&lt;br /&gt; i miss u..&lt;br /&gt; **********************************&lt;br /&gt; If kiss was a raindrop, i'd send u  showers .If hugs were seconds ,i'd&lt;br /&gt; send u hours.If smiles were waters, i'd send  u the sea.If frendship&lt;br /&gt;was&lt;br /&gt; a person i'd send u me..&lt;br /&gt; **************************************&lt;br /&gt; Kisi ki chahat pe jinda rehane wale ham na the,&lt;br /&gt; kisi par mar mitne wale hum ne the,&lt;br /&gt;aadat si pad gayi tumhe yaad karne ki, warna kisi ko yaad karne wale hum&lt;br /&gt;&lt;br /&gt;naa the.. &lt;br /&gt; *******************&lt;br /&gt; Heart beats are countless...spirits are ageless...dreams are&lt;br /&gt; endless...memories are timeless...a friend like u priceless.&lt;br /&gt; *************************&lt;br /&gt; Sirf chahne se koi baat nahi hoti, Suraj ke saamne kabhi raat nahi&lt;br /&gt; hoti, hum chahte hai jisse jaan se bhi jyada, woh saamne hai par baat&lt;br /&gt; nahi hoti .&lt;br /&gt; ***************************&lt;br /&gt; muskuraengi ankhen firse rone ke baad ... subha ayegi sham dhal jane ke&lt;br /&gt;&lt;br /&gt;baad...&lt;br /&gt; oh jane wale zara mudke to dekh ...shayad ye zindgi na rahe tere jane&lt;br /&gt;ke &lt;br /&gt;baad&lt;br /&gt; ***********************************&lt;br /&gt; If u ask me that how long i'll be ur friend, I'll say i don't know....&lt;br /&gt; caz i really don't know whichone is long... FOREVER or ALWAYS...&lt;br /&gt; *************************************&lt;br /&gt; Maana Hum Izhaar Nahi Karte Maana Hum Ikraar Nahi Karte Magar Yeh Mat&lt;br /&gt; Sochna `Pagal' Ki Hum Pyar Nahi Karte&lt;br /&gt; *************************************&lt;br /&gt; u know y GOD created gap b/w fingers...so tat on some day the one who&lt;br /&gt;is&lt;br /&gt; made 4 u comes and fill those gaps by holding ur hand forever.&lt;br /&gt; **********************************&lt;br /&gt; Life is 4 u, death is 4 me, being happy is 4 u, being sad is 4 me,&lt;br /&gt; being together is 4 u, being lonely is 4 me, everything 4 u but u r 4&lt;br /&gt;me.&lt;br /&gt; ***********************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;yaad karo ya na karo, ham gila nahi karte, Virane me phool kabhi nahi&lt;br /&gt;khila karte,&lt;br /&gt;magar itna yaad rakhna  e janeeman, mujh jaise aashik bar bar mila nahi&lt;br /&gt;karte&lt;br /&gt;***********************************&lt;br /&gt;&lt;br /&gt;Nigahen aapki pehchan hain hamari, muskurahat apki shan hai hamari, &lt;br /&gt;rakna hifazat ap apni, kyunki saanse apki jan hai hamari&lt;br /&gt;***********************************&lt;br /&gt;&lt;br /&gt;ab to tumhi se pyar karne ka man mene bana liya, kal sapne mein dekha ke&lt;br /&gt;tumko pa liya, mujhe bhool na jana ae humsafar ke ab ye dil humne tumse&lt;br /&gt;laga liya&lt;br /&gt;***********************************&lt;br /&gt;&lt;br /&gt;Doori na rahe koi humme tum itna karib aa jao, pyar karunga tumhe sabse&lt;br /&gt;jyada, meri jaan meri bahon mein aajao.&lt;br /&gt;***********************************&lt;br /&gt;Shaam dhali phir kaali raat aayi, dil dhadka phir tumhari yaad aayi,&lt;br /&gt;aankho ne mehsoos kiya us hawa ko,&lt;br /&gt;jo tumhe chukar hamare paas aayi...&lt;br /&gt;***********************************&lt;br /&gt;&lt;br /&gt;Koi shaam aati hai tumhari yaad lekar, koi shaam jati hai tumhari yaad&lt;br /&gt;dekar,&lt;br /&gt;hame to us shaam ka intezaar hai jo aaye tumhe saath lekar...&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/5594845-108452848345493644?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/108452848345493644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/108452848345493644'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2004_05_01_archive.html#108452848345493644' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-108381703444453017</id><published>2004-05-05T21:17:00.000-07:00</published><updated>2004-05-05T21:20:27.920-07:00</updated><title type='text'></title><content type='html'>Got Gmail account.    It is great to have 1GB space with clean and friendly environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-108381703444453017?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/108381703444453017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/108381703444453017'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2004_05_01_archive.html#108381703444453017' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107579087995812194</id><published>2004-02-02T22:47:00.000-08:00</published><updated>2004-02-02T22:49:39.106-08:00</updated><title type='text'></title><content type='html'>&lt;b&gt;About Methods&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Even 20 to 25 lines is a bit long. There are many reasons that your average method size should be considerably smaller. One to twelve lines is a better goal.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Some benefits (these are a few off the top of my head):&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Maintenance costs. The longer a method, the more it will take you to figure out what it does, and where your modifications need to go.&lt;br /&gt;Code readability. After the initial learning curve, smaller methods make it far easier to understand what a class does.&lt;br /&gt;Reuse potential. If you break down methods into smaller components, you can start to recognize common abstractions in your code. You can minimize the overall amount of code dramatically by reusing these common methods.&lt;br /&gt;Subclassing potential. The longer a method is, the more difficult it will be to create effective subclasses that use the method.&lt;br /&gt;Naming. It's easier to come up with appropriate names for smaller methods that do one thing.&lt;br /&gt;Performance profiling. If you have performance issues, a system with composed methods makes it easier to spot the performance bottlenecks.&lt;br /&gt;Flexibility. Smaller methods make it easier to refactor (and to recognize design flaws, such as feature envy).&lt;br /&gt;Coding quality. It's easier to spot dumb mistakes if you break larger methods into smaller ones.&lt;br /&gt;Minimizes the need for comments. While comments can be valuable, most are unnecessary and can be eliminated by prudent renaming and restructuring. Comments that restate what the code says are unnecessary.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Downsides (maybe):&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Initially it's harder to work with code with lots of methods. Over time, however, you will see well-composed code as having greater clarity.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Myths:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Performance. You rarely create performance problems with more methods. If you do, it's very easy to inline methods. The rule of performance is always: make it run, make it right (e.g. small methods), make it fast (optimize).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Caveats:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It's difficult to do, but you can go too far. Make sure each method has a valid reason for existing; otherwise inline it.&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/5594845-107579087995812194?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107579087995812194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107579087995812194'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2004_02_01_archive.html#107579087995812194' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107155251899427273</id><published>2003-12-15T21:28:00.000-08:00</published><updated>2003-12-15T21:29:29.796-08:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;One could learn the &lt;b&gt;Java keywords&lt;/b&gt; with a poem &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Abstract &lt;/b&gt;&lt;b&gt;boolean&lt;/b&gt;, &lt;b&gt;break &lt;/b&gt;the &lt;b&gt;byte&lt;/b&gt;!&lt;br /&gt;(break the scheme)&lt;br /&gt;&lt;b&gt;Case &lt;/b&gt;and &lt;b&gt;catch &lt;/b&gt;and "char" with &lt;b&gt;class&lt;/b&gt;!&lt;br /&gt;(have your own style)&lt;br /&gt;&lt;b&gt;Const &lt;/b&gt;&lt;b&gt;continue&lt;/b&gt;, &lt;b&gt;default &lt;/b&gt;&lt;b&gt;do&lt;/b&gt;.&lt;br /&gt;(don't be like the others)&lt;br /&gt;"&lt;b&gt;double &lt;/b&gt;&lt;b&gt;else&lt;/b&gt;" &lt;b&gt;extend&lt;/b&gt;S &lt;b&gt;final&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(thinking twice make things harder (?))&lt;br /&gt;(remember to pronounce the S here) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Finally&lt;/b&gt;, &lt;b&gt;float &lt;/b&gt;for &lt;b&gt;goto&lt;/b&gt;&lt;br /&gt;&lt;b&gt;if &lt;/b&gt;&lt;b&gt;implement&lt;/b&gt;S &lt;b&gt;import&lt;/b&gt;&lt;br /&gt;(if you need a strong programming implement, rebel and try "goto" (this is ironic,of course. Pronounce the S here, don't forget))&lt;br /&gt;&lt;b&gt;instanceof&lt;/b&gt; int: &lt;b&gt;interface&lt;/b&gt;&lt;br /&gt;(talks for itself)&lt;br /&gt;&lt;b&gt;Long &lt;/b&gt;&lt;b&gt;native&lt;/b&gt;? &lt;b&gt;New &lt;/b&gt;&lt;b&gt;package&lt;/b&gt;!&lt;br /&gt;(Change old traditions for new technologies) &lt;br /&gt;&lt;br /&gt;(now it comes the superhero saga part)&lt;br /&gt;"&lt;b&gt;Private &lt;/b&gt;&lt;b&gt;Protected &lt;/b&gt;&lt;b&gt;Public&lt;/b&gt;" &lt;b&gt;return&lt;/b&gt;!!&lt;br /&gt;(in part I, Private Java protected the public classes city. Now, the saga continues)&lt;br /&gt;&lt;b&gt;Short&lt;/b&gt;, &lt;b&gt;static&lt;/b&gt;, &lt;b&gt;strictfp&lt;/b&gt;&lt;br /&gt;(a description of his braveness fp: firm precission (?) )&lt;br /&gt;&lt;b&gt;super &lt;/b&gt;&lt;b&gt;switch &lt;/b&gt;&lt;b&gt;synchronized &lt;/b&gt;&lt;b&gt;this&lt;/b&gt;&lt;br /&gt;(?)&lt;br /&gt;&lt;b&gt;throw&lt;/b&gt;, &lt;b&gt;throws &lt;/b&gt;&lt;b&gt;transient&lt;/b&gt;&lt;br /&gt;(?)&lt;br /&gt;&lt;b&gt;try &lt;/b&gt;"&lt;b&gt;void&lt;/b&gt;, &lt;b&gt;volatile&lt;/b&gt;" &lt;b&gt;while &lt;/b&gt;&lt;b&gt;assert&lt;/b&gt;&lt;br /&gt;(He can dissapear) &lt;br /&gt;&lt;br /&gt;What do you think? No... please don't tell the truth.  &lt;br /&gt;&lt;br /&gt;Courtesy: JavaRanch &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107155251899427273?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107155251899427273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107155251899427273'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107155251899427273' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107146222277949446</id><published>2003-12-14T20:23:00.000-08:00</published><updated>2003-12-14T20:24:32.686-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://java.sun.com"&gt;http://java.sun.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Good to see Gosling photo on Header and Navigation changes gives more accessibility to developers...&lt;br /&gt;&lt;br /&gt;Seems Gosling has changed the UI :) &lt;br /&gt;&lt;br /&gt;Sun is trying to reach developers... they kept the Developers Home Link.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107146222277949446?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107146222277949446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107146222277949446'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107146222277949446' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107123992657471278</id><published>2003-12-12T06:38:00.000-08:00</published><updated>2003-12-12T06:39:33.793-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://today.java.net/pub/a/today/2003/12/11/mvc.html"&gt;http://today.java.net/pub/a/today/2003/12/11/mvc.html&lt;/a&gt;  Beyond MVC: A New Look at the Servlet Infrastructure&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107123992657471278?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107123992657471278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107123992657471278'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107123992657471278' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107111623897771161</id><published>2003-12-10T20:17:00.000-08:00</published><updated>2003-12-10T20:18:04.920-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.moelholm.com/"&gt;http://www.moelholm.com/&lt;/a&gt;   &lt;br /&gt;&lt;br /&gt;This has Mock Exams, Exam Docs for SCEA, SCBCD.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107111623897771161?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107111623897771161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107111623897771161'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107111623897771161' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107111520809370116</id><published>2003-12-10T20:00:00.000-08:00</published><updated>2003-12-10T20:00:54.263-08:00</updated><title type='text'></title><content type='html'>JDJ SPECIAL - Answered: The J2EE Questions No One Else Dared to Ask&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sys-con.com/story/?storyid=38149&amp;page=2"&gt;http://www.sys-con.com/story/?storyid=38149&amp;page=2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are some interesting answers for the questiosn asked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107111520809370116?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107111520809370116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107111520809370116'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107111520809370116' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107097715709436514</id><published>2003-12-09T05:39:00.000-08:00</published><updated>2003-12-09T05:40:01.140-08:00</updated><title type='text'></title><content type='html'>Implement JSP custom tags in five easy steps:  &lt;a href="http://www-106.ibm.com/developerworks/java/library/j-pj2ee8/"&gt;http://www-106.ibm.com/developerworks/java/library/j-pj2ee8/&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A good article on creating JSP CTLs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107097715709436514?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107097715709436514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107097715709436514'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107097715709436514' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107094553145559482</id><published>2003-12-08T20:52:00.000-08:00</published><updated>2003-12-08T20:52:54.950-08:00</updated><title type='text'></title><content type='html'>Top 20 Replies by Programmers when their programs don't work..:)&lt;br /&gt;&lt;br /&gt;20. "That's weird...." &lt;br /&gt;19. "It's never done that before..." &lt;br /&gt;18. "It worked yesterday." &lt;br /&gt;17. "How it that possible?" &lt;br /&gt;16. "It must be a hardware problem." &lt;br /&gt;15. "What did you type in wrong to get it to crash?" &lt;br /&gt;14. "There is something funky in your data." &lt;br /&gt;13. "I haven't touched that module in weeks!" &lt;br /&gt;12. "You must have the wrong version." &lt;br /&gt;11. "It's just some unlucky coincidence." &lt;br /&gt;10. "I can't test everything!" &lt;br /&gt;9. "THIS can't be the source of THAT." &lt;br /&gt;8. "It works, but it hasn't been tested." &lt;br /&gt;7. "Somebody must have changed my code." &lt;br /&gt;6. "Did you check for a virus on your system?" &lt;br /&gt;5. "Even though it doesn't work, how does it feel?" &lt;br /&gt;4. "You can't use that version on your system." &lt;br /&gt;3. "Why do you want to do it that way?" &lt;br /&gt;2. "Where were you when the program blew up?" &lt;br /&gt;&lt;br /&gt;And the Number One Reply by Programmers when their program doesn't work: &lt;br /&gt;&lt;b&gt;1. "It works on my machine."&lt;/b&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107094553145559482?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107094553145559482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107094553145559482'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107094553145559482' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107094512416754546</id><published>2003-12-08T20:45:00.000-08:00</published><updated>2003-12-08T20:46:07.950-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.javarss.com"&gt;http://www.javarss.com&lt;/a&gt;    A one-stop link to all Java News, Articles, Blogs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107094512416754546?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107094512416754546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107094512416754546'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107094512416754546' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107042550000055026</id><published>2003-12-02T20:25:00.000-08:00</published><updated>2003-12-02T20:25:37.966-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://sdtimes.com/news/091/special1.htm"&gt;In enterprise shops, Java and .NET is more like it&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Excerpts from this Article&lt;/b&gt;&lt;br /&gt;1. For smart clients, .NET rules.&lt;br /&gt;&lt;br /&gt;2. Java is the way to go for large-scale, multiplatform integration at the back end. &lt;br /&gt;&lt;br /&gt;3. In terms of development tools and ease of use, .NET is No.1. &lt;br /&gt;&lt;br /&gt;4. As for security, Java running on Linux or Unix is a better bet than the .NET languages on Windows. &lt;br /&gt;&lt;br /&gt;5. Apart from those I belive Time to Market.&lt;br /&gt;&lt;br /&gt;A must read one article for all Developers who really fight Java Vs .NET.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107042550000055026?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107042550000055026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107042550000055026'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107042550000055026' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107034716992378408</id><published>2003-12-01T22:39:00.000-08:00</published><updated>2003-12-01T22:40:06.810-08:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;Aggregate - Entity Bean Notes: &lt;br /&gt;&lt;br /&gt;&amp;sect;	Entity beans represent the distributed persistent business objects.&lt;br /&gt;&amp;sect;	We access Entity beans via remote interfaces.&lt;br /&gt;&amp;sect;	Object granularity is very important what to implement as an Entity bean.&lt;br /&gt;&amp;sect;	Entity-Beans should represent the coarse-grained objects.&lt;br /&gt;&amp;sect;	Coarse-Grained objects will have the dependent objects.&lt;br /&gt;&amp;sect;	Dependent Object: An object with no real world - meaning when this object is not associated with the   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  Independent/ Coarse-grained Parent Object.&lt;br /&gt;&amp;sect;	Impact of Fine-Grained design&lt;br /&gt;o	Inter-Entity Bean relationship&lt;br /&gt;o	Impact on Manageability of Code, Classes that are generated&lt;br /&gt;o	Network Performance&lt;br /&gt;o	Database Schema Dependency&lt;br /&gt;o	Impact of Object Granularity&lt;br /&gt;&amp;sect;	The solution to the above impacts are Aggregate Entity Bean&lt;br /&gt;o	This contains set inter-related persistent objects.&lt;br /&gt;&amp;sect;	Persistent Object: An object that is stored in some type of data store. Multiple clients share persistent objects. There are two types of persistent objects&lt;br /&gt;o	Coarse-grained: This is self-sufficient, and has its own life cycle and manages the reference with other objects.  So the Coarse - grained objects maintain the life -cycle of these objects, so these are called dependent objects.&lt;br /&gt;o	Dependent: A self-contained object, which may contain other dependent objects.&lt;br /&gt;&amp;sect;	Two types of strategies to implement Aggregate Entity Bean&lt;br /&gt;o	Aggregate Entity bean holds the reference to the Coarse-Grained object.&lt;br /&gt;o	Aggregate Entity bean it self as a Coarse - Grained object.&lt;br /&gt;o	Lazy Loading of Dependent objects in ejbLoad()&lt;br /&gt;o	Aggregate value object strategy&lt;br /&gt;&amp;sect;	Consider dependent Object as Enterprise Bean&lt;br /&gt;o	If the dependent object appears to be depending on two different parents&lt;br /&gt;o	If the dependent object is already exists as an entity bean/ imported from other application.&lt;br /&gt;&amp;sect;	Don't use Entity-entity relationship, Instead of that start using session fa&amp;ccedil;ade.&lt;br /&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/5594845-107034716992378408?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107034716992378408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107034716992378408'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107034716992378408' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107034366783759519</id><published>2003-12-01T21:41:00.000-08:00</published><updated>2003-12-01T21:41:44.670-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.leocrawford.org.uk/work/jcea/part1/index.html#general"&gt;http://www.leocrawford.org.uk/work/jcea/part1/index.html#general&lt;/a&gt; A good link for SCEA&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107034366783759519?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107034366783759519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107034366783759519'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107034366783759519' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107027013933957663</id><published>2003-12-01T01:15:00.000-08:00</published><updated>2003-12-01T01:16:15.670-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.c2.com/cgi/wiki?EjbRoadmap"&gt;http://www.c2.com/cgi/wiki?EjbRoadmap&lt;/a&gt;   &lt;br /&gt;EJB Raod Map contains all EJB related stuff&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107027013933957663?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107027013933957663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107027013933957663'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_12_01_archive.html#107027013933957663' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107026408998756443</id><published>2003-11-30T23:34:00.000-08:00</published><updated>2003-11-30T23:35:25.996-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.theserverside.com/resources/article.jsp?l=MavenMagic"&gt;http://www.theserverside.com/resources/article.jsp?l=MavenMagic&lt;/a&gt; Maven Magic&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-107026408998756443?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107026408998756443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107026408998756443'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#107026408998756443' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-107025801812921817</id><published>2003-11-30T21:53:00.000-08:00</published><updated>2003-11-30T21:54:13.793-08:00</updated><title type='text'></title><content type='html'>&lt;b&gt;Encapsulation or Representation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Several engineers are building a complicated software system together, and naturally, they are trying to figure out how to divide the work up. There are two different strategies that they can take.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Encapsulation&lt;/b&gt;. The engineers can agree upon the "behavior" they must build and the "behavior" other components of the system must support. &lt;br /&gt;&lt;b&gt;Representation&lt;/b&gt;. The engineers can agree upon the "data" they are allowed to produce and the "data" they need to consume. &lt;br /&gt;In the abstract, you can approach any architectural division either way, although in practice usually one way fits better than the other. How can you tell which one is right? Let's take a look at an example. &lt;br /&gt;&lt;b&gt;&lt;br /&gt;Order Management by Encapsulation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Suppose you are building an order management system for a car-repair shop. Then the idea is that you have various "orders" that go through the system; each order has information about the customer, the request, the price, and so on. Similarly, there are several different things to do with an order, such as displaying them, submitting them for execution, and closing them out when they are done.&lt;br /&gt;&lt;br /&gt;One way to divide up the work is to encapsulate the behavior or an "order" object as a formal interface, and then leave it up to the different engineers to implement the order objects using whatever data representation they choose. In this classical, often-advocated object-oriented approach, the process begins with the engineers deciding, for example, that an "order" object is just a bit of running code that supports a formal interface:&lt;br /&gt;&lt;br /&gt;    interface Order&lt;br /&gt;    {&lt;br /&gt;         show();   // present the order to the user for editing&lt;br /&gt;         submit(); // send the order in for execution&lt;br /&gt;         close();  // close out an executed order&lt;br /&gt;    }&lt;br /&gt;Once they have agreed upon how to encapsulate an order in the abstract like this, the engineers can then go and work independently. All the details of "what an order is" would be up to the implementor of any particular order object, so long as the order object supported the encapsulating interface.&lt;br /&gt;&lt;br /&gt;The nice thing about this approach is that it allows a system to be enhanced with a "new kind of order" without much difficulty. For example, if we were an auto repair shop getting into the restuarant business (perhaps inspired by Dixies BBQ and Auto Repair), we could probably have some software engineers convert our order management system from being able to handle only "car" orders into one that could also handle "food" orders. Although many details of the order may be different, as long as they can implement the same "Order" interface, the system should work. Similarly, "order users" can also be enhanced fairly easily, so long as they only use the services that an order has been defined to provide.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Order Management by Representation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The other way to divide up the work is to represent an "order" as a formal data format, and then leave it up to the different engineers to build systems that exchange that data for whatever purpose they choose. They would just need to ensure, for example, that an "order" is a document that matches a formal defined data format:&lt;br /&gt;&lt;br /&gt;   &lt;order&gt;&lt;br /&gt;     &lt;customer&gt;12345&lt;/customer&gt; &lt;!-- must be a valid 5-digit ID--&gt;&lt;br /&gt;     &lt;date&gt;2003-11-26&lt;/date&gt;    &lt;!-- date of the request --&gt;&lt;br /&gt;     &lt;request&gt;Change oil, check tires&lt;/request&gt; &lt;!-- the request --&gt;&lt;br /&gt;     &lt;estimate&gt;45.00&lt;/estimate&gt; &lt;!-- estimated charge --&gt;&lt;br /&gt;     &lt;assigned&gt;Jim&lt;/assigned&gt;   &lt;!-- employee --&gt;&lt;br /&gt;     &lt;charge&gt;450.00&lt;/charge&gt;    &lt;!-- actual charge --&gt;&lt;br /&gt;   &lt;/order&gt;&lt;br /&gt;Once the representation of an order has been agreed upon, the engineers can then go and work independently. Exactly "what should be done with an order" would be left to the implementor of any particular subsystem, so long as the orders flowing between parts of the system follow the schema correctly.&lt;br /&gt;&lt;br /&gt;The nice thing about this design is that it allows a system to be enhanced to add "a new kind of order application" very easily. So for example, if we wanted to add an application that, say, did statistical analysis of an archive of all previous customer orders to help us forecast customer purchases (perhaps inspired by Wal-Mart's data warehousing), we could do that.&lt;br /&gt;&lt;br /&gt;Notice that with the "representation" approach, it wouldn't matter that our engineers never anticipated that an order should be able to answer questions that might be interesting to a new application, like "What was the difference between the estimated price and the actual price?" Since the full representation of the data is exposed, it gives us full flexibility to define new behavior in the future - new queries, new patterns of update.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Choosing Between Encapsulation and Representation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Which model should be chosen for our order-entry system? It is a business decision. Each approach has strengths and weaknesses. Here is the choice facing the owners of our car-repair shop:&lt;br /&gt;&lt;br /&gt;If it is important for you to keep your current computer applications, but you want to free yourself to let your applications be capable of working with new kinds of data - as Dixies has done by adapting their existing business process to a new kind of business - then what you want is program encapsulation. &lt;br /&gt;On the other hand, if it is important for you to keep your current data, but you want to fee yourself to use your data in new applications in the future - as Wal-Mart has done by finding new business techinques to utilize their cash register receipts - then what you want is data representation. &lt;br /&gt;Most modern businesses are inspired more by Wal-Mart than by Dixies. Wal-Mart is certainly the more intuitive model - it makes sense to be prepared to enhance an auto-repair computer system with more advanced computer functionality while keeping the same auto-repair-order data. It's a little more unusual to want to keep an auto-repair computer system, while changing the kind of underlying data (not to mention the associated staff, clients, and facilities) in order to turn it into a restaurant system.&lt;br /&gt;&lt;br /&gt;In other words, people tend to hold the data that they have as sacred and something they want to keep forever, and they tend to assign less permanence to the particular programs that work with the data. This preference comes from practical experience. Experience has shown that hot new computer systems come and go, but a successful business keeps its boring old data forever.&lt;br /&gt;&lt;br /&gt;Maybe the underlying causes for this experience can be attributed to Moore's law; or maybe on the amazing economies of magnetic media. Or maybe the success of representation is a characteristic that is inherent to all kinds of large-scale integration. (Compare the power of written language to that of spoken language.) At any rate, over the long term, representation tends to win over encapsulation as a large-scale architectural strategy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;When use Encapsulation?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Encapsulation is still useful in many situations, of course, but it tends to be most useful within transient programs when the particular data being encapsulated is temporary. Our guidelines are:&lt;br /&gt;&lt;br /&gt;Use encapsulation when your program outlasts your data. &lt;br /&gt;Use representation when your data outlasts your program. &lt;br /&gt;Clearly, when defining a data structure that is tailored to implement a specific algorithm - the kind of data structures we learn about in Freshman Computer Science 101 - our data is ephemeral. In that case, our program outlasts our data, and it makes a lot of sense to subdivide the program by encapsulating any data that it works with using object-oriented interfaces.&lt;br /&gt;&lt;br /&gt;Encapsulation, therefore, is still the main technique to use when implementing a single tightly-coupled computer system. However, as soon as we move to larger, more loosely-coupled networks of systems where individual programs can come and go while the network of data exchange remains, data representation becomes a much more powerful technique.&lt;br /&gt;&lt;br /&gt;Use encapsulation to subdivide tightly-coupled components of a system. &lt;br /&gt;Use representation to connect loosely-coupled systems together. &lt;br /&gt;Encapsulation is for organizing programming in the small, and representation is for organizing programming in the large.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why we Care&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Why is this all relevant? Because it gets behind the whole architecture of XML versus Java. The world is organized into many individual systems written in object-oriented programs like Java, exchanging data-oriented messages in formats like XML.&lt;br /&gt;&lt;br /&gt;Java is an excellent tool that can be used to define robust encapsulation for programs, and is useful for building systems in the small.&lt;br /&gt;&lt;br /&gt;XML is a standard idiom for describing a human-readable representation of data, and is useful for connecting system in the large.&lt;br /&gt;&lt;br /&gt;In future articles, we will delve into more of the differences between "thinking XML" and "thinking Java." In many of these cases, the differences come down to the differences between representation and encapsulation.&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/5594845-107025801812921817?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107025801812921817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/107025801812921817'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#107025801812921817' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106965337385252161</id><published>2003-11-23T21:56:00.000-08:00</published><updated>2003-11-23T21:56:43.326-08:00</updated><title type='text'></title><content type='html'>protected void finalize() throws Throwable {}&lt;br /&gt;&lt;br /&gt;every class inherits the finalize() method from java.lang.Object &lt;br /&gt;the method is called by the garbage collector when it determines no more references to the object exist &lt;br /&gt;the Object finalize method performs no actions but it may be overridden by any class &lt;br /&gt;normally it should be overridden to clean-up non-Java resources ie closing a file &lt;br /&gt;if overridding finalize() it is good programming practice to use a try-catch-finally statement and to always call super.finalize() (JPL pg 47-48). This is a saftey measure to ensure you do not inadvertently miss closing a resource used by the objects calling class &lt;br /&gt;protected void finalize() throws Throwable {&lt;br /&gt;    try {&lt;br /&gt;        close();        // close open files&lt;br /&gt;    } finally {&lt;br /&gt;        super.finalize();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;any exception thrown by finalize() during garbage collection halts the finalization but is otherwise ignored &lt;br /&gt;finalize() is never run more than once on any object&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106965337385252161?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106965337385252161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106965337385252161'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#106965337385252161' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106965324494620323</id><published>2003-11-23T21:54:00.000-08:00</published><updated>2003-11-23T21:54:33.653-08:00</updated><title type='text'></title><content type='html'>&lt;b&gt;GC:&lt;/b&gt; variables and objects are eligible for garbage collection when they become unreachable.any variable set to null automatically becomes eligible for garbage collection.&lt;br /&gt;&lt;br /&gt;static field --&gt; as long as the class is loaded &lt;br /&gt;instance field --&gt; for the life of the instance &lt;br /&gt;Array components --&gt; as long as the array is referenced &lt;br /&gt;Method parameters --&gt; until method execution ends &lt;br /&gt;Constructor parameters --&gt;  until the constructor execution ends &lt;br /&gt;Exception handling parameters --&gt; until the catch clause completes execution &lt;br /&gt;Local variables --&gt; in a for-loop, until the loop completes in a code-block, until the code block completes  &lt;br /&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/5594845-106965324494620323?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106965324494620323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106965324494620323'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#106965324494620323' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106915295976576694</id><published>2003-11-18T02:55:00.000-08:00</published><updated>2003-11-18T02:56:22.700-08:00</updated><title type='text'></title><content type='html'>10 Things I Bet You Didn't Know about &lt;a href="http://www.bu.edu/mfeldman/Google/"&gt;http://www.bu.edu/mfeldman/Google/&lt;/a&gt; Google&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106915295976576694?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106915295976576694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106915295976576694'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#106915295976576694' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106847283997568124</id><published>2003-11-10T06:00:00.000-08:00</published><updated>2003-11-10T06:00:37.876-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.itbooksearch.com/"&gt;http://www.itbooksearch.com/&lt;/a&gt; Free E-Book Download&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106847283997568124?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106847283997568124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106847283997568124'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#106847283997568124' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106810868268519973</id><published>2003-11-06T00:51:00.000-08:00</published><updated>2003-11-06T00:51:20.460-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.sdtimes.com/cols/integrationwatch.htm"&gt;http://www.sdtimes.com/cols/integrationwatch.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;.NET Progress Worries Java&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106810868268519973?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106810868268519973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106810868268519973'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#106810868268519973' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106810778386468411</id><published>2003-11-06T00:36:00.000-08:00</published><updated>2003-11-06T00:36:21.863-08:00</updated><title type='text'></title><content type='html'>http://www.ergnosis.com/java-spec-report/java-language/index.html&lt;br /&gt;&lt;br /&gt;JLS UnOfficial Erratta&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106810778386468411?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106810778386468411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106810778386468411'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#106810778386468411' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106794887862587460</id><published>2003-11-04T04:27:00.000-08:00</published><updated>2003-11-04T04:27:56.960-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.jroller.com/resources/behrangsa/software-project.jpg"&gt;http://www.jroller.com/resources/behrangsa/software-project.jpg&lt;/a&gt; This image has been causing loads of laughs among my fellow developers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106794887862587460?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106794887862587460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106794887862587460'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#106794887862587460' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106786816305427094</id><published>2003-11-03T06:02:00.000-08:00</published><updated>2003-11-03T06:02:41.866-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.revisingscbcd.co.uk/index.htm"&gt;http://www.revisingscbcd.co.uk/index.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A good study guide for SCBCD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106786816305427094?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106786816305427094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106786816305427094'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_11_01_archive.html#106786816305427094' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106691808447642426</id><published>2003-10-23T07:08:00.000-07:00</published><updated>2003-10-23T07:08:04.520-07:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;&lt;b&gt;WHAT MOTIVATED YOU TO WRITE JAVARULES&lt;/b&gt; &lt;b&gt;Doug Dunn &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why do I feel like I'm being baited here?&lt;br /&gt;Okay, well first off, I thought it would be a five month job, not change my life. It has, however, because it turned out to be an unbelievable huge job, one that is far from complete. Originally, the "Java Rules" book in print, Mastering the Fundamentals, Volume 2, and all the unpublished chapters were one book. I work in Adobe FrameMaker, which has .book files. I still maintain a .book file that includes all my work for the purpose of searching. However, several years ago I renamed it to "The Monster.book"&lt;br /&gt;&lt;br /&gt;Why I have not given up is one thing, why I started is another. Doubtless there were mixed motives, but I think the main one was that I was so frustrated trying to learn C++. I just thought I could do a better job. Java came along right when I was working on the beginnings of a C++ book, and leveled the playing field. I saw that as a once in a lifetime opportunity and threw myself into the writing of a Java fundamentals book. &lt;br /&gt;&lt;br /&gt;Here I want to point out that I was a construction worker for five years before becoming a computer programmer. I throw that out because I have never thought of myself as one of the "best and brightest" in the profession. James Gosling, Guy Steele, Gilad Bracha, Neil Gafter, and the other luminaries at Sun are gods in the Java pantheon, and I admire them as much today (if not more) than I did when I started.&lt;br /&gt;&lt;br /&gt;I have written a number of papers on this subject, but will try to condense the thoughts. I do not think the MIT or IIT grads or what I call the "best and brightest" can write this book. It simply had to be done by a lesser mortal. As your understanding progresses, you lose the perspective of someone that knows nothing about the subject. That perspective is what allows you to "translate" the knowledge. The best and brightest lose that perspective long before they even graduate from college. (I dropped out after three years and joined the Army, by the way.) I cannot overemphasize this point. That is why I have been so diligent in documenting my learning experience from day one. Java Rules and all my other work on this subject are what I like to characterize as a "travel log" of my journey from knowing nothing to having a reasonably good understand of Java language fundamentals. I have been maintaining that travel log from the 1.0.2 release, fully seven or eight years now, which is why I am confident that noone will ever be able to reproduce my work. A thousand times over my understanding of the subject has blossomed and I have never once failed to document the experience. If you wait even a day or two to do so, you begin to lose the perspective of where you were before. No one else has ever done this. Instead they wait until they have already mastered the subject, and then it is too late, way too late. I still have a long way to go. I know this. Just last night I completely rewrote the section on narrowing reference conversions. It was a massive leap forward in that particular section. &lt;br /&gt;&lt;br /&gt;You can't imagine how time consuming it is to do this. It has derailed my entire career in computer programming to the point that the book has now become my career. &lt;br /&gt;&lt;br /&gt;Beyond this historical perspective, I have always enjoyed helping other programmers even more than I enjoy programming. I really mean this. The programmers I have worked with in the past have known this, and I always had people coming to my cube because they knew I would not make them feel stupid no matter what the problem. I suppose I thought I could do the same on a larger scale by writing this book, at least I hope so. Time will tell. I never promoted the "Java Rules" book in print because I see all of the flaws in it. It has only been with the publication of Mastering the Fundamentals, Volume 2 some three months ago that I have begun for the first time ever to promote my work, and things are unfolding rapidly.&lt;br /&gt;&lt;br /&gt;You asked a huge question, and I have taken the bait. I hope what little I have said here gives you a better idea of what motivated me.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106691808447642426?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106691808447642426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106691808447642426'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_10_01_archive.html#106691808447642426' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106673025354440698</id><published>2003-10-21T02:57:00.000-07:00</published><updated>2003-10-21T02:57:32.880-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://weblogs.java.net/pub/wlg/574"&gt;http://weblogs.java.net/pub/wlg/574&lt;/a&gt;  JavaWorld Stopped Updating Articles??????&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106673025354440698?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106673025354440698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106673025354440698'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_10_01_archive.html#106673025354440698' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106670823393804389</id><published>2003-10-20T20:50:00.000-07:00</published><updated>2003-10-20T20:50:33.373-07:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;&lt;b&gt;Worker blogs raising concerns?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.usatoday.com/tech/news/2003-10-05-blogs_x.htm"&gt;http://www.usatoday.com/tech/news/2003-10-05-blogs_x.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106670823393804389?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106670823393804389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106670823393804389'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_10_01_archive.html#106670823393804389' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106618958629410655</id><published>2003-10-14T20:46:00.000-07:00</published><updated>2003-10-14T20:46:25.970-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.britishpathe.com/"&gt;http://www.britishpathe.com/  &lt;/a&gt;  Historic photo archive available on the Web&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106618958629410655?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106618958629410655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106618958629410655'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_10_01_archive.html#106618958629410655' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106605026589835183</id><published>2003-10-13T06:04:00.000-07:00</published><updated>2003-10-13T06:04:26.003-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.objectlearn.com/index.jsp"&gt;http://www.objectlearn.com/index.jsp&lt;/a&gt; This is Good website contains Plugins for Eclipse (JSP, ....).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106605026589835183?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106605026589835183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106605026589835183'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_10_01_archive.html#106605026589835183' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106558663398961897</id><published>2003-10-07T21:17:00.000-07:00</published><updated>2003-10-07T21:17:13.900-07:00</updated><title type='text'></title><content type='html'>"One of the main problems with today's software development is that many projects start programming too soon and concentrate too much effort on writing code. This is partly because managers lack the understanding of the software development process and become anxious when their programming team is not producing code. It's also because the programmers themselves feel more secure when they're programming&amp;#8212;a task with which they are very familiar&amp;#8212;than when they're building abstract models of the system they are to create."&lt;br /&gt;&lt;br /&gt;&amp;#8212;Eriksson, Hans-Erik and Penker&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106558663398961897?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106558663398961897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106558663398961897'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_10_01_archive.html#106558663398961897' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106558531924811807</id><published>2003-10-07T20:55:00.000-07:00</published><updated>2003-10-07T20:55:19.406-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.itorg.auc.dk/borch/web_oos2001.E5/Blocks/Uml/UMLOnlineCourse/"&gt;http://www.itorg.auc.dk/borch/web_oos2001.E5/Blocks/Uml/UMLOnlineCourse/&lt;/a&gt; Practical UML A Hands-On Introduction for Developers&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/5594845-106558531924811807?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106558531924811807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106558531924811807'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_10_01_archive.html#106558531924811807' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106482630038048665</id><published>2003-09-29T02:05:00.000-07:00</published><updated>2003-09-29T02:05:00.450-07:00</updated><title type='text'></title><content type='html'>public class Mod{&lt;br /&gt;public static void main(String argv[]){&lt;br /&gt;}&lt;br /&gt;public static native void amethod();&lt;br /&gt;}&lt;br /&gt;=========================================================&lt;br /&gt;&lt;br /&gt;This will be compiled and Executed...&lt;br /&gt;&lt;br /&gt;Here the method is declared as native.The native key word alerts the &lt;br /&gt;&lt;br /&gt;compiler that the method will be defined externally.Native methods will not &lt;br /&gt;&lt;br /&gt;conatin any coding in Java language.&lt;br /&gt;&lt;br /&gt;This code will compile and run with out any error.But if you try to use the &lt;br /&gt;&lt;br /&gt;method in another class,during run time it will throw &lt;br /&gt;&lt;br /&gt;exception "UnsatisfiedLinkError",since JVM doesn't know how to find&lt;br /&gt;&lt;br /&gt;aMethod().&lt;br /&gt;&lt;br /&gt;So before using native methods,load the library file containg the method &lt;br /&gt;&lt;br /&gt;definition for aMethod()developed in a language other than Java like C/C++.&lt;br /&gt;&lt;br /&gt;You can do this by System.loadLibrary("moose.dll");&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/5594845-106482630038048665?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106482630038048665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106482630038048665'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106482630038048665' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106481585853017061</id><published>2003-09-28T23:10:00.000-07:00</published><updated>2003-09-28T23:10:58.536-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://java.sun.com/features/2003/05/bloch_qa.html"&gt;http://java.sun.com/features/2003/05/bloch_qa.html&lt;/a&gt; New Language Features for Ease of Development in the Java 2 Platform, Standard Edition 1.5: A Conversation with Joshua Bloch&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106481585853017061?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106481585853017061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106481585853017061'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106481585853017061' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106481403535086491</id><published>2003-09-28T22:40:00.000-07:00</published><updated>2003-09-28T22:40:34.966-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;INTERFACES AND CONSTANTS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When you want to use global constants in an application, it is often tempting to define the constants in an interface and then implement the interface in the class using the constants. For example, suppose you have the following interface that contains approximations for the numbers pi and e. &lt;br /&gt;&lt;br /&gt;   public interface TranscendentalConstants {&lt;br /&gt;      public static final double PI = 3.14159;&lt;br /&gt;      public static final double E = 2.71828;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;Suppose too that you have a second collection of constants that contains approximations for the square roots of two and three. &lt;br /&gt;&lt;br /&gt;   public interface IrrationalConstants {&lt;br /&gt;      public static final double SQRT_TWO = 1.414;&lt;br /&gt;      public static final double SQRT_THREE = 1.732;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;A common strategy for using these constants is to create a class like the following. &lt;br /&gt;&lt;br /&gt;   public class BadUseOfConstants implements &lt;br /&gt;        TranscendentalConstants, IrrationalConstants {&lt;br /&gt;&lt;br /&gt;      public double sinPiOverFour(){&lt;br /&gt;        return SQRT_TWO / 2;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public double sinPiOverThree(){&lt;br /&gt;        return SQRT_THREE / 2;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      private void outputResults() {&lt;br /&gt;        System.out.println("Pi is approximately " + PI);&lt;br /&gt;        System.out.println(&lt;br /&gt;                   "The sin of Pi/4 is approximately " + &lt;br /&gt;                   sinPiOverFour());&lt;br /&gt;        System.out.println(&lt;br /&gt;                   "The sin of Pi/3 is approximately " + &lt;br /&gt;                   sinPiOverThree());&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public static void main(String[] args) {&lt;br /&gt;        new BadUseOfConstants().outputResults();&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;Even though this code runs, it is an improper use of interfaces. That's because BadUseOfConstants is not an extension of the type TranscendentalConstants. Instead, BadUseOfConstants is a consumer of TranscendentalConstants. There are two reasons why using interfaces in this way is so attractive. First, you can easily use constants defined in two different interfaces. If the constants were used in different classes instead, multiple inheritance would be required to perform the same task. Second, by implementing the interfaces, you can refer to the constants without qualifying them as SQRT_TWO instead of as IrrationalConstants.SQRT_TWO. &lt;br /&gt;&lt;br /&gt;You can address this second problem of having to qualify constants by caching the variables locally like this. &lt;br /&gt;&lt;br /&gt;   public class OKUseOfConstants {&lt;br /&gt;&lt;br /&gt;     private double PI = TranscendentalConstants.PI;&lt;br /&gt;     private double SQRT_TWO = &lt;br /&gt;                          IrrationalConstants.SQRT_TWO;&lt;br /&gt;     private double SQRT_THREE = &lt;br /&gt;                        IrrationalConstants.SQRT_THREE;&lt;br /&gt;&lt;br /&gt;     public double sinPiOverFour() {&lt;br /&gt;       return SQRT_TWO / 2;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     public double sinPiOverThree() {&lt;br /&gt;       return SQRT_THREE / 2;&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     public void outputResults() {&lt;br /&gt;       System.out.println("Pi is approximately " + PI);&lt;br /&gt;       System.out.println(&lt;br /&gt;           "The sin of Pi/4 is approximately " +&lt;br /&gt;           sinPiOverFour());&lt;br /&gt;       System.out.println(&lt;br /&gt;           "The sin of Pi/3 is approximately " +&lt;br /&gt;           sinPiOverThree());&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     public static void main(String[] args) {&lt;br /&gt;       new OKUseOfConstants().outputResults();&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;When J2SE 1.5 is released, a new mechanism for importing specific constants will be introduced that will address both of these issues. In the meantime, you might want to introduce an inner class or a different class that collects all of the interfaces containing the constants you want to use. Here's an example. In the BetterUseOfConstants program that follows, the inner class ConstantCollector is used to collect the constants declared in TranscendentalConstants and IrrationalConstants. &lt;br /&gt;&lt;br /&gt;   public class BetterUseOfConstants {&lt;br /&gt;&lt;br /&gt;      private ConstantCollector constants = &lt;br /&gt;                               new ConstantCollector();&lt;br /&gt;&lt;br /&gt;      public double sinPiOverFour(){&lt;br /&gt;        return constants.SQRT_TWO / 2;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public double sinPiOverThree(){&lt;br /&gt;        return constants.SQRT_THREE / 2;&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      private void outputResults() {&lt;br /&gt;        System.out.println(&lt;br /&gt;                               "Pi is approximately " + &lt;br /&gt;                               constants.PI);&lt;br /&gt;        System.out.println(&lt;br /&gt;                  "The sin of Pi/4 is approximately " + &lt;br /&gt;                  sinPiOverFour());&lt;br /&gt;        System.out.println(&lt;br /&gt;                  "The sin of Pi/3 is approximately " + &lt;br /&gt;                  sinPiOverThree());&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public static void main(String[] args) {&lt;br /&gt;        new BetterUseOfConstants().outputResults();&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      private class ConstantCollector implements &lt;br /&gt;       TranscendentalConstants, IrrationalConstants{}&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;Running this code should produce the following results: &lt;br /&gt;&lt;br /&gt;   Pi is approximately 3.14159&lt;br /&gt;   The sin of Pi/4 is approximately 0.707&lt;br /&gt;   The sin of Pi/3 is approximately 0.866      &lt;br /&gt;&lt;br /&gt;In this case ConstantCollector is a type extension of the two interfaces. &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106481403535086491?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106481403535086491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106481403535086491'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106481403535086491' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106457241117201096</id><published>2003-09-26T03:33:00.000-07:00</published><updated>2003-09-26T03:33:30.833-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." -- Martin Fowler&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106457241117201096?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106457241117201096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106457241117201096'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106457241117201096' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106457146652845633</id><published>2003-09-26T03:17:00.000-07:00</published><updated>2003-09-26T03:17:46.410-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;The greater the difficulty,the more the glory in surmounting it.&lt;/b&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/5594845-106457146652845633?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106457146652845633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106457146652845633'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106457146652845633' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106456602606250402</id><published>2003-09-26T01:47:00.000-07:00</published><updated>2003-09-26T01:47:05.730-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://patterndigest.com/"&gt;http://patterndigest.com/&lt;/a&gt;  A good URL for Patterns&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106456602606250402?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106456602606250402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106456602606250402'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106456602606250402' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106429581384536670</id><published>2003-09-22T22:43:00.000-07:00</published><updated>2003-09-22T22:43:33.540-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt; Understanding that parameters are passed by value and not by reference &lt;/b&gt;&lt;br /&gt;&lt;br /&gt; common misconception exists that parameters in Java are passed by reference. They are not. Parameters are passed by value. The misconception arises from the fact that all object variables are object references. This leads to some unexpected results if you do not understand exactly what is happening. For example: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   import java.awt.Point;&lt;br /&gt;   class PassByValue&lt;br /&gt;   {&lt;br /&gt;     public static void modifyPoint(Point pt, int j)&lt;br /&gt;     {&lt;br /&gt;        pt.setLocation(5,5);                                      //1&lt;br /&gt;        j = 15;&lt;br /&gt;        System.out.println("During modifyPoint " + "pt = " + pt +&lt;br /&gt;                           " and j = " + j);&lt;br /&gt;     }&lt;br /&gt;     public static void main(String args[])&lt;br /&gt;     {&lt;br /&gt;        Point p = new Point(0,0);                                 //2&lt;br /&gt;        int i = 10;&lt;br /&gt;        System.out.println("Before modifyPoint " + "p = " + p +&lt;br /&gt;                           " and i = " + i);&lt;br /&gt;        modifyPoint(p, i);                                        //3&lt;br /&gt;        System.out.println("After modifyPoint " + "p = " + p +&lt;br /&gt;                           " and i = " + i);&lt;br /&gt;&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;This code creates a Point object, initialized to (0,0) , and assigns it to the object reference variable p at //2. It then assigns the primitive int i the value 10 . The static modifyPoint method is then called at //3, passing p and i. The modifyPoint method calls the setLocation method on the first parameter, pt , changing its location to (5,5) . In addition, the second parameter, j , is assigned the value 15. When the modifyPoint method returns, method main prints the values for p and i . What is the output of this code and why? &lt;br /&gt;&lt;br /&gt;The output of this code is as follows: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   Before modifyPoint p = java.awt.Point[x=0,y=0] and i = 10&lt;br /&gt;   During modifyPoint pt = java.awt.Point[x=5,y=5] and j = 15&lt;br /&gt;   After modifyPoint p = java.awt.Point[x=5,y=5] and i = 10&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;This output shows that the modifyPoint method changed the Point object created at //2 but not the int,i . In main , i is assigned the value 10. Parameters are passed by value, therefore, a copy of i is passed to the modifyPoint method. This method changes the value of the copy to 15 and returns. The original value, i in main , is not changed.&lt;br /&gt;&lt;br /&gt;On the other hand, you might think the Point object created at //2 is unmodified by the modifyPoint method. After all, Java passes parameters by value. Therefore, when modifyPoint is called with the Point object created at //2, a copy is made for the modifyPoint method to work with. Changes to the Point object in modifyPoint are not reflected in main because there are two different objects. Right? Wrong. &lt;br /&gt;&lt;br /&gt;Actually, the modifyPoint method is working with a copy of a reference to the Point object, not a copy of the Point object. Remember that p is an object reference and that Java passes parameters by value. More specifically, Java passes object references by value. When p is passed from main to the modifyPoint method, a copy of the value of p, the reference, is passed. Therefore the modifyPoint method is working with the same object but through the alias, pt . After entering the modifyPoint method, but before the execution of the code at //1, the object looks like this:&lt;br /&gt;&lt;br /&gt;Figure 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Therefore, after the code at //1 is executed, the Point object has changed to (5,5) . What if you want to disallow changes to the Point object in methods such as modifyPoint ? There are two solutions for this: &lt;br /&gt;&lt;br /&gt;Pass a clone of the Point object to the modifyPoint method.&lt;br /&gt;Make the Point object immutable.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106429581384536670?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106429581384536670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106429581384536670'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106429581384536670' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106429272504297038</id><published>2003-09-22T21:52:00.000-07:00</published><updated>2003-09-22T21:52:05.253-07:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;&lt;b&gt;Understand that for instance methods, synchronized locks objects, not methods or code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The synchronized keyword is used as either a method modifier or as a statement inside of a method. This dual usage causes some confusion about exactly what the synchronized keyword does. It is often described in terms of mutual exclusion (mutex) or a critical section. This causes many programmers to incorrectly think that because code is protected by synchronized , it can be accessed by only one thread at a time.&lt;br /&gt;&lt;br /&gt;For instance methods, the synchronized keyword does not lock a method or code; it locks objects. Remember that there is only one lock associated with each object.&lt;br /&gt;&lt;br /&gt;When synchronized is used as a method modifier, the lock obtained is that for the object on which the method was invoked.When it is used on an object refer-ence, the lock obtained is that for the object referred to. For example, consider the following code:&lt;br /&gt;&lt;br /&gt;class Test&lt;br /&gt;{&lt;br /&gt;  public synchronized void method1()&lt;br /&gt;  {&lt;br /&gt;    //...&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public void method2()&lt;br /&gt;  {&lt;br /&gt;    synchronized(this) {&lt;br /&gt;      //...&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public void method3(SomeObject someObj)&lt;br /&gt;  {&lt;br /&gt;    //...&lt;br /&gt;    synchronized(someObj) {&lt;br /&gt;      //...&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;The first two methods, method1 and method2 , are functionally identical regarding the object being locked. (They differ in the amount of code generated and in how they perform.) Both methods are synchronized on this . In other words, a lock is obtained for the object on which the method was invoked. Because both methods are of the class Test , the lock is obtained for an object of class Test . The method3 method is synchronized on the object referenced by someObj .&lt;br /&gt;&lt;br /&gt;What exactly does it mean to synchronize on an object? It means that the thread that invoked the method has that object s lock. To hold an object s lock means another thread requesting a lock for the same object through a synchronized method or a synchronized statement cannot obtain that lock until it is released. However, another thread executing the same synchronized method or block on a different instance of the same class can obtain that instance s lock.&lt;br /&gt;&lt;br /&gt;Thus, code in a synchronized method or block can be executed at the same time by multiple threads if the method is invoked on two different objects. For example, consider the following code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Foo extends Thread&lt;br /&gt;{&lt;br /&gt;  private int val;&lt;br /&gt;  public Foo(int v)&lt;br /&gt;  {&lt;br /&gt;    val = v;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public synchronized void printVal(int v)&lt;br /&gt;  {&lt;br /&gt;    while(true)&lt;br /&gt;      System.out.println(v);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public void run()&lt;br /&gt;  {&lt;br /&gt;    printVal(val);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;class Bar extends Thread&lt;br /&gt;{&lt;br /&gt;  private Foo sameFoo;&lt;br /&gt;  public Bar(Foo f)&lt;br /&gt;  {&lt;br /&gt;    sameFoo = f;&lt;br /&gt;  }&lt;br /&gt;  public void run()&lt;br /&gt;  {&lt;br /&gt;    sameFoo.printVal(2);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Test&lt;br /&gt;{&lt;br /&gt;  public static void main(String args[])&lt;br /&gt;  {&lt;br /&gt;    Foo f1 = new Foo(1);&lt;br /&gt;    f1.start();&lt;br /&gt;    Bar b = new Bar(f1);&lt;br /&gt;    b.start();&lt;br /&gt;    Foo f2 = new Foo(3);&lt;br /&gt;    f2.start();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Class Foo contains a synchronized method, printVal . This method is executed by three different threads. You might think that because printVal is declared synchronized , it is executed by only one thread at a time. However, this code demonstrates that even though the printVal method is declared synchronized , it can be executed by multiple threads concurrently. Running this code generates output of the form:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1&lt;br /&gt;1&lt;br /&gt;1&lt;br /&gt;1&lt;br /&gt;3&lt;br /&gt;3&lt;br /&gt;3&lt;br /&gt;3&lt;br /&gt;1&lt;br /&gt;1&lt;br /&gt;1&lt;br /&gt;3&lt;br /&gt;3&lt;br /&gt;3&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;What might be surprising is the interleaved execution of two of the threads. If only one thread could execute a synchronized method at a time, you would never see interleaved output. In fact, what happens is the code that prints the 1 s and 3 s is executing the printVal method concurrently. Examining this code shows why this happens.&lt;br /&gt;&lt;br /&gt;An object of the class Foo , referenced by f1 , is created, passing the value 1, and then run on another thread. The run method of class Foo is called, which then calls the synchronized printVal method. When the printVal method is entered, it has obtained the lock for the Foo object. It then begins printing the value 1. Because it has entered an infinite loop, the lock for this Foo object is never released.&lt;br /&gt;&lt;br /&gt;Then an object of type Bar , referenced by b , is created, passing the same Foo object currently in use. It is run on another thread and calls the same printVal method, with the value 2, on the same Foo object. Because the printVal method is synchronized , this call attempts to obtain the lock for the object on which the method is called. The printVal method is called on the same Foo object as the previous invocation, so this call blocks until the first execution of the printVal method is finished. Because the first thread holds this lock and is in an infinite loop, the code never outputs both a 1 and a 2. The first thread to obtain the lock blocks out the other thread forever. Therefore, you do not see any interleaved execution of these two invocations of the printVal method.&lt;br /&gt;&lt;br /&gt;Finally, a second object of the Foo class, referenced by f2 , is created, passing the value 3, and then run on a third thread. The run method of class Foo is called, which then calls the synchronized printVal method. When that method is called, it attempts to obtain the lock for the object on which it is called. The attempt to get this lock succeeds regardless of whether the thread for f1 or b still holds a lock. Because this invocation of the printVal method is called on a different object, it can obtain that object s lock.&lt;br /&gt;&lt;br /&gt;Thus, you can see interleaved execution between the threads for f1 and f2 , but never between the threads for b and f1 . The threads for f1 and f2 operate on unique objects and therefore are not affected by the synchronized keyword. The threads for f1 and b , however, operate on the same Foo object and therefore must synchronize on its lock.&lt;br /&gt;&lt;br /&gt;Remember that synchronization locks objects, not methods or code. Simply because a method, or section of code, is declared synchronized does not necessarily mean it is executed by only one thread at a time. This is important if the code in the synchronized method or block alters a mutually shared resource.&lt;br /&gt;&lt;br /&gt;If the code alters an instance variable of the object, no problem results. In the previous example, f1 and f2 are two distinct objects and therefore contain two distinct instance variables. If the printVal method alters the instance variable val , then the code works as expected without conflict because the threads for f1 and f2 alter different data. However, if the printVal method shares some other non-object resource, such as a static variable, a conflict might result. In this case, you must synchronize on a mutually shared object in order to prevent conflicts.&lt;br /&gt;&lt;br /&gt;One final note about the synchronized keyword. The Java language does not allow constructors to be declared synchronized . (A compiler error is generated if the synchronized keyword is present on a constructor declaration.) This is because two threads that call the same constructor concurrently operate on two distinct pieces of memory for two distinct instances of the same class. However, if these constructors contain code that contends for a mutually shared resource, you must synchronize on that resource in order to avoid conflicts.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106429272504297038?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106429272504297038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106429272504297038'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106429272504297038' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106397493689941985</id><published>2003-09-19T05:35:00.000-07:00</published><updated>2003-09-19T05:35:36.710-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;Enable-AutoComplete Feature In Command Line&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;change registry by using regedit. If you have XP you can do this also by using powertoys (tweakxp) &lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Command Processor &lt;br /&gt;&lt;br /&gt;Right click on CompletionChar &lt;br /&gt;DWORD change that to 9 &lt;br /&gt;&lt;br /&gt;restart and you are done. Pressing tab in the command line can complete the next match of the command that you are typing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106397493689941985?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106397493689941985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106397493689941985'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106397493689941985' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106397321173505015</id><published>2003-09-19T05:06:00.000-07:00</published><updated>2003-09-19T05:06:51.796-07:00</updated><title type='text'></title><content type='html'>The Java language does not allow constructors to be declared &lt;b&gt;synchronized &lt;/b&gt;. (A compiler error is generated if the synchronized keyword is present on a constructor declaration.) This is because two threads that call the same constructor concurrently operate on two distinct pieces of memory for two distinct instances of the same class. However, if these constructors contain code that contends for a mutually shared resource, you must synchronize on that resource in order to avoid conflicts.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106397321173505015?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106397321173505015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106397321173505015'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106397321173505015' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106397301853350417</id><published>2003-09-19T05:03:00.000-07:00</published><updated>2003-09-19T05:03:38.640-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www-106.ibm.com/developerworks/java/library/j-praxis/pr46.html"&gt;http://www-106.ibm.com/developerworks/java/library/j-praxis/pr46.html&lt;/a&gt;  Understand that for instance methods, synchronized locks objects, not methods or code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106397301853350417?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106397301853350417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106397301853350417'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106397301853350417' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106325601727904614</id><published>2003-09-10T21:53:00.000-07:00</published><updated>2003-09-10T21:53:37.300-07:00</updated><title type='text'></title><content type='html'>"He who controls vocabulary controls thought" - Luigi Wittgenstein&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106325601727904614?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106325601727904614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106325601727904614'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106325601727904614' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106308156842185574</id><published>2003-09-08T21:26:00.000-07:00</published><updated>2003-09-08T21:26:08.416-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://books.wontstop.com/"&gt;http://books.wontstop.com/&lt;/a&gt; Good E-Books on .NET&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106308156842185574?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106308156842185574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106308156842185574'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106308156842185574' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106308060589375114</id><published>2003-09-08T21:10:00.000-07:00</published><updated>2003-09-08T21:10:05.940-07:00</updated><title type='text'></title><content type='html'>javacoder.net the on-line resource for Java(tm) coders.  &lt;a href="http://javacoder.net/"&gt;http://javacoder.net/&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106308060589375114?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106308060589375114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106308060589375114'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_09_01_archive.html#106308060589375114' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106213990379899682</id><published>2003-08-28T23:51:00.000-07:00</published><updated>2003-08-28T23:51:43.853-07:00</updated><title type='text'></title><content type='html'>Today my number changes (dint get!!!) my b'day. Huh.!! I am getting Old.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106213990379899682?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106213990379899682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106213990379899682'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106213990379899682' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106188952532053787</id><published>2003-08-26T02:18:00.000-07:00</published><updated>2003-08-26T02:18:45.366-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;The Law of Leaky Abstractions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There's a key piece of magic in the engineering of the Internet which you rely on every single day. It happens in the TCP protocol, one of the fundamental building blocks of the Internet.&lt;br /&gt;&lt;br /&gt;TCP is a way to transmit data that is reliable. By this I mean: if you send a message over a network using TCP, it will arrive, and it won't be garbled or corrupted.&lt;br /&gt;&lt;br /&gt;We use TCP for many things like fetching web pages and sending email. The reliability of TCP is why every exciting email from embezzling East Africans arrives in letter-perfect condition. O joy.&lt;br /&gt;&lt;br /&gt;By comparison, there is another method of transmitting data called IP which is unreliable. Nobody promises that your data will arrive, and it might get messed up before it arrives. If you send a bunch of messages with IP, don't be surprised if only half of them arrive, and some of those are in a different order than the order in which they were sent, and some of them have been replaced by alternate messages, perhaps containing pictures of adorable baby orangutans, or more likely just a lot of unreadable garbage that looks like the subject line of Taiwanese spam.&lt;br /&gt;&lt;br /&gt;Here's the magic part: TCP is built on top of IP. In other words, TCP is obliged to somehow send data reliably using only an unreliable tool.&lt;br /&gt;&lt;br /&gt;To illustrate why this is magic, consider the following morally equivalent, though somewhat ludicrous, scenario from the real world.&lt;br /&gt;&lt;br /&gt;Imagine that we had a way of sending actors from Broadway to Hollywood that involved putting them in cars and driving them across the country. Some of these cars crashed, killing the poor actors. Sometimes the actors got drunk on the way and shaved their heads or got nasal tattoos, thus becoming too ugly to work in Hollywood, and frequently the actors arrived in a different order than they had set out, because they all took different routes. Now imagine a new service called Hollywood Express, which delivered actors to Hollywood, guaranteeing that they would (a) arrive (b) in order (c) in perfect condition. The magic part is that Hollywood Express doesn't have any method of delivering the actors, other than the unreliable method of putting them in cars and driving them across the country. Hollywood Express works by checking that each actor arrives in perfect condition, and, if he doesn't, calling up the home office and requesting that the actor's identical twin be sent instead. If the actors arrive in the wrong order Hollywood Express rearranges them. If a large UFO on its way to Area 51 crashes on the highway in Nevada, rendering it impassable, all the actors that went that way are rerouted via Arizona and Hollywood Express doesn't even tell the movie directors in California what happened. To them, it just looks like the actors are arriving a little bit more slowly than usual, and they never even hear about the UFO crash.&lt;br /&gt;&lt;br /&gt;That is, approximately, the magic of TCP. It is what computer scientists like to call an abstraction: a simplification of something much more complicated that is going on under the covers. As it turns out, a lot of computer programming consists of building abstractions. What is a string library? It's a way to pretend that computers can manipulate strings just as easily as they can manipulate numbers. What is a file system? It's a way to pretend that a hard drive isn't really a bunch of spinning magnetic platters that can store bits at certain locations, but rather a hierarchical system of folders-within-folders containing individual files that in turn consist of one or more strings of bytes.&lt;br /&gt;&lt;br /&gt;Back to TCP. Earlier for the sake of simplicity I told a little fib, and some of you have steam coming out of your ears by now because this fib is driving you crazy. I said that TCP guarantees that your message will arrive. It doesn't, actually. If your pet snake has chewed through the network cable leading to your computer, and no IP packets can get through, then TCP can't do anything about it and your message doesn't arrive. If you were curt with the system administrators in your company and they punished you by plugging you into an overloaded hub, only some of your IP packets will get through, and TCP will work, but everything will be really slow.&lt;br /&gt;&lt;br /&gt;This is what I call a leaky abstraction. TCP attempts to provide a complete abstraction of an underlying unreliable network, but sometimes, the network leaks through the abstraction and you feel the things that the abstraction can't quite protect you from. This is but one example of what I've dubbed the Law of Leaky Abstractions:&lt;br /&gt;&lt;br /&gt;All non-trivial abstractions, to some degree, are leaky. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Abstractions fail. Sometimes a little, sometimes a lot. There's leakage. Things go wrong. It happens all over the place when you have abstractions. Here are some examples.&lt;br /&gt;&lt;br /&gt;Something as simple as iterating over a large two-dimensional array can have radically different performance if you do it horizontally rather than vertically, depending on the "grain of the wood" -- one direction may result in vastly more page faults than the other direction, and page faults are slow. Even assembly programmers are supposed to be allowed to pretend that they have a big flat address space, but virtual memory means it's really just an abstraction, which leaks when there's a page fault and certain memory fetches take way more nanoseconds than other memory fetches. &lt;br /&gt;The SQL language is meant to abstract away the procedural steps that are needed to query a database, instead allowing you to define merely what you want and let the database figure out the procedural steps to query it. But in some cases, certain SQL queries are thousands of times slower than other logically equivalent queries. A famous example of this is that some SQL servers are dramatically faster if you specify "where a=b and b=c and a=c" than if you only specify "where a=b and b=c" even though the result set is the same. You're not supposed to have to care about the procedure, only the specification. But sometimes the abstraction leaks and causes horrible performance and you have to break out the query plan analyzer and study what it did wrong, and figure out how to make your query run faster. &lt;br /&gt;Even though network libraries like NFS and SMB let you treat files on remote machines "as if" they were local, sometimes the connection becomes very slow or goes down, and the file stops acting like it was local, and as a programmer you have to write code to deal with this. The abstraction of "remote file is the same as local file" leaks. Here's a concrete example for Unix sysadmins. If you put users' home directories on NFS-mounted drives (one abstraction), and your users create .forward files to forward all their email somewhere else (another abstraction), and the NFS server goes down while new email is arriving, the messages will not be forwarded because the .forward file will not be found. The leak in the abstraction actually caused a few messages to be dropped on the floor. &lt;br /&gt;C++ string classes are supposed to let you pretend that strings are first-class data. They try to abstract away the fact that strings are hard and let you act as if they were as easy as integers. Almost all C++ string classes overload the + operator so you can write s + "bar" to concatenate. But you know what? No matter how hard they try, there is no C++ string class on Earth that will let you type "foo" + "bar", because string literals in C++ are always char*'s, never strings. The abstraction has sprung a leak that the language doesn't let you plug. (Amusingly, the history of the evolution of C++ over time can be described as a history of trying to plug the leaks in the string abstraction. Why they couldn't just add a native string class to the language itself eludes me at the moment.) &lt;br /&gt;And you can't drive as fast when it's raining, even though your car has windshield wipers and headlights and a roof and a heater, all of which protect you from caring about the fact that it's raining (they abstract away the weather), but lo, you have to worry about hydroplaning (or aquaplaning in England) and sometimes the rain is so strong you can't see very far ahead so you go slower in the rain, because the weather can never be completely abstracted away, because of the law of leaky abstractions.&lt;br /&gt;One reason the law of leaky abstractions is problematic is that it means that abstractions do not really simplify our lives as much as they were meant to. When I'm training someone to be a C++ programmer, it would be nice if I never had to teach them about char*'s and pointer arithmetic. It would be nice if I could go straight to STL strings. But one day they'll write the code "foo" + "bar", and truly bizarre things will happen, and then I'll have to stop and teach them all about char*'s anyway. Or one day they'll be trying to call a Windows API function that is documented as having an OUT LPTSTR argument and they won't be able to understand how to call it until they learn about char*'s, and pointers, and Unicode, and wchar_t's, and the TCHAR header files, and all that stuff that leaks up.&lt;br /&gt;&lt;br /&gt;In teaching someone about COM programming, it would be nice if I could just teach them how to use the Visual Studio wizards and all the code generation features, but if anything goes wrong, they will not have the vaguest idea what happened or how to debug it and recover from it. I'm going to have to teach them all about IUnknown and CLSIDs and ProgIDS and ... oh, the humanity!&lt;br /&gt;&lt;br /&gt;In teaching someone about ASP.NET programming, it would be nice if I could just teach them that they can double-click on things and then write code that runs on the server when the user clicks on those things. Indeed ASP.NET abstracts away the difference between writing the HTML code to handle clicking on a hyperlink (&lt;a&gt;) and the code to handle clicking on a button. Problem: the ASP.NET designers needed to hide the fact that in HTML, there's no way to submit a form from a hyperlink. They do this by generating a few lines of JavaScript and attaching an onclick handler to the hyperlink. The abstraction leaks, though. If the end-user has JavaScript disabled, the ASP.NET application doesn't work correctly, and if the programmer doesn't understand what ASP.NET was abstracting away, they simply won't have any clue what is wrong.&lt;br /&gt;&lt;br /&gt;The law of leaky abstractions means that whenever somebody comes up with a wizzy new code-generation tool that is supposed to make us all ever-so-efficient, you hear a lot of people saying "learn how to do it manually first, then use the wizzy tool to save time." Code generation tools which pretend to abstract out something, like all abstractions, leak, and the only way to deal with the leaks competently is to learn about how the abstractions work and what they are abstracting. So the abstractions save us time working, but they don't save us time learning.&lt;br /&gt;&lt;br /&gt;And all this means that paradoxically, even as we have higher and higher level programming tools with better and better abstractions, becoming a proficient programmer is getting harder and harder.&lt;br /&gt;&lt;br /&gt;During my first Microsoft internship, I wrote string libraries to run on the Macintosh. A typical assignment: write a version of strcat that returns a pointer to the end of the new string. A few lines of C code. Everything I did was right from K&amp;R -- one thin book about the C programming language. &lt;br /&gt;&lt;br /&gt;Today, to work on CityDesk, I need to know Visual Basic, COM, ATL, C++, InnoSetup, Internet Explorer internals, regular expressions, DOM, HTML, CSS, and XML. All high level tools compared to the old K&amp;R stuff, but I still have to know the K&amp;R stuff or I'm toast.&lt;br /&gt;&lt;br /&gt;Ten years ago, we might have imagined that new programming paradigms would have made programming easier by now. Indeed, the abstractions we've created over the years do allow us to deal with new orders of complexity in software development that we didn't have to deal with ten or fifteen years ago, like GUI programming and network programming. And while these great tools, like modern OO forms-based languages, let us get a lot of work done incredibly quickly, suddenly one day we need to figure out a problem where the abstraction leaked, and it takes 2 weeks. And when you need to hire a programmer to do mostly VB programming, it's not good enough to hire a VB programmer, because they will get completely stuck in tar every time the VB abstraction leaks.&lt;br /&gt;&lt;br /&gt;The Law of Leaky Abstractions is dragging us down.&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/5594845-106188952532053787?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106188952532053787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106188952532053787'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106188952532053787' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106188834227308111</id><published>2003-08-26T01:59:00.000-07:00</published><updated>2003-08-26T01:59:02.326-07:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;This post is from Alek Weblog. I am also trying to find such a guy or else I have to start similar to Chris Brumme. Before that I have to read Chris Blogs carefully to know how extent he is writing the Internals.&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;b&gt;Where Are Java Senior Engineers? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Reading a blog of such high quality as &lt;b&gt;Chris Brumme &lt;/b&gt;where he is dissecting CLR internals in such depth (for example asynchronous operations) that it brings a joy to any engineers heart even if it is Java enthusiast.&lt;br /&gt;&lt;br /&gt;I just can not stop to wonder where are Java blogs of such caliber that goes into such details and are written not by users but by creators. Java.net seems to be under control of "How-To" writers (exactly opposite to what Chris is doing), evangelists, SUN enthusiasts, and marketing specialists. Not exactly what I would call "The Source For Java(TM) Technology" and engineers seems to be lacking sorely from "a diverse group of engineers, researchers, technologists, and evangelists at Sun Microsystems" that was supposed to propel that site. &lt;br /&gt;&lt;br /&gt;So where is SUN hiding all these Java engineers? &lt;br /&gt;&lt;br /&gt;Please let me know if somebody knows where to find them ...&lt;br /&gt;--------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&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/5594845-106188834227308111?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106188834227308111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106188834227308111'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106188834227308111' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106135899922896204</id><published>2003-08-19T22:56:00.000-07:00</published><updated>2003-08-19T22:56:39.103-07:00</updated><title type='text'></title><content type='html'>Java Interfaces are a great tool for providing clean designs. I almost hesitate to point out that they can have a minor performance penalty. A method call on an object that is declared as an interface type is slower than a method call on a regular class type. I would only consider attempting optimizing this type of code in the most severely performance sensitive code. &lt;br /&gt;&lt;br /&gt;For those interested, I have provided some details. Regular Java virtual method calls are done by looking up the method stored at a constant offset into the object's Class's method table. A method call on an interface will be called on object's with different method table layouts. The correct method in the method table cannot be found with a constant offset. A distinct mechanism for finding the right method must be used. There are technique to make this operation fairly efficient, but it is fundamentally slower than a normal method call. &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/5594845-106135899922896204?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106135899922896204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106135899922896204'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106135899922896204' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106118462286893790</id><published>2003-08-17T22:30:00.000-07:00</published><updated>2003-08-17T22:30:22.870-07:00</updated><title type='text'></title><content type='html'>This website is personal experience while doing SCEA, SCJP... of Jane. &lt;a href="http://www.janeg.ca/"&gt;http://www.janeg.ca/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106118462286893790?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106118462286893790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106118462286893790'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106118462286893790' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106118452835285919</id><published>2003-08-17T22:28:00.000-07:00</published><updated>2003-08-17T22:28:48.356-07:00</updated><title type='text'></title><content type='html'>Check this website for Java Tips &lt;a href="http://www.javafaq.nu"&gt;http://www.javafaq.nu&lt;/a&gt;. I have to dowload this eBook yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106118452835285919?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106118452835285919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106118452835285919'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106118452835285919' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106083578011313781</id><published>2003-08-13T21:36:00.000-07:00</published><updated>2003-08-13T21:40:59.830-07:00</updated><title type='text'></title><content type='html'>One of the first lessons you should learn about tuning is not to &lt;b&gt;guess&lt;/b&gt;. Don't guess that there may a performance problem. Implement the code simply, with good coding practices, then measure the performance and find the bottlenecks. If there is a bottleneck, use one of the hundreds of performance tuning techniques available (including reusing objects just like the example above) to improve the performance of the bottleneck. Then document clearly what you've done. (I like to keep the old code in comments.) &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106083578011313781?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106083578011313781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106083578011313781'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106083578011313781' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106083415175589473</id><published>2003-08-13T21:09:00.000-07:00</published><updated>2003-08-13T21:13:51.723-07:00</updated><title type='text'></title><content type='html'>The Java News Brief&lt;br /&gt;&lt;a href="http://www.ociweb.com/jnb/index.html"&gt;http://www.ociweb.com/jnb/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106083415175589473?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106083415175589473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106083415175589473'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106083415175589473' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106083328342175678</id><published>2003-08-13T20:54:00.001-07:00</published><updated>2003-08-13T21:04:16.456-07:00</updated><title type='text'></title><content type='html'>This website has good book  for Mastering The Fundamentals of the Java&amp;iuml;?&amp;frac12; Programming Language                                               &lt;a href="http://www.javarules.com/"&gt;http://www.javarules.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106083328342175678?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106083328342175678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106083328342175678'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106083328342175678' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106083326234138840</id><published>2003-08-13T20:54:00.000-07:00</published><updated>2003-08-13T20:59:02.440-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;About equals()&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;equals() method can be misleading. Every class in Java inherits this&lt;br /&gt;method from the Object class whether it's a Java class or a class&lt;br /&gt;created by you. &lt;br /&gt;&lt;br /&gt;If you think about it, equals can mean different things to different&lt;br /&gt;classes. Imagine two people - you can think of them as equal if they&lt;br /&gt;are&lt;br /&gt;the same age, same height, same shoe size OR all of the above. So&lt;br /&gt;clearly, Object has to define SOME criteria of comparing the two.&lt;br /&gt;&lt;br /&gt;If you don't write your own equals method, you get the DEFAULT equals&lt;br /&gt;from Object, which basically says that one object is ONLY equals to&lt;br /&gt;another if they are located in the same place in memory. So, even if&lt;br /&gt;they have the same behavior and same attributes to them, if they are&lt;br /&gt;located in different places in memory - they are NOT equals.&lt;br /&gt;&lt;br /&gt;To give you another example, take the String class. String class&lt;br /&gt;decided not to keep the DEFAULT implementation of the Object class,&lt;br /&gt;but&lt;br /&gt;to override it and say that if two strings are the same, even if they&lt;br /&gt;are located in different places in memory it will still consider them&lt;br /&gt;equal.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106083326234138840?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106083326234138840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106083326234138840'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106083326234138840' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106074829886156383</id><published>2003-08-12T21:18:00.000-07:00</published><updated>2003-08-13T21:08:42.206-07:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;Overloading considered harmful&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is overloading, once again? Same method name for different methods - sounds harmless enough! &lt;br /&gt;&lt;br /&gt;Sure it's one of the first things Java programmers are confronted with when learning the language. You are told things like: Do not mix it up with overriding - remember, these things may look quite similar, but are altogether different concepts! Then your Java introduction goes on telling you about unique parameter lists, and after one and half pages you get the impression that this is something not so terribly hard to understand. [HK: I can vouch for this argument. In my Java courses, students commonly make this mistake.] &lt;br /&gt;&lt;br /&gt;What is the value proposition of this seemingly simple feature? &lt;br /&gt;&lt;br /&gt;Shorter interfaces, not bogged down by artificial, tiresome discriminators, and a bit of lexical structuring of your class text: Overloading allows you to indicate the conceptual identity of different methods, letting you stress common semantics across methods so that similarities become apparent at first sight. It's supposed to make your code more readable, and what regards server code - the code, where these method siblings are defined -, it really does. &lt;br /&gt;&lt;br /&gt;There are many who like it. There is tons of code using what overloading has to offer. And of course, you cannot even escape it in Java, where you're simply forced to use it when you want to provide different initializers. It seems, overloading rules - a feature not only popular, but tightly integrated into some important programming languages, an open commitment of venereous language designers that surely does not fail to impress the masses. And, what is more: no performance penalty whatsoever... &lt;br /&gt;&lt;br /&gt;Now, should we fully embrace overloading in our own code then? Should we use it wherever possible? This discussion shall present an attempt to put the technical facts investigated in-depth by a former edition of this newsletter into a usage perspective - a bit similar in spirit to the popular harping on pointers which you can find in every Java introduction. The seminal idea that overloading clashes with dynamic binding is taken from a discussion of overloading to be found in "Object-Oriented Software Construction" by Bertrand Meyer. &lt;br /&gt;&lt;br /&gt;There is no reason to question that naming conventions to indicate conceptual interrelatedness of different methods will benefit the class text where these methods are defined. To adopt the convention of reusing the same method name, however, has unfortunate consequences on client code which can become quite unintuitive, to say the least. &lt;br /&gt;&lt;br /&gt;Overloading with parameter lists of different length pose no problem for client code interpretation, as they openly disambiguate client calls at first sight. Things that could irritate you just will not compile. However, when overloaded methods with the same method name have parameter lists of the same length, and when the actual call arguments conform to more than one signature of these overloaded methods, it somehow gets a little hard to tell which methods are actually executed just looking on the client calls. In this situation, you experience the strange phenomenon that the methods being called are not independent of the reference types being used for the calls. &lt;br /&gt;&lt;br /&gt;There are several problems related to this, but first let's take another look on the small code example presented in a former edition of this newsletter in order to really get a feel for what it's like when methods being called are not independent of the reference types being used for the calls. &lt;br /&gt;&lt;br /&gt;A minimal modification allows us to focus on the ugly side of overloading: The program still tells us which method gets actually called, but on top of that also delivers rather strong comments when overloading is caught to harm our ability to reason about the client code without knowing the server classes. &lt;br /&gt;&lt;br /&gt;Basically, we have two fixed instances, which will play always the same roles: one serving as call target, the other serving as argument. Now we mix and match several calls always to be executed on these same instances (always the same target object, always the same argument object) the only difference being the reference types through which these objects are accessed. And behold: Different methods are being called. If you are familiar with this simple setting, you may skip the program part to directly go on with the following discussion. &lt;br /&gt;&lt;br /&gt;public class OverloadingTest {&lt;br /&gt;  public abstract static class Top {&lt;br /&gt;    public String f(Object o) {&lt;br /&gt;      String whoAmI = "Top.f(Object)";&lt;br /&gt;      System.out.println(whoAmI);&lt;br /&gt;      return whoAmI;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static class Sub extends Top {&lt;br /&gt;    public String f(String s) {&lt;br /&gt;      String whoAmI = "Middle.f(String)";&lt;br /&gt;      System.out.println(whoAmI);&lt;br /&gt;      return whoAmI;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;    Sub sub = new Sub();&lt;br /&gt;    Top top = sub;&lt;br /&gt;&lt;br /&gt;    String stringAsString = "someString";&lt;br /&gt;    Object stringAsObject = string;&lt;br /&gt;&lt;br /&gt;    if (top.f(stringAsObject) == sub.f(stringAsString))&lt;br /&gt;    //if (top.f(stringAsObject) == sub.f(stringAsObject))&lt;br /&gt;    //if (top.f(stringAsString) == sub.f(stringAsString))&lt;br /&gt;    //if (top.f(stringAsString) == sub.f(stringAsObject))&lt;br /&gt;    //if (sub.f(stringAsString) == sub.f(stringAsObject))&lt;br /&gt;    //if (top.f(stringAsString) == top.f(stringAsObject))&lt;br /&gt;    {&lt;br /&gt;      System.out.println("Hey, life is great!");&lt;br /&gt;    } else {&lt;br /&gt;      System.out.println("Oh no!");&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Can you tell what happens with activating each of the conditions? &lt;br /&gt;&lt;br /&gt;Let us carefully go through the code. &lt;br /&gt;&lt;br /&gt;There are two overloaded methods spread across a class hierarchy (one class inheriting from another class). This is the server code to be called by the client.&lt;br /&gt;The superclass defines: String f(Object o).&lt;br /&gt;The subclass defines: String f(String o).&lt;br /&gt;The signatures are chosen to make both methods eligible candidates to be executed in the context of calls on the subclass instance with a String argument. &lt;br /&gt;The client provides two objects, reused for all calls and chosen in a way that both overloaded methods are potentially eligible candidates for executing the client calls. &lt;br /&gt;Through polymorphic assignment, the client obtains references of different types for these two instances. &lt;br /&gt;The client makes method calls that differ only in the different references used for making the call. In the given setup, there are 4 different call forms possible: Overloading has the method name fixed, so only the target reference type and the parameter reference type are variable. Every reference type for the target can be combined with every reference type for the argument. (Mathematically spoken, there are 4 binary strings of length 2). &lt;br /&gt;The comparisons then are really just for fun, eliminating detail. They shift the focus of attention from the question what particular method gets called to the general insight that different methods get called, additionally allowing the program to be explicit about its likes and dislikes: Every case of seeming reference-independence of the calls is instantly interpreted as an example of how things should be, and welcomed with a happy, optimistic "Hey, life seems great!" In those some dark moments, however, when overloading casts its dark shadow upon the else so object-oriented Java world, and just nothing seems right, our little program starts to complain... Combinatorics tells us six 2-combinations of a 4-set (consisting of 4 call forms) exist, and so you find six comparisons (five of them showing up as comments), but of course, already one single predicate returning false (different methods having been called) suffices to get the point across. &lt;br /&gt;And that's it. &lt;br /&gt;&lt;br /&gt;Discussion&lt;br /&gt;The program shows, once again, that one thing to be aware of in connection with overloading is that it's all about reference types. This is as true for target reference types as it is for parameter reference types. For instance, the predicate "sub.f(stringAsObject) == sub.f(stringAsString)" will resolve to false in our setup because two different methods are executed. This dependence on reference types in connection with overloading may or may not be what you expected, but the question remains if this is a clean approach to object-oriented programming. &lt;br /&gt;&lt;br /&gt;No doubt, this may puzzle many a brave programmer, as it is a result absolutely exclusive to overloaded methods. And, as the use of overloaded methods does not identify itself as such in the method call, the intuitive, but unfortunately wrong expectation might be that the predicate returns true, as it would be the case with any gentle non-overloaded method. &lt;br /&gt;&lt;br /&gt;Honest, do we like this? No. Object-oriented programming, as we know it, is about objects, not about references. We expect objects to behave the way they are and not the way they are referenced. Objects do their thing regardless of the role the client assigns them. This is how it should be be, and we call this thing dynamic binding. It is not cosmetics, it is not just a feature, it is THE feature. It shapes the architecture of our systems, decoupling clients from servers. &lt;br /&gt;&lt;br /&gt;Now, with overloading a second rule, reference type dependence, takes over, breaking the fundamental polymorphic equivalence property described above (that polymorphic assignments do not change the results of method calls as long as the code can be compiled). The choice of references in the client, which should be based on considerations like grouping and low coupling, suddenly has to take the demands of overloading into account. Overloaded server objects affect the design of client code. Cosmetics beat structure. Unlike overriding, overloading cannot just be applied in a server method definition act and end of the story. It is a feature you have to stay aware of in your clients whose specific referencing of server objects influences what functionality gets called in the end. While with dynamic binding alone the method to be executed is completely server-defined, overloading proves to be client-sensitive. &lt;br /&gt;&lt;br /&gt;Now to the problems. An important issue closely connected to software quality is readability. Our ability to reason about the software text is essential for any kind of maintenance, and, as you might have guessed by the direction this discussion has taken by now, overloading affects readability of client code in a rather negative way. It is all very well to let the program run and after the surprise look at the server code and explain the strange things away (oh, of course, overloaded methods, you know...), but nevertheless it would be preferable by far to predict the behaviour, simple as it is, by simply (i.e. exclusively) examining the client. Show me the client class, tell me no overloading is involved, and I tell you: "Hey, life seems great!" I can reason about the result of the condition solely looking at the client class. &lt;br /&gt;&lt;br /&gt;With overloading being introduced, or even with just the slightest chance of overloading being used (this includes all unknown Java code), this statement is impossible to make, because you cannot tell if the same server method gets called without examining the server sources. In our program, you would have to read three classes instead of one to know what's going on. So, use of overloading weakens the expressive power of client code as the polymorphic equivalence property cannot be relied upon. &lt;br /&gt;&lt;br /&gt;Sometimes, of course, you are willing to dig into the server code because you want to find out the exact server method that gets called. But even then overloading significantly complicates things. Without overloading, you just work your way bottom up through the target's class hierarchy, and when you find a match, bingo, you're done! With unknown code or code known to use overloading, this can be only your second step. First you have to examine the class of the reference and find the matching method. Only then can you check the class hierarchy for overriding methods. The bad thing about this is probably not the additional step involved, but that you have to repeat this analysis for every different reference type, because results can vary. Thus, overloading complicates the analysis of client-server interaction. &lt;br /&gt;&lt;br /&gt;There is also a psychological dimension to all this. The following will try to show that overloading is not a gentle, unobtrusive language feature, but, as it stands in conflict with other language features, late binding and inheritance, particularly prone to abuse. In other words, overloading is an open invitation for introducing conceptual errors. Think of novice programmers or programmers in a rush. Overloaded methods, coming with its own method selection rules, present an anomaly in the object-oriented landscape shaped by the presence of dynamic binding, and will surely go on to puzzle people, who will falsely think overloaded methods behave like "normal" methods, or mistake overloading for overriding just because the methods signatures involved in overloading look so similar. &lt;br /&gt;&lt;br /&gt;In fact, such a mistake may be seen as expressing justified desires regarding object-oriented design. Hell, we'd sure like to see the overloaded methods in our example being handled as an instance of overriding! The parameters of our methods are related through inheritance, so inspired by other programming languages, it does not take great imagination to see the derived class define a method that overrides the inherited method. Of course, this is an additional twist adding a bit of vision to our discussion, and of course, we know that Java does not support such covariant method redefinition (restricting the parameter domain of the method): Most of us have learnt by now that Java allows only specification inheritance (overriding being only defined for methods with the same return and parameter types). But still. Do we not think, deep in our heart, that the subclass method with the more specific parameter should, in a better world maybe, be the one in charge, overriding the superclass method? Think about an Integer class inheriting from Number while redefining addition for integers only. Not allowed in Java, but still desirable (and a real feature in other languages such as Eiffel). Sure, overloading is not to be blamed for an incorrect understanding of inheritance in Java, but it clearly invites such fantasies (and the corresponding errors) when used in a context such as the presented one. And even if such interpretations are wrong - shouldn't they be right? &lt;br /&gt;&lt;br /&gt;And then the poor integration of overloading and inheritance in Java, which is very misleading as well. Reference type dependence means that overloading is simply not developed to conceptual consistency in the context of inheritance. Guessing from experience with overloaded methods defined in one and the same class, we might expect the method with the best match in terms of formal parameter type and actual method argument to be called on the object. This does not happen, though. Java does not produce any kind of "flat form" for the object's class with all overloaded methods, inherited or not, appearing side by side in a list in order to allow the runtime to choose the most appropriate. &lt;br /&gt;&lt;br /&gt;No, what technically happens, is, in my understanding, that the compiler takes the method symbol plus the parameter reference types of some method call and calculates a position in the method table of the target's reference type. So, choosing between overloaded methods is done compile-time, and it is restricted to the overloaded methods of one class: the class of the reference type. Overloaded methods defined in subclasses of the reference type are never called: Java ignores the exiled siblings although the whole thing looks so very similar to overriding. &lt;br /&gt;&lt;br /&gt;With overloaded methods being defined in superclasses of the reference type, Java exhibits quite strange behaviour: While the server code can still be compiled, client code will break: Trying to make a method call where the compiler would have to choose between them, you get a compilation error, complaining that the call is ambiguous. Put the method into the reference type and all is well. Don't ask me why - just remember selection of overloaded methods is limited to the reference type class. I personally believe this further anomaly might is more a compiler issue than a language issue. If you find a logic explanation for this, other than that it helps to improve compilation performance, please let me know. &lt;br /&gt;&lt;br /&gt;Once again (the last time): overloaded methods defined in subtypes of the target reference will not be taken into consideration as candidates for execution by the runtime. With the table position given in the bytecode, the runtime will only check if there are overriding methods (which will appear at the same position in the method tables of subclasses if they exist). So, the compiler cannot hunt them down, and the runtime does not want to. &lt;br /&gt;&lt;br /&gt;A consequence of this is, disturbingly, that the place where non-overridden overloaded methods are defined in the class hierarchy is of essential importance what regards the selection of the method being actually called. To me, this sounds a little scary, or would you really want your class design to be influenced by the crippled demands of overloading? Summing up: Overloading is a static compile-time feature which does not integrate well with our expectations shaped by dynamic method lookup coming along with inheritance. &lt;br /&gt;&lt;br /&gt;What else can we do to shoot the dead man? (Who is still alive enough to ruin our programs, of course.) Bertrand Meyer sees overloading as a violation of the "principle of non-deception: differences in semantics should be reflected by differences in the text of the software" (OOSC 94, Bertrand Meyer). But wait a second, isn't late binding another case where there is only one method symbol for different methods? &lt;br /&gt;&lt;br /&gt;As I understand it, the difference between late binding and overloading can be pinned to the observation that late binding lets one method name to be the pointer to one operation contract (which then can be fulfilled by several different methods whose differences are nevertheless absolutely transparent to the client code), whereas overloading lets one method name to be the pointer for several method specifications whose differences can be experienced in the client code. In the scope of the client, there is no difference between polymorphic calls bound to different methods. The polymorphic call specification is all the client has to know about the call. Overloaded methods, on the other hand, need not share common semantics, to be more precise, a common contract, their pre- and postconditions potentially varying wildly. This is something the client always has to take into account: Overloaded methods can not be used interchangeably, as different methods just under the same hood they have to be treated according to their specific contracts. These contracts, however, are hidden behind the same name which makes them hard to identify.The same method name does not point to a common denominator, in this case, but only serves to disguise differences that have to be laboriously disambiguated lateron. The client has to stay aware of the method contract being pointed to by a complicated three component key for the method which, as we have seen, consists of target reference type, method name, and parameter reference types. &lt;br /&gt;&lt;br /&gt;So what are my final words to the programmer who, after having read this article, wonders if he should try to use overloading now wherever possible or not? Keep going... And if you really, really want to use it, go on and do so, but only with different method names - this is a trick stolen from real experts that can improve your overloading a lot! :o) &lt;br /&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/5594845-106074829886156383?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106074829886156383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106074829886156383'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106074829886156383' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106074820214581575</id><published>2003-08-12T21:16:00.000-07:00</published><updated>2003-08-13T21:06:45.706-07:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;James Gosling:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I've been inescapably tagged as "the Java guy", despite the fact that I havn't worked in the Java product organization for a couple of years (I do still kibbitz). These days I work at Sun's research lab about two thirds of the time, and do customer visits and talks the other third.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106074820214581575?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106074820214581575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106074820214581575'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106074820214581575' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106069224214194457</id><published>2003-08-12T05:44:00.000-07:00</published><updated>2003-08-13T21:05:16.236-07:00</updated><title type='text'></title><content type='html'>SCEA meterial :&lt;a href="http://www.leocrawford.org.uk/work/jcea"&gt;http://www.leocrawford.org.uk/work/jcea&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106069224214194457?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106069224214194457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106069224214194457'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106069224214194457' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106009445324112828</id><published>2003-08-05T07:40:00.000-07:00</published><updated>2003-08-05T07:40:53.276-07:00</updated><title type='text'></title><content type='html'>"I've always had this question: do we invent patterns or do we discover them? By definition patterns are sets of (problem-context-solution) and have value only if the problem occurs repeatedly. So it's clear that we invent neither the problem nor the context..."  &lt;br /&gt;&lt;br /&gt;- Tunisian&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106009445324112828?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106009445324112828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106009445324112828'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106009445324112828' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106006252755443097</id><published>2003-08-04T22:48:00.000-07:00</published><updated>2003-08-04T22:48:47.600-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;Patterns 101: The Factory Method&lt;/b&gt;&lt;br /&gt;The source code listings for this article are available in our download section.&lt;br /&gt;&lt;br /&gt;It looks as though there are still a lot of software developers out there that just don't get it when it comes to design patterns. When interviewing architects and senior developers, I always ask the following question: "Are you familiar with design patterns, and if so, how would you describe the value in applying them to your work?"&lt;br /&gt;&lt;br /&gt;For the most part, I get either no answer or a textbook answer without much substance. I guess that shouldn't be too surprising. I personally picked up the book Design Patterns: Elements of Reusable Object-Oriented Software by the so-called Gang of Four (or GoF for short) several times before I understood patterns, each time saying "this time I'm going to get it". I never did; or at least not by reading the book anyway.&lt;br /&gt;&lt;br /&gt;I finally got it while designing an application a couple of years ago. This was an application that I knew would eventually have to be extended to handle new (and changing) requirements. I started sketching out my design, and as I did so, I remembered some things I had read about factories, commands, and how they related to pattern basics. Suddenly those ideas made sense and guided me through a design that stood up to extension. Now that I understand pattern basics and how they apply to my design, I get a lot more out of reading about new patterns.&lt;br /&gt;&lt;br /&gt;This article is intended to be very fundamental as it applies to patterns. Anyone who has a basic or strong understanding of the importance and appropriate use of patterns will probably not learn anything new. This article is directed at the developer who has heard about patterns or read about them and finds himself or herself saying "I just don't get it." If that describes you and you are willing to give this article careful thought, I'm confident that this will be a turning point for you. I believe we can make the light bulb go on by taking a simple problem, first doing it the wrong way, and then doing it the right way.&lt;br /&gt;&lt;br /&gt;So if you think you have something to learn about design patterns, then on to the example...&lt;br /&gt;&lt;br /&gt;The Factory Method Pattern&lt;br /&gt;There are a slew of design patterns out there. Let's look at one of the basics: the factory method. A factory method class commits to return an object of a base class (or interface). The object returned by the factory method will actually be a subclass of that type. The calling program will treat that object in the generic manner (as defined by the base class), and the object will demonstrate specific functionality (of the extended class). These statements will become clearer after we've stepped through the example. You may want to read this paragraph again, once you have a better understanding of the approach.&lt;br /&gt;&lt;br /&gt;Example: My Tasks&lt;br /&gt;Being a software architect, I can't remember what I'm supposed to do without writing it down, so I've composed a program to list my daily tasks based on what day of the week it is.&lt;br /&gt;&lt;br /&gt;Here is my task list: &lt;br /&gt;Monday: Move the trash to the curb &lt;br /&gt;Tuesday: Put out the recyclables &lt;br /&gt;Wednesday: Tape "South Park" &lt;br /&gt;Thursday: Move the trash to the curb &lt;br /&gt;Friday: Buy beer &lt;br /&gt;See Listing 1: MainProcedural.java for the class I've written to display those tasks.&lt;br /&gt;&lt;br /&gt;Note that this class doesn't give me any direction on the weekends. After some time, I decide to extend it to include my weekend tasks:&lt;br /&gt;&lt;br /&gt;Saturday: Cut the lawn &lt;br /&gt;Sunday: Call Mom. &lt;br /&gt;The changes I have to make are pretty straight forward:&lt;br /&gt;&lt;br /&gt;Change the switch statement to include cases for Saturday and Sunday. &lt;br /&gt;Write new methods to handle the task displays: showSaturdayTasks() and showSundayTasks(). &lt;br /&gt;There's an object oriented guideline that I've found to be pretty consistently valid: if you're asking a lot of questions about the nature of your objects in the operational parts of your application, you probably aren't taking an object oriented approach to the problem. In other words, if you see a lot of if, switch, and instanceof statements when you're dealing with your objects, there's a good chance you have some room to improve your design.&lt;br /&gt;&lt;br /&gt;So I decide I'm not going to modify my application as I've indicated above. First, I'm going to redesign it with what I consider a better approach:&lt;br /&gt;&lt;br /&gt;I'm going to replace the switch statement with a static method in a class that will function as a factory. &lt;br /&gt;I'm going to replace the show[Day]Tasks() methods with individual classes that extend a new base class called DayTasks. (A whole class for each day of the week? And it just prints out a task list? Yeah, probably overkill for this example, but bear with me; it makes sense.) &lt;br /&gt;So I will replace MainProcedural.java with these classes:&lt;br /&gt;&lt;br /&gt;The central class as shown in Listing 2: MainPatterns.java &lt;br /&gt;The factory class, as shown in Listing 3: DayTaskFactory.java, that will return us a specific class depending on what day of the week it is. &lt;br /&gt;An abstract base class as shown in Listing 4: DayTasks.java. The core class will deal with objects of this type. We could have just as easily made DayTasks.java an interface. &lt;br /&gt;Five other classes, as shown in Listing 5, that each extend DayTasks.java and manage the specific message for the day of the week. &lt;br /&gt;These classes will each extend DayTasks.java and manage the specific message for the day of the week.&lt;br /&gt;&lt;br /&gt;When I run this application, my output is identical to my procedural design. That's not a surprise. We don't employ a pattern-based approach for the application end-user's benefit (not directly, anyway).&lt;br /&gt;&lt;br /&gt;So what can I accomplish with design patterns that can't be done with a more traditional procedural approach? If you're talking about application functionality, the answer is: probably nothing. Patterns deal with how you design your system and organize your code. The example in this article will demonstrate how the procedural approach builds a routine and the pattern approach builds a framework. This pattern approach lends itself to simpler extensibility because decision-making is handled in the factory, which itself hides (or encapsulates) the operational specifics that are handled in the DayTasks subclasses. With the procedural approach, the separation of functionality isn't organized (or separated) as well. The act of encapsulating variation is an important principle that runs throughout the object oriented paradigm and many software patterns.&lt;br /&gt;&lt;br /&gt;So my initial modification plans:&lt;br /&gt;&lt;br /&gt;Change the switch statement to include cases for Saturday and Sunday. &lt;br /&gt;Write new methods to handle the task displays: showSaturdayTasks() and showSundayTasks(). &lt;br /&gt;Are now replaced with these plans:&lt;br /&gt;&lt;br /&gt;Create classes that print messages for Saturday and Sunday. &lt;br /&gt;Modify the factory to also return these classes. &lt;br /&gt;The modified factory is provided in Listing 6: DayTaskFactory.java, and new classes for Saturday and Sunday are provided in Listing 7.&lt;br /&gt;&lt;br /&gt;The Important Part&lt;br /&gt;The reader might think: "So basically you just moved the switch statement into the factory and handled the messages in separate classes instead of using specific methods. Is that such a big deal?"&lt;br /&gt;&lt;br /&gt;Response: Yeah, it is. That's the whole idea. It may not seem like such a big deal with this trivial example (in fact it may seem like more work), but as the core application gets more complicated, and the scope of the application grows, the organization of application code is a very big deal. The second approach is more suitable for teams of developers: each developer could work on his or her DayTasks subclasses without worrying about dependencies, working on the same file concurrently, or duplicating effort. And imagine that you got your core classes to the point where they were stable, handling exceptions where necessary, logging, and performing other base functionality as well. Isn't it nice that you extended the functionality of the system at large without touching the core class? That's why this approach is considered a framework: the functionality was extended by adding a class that plugged in to the existing model - a class that wasn't even conceived by the time the core class stabilized.&lt;br /&gt;&lt;br /&gt;What are the major points?&lt;br /&gt;&lt;br /&gt;The approach we took here is founded on encapsulating variation and polymorphism. Each task (or set of tasks) for a day descends from a common interface (DayTasks). We only deal with this common interface (which the factory always returns), while the underlying implementation may provide varying behavior. &lt;br /&gt;The purpose of a factory class is to isolate the decision-making code of your system. Of course you may need separate factories if you're dealing with a range of object types. When you are comfortable with the concepts presented in this article, you may want to read about a related pattern that builds on the factory method &amp;#8211; the abstract factory. &lt;br /&gt;We extended the functionality of our program without changing the core classes (class, in this case), and that's a good thing. &lt;br /&gt;Conclusion&lt;br /&gt;So that's it. I think by having a grasp of the why when it comes to patterns, you can understand what they are. As I mentioned earlier, you might have to implement an example similar to the one presented here to fully understand and appreciate the approach. Look for some application you've written that has a switch statement or a series of if/else conditions. Look at the statements that are called in each if/else block and think about the base classes and extended classes that can perform the necessary operations. You may never code an application the same old way again.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106006252755443097?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106006252755443097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106006252755443097'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106006252755443097' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106000867234820884</id><published>2003-08-04T07:51:00.000-07:00</published><updated>2003-08-04T07:51:12.400-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.modelingstyle.info/"&gt;http://www.modelingstyle.info/ &lt;/a&gt; for UML Diagram Tips &amp; Guidelines &lt;br /&gt;&lt;a href="http://www.itbookclub.net/"&gt;http://www.itbookclub.net/ &lt;/a&gt; for books &lt;br /&gt;&lt;a href="http://www.bredemeyer.com/"&gt;http://www.bredemeyer.com/ &lt;/a&gt;for Architecture &lt;br /&gt;&lt;a href="http://www.softwarearchitect.biz/"&gt;http://www.softwarearchitect.biz/ &lt;/a&gt;for the same above&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106000867234820884?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106000867234820884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106000867234820884'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106000867234820884' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-106000833644834660</id><published>2003-08-04T07:45:00.000-07:00</published><updated>2003-08-04T07:45:36.490-07:00</updated><title type='text'></title><content type='html'>This is a good Resource for Java 1.4 Examples by Package wise http://javaalmanac.com/&lt;a href="http://javaalmanac.com/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-106000833644834660?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106000833644834660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/106000833644834660'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_08_01_archive.html#106000833644834660' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105971164183183155</id><published>2003-07-31T21:20:00.000-07:00</published><updated>2003-07-31T21:20:41.843-07:00</updated><title type='text'></title><content type='html'>This guys blog is very cool(Siva Jagadeesan) &lt;a href="http://java2simple.blog-city.com/"&gt; http://java2simple.blog-city.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105971164183183155?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105971164183183155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105971164183183155'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105971164183183155' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105962665737260030</id><published>2003-07-30T21:44:00.000-07:00</published><updated>2003-07-30T21:44:17.403-07:00</updated><title type='text'></title><content type='html'>Urban performance legends : &lt;a href="http://www-106.ibm.com/developerworks/java/library/j-jtp04223.html?ca=dgr-lnxw01JavaUrbanLegends"&gt; http://www-106.ibm.com/developerworks/java/library/j-jtp04223.html?ca=dgr-lnxw01JavaUrbanLegends&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105962665737260030?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962665737260030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962665737260030'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105962665737260030' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105962615332819033</id><published>2003-07-30T21:35:00.000-07:00</published><updated>2003-07-30T21:35:53.340-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.javacamp.org/index.html"&gt;http://www.javacamp.org/index.html&lt;/a&gt;    Has some good stuff&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105962615332819033?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962615332819033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962615332819033'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105962615332819033' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105962568216886353</id><published>2003-07-30T21:28:00.000-07:00</published><updated>2003-07-30T21:28:02.173-07:00</updated><title type='text'></title><content type='html'>Intersting link from Suds blog on J Vs c#&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.javacamp.org/javavscsharp/"&gt;http://www.javacamp.org/javavscsharp/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105962568216886353?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962568216886353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962568216886353'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105962568216886353' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105962543239993458</id><published>2003-07-30T21:23:00.000-07:00</published><updated>2003-07-30T21:23:52.400-07:00</updated><title type='text'></title><content type='html'>I got dragged into a little flame-fest on a mailing list and got a little out of hand... Here's a email from me: &lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;What a troll-ish set of remarks based on zero knowledge and spreading massive falsehoods. Normally I don't respond to such drivel, but this time, if feels like I have to: &lt;br /&gt;&lt;br /&gt;From: XXX Subject: Re: YYY&lt;br /&gt;&lt;b&gt;No, as I understand it he is a C developer. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It is true, I have been a C developer, and I still do occasionally. But I have also developed code in C++, Fortran, Algol, SNOBOL, Mesa, Smalltalk, Pascal, Modula, Simula, Cobol, Basic, Focal, BLISS, PL/1, Pearl, several versions of Lisp, and assembler code for x86, Sparc, PowerPC, IBM 360/370, CDC 7000(CPU and PPU), PDP {8,10,11,VAX} and a bunch of stuff too obscure for me to remember at all. Of that lot I've probably written the most in C - at least 500K lines of C written by me, personally, over a couple of decades. For the last decade I've written almost zero C code and write almost exclusively in Java. &lt;br /&gt;Apart from throwing T-shirts, he hasn't done any work with Java lately. &lt;br /&gt;One could start a Clintonian debate on the use of the word "with". Almost everything I write is in Java these days. I mostly work on things other than the compiler or the JDK release.&lt;br /&gt;&lt;br /&gt;This is the piece that makes my blood boil: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;He designed Java so marginally capable developers could have a job. Hence all the annoying little limitations that slow down development but prevent errors (and features). He finds it too limiting to use himself. I can't really blame him. &lt;br /&gt;This is so damned false I don't know where to begin. I designed Java so I could write more code in less time and have it be way more reliable. In the past I've wasted huge numbers of hours chasing down memory smashes and all the other time wasters that are so typical of what happens when writing C code. I wanted to spend time writing code, not debugging. Life is too short for debugging. All of those little "limitations" turn out to be things that make coding faster and debugging vanish.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;For example, lots of newbie's coming in from the C world complain about exceptions and the fact that they have to put exception handling all over the place - they want to just write their code. But that's stupid: most C code never checks return codes and so it tends to be very fragile. If you want to build something really robust, you need to pay attention to things that can go wrong and most folks don't in the C world because it's just to damn hard.&lt;br /&gt;&lt;br /&gt;One of the design principles behind Java is that I don't care much about how long it takes to slap together something that kinda works. The real measure is how long it takes to write something solid. Lots have studies have been done on developer productivity, and Java beats C and C++ by a factor of 2.&lt;br /&gt;&lt;br /&gt;It's kinda like the evolution of the airplane. Once upon a time when folks scooted around in open cockpit biplanes they navigated by sticking their heads out over the side of the plane and looking down. When covered cockpits with windows were first introduced pilots didn't like them because there was no way to stick their head out. But if they had won the argument, they'd never have been able to fly at Mach 1 or at 30,000 feet. Stick your head into a Mach 1 airflow and see what the bloody stump looks like. I want to fly at Mach 1. I'll take the windows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On Sunday, July 27, 2003, at 02:55 PM, ZZZ wrote:&lt;br /&gt;&lt;b&gt;I've forgotten, is Gosling a Java developer? If he is, why does he use a Mac? Masochism? "A state of denial"? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I use the MAC because it's a great platform. One of the nice things about developing in Java on the MAC is that you get to develop on a lovely machine, but you don't cut yourself off from deploying on other platforms. It's a fast and easy platform to develop on. Rock solid. I never reboot my machine... Really! Opening and closing the lid on a Powerbook actually works. The machine is up and running instantly when you open it up. No viruses. Great UI. All the Java tools work here: NetBeans and JEdit are the ones I use most. I tend to think of OSX and Linux with QA and Taste.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105962543239993458?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962543239993458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962543239993458'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105962543239993458' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105962508790044867</id><published>2003-07-30T21:18:00.001-07:00</published><updated>2003-07-30T21:18:07.926-07:00</updated><title type='text'></title><content type='html'>I was quite busy and not updating my blog (Huh..)  I will do bloggging from today..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105962508790044867?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962508790044867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962508790044867'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105962508790044867' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105962508582183082</id><published>2003-07-30T21:18:00.000-07:00</published><updated>2003-07-30T21:18:05.833-07:00</updated><title type='text'></title><content type='html'>I was quite busy and not updating my blog (Huh..)  I will do bloggging from today..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105962508582183082?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962508582183082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105962508582183082'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105962508582183082' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105936720732802219</id><published>2003-07-27T21:40:00.000-07:00</published><updated>2003-07-27T21:40:07.336-07:00</updated><title type='text'></title><content type='html'>Check out &lt;a href="http://www.jpackage.org"&gt;www.jpackage.org&lt;/a&gt;. If you're running Linux and need anything Java-related, then this is definitely the place to go. The JPackage Project has two primary goals:&lt;br /&gt;&lt;br /&gt;To provide a coherent set of Java software packages for Linux, satisfying all quality requirements of other applications. &lt;br /&gt;To establish an efficient and robust policy for Java software installation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105936720732802219?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105936720732802219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105936720732802219'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105936720732802219' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105904588362040000</id><published>2003-07-24T04:24:00.000-07:00</published><updated>2003-07-24T04:24:43.646-07:00</updated><title type='text'></title><content type='html'>Viva - Open Source Java - Operation Java Freedom  --&gt; http://viva.sourceforge.net/&lt;br /&gt;&lt;br /&gt;This has some good links so far...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105904588362040000?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105904588362040000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105904588362040000'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105904588362040000' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105894361001242320</id><published>2003-07-23T00:00:00.000-07:00</published><updated>2003-07-23T00:00:10.023-07:00</updated><title type='text'></title><content type='html'>Rise of the blogs http://www.smh.com.au/articles/2003/06/06/1054700380653.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105894361001242320?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105894361001242320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105894361001242320'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105894361001242320' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105887555202969242</id><published>2003-07-22T05:05:00.000-07:00</published><updated>2003-07-22T05:05:52.103-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.precisejava.com/" title="Best site for Performance Improvement tips in J2EE,SE"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105887555202969242?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105887555202969242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105887555202969242'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105887555202969242' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105887122682996319</id><published>2003-07-22T03:53:00.000-07:00</published><updated>2003-07-22T03:53:46.876-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;How to Work with Poor Code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It is very common to have to work with poor quality code that someone else has written. Don't think too poorly of them, however, until you have walked in their shoes. They may have been asked very consciously to get something done quickly to meet schedule pressure. Regardless, in order to work with unclear code you must understand it. To understand it takes learning time, and that time will have to come out of some schedule, somewhere, and you must insist on it. To understand it, you will have to read the source code. You will probably have to experiment with it. &lt;br /&gt;This is a good time to document, even if it is only for yourself, because the act of trying to document the code will force you to consider angles you might not have considered, and the resulting document may be useful. While you're doing this, consider what it would take to rewrite some or all of the code. Would it actually save time to rewrite some of it? Could you trust it better if you rewrote it? Be careful of arrogance here. If you rewrite it, it will be easier for you to deal with, but will it really be easier for the next person who has to read it? If you rewrite it, what will the test burden be? Will the need to re-test it outweigh any benefits that might be gained? &lt;br /&gt;In any estimate that you make for work against code you didn't write, the quality of that code should affect your perception of the risk of problems and unk-unks. &lt;br /&gt;It is important to remember that &lt;b&gt;abstraction &lt;/b&gt;and &lt;b&gt;encapsulation&lt;/b&gt;, two of a programmer's best tools, are particularly applicable to lousy code. You may not be able to redesign a large block of code, but if you can add a certain amount of abstraction to it you can obtain some of the benefits of a good design without reworking the whole mess. In particular, you can try to wall off the parts that are particularly bad so that they may be redesigned independently. &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105887122682996319?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105887122682996319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105887122682996319'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105887122682996319' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105887104103756903</id><published>2003-07-22T03:50:00.000-07:00</published><updated>2003-07-22T03:50:41.096-07:00</updated><title type='text'></title><content type='html'>&lt;b&gt;Singleton&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The office of the Presidency of the United States is an example of a Singleton, since there can be at most one active&lt;br /&gt;president at any given time. Regardless of who holds the office, the title &amp;#8220;The President of the United States&amp;#8221; is a&lt;br /&gt;global point of reference to the individual.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105887104103756903?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105887104103756903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105887104103756903'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105887104103756903' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105886011770212166</id><published>2003-07-22T00:48:00.000-07:00</published><updated>2003-07-22T00:48:37.746-07:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;http://weblogs.java.net/jag/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105886011770212166?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105886011770212166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105886011770212166'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105886011770212166' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105885934756797189</id><published>2003-07-22T00:35:00.000-07:00</published><updated>2003-07-22T00:35:47.600-07:00</updated><title type='text'></title><content type='html'>Interesting: Java Vs C# for CONST declaration&lt;br /&gt;&lt;br /&gt;In Java there is no direct CONST keyword available, We need to make it by declaring static final. &lt;br /&gt;In C# CONST is there which acts similar to static final in Java.&lt;br /&gt; What is the diff between final, static final?&lt;br /&gt;Here is my answer. final variable will be given memory location each time the object is instantiated.&lt;br /&gt;But if we declare it as static final then it will act as CONST.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105885934756797189?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105885934756797189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105885934756797189'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105885934756797189' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105879328256773988</id><published>2003-07-21T06:14:00.000-07:00</published><updated>2003-07-21T06:14:42.630-07:00</updated><title type='text'></title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105879328256773988?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105879328256773988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105879328256773988'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105879328256773988' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105877923397830351</id><published>2003-07-21T02:20:00.000-07:00</published><updated>2003-07-21T02:20:34.020-07:00</updated><title type='text'></title><content type='html'>The new Java logo was unveiled at this year's JavaOne conference. There was so much secrecy around the logo that, even though O'Reilly edits the content for java.net and the new logo sits at the top of every page. &lt;b&gt;How come I dont know this ????&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105877923397830351?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105877923397830351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105877923397830351'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105877923397830351' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105877908306766513</id><published>2003-07-21T02:18:00.000-07:00</published><updated>2003-07-21T06:14:58.510-07:00</updated><title type='text'></title><content type='html'>This is all about human tendancy towards emotions.. killing your emotions is literally killing yourself. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.NET Truths &lt;a href="http://manand.typepad.com/DotnetTruth/" title=".NET Goods and Bads"&gt;http://manand.typepad.com/DotnetTruth/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jelovic.com/articles/java_good_bad.htm" title="Java Goods and Bads"&gt;Java Good and Bads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aspalliance.com/Ambrose/Articles/Hungarian.aspx" title="An Article on Hungarian Notation "&gt;An Article on Hungarian Notation&lt;/a&gt;&lt;br /&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/5594845-105877908306766513?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105877908306766513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105877908306766513'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105877908306766513' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105877645779396768</id><published>2003-07-21T01:34:00.000-07:00</published><updated>2003-07-21T01:34:17.736-07:00</updated><title type='text'></title><content type='html'>It has been quite exciting to write about .NET (C#). Huh!! I started reading C#  to know how well MS has tried to clone the C++ and Java. Here are some interesting points I noted to share with you.( I welcome Comments/Answers...)&lt;br /&gt;&lt;br /&gt;1. When I come across the point from Tom Archer (The Book I am reading Inside C#) said Java is not pure OO language. He has given the reason that "Java is has no compatibility with Primitive Data Types. &lt;br /&gt;&lt;br /&gt;2. C#  does not follow Hungarian Notation but there is an exception for Interface declaration.&lt;br /&gt;&lt;br /&gt;3. We can have as many main methods in different classes which is saved with single file name  we can call explicitly those main methods based on the need/testing purpose. I don't understand why he has given this option.&lt;br /&gt;&lt;br /&gt;4. MS again proved that it gives programmer friendly languages by allowing to declare directives and assigning. &lt;br /&gt;Ex: Using console= System.Console;&lt;br /&gt;console.WriteLine();&lt;br /&gt;&lt;br /&gt;5. One more included option in C#  which is not there in Java (If I am wrong please correct me)  is Read-Only fields. This is good to see.&lt;br /&gt;&lt;br /&gt;6. I guess: A C# file when complied is converted to MSIL file which is PLATFORM INDEPENDENT and CLR  (PLATFORM DEPENDENT) will interpret to give the output in the runtime.  --&gt; Correct me if not as I have not read anything about this earlier...&lt;br /&gt;&lt;br /&gt;These are just basic outlines I found during my 100 pages visits of that book. I am about to start Garbage Collection. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105877645779396768?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105877645779396768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105877645779396768'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105877645779396768' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5594845.post-105863197776513009</id><published>2003-07-19T09:26:00.000-07:00</published><updated>2003-07-19T09:26:17.790-07:00</updated><title type='text'></title><content type='html'>this is my first blog...how is it looking ? a one liner ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594845-105863197776513009?l=ivaturis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105863197776513009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594845/posts/default/105863197776513009'/><link rel='alternate' type='text/html' href='http://ivaturis.blogspot.com/2003_07_01_archive.html#105863197776513009' title=''/><author><name>Me at Different Moods</name><uri>http://www.blogger.com/profile/08419178921862817300</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
