<?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-8570987307752040883</id><updated>2011-12-23T11:59:47.425+02:00</updated><category term='green'/><category term='fun'/><category term='software'/><category term='books'/><category term='blogs'/><category term='IT'/><title type='text'>__ clever bytes __</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-1848130058535416298</id><published>2011-10-20T16:07:00.000+03:00</published><updated>2011-10-20T16:07:22.348+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><title type='text'>you on you</title><content type='html'>The painter in you will find the new canvas intimidating. The writer in you will find the blank sheet of paper intimidating.&lt;br /&gt;&lt;br /&gt;The manager in you will find the immaculate-white background of the email client window intimidating ... it is supposed to hold the yearly evaluations of your directs, instead it's blank. Where to start you're asking?&lt;br /&gt;&lt;br /&gt;Meet self evaluations: I am finding them to be the easiest way to &lt;i&gt;kick off&lt;/i&gt; the employee evaluation process.&amp;nbsp;Is it as simple as you asking your directs for their own perspective on their&amp;nbsp;accomplishments, contributions but also on unmet goals and targets over&amp;nbsp;the past year.&amp;nbsp;(in the Romanian immature corporate culture we sometimes call the latter&amp;nbsp;&lt;i&gt;bad things&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;Give them time to think.&lt;br /&gt;&lt;br /&gt;Then add your own observations - you should have observed them and taken notes throughout the year.&amp;nbsp;Then add the others' feedback to the mix: team members, customers, other managers that happened to interact with your guy. Then look for some facts, in your project plan, bug tracker, emails, reviews.&lt;br /&gt;&lt;br /&gt;That's it ... fully armed now to conquer that white background!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-1848130058535416298?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/1848130058535416298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=1848130058535416298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1848130058535416298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1848130058535416298'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2011/10/you-on-you.html' title='you on you'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-6200842528539102532</id><published>2011-08-17T11:04:00.001+03:00</published><updated>2011-10-18T23:51:57.257+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>one team for the customer</title><content type='html'>What have you done lately to make your customers happier?&lt;br /&gt;&lt;br /&gt;Have you called them more often? Have you stopped developing new features until you reach a Zero Known Bugs state? Did you hire the best Information Engineers to make your docs all bright and shinny?&lt;br /&gt;&lt;br /&gt;If a lot more than this, or none, or none of the above, let me give you another idea of what we do:&lt;br /&gt;&lt;br /&gt;We built a cross-feature team staffed with the brightest people who analyze customer escalations, observe trends and write beautiful code to make sure future escalations in the area are near to impossible. Out of 30 customer escalations on how slow your server compliance checking runs, they would come up with a new way to access your compliance rule repository using a proven web server instead of your custom (slow!) python multithreaded code.&lt;br /&gt;&lt;br /&gt;How would this setup work? Would they sprint together with the rest of the teams? When will they sync with the feature teams to make sure they are not writing the same optimizations? Would you have this team on a permanent basis or build it ad-hoc depending on the number of current escalations?&lt;br /&gt;&lt;br /&gt;Know what, these are all up to you, in the end it's the client 'smile' that matters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-6200842528539102532?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/6200842528539102532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=6200842528539102532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6200842528539102532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6200842528539102532'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2011/08/one-team-for-customer.html' title='one team for the customer'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-1849619289386400306</id><published>2011-06-13T02:01:00.001+03:00</published><updated>2011-10-18T23:54:09.806+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>replacing technology &lt;T&gt;</title><content type='html'>- never heard of T, is it software?&lt;br /&gt;&amp;nbsp; - sure I've heard of it&lt;br /&gt;&amp;nbsp; &amp;nbsp; - I'm a big fan&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - tried it in a Hello World&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - use T daily&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - reported a few bugs&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - contributed to the code base&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - I am T expert consultant&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - I developed a parallel technology&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - it's history, my technology simply wiped T out of the market&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZwtI_EI3jLk/TfVD0NdMTaI/AAAAAAAAAME/38PxKBemKQw/s1600/2stairs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-ZwtI_EI3jLk/TfVD0NdMTaI/AAAAAAAAAME/38PxKBemKQw/s1600/2stairs.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;- What do people say about &lt;i&gt;your &lt;/i&gt;pet project?&lt;br /&gt;&amp;nbsp; - Don't have a pet project?!&lt;br /&gt;&amp;nbsp; &amp;nbsp; - Are you a software engineer?!&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - ... um, never heard of you, sorry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-1849619289386400306?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/1849619289386400306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=1849619289386400306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1849619289386400306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1849619289386400306'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2011/06/replacing-technology.html' title='replacing technology &amp;lt;T&amp;gt;'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ZwtI_EI3jLk/TfVD0NdMTaI/AAAAAAAAAME/38PxKBemKQw/s72-c/2stairs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-2244813528467060301</id><published>2011-05-21T23:49:00.000+03:00</published><updated>2011-05-21T23:49:21.396+03:00</updated><title type='text'>satisfaction</title><content type='html'>It is a few months before a new Server Automation major release ships, so it's time to let the customers take a peek at what we've been working at in the last 6 months. We are taking them on a test-drive (but don't let them in the driver's seat yet) of the new features to get them to comment, like:) or dislike:( them.&lt;br /&gt;&lt;br /&gt;But we got more than this in the last demo. The client was so pleased with the features we developed that this got them into a chatting mood, so some of us ended up pouring questions onto the client about their environment, how they use the product for their use-cases, how they horizontally scale their work (or not) when dealing with tens or hundreds of servers.&amp;nbsp;It won't be far from the truth if I said that our questions outnumbered the client's. So yes, we got something extra out of it.&lt;br /&gt;&lt;br /&gt;And the client got something extra too: as the discussion developed, they got their share of answers and tricks about the old features they've been using for a while now.&lt;br /&gt;&lt;br /&gt;Still, we got more than the client did: satisfaction. Satisfaction cause they were satisfied. And it was plenty of it to share, to the QA eng that did the demo cause his clicks unveiled the magic, to the functional architect who spec'ed out the magic and for the handful of developers that ... built the magic.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-I079yep5-N4/Tdgk2rGTyQI/AAAAAAAAAL8/qiyIEyKS45k/s1600/roaba.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-I079yep5-N4/Tdgk2rGTyQI/AAAAAAAAAL8/qiyIEyKS45k/s1600/roaba.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Are you feeling down? Ask your customer to come in for a demo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-2244813528467060301?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/2244813528467060301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=2244813528467060301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2244813528467060301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2244813528467060301'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2011/05/satisfaction.html' title='satisfaction'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-I079yep5-N4/Tdgk2rGTyQI/AAAAAAAAAL8/qiyIEyKS45k/s72-c/roaba.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4278896862439647158</id><published>2011-03-11T01:22:00.000+02:00</published><updated>2011-03-11T01:22:24.912+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>are you the next FA? (2)</title><content type='html'>Had a discussion a few days ago with my FA, and we came up with this shorter definition of an FA, looking not at what s/he should know but instead at what s/he should do:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The functional architect is responsible for specifying a feature so that it both satisfies the client and is implementable.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Wanting to be an FA? Then make sure you can look at a problem both from 1km and 1cm away.&amp;nbsp;Be able to stay off and on the ground.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-zwbJbpQOEkw/TXlbL6dY4WI/AAAAAAAAALw/aB7yTF5fBrQ/s1600/sky.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-zwbJbpQOEkw/TXlbL6dY4WI/AAAAAAAAALw/aB7yTF5fBrQ/s1600/sky.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4278896862439647158?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4278896862439647158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4278896862439647158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4278896862439647158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4278896862439647158'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2011/03/are-you-next-fa-2.html' title='are you the next FA? (2)'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-zwbJbpQOEkw/TXlbL6dY4WI/AAAAAAAAALw/aB7yTF5fBrQ/s72-c/sky.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-873960946029711160</id><published>2011-01-30T23:17:00.001+02:00</published><updated>2011-02-16T11:24:36.450+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>are you the next FA?</title><content type='html'>It was supposed to be a very concise post, but since these guys don't know what an FA is, why risk you being in the same situation?&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_GAwRaHy3Rmw/TUKcsQmyF4I/AAAAAAAAALU/2wVy-vaIQ7Y/s1600/fa.png" imageanchor="1"&gt;&lt;img border="0" height="105" src="http://1.bp.blogspot.com/_GAwRaHy3Rmw/TUKcsQmyF4I/AAAAAAAAALU/2wVy-vaIQ7Y/s320/fa.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Story short, this is what a functional architect (FA) is for me: mostly a BA as his main job is to create requirements, with enough field knowledge so that he knows how a feature would fit customers best and beat the competitors' feature, with the guts and power of decision to cut down on or to extend his ask, with good&amp;nbsp;project timeline awareness so that he can add a touch of prioritization to his ask, with enough UI design skills to add a drop of color to his words, and an English phrase not to far from that of a documentation writer.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/TUXU84gZ2tI/AAAAAAAAALk/OT8fPlB3Mv8/s1600/fa3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="145" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/TUXU84gZ2tI/AAAAAAAAALk/OT8fPlB3Mv8/s200/fa3.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;(... now&amp;nbsp;&lt;i&gt;my FA&lt;/i&gt;, he used to code a lot before doing this role, so he also sees my point of view &lt;i&gt;and &lt;/i&gt;he knows very well the technical architecture)&lt;br /&gt;&lt;br /&gt;How do you know if you're destined to become an FA? The first sign is that you take special pleasure in writing down the &lt;i&gt;Expected behavior&lt;/i&gt; of a new defect you are submitting:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GAwRaHy3Rmw/TUXTtf_UKEI/AAAAAAAAALg/A32-oBZeMvs/s1600/defect1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://2.bp.blogspot.com/_GAwRaHy3Rmw/TUXTtf_UKEI/AAAAAAAAALg/A32-oBZeMvs/s320/defect1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;drawing also="" and="" architect="" ba,="" case,="" dev="" doc="" eng,="" eng;="" fa="" fortunate="" from="" in="" interface="" my="" pm,="" resps="" taking="" user="" with=""&gt;&lt;/drawing&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-873960946029711160?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/873960946029711160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=873960946029711160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/873960946029711160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/873960946029711160'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2011/01/are-you-next-fa.html' title='are you the next FA?'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GAwRaHy3Rmw/TUKcsQmyF4I/AAAAAAAAALU/2wVy-vaIQ7Y/s72-c/fa.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-8818691338209185634</id><published>2010-12-07T13:15:00.004+02:00</published><updated>2011-03-09T13:40:02.096+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>7</title><content type='html'>I'm a man of milestones ... so since 2006 I'm keeping track of the novels I read. Not the articles, blogs or profession-related papers and books, just the novels, literature. And it's a&amp;nbsp;shaming&amp;nbsp;seven novels per year. Good novels, famous authors, good Amazon ranking, but still ... seven. 25% of them are in English which accounts in part for the low number. Still ... seveeeen ?!&lt;br /&gt;&lt;br /&gt;I then started this interesting exercise, of building from memory the list of novels I've ever read. Subject to memory loses, the list is still small, way too small. But doing the exercise, it felt good, it was in essence a review of an important aspect of my life. The list I built it's a snapshot to which to compare against in one year, two years, every year.&lt;br /&gt;&lt;br /&gt;I won't set personal targets at this point, nothing like the one novel a month type, I'll just keep the list as a snapshot.&amp;nbsp;And I'm going to think positive, low number but high quality. As someone dear to me said once, &lt;i&gt;Life is too short to read bad books&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Here are two links you might find useful:&lt;br /&gt;&lt;a href="http://nobelprize.org/nobel_prizes/literature/laureates/"&gt;All Nobel Prizes in Literature&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.time.com/time/specials/packages/completelist/0,29569,1951793,00.html"&gt;All TIME 100 novels&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-8818691338209185634?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/8818691338209185634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=8818691338209185634' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8818691338209185634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8818691338209185634'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/12/7.html' title='7'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-6608822921503924632</id><published>2010-11-17T14:14:00.000+02:00</published><updated>2010-11-17T14:14:56.680+02:00</updated><title type='text'>what is an API</title><content type='html'>It's about that part of the code that's exposed to the public, the &lt;i&gt;public&lt;/i&gt; API ...&lt;br /&gt;&lt;br /&gt;When you need to change it, you might have to&amp;nbsp;go through an API review board. Generally they will reject any changes that will make the API incompatible with previous versions. Cause this translates to having all the clients of the API change their code against your new API version.&lt;br /&gt;&lt;br /&gt;There are cases when keeping the API compatible will be so difficult and add/or so much technical debt that the review board will accept version incompatible changes. They will work with the field engineers to understand what clients feel about this change and with the PM so that the next product version (the one shipping the version incompatible API) increments its major number.&lt;br /&gt;&lt;br /&gt;It's not only the changes to and the removals from the API that should be reviewed by the API, it's also the additions. If the additions are badly designed, you'll still have to stick to them in the future, cause that's what &lt;i&gt;public&lt;/i&gt; in &lt;i&gt;public API&lt;/i&gt;&amp;nbsp;obeys&amp;nbsp;you to.&lt;br /&gt;&lt;br /&gt;Yet there is another type of change that must be brought to the attention of the board: not an API change, but a behavioural change. Why bother then? Cause while clients' code will still compile, it will stop functioning as expected&amp;nbsp;any more. And the only way to communicate this is through the API documentation.&lt;br /&gt;&lt;br /&gt;Here is an example: a login API that changes from querying the company ActiveDirectory in favor of &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We should stop thinking about the API as just a set of classes and their methods. It's also the behaviour that's triggered when using those classes and methods.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-6608822921503924632?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/6608822921503924632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=6608822921503924632' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6608822921503924632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6608822921503924632'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/11/what-is-api.html' title='what is an API'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4869067941175484820</id><published>2010-10-29T12:26:00.014+03:00</published><updated>2010-11-01T10:53:02.215+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>automated replies</title><content type='html'>Sometimes I find it hard and sometimes time consuming to compose an email: it has to say &lt;i&gt;Hi&lt;/i&gt; and then at least a one line as introduction and then the real message, and then a signature. &lt;i&gt;Should I write my job title above my name or they'd think I am too formal? Should I say Respectfully&amp;nbsp;yours or just Cheers?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The format is something that emails sent by a software do not have to conform to. In the end who would think badly about some bytes that are not polite enough?! Instead the recipient will be quite accommodating&amp;nbsp;with the message and more than this, grateful&amp;nbsp;that someone took the time to code and set up a program that actually does notify people about things happening.&lt;br /&gt;&lt;br /&gt;This is what I speculated on. After getting an invitation to a one-hour event that &lt;a href="http://www.languageweaver.com/"&gt;SDL Language Weaver&lt;/a&gt; is organizing in Cluj, this is what I wrote as a response to their confirmation request:&lt;br /&gt;&lt;i&gt;This is an automated confirmation email that I intend to participate at the event SDL Language Weaver is holding on Nov the 4th at City Plaza.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Funny enough, I've just received a Thank you message from their HR manager. There was no mention of my name there, so she must have sent an &lt;i&gt;automated reply&lt;/i&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4869067941175484820?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4869067941175484820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4869067941175484820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4869067941175484820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4869067941175484820'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/10/automated-replies.html' title='automated replies'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-3160899289773028393</id><published>2010-09-08T14:56:00.000+03:00</published><updated>2010-09-08T14:56:02.000+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>back after the holiday</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GAwRaHy3Rmw/TId5VBsIX9I/AAAAAAAAALI/Q-XSeTEK8M8/s1600/inbox.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GAwRaHy3Rmw/TId5VBsIX9I/AAAAAAAAALI/Q-XSeTEK8M8/s320/inbox.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-3160899289773028393?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/3160899289773028393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=3160899289773028393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3160899289773028393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3160899289773028393'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/09/back-after-holiday.html' title='back after the holiday'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GAwRaHy3Rmw/TId5VBsIX9I/AAAAAAAAALI/Q-XSeTEK8M8/s72-c/inbox.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4830962691468902225</id><published>2010-08-10T18:25:00.001+03:00</published><updated>2010-08-10T18:26:33.841+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>standards</title><content type='html'>There are 3 main languages in Server Automation: Java, Python and PL-SQL.&lt;br /&gt;&lt;br /&gt;I am using this Java code&lt;br /&gt;&lt;pre class="code"&gt;new SimpleDateFormat("dd/MM/yyyy hh:mm")&lt;/pre&gt;to format a Date object like this&lt;br /&gt;&lt;pre class="code"&gt;day/month/year hour:minute&lt;/pre&gt;&lt;br /&gt;This is how I'd do it in Python:&lt;br /&gt;&lt;pre class="code"&gt;&lt;/pre&gt;&lt;pre class="code"&gt;time.strftime("%d/%m/%Y %H:%M", time.localtime())&lt;/pre&gt;&lt;br /&gt;and this is how I coded it in PLSQL a few day ago (obviously mislead by the two guys above):&lt;br /&gt;&lt;pre class="code"&gt;TO_CHAR(_column_, 'DD/MM/YYYY HH:mm')&lt;/pre&gt;&lt;br /&gt;which resulted in me spending one hour starring at the same output '09:08'. For one hour I was tricked into thinking the business logic that updated the column was wrong. But the hour passed by and Oracle said to me: now it's '10:08', which lead me to think we were not speaking the same language ... definitely I was not mastering Oraclian (=PLSQL) properly: it turned out that if I wanted minutes, it should be &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MI&lt;/span&gt; and not &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mm&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;For that hour ... someone should take the blame, what about the creators of one of these languages for not following the conventions set out by the others. It should be the ones that arrived afterwards, right? Or probably it should be the standard bodies for not getting into date formatting.&lt;br /&gt;&lt;br /&gt;Or should I think that French sounds sexier than English, learn both and embrace the diversity? But I have not been acquainted to many sexy engineers over time ... so can we all agree from this point on that when I want the time printed ... it should be &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;HH:minutes&lt;/span&gt;? I'm hearing they spell it the same in France ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4830962691468902225?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4830962691468902225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4830962691468902225' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4830962691468902225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4830962691468902225'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/08/standards.html' title='standards'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-8066250317592230589</id><published>2010-06-04T15:10:00.002+03:00</published><updated>2010-06-25T12:11:39.792+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><title type='text'>in an immature market ...</title><content type='html'>... interviewees for your job might ask you to double their current salary without any apparent reason except they want to change houses&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;Begging? Are you kidding? We'll live in a &lt;i&gt;big&lt;/i&gt; &lt;i&gt;house&lt;/i&gt; on  Harbour Road. You, me and Salim, the three musketeers. (&lt;a href="http://www.imdb.com/title/tt1010048/"&gt;Slumdog Millionaire&lt;/a&gt;)&lt;/i&gt;&lt;/span&gt; &lt;/blockquote&gt;... interviewees for your job might ask for a significant raise just because the local currency went down and car prices are still expressed in euros&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;There's a lot of very important decisions into &lt;i&gt;buying&lt;/i&gt; a &lt;i&gt;car&lt;/i&gt;.  So we have to approach it as mature, responsible adults. (&lt;a href="http://www.imdb.com/title/tt0278245/"&gt;So Little Time&lt;/a&gt;)&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;... there is a crisis of managers&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;Deputy Arnold. He took a seminar in &lt;i&gt;crisis&lt;/i&gt; &lt;i&gt;management&lt;/i&gt;  last year. (&lt;a href="http://www.imdb.com/title/tt1103987/"&gt;Leverage&lt;/a&gt;)&lt;/i&gt;&lt;/span&gt; &lt;/blockquote&gt;... if you are a smart engineer and have some above average communication skills, your employer will want to make you a manager; change the employer, same story&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;Me? Why me? I'm nobody. I'm the supervisor of a Nerd Herd, at a Buy  More. Maybe someday I'll be assistant &lt;i&gt;manager&lt;/i&gt;. but I don't even  know if I want that job. (&lt;a href="http://www.imdb.com/title/tt0934814/"&gt;Chuck&lt;/a&gt;)&lt;/i&gt;&lt;/span&gt; &lt;/blockquote&gt;... employees are titled "senior" much earlier; the employer has to be inventive and come up with more titles ... senior++?&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;Oh, yes, I remember this case. A high school &lt;i&gt;senior&lt;/i&gt;  at age 12. (&lt;a href="http://www.imdb.com/title/tt0247082/"&gt;CSI: Crime Scene  Investigation&lt;/a&gt;)&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;... some software engineers change jobs every year or so and get raises with each move they make; employers, when will you start rejecting such candidates solely based on this criterion?&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;To kill an infidel, the Pope has said, is not murder; it is the  path to Heaven (&lt;a href="http://www.imdb.com/title/tt0320661"&gt;Kingdom of Heaven&lt;/a&gt;) &lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;... 10+ years of experience in the same field and you're a superstar&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;Travis Colt. Our local &lt;i&gt;superstar&lt;/i&gt;. He used to race for Nascar... (&lt;a href="http://www.imdb.com/title/tt0452608/"&gt;Death Race&lt;/a&gt;)&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-8066250317592230589?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/8066250317592230589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=8066250317592230589' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8066250317592230589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8066250317592230589'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/06/in-immature-market.html' title='in an immature market ...'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-8667804673008911803</id><published>2010-05-25T16:57:00.002+03:00</published><updated>2010-05-25T17:22:00.715+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><title type='text'>a tool to watch my busy hdd</title><content type='html'>&lt;b&gt;1. Windows TaskManager&lt;/b&gt; (MS): It shows a historical view of the various I/O operations performed by the processes. It's not about NOW, so this is not the tool I'm looking for: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_PpFZUUJAI/AAAAAAAAAKQ/1Yl0hD1OYIM/s1600/task_mng.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="65" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_PpFZUUJAI/AAAAAAAAAKQ/1Yl0hD1OYIM/s400/task_mng.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;2. ProcessExplorer&lt;/b&gt; (MS): there are two views to choose from: &lt;br /&gt;- the column-oriented view, where you can add a I/O delta metric to show what process is doing I/O NOW; here is my ClearCase client right after starting it, clearly the top &lt;i&gt;performer&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_U0GLyn8BI/AAAAAAAAAKY/bX4-j8gIPqc/s1600/pe_columns.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="82" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_U0GLyn8BI/AAAAAAAAAKY/bX4-j8gIPqc/s400/pe_columns.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;- the graphical view where the process is shown as you hover your mouse over the I/O graph&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_GAwRaHy3Rmw/S_U1whYvqyI/AAAAAAAAAKo/OI4nZfrU-Kk/s1600/pe_graph_cut.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="http://1.bp.blogspot.com/_GAwRaHy3Rmw/S_U1whYvqyI/AAAAAAAAAKo/OI4nZfrU-Kk/s400/pe_graph_cut.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;This tool can do the job. But if you are a purist and consider that &lt;a href="http://forum.sysinternals.com/printer_friendly_posts.asp?TID=14424"&gt;I/O in ProcessExplorer&lt;/a&gt; it's not only about the disk, but also networking and other devices, then you might want to continue your search (see below, definitely Gmail Notifier and Yahoo Messenger are not that disk intensive, it must be networking).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_vPcwN6P3I/AAAAAAAAAKw/Jn42GUkGrmM/s1600/pe_ym.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_vPcwN6P3I/AAAAAAAAAKw/Jn42GUkGrmM/s400/pe_ym.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;3. Free Extended Task Manager&lt;/b&gt; (Extensoft): Right to the point.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_vTiuAPEHI/AAAAAAAAAK4/gMwwYQV-RB0/s1600/free.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_vTiuAPEHI/AAAAAAAAAK4/gMwwYQV-RB0/s400/free.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;(But every tool has its problems: if you need to watch how a particular process uses the disk over a short span of time, it'll be difficult since the processes table above looses its selection after every few refreshes)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-8667804673008911803?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/8667804673008911803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=8667804673008911803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8667804673008911803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8667804673008911803'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/05/tool-to-watch-my-busy-hdd.html' title='a tool to watch my busy hdd'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/S_PpFZUUJAI/AAAAAAAAAKQ/1Yl0hD1OYIM/s72-c/task_mng.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4025852449721280383</id><published>2010-04-02T17:32:00.005+03:00</published><updated>2010-05-25T17:22:18.266+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>EDT deadlock</title><content type='html'>Many swing developers are probably unconsciously on the&lt;i&gt; it-won't-happen-to-me&lt;/i&gt; side on this one, but I am the living proof that these things happen ... ok, once in a year. The bad part is that it can manifest for your clients running the latest Windows 2008 build, while your XP buddy will behave ok.&lt;br /&gt;&lt;br /&gt;This is one of the situations when a debugger can't help you out cause your app is frozen, so ... meet thread dumps. Because most swing apps are consoleless, &lt;i&gt;Ctrl+Break&lt;/i&gt; or &lt;i&gt;Ctrl+/&lt;/i&gt; won't work. But your smart IDE should help you take thread dumps; alternatively use &lt;span style="color: #38761d; font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;JAVA_HOME&amp;gt;/bin/jstack&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;When your application freezes, you might be experiencing a deadlock, ex. when 2 or more threads are blocking each other, or it could be a temporary blockage due to resource unavailability. Let's go for the first case in this post.&lt;br /&gt;&lt;br /&gt;Finding the buggy code turns out to be very easy: for a thread dump generated by the Sun JVM, start by looking for the string &lt;i&gt;BLOCKED&lt;/i&gt; in the thread dump.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_GAwRaHy3Rmw/S7X5rSjMz6I/AAAAAAAAAKI/4EyKtsA0dxY/s1600/thread1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="http://1.bp.blogspot.com/_GAwRaHy3Rmw/S7X5rSjMz6I/AAAAAAAAAKI/4EyKtsA0dxY/s400/thread1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Immediately you can see the lock that this thread is trying to acquire, search for it in the rest of the thread dump.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_GAwRaHy3Rmw/S7X3jKZdRSI/AAAAAAAAAKA/OBO4LOUeGD4/s1600/edt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://1.bp.blogspot.com/_GAwRaHy3Rmw/S7X3jKZdRSI/AAAAAAAAAKA/OBO4LOUeGD4/s400/edt.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It turns out the same lock was acquired previously, and in this case by the EDT. Moreover, the lock that the misbehaved "NGUI Thread Pool-2" thread is trying to acquire is a core swing lock.&lt;br /&gt;&lt;br /&gt;The fix in such cases is (almost?) always making the code that tries to acquire the lock run on the EDT: go to the misbehaving thread, then backwards on the stacktrace until you can recognize some of your code. Then dig through it and decide on the place where the flow should continue on the EDT instead of your own (background) thread. You do the magic by wrapping your call like this:&lt;br /&gt;&lt;pre style="color: #38761d;"&gt;SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void run() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;your call&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;})&lt;/pre&gt;If you want to avoid such headaches altogether in the future, then play by the book ... and the &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/concurrency/dispatch.html"&gt;book&lt;/a&gt;  says: &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Swing event handling code runs on a special  thread known as the event dispatch thread. Most code that invokes Swing  methods also runs on this thread. This is necessary because most Swing  object methods are not "thread safe": invoking them from multiple  threads risks thread interference or memory consistency errors. Some  Swing component methods are labeled "thread safe" in the API  specification; these can be safely invoked from any thread. All other  Swing component methods must be invoked from the event dispatch thread.  Programs that ignore this rule may function correctly most of the time,  but are subject to unpredictable errors that are difficult to reproduce.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4025852449721280383?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4025852449721280383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4025852449721280383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4025852449721280383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4025852449721280383'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/04/edt-deadlock.html' title='EDT deadlock'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GAwRaHy3Rmw/S7X5rSjMz6I/AAAAAAAAAKI/4EyKtsA0dxY/s72-c/thread1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-8454551316637877553</id><published>2010-03-10T09:31:00.002+02:00</published><updated>2010-03-10T09:55:38.176+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>agile is not communism</title><content type='html'>I enjoy a lot articles that mix social and software sciences. And I think they provide much value to the software community cause software is built by people (still, as of 2010), so their psychology and their interactions drive the software development.&lt;br /&gt;&lt;br /&gt;This is a lightweight reading for the morning in this respect: &lt;a href="http://www.agileadvice.com/2007/07/19/linkstoagileinfo/agile-is-not-communism/"&gt;&lt;i&gt;Agile is Not Communism&lt;/i&gt;&lt;/a&gt;. And even if the author does a pretty good job of proving there is not much similarity between &lt;i&gt;Agile &lt;/i&gt;and &lt;i&gt;Communism&lt;/i&gt;, this phrase stayed with me: &lt;i&gt;Several people in my class are asserting that agile is just like communism and since communism failed, agile is not likely to succeed either&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;If you are like me and feel that today's &lt;i&gt;Capitalism&lt;/i&gt; is not far from failure too, then take my advice and visit Greece, while it still has its islands ...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_GAwRaHy3Rmw/S5dNl75dZKI/AAAAAAAAAJY/pLQXjPAD2Gk/s1600-h/Greece_map_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_GAwRaHy3Rmw/S5dNl75dZKI/AAAAAAAAAJY/pLQXjPAD2Gk/s320/Greece_map_2.jpg" width="297" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;But since it's still early morning and we need our optimism for the day, take this quote from John Kenneth Galbraith: &lt;i&gt;Under capitalism, man exploits man. Under communism, it's just the opposite&lt;/i&gt;. ... uhh, did I say optimism?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-8454551316637877553?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/8454551316637877553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=8454551316637877553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8454551316637877553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8454551316637877553'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/03/agile-is-not-communism.html' title='agile is not communism'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GAwRaHy3Rmw/S5dNl75dZKI/AAAAAAAAAJY/pLQXjPAD2Gk/s72-c/Greece_map_2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-5207673163947421504</id><published>2010-03-01T17:55:00.002+02:00</published><updated>2010-07-10T11:34:47.208+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>next to binaries</title><content type='html'>There are not many things you can deliver to make your customers happy: one is definitely the code&lt;i&gt;, &lt;/i&gt;and the 2nd are the docs: user-level documentation.&lt;br /&gt;&lt;br /&gt;I've been recently asked to review the part of the documentation for the feature we are owning, and it was a surprisingly fun thing to do. I had no different feeling when reviewing it than the one I have when cutting some clever piece of code. It felt like putting the cream on the cake. It was an easy win: improve a deliverable that the client will definitely touch, cause our customers &lt;a href="http://lucian-ciufudean.blogspot.com/2010/02/customers-have-say.html#docs"&gt;do use the documentation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This line probably sounds right: &lt;i&gt;good software comes with good documentation&lt;/i&gt;. But it's the other direction I am interested in exploring right now, what can documentation do for the code?&lt;br /&gt;&lt;br /&gt;When evaluating new software I could use, like a web framework, those that have good docs have a much higher chance of getting in my toolbox. I start by looking for a section that would give me a basic setup fast, like &lt;i&gt;Up and Running in Ten Minutes&lt;/i&gt;. Then I am awarding additional points for an introductory video. Then I will scan for &lt;i&gt;How To&lt;/i&gt;-s for sensitive problems and references like configuration file and API ones. I admit though that once the tool is in my inbox, a weak online help won't make me drop the tool, as long as the help is not annoying.&lt;br /&gt;&lt;br /&gt;For software developers good documentation means marketing. You'd want to grab market share, which for freelancers especially translates into increasing the number of users of the software. My advice is &lt;i&gt;Write docs and keep them up to date, ask for reviews for even better docs&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Disclaimer: this post has not been reviewed before publication, hence it might contain some typos. No excuse though if it contains stupid idea&lt;/i&gt;s.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-5207673163947421504?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/5207673163947421504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=5207673163947421504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5207673163947421504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5207673163947421504'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/03/next-to-binaries.html' title='next to binaries'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-427310672664463161</id><published>2010-02-10T14:44:00.001+02:00</published><updated>2010-03-01T17:48:58.719+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>customers have a say</title><content type='html'>They are the most useful slides I've seen in quite a while. No need for anyone to narrate them, no regrets that you were not there when the presentation was held. Cause they are self contained, straight to the point.&lt;br /&gt;&lt;br /&gt;If you asked yourself at a certain time &lt;i&gt;What feature should we implement for the next release?&lt;/i&gt; then these slides are for you. No guessing, no gut-feeling, but real-world data ... from those who dislike wasting extra clicks, who feel pain because you don't support the new device out on the market, who would love your shiny feature even more had you documented it. Your customers.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S3KoAYfpGcI/AAAAAAAAAIw/H9ic_SsyslU/s1600-h/level.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="281" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S3KoAYfpGcI/AAAAAAAAAIw/H9ic_SsyslU/s320/level.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GAwRaHy3Rmw/S3KpyMjrYII/AAAAAAAAAJQ/LH_Db3hIM9Q/s1600-h/reasons.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_GAwRaHy3Rmw/S3KpyMjrYII/AAAAAAAAAJQ/LH_Db3hIM9Q/s320/reasons.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a name="docs"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_GAwRaHy3Rmw/S3KoTJ35BYI/AAAAAAAAAJA/51dojj6ivjg/s1600-h/docs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GAwRaHy3Rmw/S3KoTJ35BYI/AAAAAAAAAJA/51dojj6ivjg/s320/docs.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-427310672664463161?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/427310672664463161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=427310672664463161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/427310672664463161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/427310672664463161'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/02/customers-have-say.html' title='customers have a say'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/S3KoAYfpGcI/AAAAAAAAAIw/H9ic_SsyslU/s72-c/level.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-569602385650897686</id><published>2010-01-20T11:17:00.003+02:00</published><updated>2010-02-11T09:55:25.421+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>the essence of agile</title><content type='html'>For those who love agile, practice agile daily, feel it in their bones but have not been so agile to find the site with the essence, here it is &lt;a href="http://agilemanifesto.org/"&gt;http://agilemanifesto.org&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-569602385650897686?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/569602385650897686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=569602385650897686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/569602385650897686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/569602385650897686'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/01/essence-of-agile.html' title='the essence of agile'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-700849871730188165</id><published>2010-01-16T01:40:00.002+02:00</published><updated>2010-02-13T12:44:19.286+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><title type='text'>a low importance misfeature</title><content type='html'>JDoe had a long day, he's been debugging and re-installing and patching for the last 10 hours. And it all worked like magic in the end after a simple reboot. He had spammed quite a few inboxes in the process, so he is thinking now he should probably send a final email saying &lt;i&gt;Hey, it all worked out after a reboot, thanks for your help&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Is this important enough to warrant a new email? Wouldn't he bother the team even more? So he decides he will send the email with low importance ... see, every problem has a solution.&lt;br /&gt;&lt;br /&gt;... is it so? What do you do when you get a low importance email in your inbox, do you skip it? Do you simply delete it? Or you have a filter that does this for you? I admit none of the above in my case. I read all my daily 30 something emails in the order I get them, normal, high or low importance ... indeed in some cases I go to high ones first, rarely though.&lt;br /&gt;&lt;br /&gt;Weird enough, low importance emails draw my attention more than normal ones thanks to the nice little blue arrow in front: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S1BPIbML3xI/AAAAAAAAAIQ/_edgTnec9uQ/s1600-h/1152010_11831+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/S1BPIbML3xI/AAAAAAAAAIQ/_edgTnec9uQ/s640/1152010_11831+PM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;AND my email client pops up notifications for low importance emails just as for the others, instead of letting me focus on &lt;i&gt;tasks&lt;/i&gt; &lt;i&gt;with a normal importance&lt;/i&gt; at a minimum.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GAwRaHy3Rmw/S1BQ-5UWYjI/AAAAAAAAAIY/p_63jKTPO4w/s1600-h/outlook_notif.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_GAwRaHy3Rmw/S1BQ-5UWYjI/AAAAAAAAAIY/p_63jKTPO4w/s320/outlook_notif.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So, &lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Dear JDoe,&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;I am sending this normal importance email just to you. Please save some of my time by sending a regular email only to the ones that tried to help; forget low importance emails.&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Thanks,&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Lucian&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-700849871730188165?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/700849871730188165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=700849871730188165' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/700849871730188165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/700849871730188165'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2010/01/low-importance-misfeature.html' title='a low importance misfeature'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/S1BPIbML3xI/AAAAAAAAAIQ/_edgTnec9uQ/s72-c/1152010_11831+PM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-5544041102441655980</id><published>2009-11-12T13:34:00.001+02:00</published><updated>2009-11-24T22:39:18.338+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>less agile?</title><content type='html'>It's a stripped down version of Scrum what we are doing. I mean, not that we wanted to change anything, but we had to adapt.&lt;br /&gt;&lt;br /&gt;Cause we did not have a tester from the beginning of the project. So we tested more.&lt;br /&gt;&lt;br /&gt;Cause we don't have stand-up meetings. But our desks are practically touching each other, so everyone knows what the others are working at, all the time. I know, you can't afford this luxury, but we are just a team of three. Blockages ... send an email and wait, be inventive, find something else to work at.&lt;br /&gt;&lt;br /&gt;Cause we don't have a one-sprint long backlog. But we are continuously eliciting requirements from the over-the-ocean project manager, team leader and GUI specialist. They know what features the clients want. That's where the final say on GUI usability and consistency is ... still we are continuously pushing to have a sprint backlog.&lt;br /&gt;&lt;br /&gt;I'll tell you what's better than a traditional stand-up meeting. It's our weekly sync where we started&amp;nbsp; yesterday to use a virtual room to demo our progress. That's my favorite side of Scrum, the demos. Those at the end of the sprint. But now we are doing them weekly, I think this keeps the momentum.&lt;br /&gt;&lt;br /&gt;I know, it might not be Scrum, but we are agile, in our own special way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-5544041102441655980?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/5544041102441655980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=5544041102441655980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5544041102441655980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5544041102441655980'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/11/less-agile.html' title='less agile?'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-9069471128202459626</id><published>2009-11-04T08:51:00.002+02:00</published><updated>2009-11-25T09:51:54.599+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>paradox (II)</title><content type='html'>The original &lt;a href="http://lucian-ciufudean.blogspot.com/2009/08/paradox.html"&gt;paradox&lt;/a&gt; urged me to look for some answers. I've been thinking but mostly I've been asking around. I am not alone in this as a few others in other software companies could tell the same kind of stories.&lt;br /&gt;&lt;br /&gt;The most mentioned reason is boredom. Developers' boredom. Laziness. Not incompetence. Which is sad. You can do a thing right, still the day is too alike the others, so you do a poor job just to finish earlier, or cause you've done it so many times before.&lt;br /&gt;&lt;br /&gt;The original post title was &lt;i&gt;Don't hire contractors ...&lt;/i&gt; It doesn't say it all, but it's catchy and with a reason. It turns out that in case of my project a major cause of poor code was the work of contractors. Not that they were incompetent, not they were even bored (cause those were the times in the lifecycle of this project when no one could get bored), it was the market forces that made them write code fast, not test and ship early. But they grew and got market share. (See here a &lt;a href="http://www.blogger.com/"&gt;post&lt;/a&gt; that says they might have even chosen the right path from a business point of view). They provided a job for me, the one who swears at their code.&lt;br /&gt;&lt;br /&gt;No automated tests, no code reviews, no time for a best-practices catalog, an outdated wiki. Great programmers. This is the recipe for a best selling product !?&lt;br /&gt;&lt;br /&gt;Anyway, back to the original title: if you can afford to ignore the business and only care about code, don't hire contractors if you don't have a good development process to oppose some forces to their fury of producing lots and lots of code. Contractors come and go, so they have to produce code to justify their cost (Permanent employees have to do that too, but they are not under the same time stress. They are hired forever, or until a bad review following the last bad review comes, which might take two years in some companies).&lt;br /&gt;&lt;br /&gt;Build contractors a light but working development process, allow them to be creative, but don't let them fool around with code, nor leave garbage behind. Or else a developer like me in a post-contractor era will complain that the code is poor and lose time solving paradoxes instead of producing code ... top-quality code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-9069471128202459626?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/9069471128202459626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=9069471128202459626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/9069471128202459626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/9069471128202459626'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/11/paradox-ii.html' title='paradox (II)'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-8756323521176721833</id><published>2009-09-15T17:12:00.000+03:00</published><updated>2009-09-15T17:12:32.994+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>agile architecting</title><content type='html'>The whole IT world "is" / claims to be / wants to be agile today, which reminds me of the days when the hype was about multimedia ... every CD out on the market was multimedia. &lt;br /&gt;&lt;br /&gt;But actually this title has quite some substance if you watch this presentation &lt;a href="http://www.infoq.com/presentations/evolving-architecture-guardian-uk"&gt;The evolving Guardian.co.uk architecture&lt;/a&gt;. A presentation worth watching from which I would extract these ideas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;architects, don't underestimate developers when tech issues must be solved !&lt;br /&gt;&lt;/li&gt;&lt;li&gt;having a parallel platform team to deal with non-business, purely technical stuff&lt;/li&gt;&lt;li&gt;new architecture optimizations and improvements being much later needed than estimated&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-8756323521176721833?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/8756323521176721833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=8756323521176721833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8756323521176721833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8756323521176721833'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/09/agile-architecting.html' title='agile architecting'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-9090417142913550955</id><published>2009-08-19T10:12:00.004+03:00</published><updated>2010-05-25T17:23:32.010+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>paradox</title><content type='html'>It's a bunch of smart people, I hear them all the time in meetings and I read their emails ... How can I say they are smart ... a good percentage of what they say I don't understand! They are the core that built and are now extending and selling a well known HP product. And they are polite and helping, which is another sign that they are smart ... I mean they must be smart, I feel it.&lt;br /&gt;&lt;br /&gt;How come their frameworks are over-engineered, the code is full of dirt, the test coverage is close to zero? And something along this paradox to be tagged as &lt;span style="font-style: italic;"&gt;sad&lt;/span&gt;: how come they are forgiving with this state of facts?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-9090417142913550955?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/9090417142913550955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=9090417142913550955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/9090417142913550955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/9090417142913550955'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/08/paradox.html' title='paradox'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-5427956677462842747</id><published>2009-08-14T08:55:00.004+03:00</published><updated>2009-08-14T14:33:49.011+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>the young and the motivated</title><content type='html'>Its probably the young IT industry in Romania that makes recruiters add this sort of benefit in most of their emails and ads: &lt;span style="font-style: italic;"&gt;You will be part of a young and motivated team&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I am looking forward for the times when I'll read this instead: &lt;span style="font-style: italic;"&gt;You will be part of a very experienced team with great past achievements&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-5427956677462842747?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/5427956677462842747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=5427956677462842747' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5427956677462842747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5427956677462842747'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/08/recruiting-for-new-job.html' title='the young and the motivated'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-34361885929579967</id><published>2009-07-23T10:54:00.005+03:00</published><updated>2009-08-14T09:22:28.490+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>intuitive [/] emacs</title><content type='html'>... a screenshot of mcedit, no comment&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SmgX6uAOUTI/AAAAAAAAAHY/y8EpVVBSueA/s1600-h/7232009_105528+AM.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 249px;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SmgX6uAOUTI/AAAAAAAAAHY/y8EpVVBSueA/s400/7232009_105528+AM.png" alt="" id="BLOGGER_PHOTO_ID_5361561653933396274" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SmgXwU2gn4I/AAAAAAAAAHQ/ZdmoIhJhEuM/s1600-h/intuitive_emacs.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-34361885929579967?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/34361885929579967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=34361885929579967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/34361885929579967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/34361885929579967'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/07/intuitive-emacs.html' title='intuitive [/] emacs'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/SmgX6uAOUTI/AAAAAAAAAHY/y8EpVVBSueA/s72-c/7232009_105528+AM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-2027767084433603606</id><published>2009-06-29T17:57:00.006+03:00</published><updated>2009-07-08T13:27:51.336+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>new comers are right</title><content type='html'>They see the code base differently, they are unbiased: they don't know who owns a package, they don't know there are historical reasons why the code is so bad, they don't know the past trade-offs and political games, they are unaware of the dirty workarounds that still keep things moving.&lt;br /&gt;&lt;br /&gt;You've been "contaminated" all this time you've spent in the project. You know package A is owned by the team lead so you won't review it harshly, you naturally justify the bad dependencies with the schedule pressure two releases ago, you got used to unsetting this environment variable and creating that magic file by hand each time you run a deployment and those worthless TODOs seem a natural code outfit, they almost please your eye.&lt;br /&gt;&lt;br /&gt;New comers can't see the forest for the tree, but this makes them focus on every tree. And sometimes healing tree by tree is what gets a global healing effort started. What they see is the current &lt;a href="http://martinfowler.com/bliki/TechnicalDebt.html" target="_blank"&gt;technical debt&lt;/a&gt; at a granular level. They are not yet bored with the codebase so they are eager to find the problems you have long accepted.&lt;br /&gt;&lt;br /&gt;Only if there was someone to weight their opinions against the &lt;span style="font-style: italic;"&gt;contaminated&lt;/span&gt; ones ... and do it faster than the team &lt;span style="font-style: italic;"&gt;contamination&lt;/span&gt; velocity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-2027767084433603606?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/2027767084433603606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=2027767084433603606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2027767084433603606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2027767084433603606'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/06/new-comers-are-right.html' title='new comers are right'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-1505887167441866413</id><published>2009-06-10T11:07:00.003+03:00</published><updated>2009-06-10T11:27:21.581+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>my wider resume</title><content type='html'>... you're looking at &lt;a href="http://lucian-ciufudean.blogspot.com/"&gt;it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's the entire collection of material I've been posting here. It's not mere writing, it shows a way of thinking (&lt;a href="http://lucian-ciufudean.blogspot.com/2008/12/have-you-changed-your-mind.html"&gt;consistent&lt;/a&gt;?) that a standard resume won't show. Anyone working with me or who I am working for can expect I'd want to implement the ideas outlined here during the partnership, so they'll be well informed when choosing if they want such a partnership. It's a solid step to openness.&lt;br /&gt;&lt;br /&gt;It's my contributions to software in general: &lt;a href="http://lucian-ciufudean.blogspot.com/2008/03/soap-with-attachments-axis1-and-href.html"&gt;code snippets&lt;/a&gt;, &lt;a href="http://lucian-ciufudean.blogspot.com/2007/10/60-seconds-review-of.html"&gt;reviews&lt;/a&gt;, &lt;a href="http://lucian-ciufudean.blogspot.com/2008/10/debugging-swing.html"&gt;technical HOWTO&lt;/a&gt;-s, &lt;a href="http://lucian-ciufudean.blogspot.com/2009/01/good-way-of-complaining.html"&gt;quality assurance&lt;/a&gt;, &lt;a href="http://lucian-ciufudean.blogspot.com/2009/02/boring-iii-unread-email-count.html"&gt;coding for fun&lt;/a&gt; and &lt;a href="http://pmd.sourceforge.net/snapshot/credits.html"&gt;contribution to OSS&lt;/a&gt;, and they are all linked to from here, each with its own story.&lt;br /&gt;&lt;br /&gt;And it's fueled by &lt;span style="font-style: italic;"&gt;contributing&lt;/span&gt;. There are still many other ways of contributing that I can think of: writing a full blown article for an IT magazine, registering as a speaker to a software conference, giving a speech at your local university, creating and maintaining a product or website.&lt;br /&gt;&lt;br /&gt;Is this worth the effort? Probably not if it's an effort and there is no fun in it. But if it _is_ fun, then this is a step forward for you who want to play in &lt;span style="font-style: italic;"&gt;a higher league&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;You could be &lt;span style="font-style: italic;"&gt;invited&lt;/span&gt; to join a company and not &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; to join one, you could have a discussion partner and not an interviewer in front of you, it could be a dialog like &lt;span style="font-style: italic;"&gt;We heard about you and appreciate your work&lt;/span&gt; versus an interview like &lt;span style="font-style: italic;"&gt;Please tell us about yourself and your last 5 professional years; &lt;/span&gt;then it would continue with &lt;span style="font-style: italic;"&gt;We are perfectly aware that someone with your capabilities can help us&lt;/span&gt; ... compared with &lt;span style="font-style: italic;"&gt;We'll continue with a short list of 10 questions&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now, tell me, is it worth the effort?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-1505887167441866413?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/1505887167441866413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=1505887167441866413' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1505887167441866413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1505887167441866413'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/06/my-wider-resume.html' title='my wider resume'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-1153206050166397622</id><published>2009-05-22T15:52:00.005+03:00</published><updated>2009-06-10T11:26:52.529+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>the tired programmer</title><content type='html'>Are you? A programmer ... I mean tired? Aaa ... both? Well ... are you chronically tired?&lt;br /&gt;&lt;br /&gt;Of what? Innovation, progress, change, every-day learning, designing for change ... CHANGE !!! brand new everything, industry immaturity, the multitude of unsolved problems, technology stacks that resemble a sky-scraper, embracing &lt;span style="font-weight: bold;"&gt;CHAAAAAAANGEEE&lt;/span&gt; ... ?&lt;br /&gt;&lt;br /&gt;What if &lt;a href="http://www.stokely.com/lighter.side/stroustrup.html"&gt;this&lt;/a&gt; were true? Well, got you thinking ...?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-1153206050166397622?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/1153206050166397622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=1153206050166397622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1153206050166397622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1153206050166397622'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/05/tired-programmer.html' title='the tired programmer'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-6063980881009975700</id><published>2009-04-17T15:49:00.021+03:00</published><updated>2009-06-10T11:26:26.383+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>javac from the command line</title><content type='html'>You are a Java developer and your platform of choice is Windows. I'll point you to a deeply nested directory with lots of source files in it and ask you to compile them. How do you do it?&lt;br /&gt;&lt;br /&gt;If you immediately fire up your IDE, create a project, set it up with the source files and output directory and hit the Make button, then find out there is a quicker way to do it from the command line, an option many ignore:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 0px 0px 0px 20px; color: rgb(0, 102, 0); font-family: courier new;"&gt;cd the_directory_i_gave_you&lt;br /&gt;dir /b /s *.java &gt; source_files.txt&lt;br /&gt;mkdir ..\out&lt;br /&gt;javac -d ..\out @source_files.txt&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-6063980881009975700?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/6063980881009975700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=6063980881009975700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6063980881009975700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6063980881009975700'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/04/javac-from-command-line.html' title='javac from the command line'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4997375986211996949</id><published>2009-04-03T09:55:00.028+03:00</published><updated>2009-04-06T11:26:14.724+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>one-option names</title><content type='html'>Is the name of a software shop important in making the business successful? I'd say no considering that many &lt;a href="http://www.fogcreek.com/"&gt;stupid-name&lt;/a&gt; companies do great. Back in my &lt;a href="http://www.iquestint.com/"&gt;iQuest&lt;/a&gt; days, we used to work together with a UK software consultancy company called &lt;a href="http://www.computing.co.uk/computing/news/2213267/emc-acquires-42m-conchango"&gt;Conchango&lt;/a&gt;, how about that for a name?&lt;br /&gt;&lt;br /&gt;Still I can't help wondering about companies whose names relate to current technologies and trends - what about the times when these will be obsolete? If you are thinking &lt;a href="http://www.objectmentor.com/"&gt;ObjectMentor&lt;/a&gt;, I think they'll survive, and it turned out it was a good name choice since &lt;span style="font-style: italic;"&gt;object&lt;/span&gt; has become the synonym for &lt;span style="font-style: italic;"&gt;good programming style&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;But what about &lt;a href="http://www.xml-intl.com/web/guest/home"&gt;XML-INTL&lt;/a&gt;? These guys should have it in their mission to make sure XML never goes away ... it can't be that hard, we all love XML, don't we? &lt;a href="http://www.xmlnetworks.com/company.html"&gt;XML Networks&lt;/a&gt; are clearly better positioned, &lt;a href="http://www.kk.org/newrules/blog/2009/01/the-dynamic-of-our-society-and.php"&gt;networks&lt;/a&gt; will not go away soon, if ever.&lt;br /&gt;&lt;br /&gt;A particular case are the &lt;a href="http://www.instantasp.co.uk/Company/"&gt;names&lt;/a&gt; in the Microsoft world. The chances a technology will go obsolete are weaker in this self-contained corner of the world where the open source community who usually create novelty (thus obsolescence) is not so active.&lt;br /&gt;&lt;br /&gt;One trend I find today is promoting the &lt;a href="http://www.javaservlethosting.com/index.jsh"&gt;website&lt;/a&gt; and not the company name. Clearly a better strategy from this point of view: in rough times, just clone the website and advertise for another technology while still operating the same company.&lt;br /&gt;&lt;br /&gt;So from a technological name point of view, the business success recipe is clear: the broader the meaning, the less chances to go out of business.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4997375986211996949?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4997375986211996949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4997375986211996949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4997375986211996949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4997375986211996949'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/04/one-option-names.html' title='one-option names'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4805876854484187411</id><published>2009-04-01T11:07:00.059+03:00</published><updated>2009-04-02T10:48:17.768+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>pmd applied or the chain of good things</title><content type='html'>Because the &lt;a href="http://lucian-ciufudean.blogspot.com/2009/02/patch-programming.html"&gt;'patching period'&lt;/a&gt; is close to finish and I have zero bugs in my queue now, I put  some time into investigating tools that would reduce my frustration with the code, so I devoted the start of the week to &lt;a href="http://pmd.sourceforge.net/"&gt;PMD&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are quite a few angles you can approach software quality from and PMD does this by analyzing the source code for mistakes and even ventures into reporting &lt;a href="http://pmd.sourceforge.net/rules/design.html"&gt;bad code design&lt;/a&gt;. By going after &lt;span style="font-weight: bold;"&gt;source&lt;/span&gt; code quality, you leverage the fact that there is greater consensus about whether code A is better than code B than if you were to decide on more general quality metrics like &lt;span style="font-style: italic;"&gt;maintainability&lt;/span&gt;: how confident would you be in asserting that project A is more maintainable than project B?&lt;br /&gt;&lt;br /&gt;It took me about one day to go over over the  set of PMD rules applicable to my java desktop project; some of them I had to try out and I eventually filtered out those that I found controversial, reporting false positives and those that simply didn't &lt;span style="font-style: italic;"&gt;feel&lt;/span&gt; right. I wish the project maintainers could exercise their veto more often against the rules submitted by various contributors, but I guess the philosophy is to let you use just the rules you like.&lt;br /&gt;&lt;br /&gt;The way you can do that is create your custom rules file which will include only the PMD rules you want run - notice some of them can be customized with properties - &lt;pre style="font-size: 100%; color: rgb(0, 102, 0);"&gt;&amp;lt;ruleset name="My rules"&lt;br /&gt;    xmlns="http://pmd.sf.net/ruleset/1.0.0"&lt;br /&gt;    xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;    schemalocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"&lt;br /&gt;    nonamespaceschemalocation="http://pmd.sf.net/ruleset_xml_schema.xsd"&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;A custom rule set&amp;lt;/description&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;rule ref="rulesets/basic.xml/EmptyCatchBlock"&amp;gt;&lt;br /&gt;    &amp;lt;properties&amp;gt;&lt;br /&gt;      &amp;lt;property name="allowCommentedBlocks"&amp;gt;&lt;br /&gt;        &amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;&lt;br /&gt;      &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;/properties&amp;gt;&lt;br /&gt;  &amp;lt;rule ref="rulesets/unusedcode.xml/UnusedPrivateField"&amp;gt;&lt;br /&gt;&amp;lt;/ruleset&amp;gt;&lt;/pre&gt;and include it in the PMD classpath.&lt;br /&gt;&lt;br /&gt;Two benefits I am expecting from PMD: a &lt;a href="http://lucian-ciufudean.blogspot.com/2008/07/sloc-can-be-good-for-your-morale.html"&gt;smaller code-base&lt;/a&gt; (rules like &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;UselessOverridingMethod&lt;/span&gt; and &lt;span style="color: rgb(0, 102, 0);font-family:courier new;"&gt;UnusedPrivateMethod&lt;/span&gt;) and a slightly better/faster usage of the Java library classes (rules like &lt;span style="color: rgb(0, 102, 0);" &gt;&lt;span style="font-family:courier new;"&gt;StringInstantiation &lt;/span&gt;&lt;/span&gt;and &lt;span style="color: rgb(0, 102, 0)" &gt;&lt;span style="font-family:courier new;"&gt;InefficientStringBuffering&lt;/span&gt;&lt;/span&gt;). A collateral benefit could be that my team would learn to write better code after they'll correct their mistakes. What if they will be so thrilled with the experience that they will at their turn plug in new quality tools ... what if they will blog about this and spread the word to a wider audience? ... I can only imagine ...&lt;br /&gt;&lt;br /&gt;In the end I'll just say that an improvement never comes alone: here is my humble shot at improving PMD itself:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SdRnBDwAI6I/AAAAAAAAAHA/cGadlSMABms/s1600-h/pmd_bugs.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 95px;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SdRnBDwAI6I/AAAAAAAAAHA/cGadlSMABms/s400/pmd_bugs.png" alt="" id="BLOGGER_PHOTO_ID_5319990327715570594" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4805876854484187411?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4805876854484187411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4805876854484187411' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4805876854484187411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4805876854484187411'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/04/pmd-applied-or-chain-of-good-things.html' title='pmd applied or the chain of good things'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/SdRnBDwAI6I/AAAAAAAAAHA/cGadlSMABms/s72-c/pmd_bugs.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-8317355441574331721</id><published>2009-03-13T09:08:00.014+02:00</published><updated>2009-03-13T09:49:19.722+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><title type='text'>your career</title><content type='html'>&lt;a href="http://www.time.com/time/specials/packages/article/0,28804,1884779_1884782,00.html"&gt;This read&lt;/a&gt; is an interesting way to start your morning ... made me think.&lt;br /&gt;&lt;br /&gt;If you stopped doing it at a certain moment, or had never done it, start (re)investing in your career. Investing needs efficiency, and efficiency brings time into equation. Your time is limited, so be picky about what you keep in your list of blogs. Focusing on ticking as many &lt;span style="font-style: italic;"&gt;New blog read&lt;/span&gt; boxes as possible is not a metric to base your career development on.&lt;br /&gt;&lt;br /&gt;So stick to &lt;a href="http://lucian-ciufudean.blogspot.com/2007/10/good-blogs.html"&gt;good blogs&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-8317355441574331721?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/8317355441574331721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=8317355441574331721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8317355441574331721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8317355441574331721'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/03/your-career.html' title='your career'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-7795383975287149189</id><published>2009-02-26T10:44:00.045+02:00</published><updated>2009-04-07T16:39:04.406+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>defensive programming</title><content type='html'>Defensive programming complements &lt;a href="http://lucian-ciufudean.blogspot.com/2009/02/patch-programming.html"&gt;patch programming&lt;/a&gt;. It is a must for those who want to enjoy life outside of programming and not climb the &lt;a href="http://www.codinghorror.com/blog/archives/001250.html"&gt;programmer ladder&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Below I'll unfold a short initiation session, so read on when ready ...&lt;br /&gt;&lt;br /&gt;Let's start with the basics, I'll give you your motto: &lt;span style="font-style: italic;"&gt;An extra safety net can't hurt&lt;/span&gt;. It's the salute that a defensive programmer uses to greet other defensive programmers. At the time of this writing, it is not known that defensive programmers have a special dress code, so you'll need to learn the salute by heart, and as a &lt;span style="font-style: italic;"&gt;safety net&lt;/span&gt;, keep a paper with some sample code of yours at all times with you. This way you can easily prove your membership to the group and you won't be taken as an undesirable &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;TDD&lt;/a&gt;- or &lt;a href="http://en.wikipedia.org/wiki/Refactoring"&gt;refactoring&lt;/a&gt;-programmer.&lt;br /&gt;&lt;br /&gt;A good practitioner of defensive programming requires that you:&lt;br /&gt;&lt;br /&gt;1. Extensively use safety nets like &lt;span style="color: rgb(0, 102, 0);font-family:courier new;" &gt;if (obj != null)&lt;/span&gt; sometimes right after the object is created, so you'll never be responsible for a &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html"&gt;NPE&lt;/a&gt; again.&lt;br /&gt;&lt;br /&gt;2. Add extensive comments explaining why you did what you did in the way you did instead of refactoring the code. This way, if somebody does not understand your code, it's completely their fault.&lt;br /&gt;&lt;br /&gt;3. Clone an object both when you set it in its container and when you return the object back from the container; this way you'll be &lt;span style="font-style: italic;"&gt;extremely&lt;/span&gt; sure that nobody will modify the initial object.&lt;br /&gt;&lt;br /&gt;4. When creating a class with similar functionality to an existing one, copy and paste the old class; better yet, even if your class will deprecate / replace the old class, leave it there in case someone takes pleasure in investigating obsolete code.&lt;br /&gt;&lt;br /&gt;5. When extending a class, to make sure that an inherited method is called, override it and merely call the super version; who knows what happens with the dynamic dispatch mechanism in the JVM and your method won't be called.&lt;br /&gt;&lt;br /&gt;Far from being exhaustive, this list should have given you a good picture of this programming style. As a final advice, take some rhetoric classes: they will teach you how to convince the rest of the team that those bugs in your list ... aren't actually yours.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-7795383975287149189?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/7795383975287149189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=7795383975287149189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/7795383975287149189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/7795383975287149189'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/02/defensive-programming.html' title='defensive programming'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-3125395861402416326</id><published>2009-02-17T13:22:00.017+02:00</published><updated>2010-01-01T23:27:31.888+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>patch programming</title><content type='html'>It is again that time of the year when we work like crazy to clear the list of bugs; it is right after we developers did our part of feature regression testing,  and right before the product will enter the QA phase, and then product launch.&lt;br /&gt;&lt;br /&gt;It is that time of the year when we won't make important changes to the codebase not to break existing functionality. That time of the year when I am answered back with "I suggest you keep that in mind for the next version and just put a workaround instead".&lt;br /&gt;&lt;br /&gt;That period when good old refactoring is not practiced much, and instead we code-patch. Some of the patches will be checked in with TODOs, but some of them will lack even this. Because I expect the number of TODOs in the code to increase, I decided I would put a "baseline" on the number of TODOs and compare them with the new number after release. So here it is, &lt;span style="font-weight: bold;"&gt;895 TODOs and 31 FIXMEs&lt;/span&gt;. I am thinking now at a possible new code quality metric &lt;span style="font-weight: bold;"&gt;TODOs/codebase size&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If you are the optimistic type, you will have your hopes that after product launch, we will definitely replace the hacks with proper code. And I just have my doubts because everybody will be coding new features in that time of the year.&lt;br /&gt;&lt;br /&gt;The result of all this development process can't be other than increasingly dirtier code. But how much can the code become dirtier before "exploding"? And what will this explosion mean? From a technical perspective it can mean writing the same amount of code in more time, or hiring more developers, or less frequent releases, or less features in new product versions. The peak could be a &lt;a href="http://www.joelonsoftware.com/articles/fog0000000069.html"&gt;rewrite&lt;/a&gt;. All of these have economical consequences that you can easily infer.&lt;br /&gt;&lt;br /&gt;I gave all of this some thought and the solution I see is practicing Zero Known Bugs. ZKB means a much shorter period like this one, so less opportunities to introduce hacks. ZKB on anybody's buglist means more confidence that making a change won't break existing functionality, means more focus on activities with added-value like new features. Zero-bugs means a smaller QA team, less fiddling with the bug tracker and less time from managers that weekly count bugs and take time sending encouraging emails that say &lt;span style="font-style: italic;"&gt;We can do it together&lt;/span&gt;. It also means more free weekends and less stress.&lt;br /&gt;&lt;br /&gt;So why not do it? I guess my next step is how I can convince the one who make decisions that this is the way to go.&lt;br /&gt;&lt;br /&gt;P.S. After I wrote this, I intended to find a good &lt;a href="http://www.gamasutra.com/resource_guide/20030714/fristrom_pfv.htm"&gt;link &lt;/a&gt;about ZKB. You should read it. So yes, it is controversial like most of the software development topics. But be it exactly zero, or 2, the principle is valid and we as a team are far from it, so I still needed to write this piece as one who had never been in a team that practiced ZKB :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-3125395861402416326?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/3125395861402416326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=3125395861402416326' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3125395861402416326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3125395861402416326'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/02/patch-programming.html' title='patch programming'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-7893744226852911679</id><published>2009-02-06T14:03:00.023+02:00</published><updated>2009-04-17T11:27:31.995+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>boring (III) / unread email count</title><content type='html'>After the fun I had &lt;a href="http://lucian-ciufudean.blogspot.com/2009/01/boring-ii.html"&gt;last time&lt;/a&gt; with JavaScript, I felt like coding another micro-project along the same idea: this time I wanted to display the unread emails count in the Reader  page.&lt;br /&gt;&lt;br /&gt;So I needed that special URL GMail uses to retrieve the count. So I sent myself several emails and all this time I used &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/6647"&gt;HttpFox&lt;/a&gt; to sniff everything that went in and out my browser; in the end I discovered a JavaScript object that held the information I was after.&lt;br /&gt;&lt;br /&gt;Next, I needed to make an async request to the URL I found previously. A very forgiving version of &lt;a href="https://developer.mozilla.org/En/XMLHttpRequest"&gt;XmlHttpRequest&lt;/a&gt; that allows one to make cross-site requests is the &lt;a href="http://wiki.greasespot.net/GM_xmlhttpRequest"&gt;one&lt;/a&gt; GreaseMonkey provides.&lt;br /&gt;&lt;br /&gt;Next, good old string parsing did the job of extracting the unread count from the response I got from GMail, so finally I just needed to append the count to the existing GMail link in Reader.&lt;br /&gt;&lt;br /&gt;At this step unfortunately, more testing proved that the URL I've found worked for me only and not for other GMail accounts. I relied on the fact that account specific information would be sent using cookies, and I failed.&lt;br /&gt;&lt;br /&gt;So I was back at finding the magic URL. My search went on through cookies, text/html and text/javascript content GMail responded with and I was lucky enough to track down the same js object sent back from another URL, this time a simple one with no scrambled GET parameters. A quick test for 3 GMail accounts on 2 different machines proved it working.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SZ_-3y9fsLI/AAAAAAAAAGg/rgUZOcbNP1k/s1600-h/reader.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 42px;" src="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SZ_-3y9fsLI/AAAAAAAAAGg/rgUZOcbNP1k/s320/reader.PNG" alt="" id="BLOGGER_PHOTO_ID_5305239120591696050" border="0" /&gt;&lt;/a&gt;You can install the script from &lt;a href="http://userscripts.org/scripts/show/42106"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-7893744226852911679?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/7893744226852911679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=7893744226852911679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/7893744226852911679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/7893744226852911679'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/02/boring-iii-unread-email-count.html' title='boring (III) / unread email count'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GAwRaHy3Rmw/SZ_-3y9fsLI/AAAAAAAAAGg/rgUZOcbNP1k/s72-c/reader.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-3164977646764459768</id><published>2009-01-29T17:57:00.017+02:00</published><updated>2009-02-18T14:27:23.447+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>boring (II)</title><content type='html'>If the advice in the &lt;a href="http://lucian-ciufudean.blogspot.com/2008/11/boring.html"&gt;first part&lt;/a&gt; of this series did not work for you, or the book you picked is too long and you'd happily put it aside for a period, here is a new idea: code your own micro-project.&lt;br /&gt;&lt;br /&gt;It should take you ~20 minutes per day, because what I am talking here is swapping your daily blog reading with coding. And it should be smart so that you don't get bored with your own chosen assignment.&lt;br /&gt;&lt;br /&gt;It could require much thinking, as it's the case with an algorithm from commons you've been using and you are thinking to rewrite it and make it faster. It could require studying as it's the case with a new programming language in which you want to write a Hello World. It could require browsing the web in search of information as it's the case of a public web service with which you want to interact.&lt;br /&gt;&lt;br /&gt;And here is my story: I've been using Google products for quite a while, indeed Reader is my first browser tab; and you've realized by now that I'm also a user of Blogger. Opening Blogger always required opening a new tab and typing the blogger URL, then hitting Enter :). Yes, it's a matter of seconds, but don't forget I needed an excuse to start my micro-project.&lt;br /&gt;&lt;br /&gt;So I ventured into the realms of &lt;a href="http://wiki.greasespot.net/Main_Page"&gt;Greasemonkey&lt;/a&gt; and with this, into Javascript and &lt;a href="https://developer.mozilla.org/en/Gecko_DOM_Reference"&gt;DOM&lt;/a&gt;. I haven't been coding hard-core javascript since the days of Netscape 4.7, and here was my chance to code JS again. I heroically resisted the temptations jQuery laid in my path ... &lt;span style="font-style: italic;"&gt;no, this time I'm not gonna let you help me, this time I want my hands dirty with JS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Long story short, here is now the top of my Reader page, I am just one click away from you (&lt;span style="font-size:78%;"&gt;would you be so kind to notice the link to Blogger that my script adds whenever I access a google page&lt;/span&gt;):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SYHaYCHzTkI/AAAAAAAAAGQ/4JQuFq4zJKs/s1600-h/reader.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 64px;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SYHaYCHzTkI/AAAAAAAAAGQ/4JQuFq4zJKs/s320/reader.png" alt="" id="BLOGGER_PHOTO_ID_5296754743185722946" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-3164977646764459768?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/3164977646764459768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=3164977646764459768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3164977646764459768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3164977646764459768'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/01/boring-ii.html' title='boring (II)'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/SYHaYCHzTkI/AAAAAAAAAGQ/4JQuFq4zJKs/s72-c/reader.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-5120794386574998497</id><published>2009-01-18T22:31:00.043+02:00</published><updated>2009-01-19T11:01:50.053+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>a good way of complaining</title><content type='html'>&lt;span style="font-family:arial;"&gt;Do you love the things you do? ...  then criticize, suggest improvements, and post bugs.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SXOUymDnFDI/AAAAAAAAAFo/DZ3ofwcn3FU/s1600-h/javabug.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 136px;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SXOUymDnFDI/AAAAAAAAAFo/DZ3ofwcn3FU/s400/javabug.PNG" alt="" id="BLOGGER_PHOTO_ID_5292737584020526130" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Stop complaining about the tools you use if you haven't done a thing to make them better.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SXOXuN_ZqAI/AAAAAAAAAFw/S6xUBDvRujQ/s1600-h/intellijbug.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 109px;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SXOXuN_ZqAI/AAAAAAAAAFw/S6xUBDvRujQ/s400/intellijbug.PNG" alt="" id="BLOGGER_PHOTO_ID_5292740807375824898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Because you are part of a team, it is not only about the things you fix, but also about the things you bring to others' attention.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SXQ_-PF0oMI/AAAAAAAAAGI/oCrxnowDDYg/s1600-h/qcbugs2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 135px;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SXQ_-PF0oMI/AAAAAAAAAGI/oCrxnowDDYg/s320/qcbugs2.png" alt="" id="BLOGGER_PHOTO_ID_5292925800502567106" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-5120794386574998497?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/5120794386574998497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=5120794386574998497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5120794386574998497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5120794386574998497'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/01/good-way-of-complaining.html' title='a good way of complaining'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/SXOUymDnFDI/AAAAAAAAAFo/DZ3ofwcn3FU/s72-c/javabug.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4513562267425255648</id><published>2009-01-11T16:38:00.005+02:00</published><updated>2009-01-28T16:46:32.071+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='green'/><title type='text'>you at work</title><content type='html'>How would you picture yourself during your 8h-work a day? If you were to draw yourself in a typical work day how would you do it?&lt;br /&gt;&lt;br /&gt;Forget about your current work place, just imagine, draw your mental projection of you working. Would you be at a desk, would you wear glasses, would you have plants around you, would it be artificial light, would it be air conditioning?&lt;br /&gt;&lt;br /&gt;How do you think the others around you (would) envision you - the professional programmer - in a typical work day? Would it be in a dark corner, bent over a keyboard and wearing your nerdy expression? Or it'd be under sun light, a merry, open expression on your face?&lt;br /&gt;&lt;br /&gt;If it is a gray environment what you picture, if it's tens of light bulbs above you, if it's only aluminum and concrete and no plants, if it's halls and no terrace, then there is an alternative and architect Norman Foster knows it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ted.com/index.php/talks/norman_foster_s_green_agenda.html"&gt;Watch&lt;/a&gt; and do the exercise above again. (The first 10 minutes of the video might bore the impatient, but it becomes really interesting afterwards)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4513562267425255648?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4513562267425255648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4513562267425255648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4513562267425255648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4513562267425255648'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/01/you-at-work.html' title='you at work'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-469099179872360393</id><published>2009-01-09T11:01:00.003+02:00</published><updated>2009-01-09T11:10:49.879+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>the future is bright</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;This might sound familiar to you, but since the marketing department think this is important, I might as well spread the word. These are excerpts from an email arrived this morning in my Inbox:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;[...] the most successful leaders will be those who leverage technology and change to  go beyond new mandates for efficiency&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;blockquote&gt;Nearly three-quarters of CIOs now believe that long-term strategic thinking and  planning is the leadership competency most critical to their roles&lt;/blockquote&gt;&lt;/span&gt;Clear words, clear guidelines, now we have the recipe for defeating the world economic crisis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-469099179872360393?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/469099179872360393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=469099179872360393' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/469099179872360393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/469099179872360393'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2009/01/future-is-bright.html' title='the future is bright'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-5361673876241989500</id><published>2008-12-10T18:32:00.006+02:00</published><updated>2008-12-10T18:44:17.643+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>somebody's hungry</title><content type='html'>... 4 gigs of RAM, less than 2 of them used as per Win XP's Task Manager, still I find myself not being able to open new windows ...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/ST_wguJPbyI/AAAAAAAAAFY/r85ZceWWfCI/s1600-h/task_mng_ym_handles_crop.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 142px;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/ST_wguJPbyI/AAAAAAAAAFY/r85ZceWWfCI/s320/task_mng_ym_handles_crop.jpg" alt="" id="BLOGGER_PHOTO_ID_5278201733234781986" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-5361673876241989500?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/5361673876241989500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=5361673876241989500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5361673876241989500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5361673876241989500'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/12/somebodys-hungry.html' title='somebody&apos;s hungry'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/ST_wguJPbyI/AAAAAAAAAFY/r85ZceWWfCI/s72-c/task_mng_ym_handles_crop.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-1877273270133542883</id><published>2008-12-09T10:18:00.010+02:00</published><updated>2010-08-12T11:31:49.803+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><title type='text'>me and my blog</title><content type='html'>&lt;b&gt;Run&lt;/b&gt; my blog through &lt;a href="http://www.typealyzer.com/"&gt;Typealizer&lt;/a&gt; and you'll get&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/ST4sqmkMpoI/AAAAAAAAAFQ/x3zFRHxYh7Q/s1600-h/ISTP.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5277704923743299202" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/ST4sqmkMpoI/AAAAAAAAAFQ/x3zFRHxYh7Q/s320/ISTP.PNG" style="cursor: pointer; display: block; height: 115px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Do &lt;/span&gt;some research on the personality types and you'll stumble upon these pages &lt;a href="http://en.wikipedia.org/wiki/ISTP_%28personality_type%29"&gt;http://en.wikipedia.org/wiki/ISTP_(personality_type)&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Myers-Briggs_Type_Indicator"&gt;http://en.wikipedia.org/wiki/Myers-Briggs_Type_Indicator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Reflect &lt;/span&gt;a bit and you'll see you've learned something new today.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Feel&lt;/span&gt; Happy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-1877273270133542883?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/1877273270133542883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=1877273270133542883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1877273270133542883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1877273270133542883'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/12/me-and-my-blog.html' title='me and my blog'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/ST4sqmkMpoI/AAAAAAAAAFQ/x3zFRHxYh7Q/s72-c/ISTP.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-6469136955491073182</id><published>2008-12-03T11:39:00.007+02:00</published><updated>2008-12-03T11:54:10.492+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><title type='text'>have you changed your mind?</title><content type='html'>If you want to build a reputation, and you're using a blog to help you, then you'd better post things that you have some strong opinions on.  You don't want to magnificently build a case over time just to ruin it with one single later post.&lt;br /&gt;&lt;br /&gt;If this still happens, you can always blame it on time ... things changed, ... you got smarter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-6469136955491073182?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/6469136955491073182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=6469136955491073182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6469136955491073182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6469136955491073182'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/12/have-you-changed-your-mind.html' title='have you changed your mind?'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-1503647354639666115</id><published>2008-11-13T12:21:00.015+02:00</published><updated>2009-02-04T14:22:35.729+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>you're a backend service, forget about the user</title><content type='html'>The title is an excerpt from my conversation this morning with a class ... no, not any class, you'll find out in a sec.&lt;br /&gt;&lt;br /&gt;Her name is &lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;LibraryService&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;and has been around for quite some time, and I can tell you she's on &lt;span style="font-style: italic;"&gt;no diet&lt;/span&gt;. It grew to the point that no sane developer wanted to get in trouble with her, so they just feed her and everybody seems to get along. Just leave her alone, otherwise she might get nasty and do &lt;span style="font-style: italic;"&gt;exceptional &lt;/span&gt;things that you won't expect.&lt;br /&gt;&lt;br /&gt;She sits between the friendly GUI fellows that talk nicely to the user, inform him of errors, handle his mouse clicks, in a word they behave nicely as any counter officer should (some call them &lt;span style="font-style: italic;"&gt;handlers&lt;/span&gt;) and the backend. So she takes the user's messages from the front-end guys through to the remote backend.&lt;br /&gt;&lt;br /&gt;But this morning I discovered a hidden facet of her, let's call it &lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;update&lt;/span&gt; that does not &lt;span style="font-style: italic;"&gt;yell back&lt;/span&gt; if she could not deliver the message. And this is most unusual for her, she that is always loud and ... nasty. Instead she bypasses the nice guys in front, picks up the receiver and calls the user directly (pops up a &lt;span style="font-style: italic;"&gt;dialog &lt;/span&gt;in case you did not get the metaphor). This is wrong because the nice guys in the front will never know what happened with the message, so they might want to retry sending it.&lt;br /&gt;&lt;br /&gt;What I've discovered next might be the explanation of her behavior, a new life form called &lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;Actions&lt;/span&gt; that masqueraded both as a counter guy and as &lt;span style="font-style: italic;"&gt;her&lt;/span&gt;, fooled both parts, and put himself in-between. This would be fine as long as he helped in translating the messages that go to and fro. But instead he maliciously started to ignore her answers, both the acknowledging and the exceptional ones. He doesn't even do the job by himself, he creates another anonymous life form that has a &lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;start&lt;/span&gt; facet and delegates all the work to it. So both malicious and lazy, what could be worse?!&lt;br /&gt;&lt;br /&gt;I suspect this is the reason she got upset, and started talking directly to the user. Now I'll stop this detective role playing, cause the only thing I feel right now is refactor the hell out of these guys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-1503647354639666115?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/1503647354639666115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=1503647354639666115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1503647354639666115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1503647354639666115'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/11/youre-backend-service-forget-about-user.html' title='you&apos;re a backend service, forget about the user'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4494479531720880241</id><published>2008-11-11T17:10:00.004+02:00</published><updated>2009-06-10T11:28:01.840+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>boring</title><content type='html'>Are you through one of those periods when only not-challenging-enough tasks are handed over to you and you're just not learning anything new? ... and the &lt;a href="http://lucian-ciufudean.blogspot.com/2007/10/good-blogs.html"&gt;blogs&lt;/a&gt; are no good cause you are missing the touch of a printed material?&lt;br /&gt;&lt;br /&gt;Here is a piece of advice: think about an advanced programming subject you always wanted to know about, find a good book and read 2-5 pages daily. Just make sure the subject you choose is either part of every good programmer's culture or is related to your current work - you don't want to study something you can't practice.&lt;br /&gt;&lt;br /&gt;My current pick is &lt;a href="http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601"&gt;Java Concurrency in Practice.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4494479531720880241?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4494479531720880241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4494479531720880241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4494479531720880241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4494479531720880241'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/11/boring.html' title='boring'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-3699350269101207084</id><published>2008-11-07T10:07:00.014+02:00</published><updated>2008-11-11T15:15:15.677+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>passion for TODOs</title><content type='html'>Have you ever left a sticky note on your fridge saying &lt;span style="font-style: italic;"&gt;Please remove this note&lt;/span&gt;? Have you ever been thirsty and had 10 sips of water thinking that you will have 2 more later? Have you ever written a letter 90%, left it on your desk with the intention of writing &lt;span style="font-style: italic;"&gt;See you soon&lt;/span&gt; later?&lt;br /&gt;&lt;br /&gt;NO, NO, NO.&lt;br /&gt;&lt;br /&gt;Then why am I seeing these completely useless, countless TODOs in the code&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;TODO Add a comment describing the purpose of this file?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Man, why did you even bother to write this down? It is just a 79 line source file, couldn't you figure out what it was about? If you could not, which says something about you, why did you write this line anyway, what's its value? ... Wait, I know, you are using Subversion, you didn't wanna be left behind in the &lt;a href="http://tortoisesvn.tigris.org/bigpicture.html#statistics"&gt;statistics&lt;/a&gt; so you had to change some files, any files?!&lt;br /&gt;&lt;br /&gt;More serious than all the above, are you aware that writing shitty TODO lines removes your right to whine about the code being dirty? Have you thought about what a programmer is without his/her daily whining? I'll tell you - you'll have to talk only about the arts, ... and literature, ... and history when you meet in the hallway with your team mates - no, not even one complaint from you, you TODO addicted!&lt;br /&gt;&lt;br /&gt;Ok now, stop crying, be a good boy, fix that and you'll get your code whining permission back again. ... on 2nd thoughts, fix all the stupid TODOs in the code, you TODO freak!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-3699350269101207084?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/3699350269101207084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=3699350269101207084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3699350269101207084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3699350269101207084'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/11/passion-for-todos.html' title='passion for TODOs'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-6298879510554885114</id><published>2008-11-04T11:38:00.004+02:00</published><updated>2008-11-04T11:49:27.759+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>how do you measure success?</title><content type='html'>If you google for "debugging swing", my recent blog post shows up on the first &lt;a href="http://www.google.com/search?q=debugging+swing"&gt;Results&lt;/a&gt; page. Both google and answers.com ... not yahoo though. Today this is my measure for success.&lt;br /&gt;&lt;br /&gt;Allow me for a moment to ignore questions like why this happened for this particular post and how long it's gonna stay there, just let me enjoy it. It made my day, and it's not even noon yet! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-6298879510554885114?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/6298879510554885114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=6298879510554885114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6298879510554885114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6298879510554885114'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/11/how-do-you-measure-success.html' title='how do you measure success?'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-6632519186475260887</id><published>2008-10-21T13:37:00.037+03:00</published><updated>2009-11-24T18:08:03.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>debugging swing</title><content type='html'>&lt;span style="font-style: italic;"&gt;... they &lt;/span&gt;say debugging code can take more than the writing itself ...&lt;br /&gt;&lt;br /&gt;One of the problem I faced when I joined my actual project, with its GUI module having ~2230 java files was finding out which handlers were being invoked in response to a GUI event. Now that I know the project conventions and where the different types of classes go, it's easier, still from time to time I have this difficulty. My team mates have it too, so here is a tip to find out what piece of code is called to handle a particular event:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;set your debugger to step into the JDK classes, for IntelliJ the setting is here &lt;span style="font-style: italic;"&gt;File / Settings / Debugger / Stepping&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;to catch mouse events (most common) set your breakpoints in &lt;span style="font-size: 85%;"&gt;&lt;span style="color: #006600; font-family: courier new;"&gt;java.awt.Component#processMouseEvent&lt;/span&gt;&lt;/span&gt; (you'd want to avoid catching &lt;span style="color: #006600; font-family: courier new; font-size: 85%;"&gt;MouseEvent.MOUSE_ENTERED&lt;/span&gt; and &lt;span style="color: #006600; font-family: courier new; font-size: 85%;"&gt;MouseEvent.MOUSE_EXITED&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;when the execution flow reaches your breakpoint, look at the &lt;span style="color: #006600; font-family: courier new; font-size: 85%;"&gt;this&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;variable, it will show you the type of the clicked component. Indeed, it won't help finding out that you clicked a JButton, but you can always go up the containment hierarchy until you find a custom component (very often a derived panel XxxMyFeaturePanel) so you'll know what corner of the code base you are in. Do this by evaluating expressions like &lt;span style="color: #006600; font-size: 85%;"&gt;&lt;span style="font-family: courier new;"&gt;this.parent.parent.parent&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;if you want to debug the actual handler being invoked, locate the handler of interest mainly in &lt;span style="color: #006600; font-family: courier new; font-size: 85%;"&gt;this.listenerList, this.mouseListener &lt;/span&gt;and set a breakpoint in there, most often you'll be interested in an application-specific handler as opposed to a JDK handler&lt;/li&gt;&lt;li&gt;for components that feature selection (like &lt;span style="color: #006600; font-size: 85%;"&gt;&lt;span style="font-family: courier new;"&gt;JTable&lt;/span&gt;&lt;/span&gt;), the selection listener will be on the table's selection model, so check &lt;span style="font-size: 85%;"&gt;&lt;span style="color: #006600; font-family: courier new;"&gt;((JTable) this).getSelectionModel().&lt;span style="color: #38761d;"&gt;listenerList&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Here is a screenshot with the above technique: breakpoint in &lt;span style="font-size: 85%;"&gt;&lt;span style="color: #006600; font-family: courier new;"&gt;java.awt.Component&lt;/span&gt;&lt;/span&gt;, the &lt;span style="font-size: 85%;"&gt;&lt;span style="color: #006600; font-family: courier new;"&gt;this&lt;/span&gt;&lt;/span&gt; reference is a &lt;span style="font-size: 85%;"&gt;&lt;span style="color: #006600; font-family: courier new;"&gt;StripedJTable&lt;/span&gt;&lt;/span&gt; that is contained in a &lt;span style="font-size: 85%;"&gt;&lt;span style="color: #006600; font-family: courier new;"&gt;ConfigBackupPanel&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SwwBnAsNf_I/AAAAAAAAAHg/IoMBmKWFTgs/s1600/11242009_55242+PM.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SwwBnAsNf_I/AAAAAAAAAHg/IoMBmKWFTgs/s400/11242009_55242+PM.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If you are interested in debugging deeper through the JDK sources, make sure you get a JDK compiled with debug info, otherwise you won't see valuable info like variable values. You can find instructions &lt;a href="http://www.javalobby.org/java/forums/t103334.html"&gt;here&lt;/a&gt; on how to build a &lt;span style="color: #006600; font-size: 85%;"&gt;&lt;span style="font-family: courier new;"&gt;rt.ja&lt;/span&gt;r&lt;/span&gt; with debugging info. (The author uses the GNU utilities for Windows to find all java files in the JDK but you can do the same thing with the built-in Windows command &lt;span style="color: #006600; font-family: courier new; font-size: 85%;"&gt;dir &lt;path_to_jdk_src_dir&gt;&lt;path&gt;&amp;lt;path_to_jdk_src_dir&amp;gt;\*.java /b /s&lt;/path&gt;&lt;/path_to_jdk_src_dir&gt;&lt;/span&gt;). Also you might need to copy &lt;span style="color: #006600; font-size: 85%;"&gt;&lt;span style="font-family: courier new;"&gt;rt.jar&lt;/span&gt;&lt;/span&gt; to a temp location and include it from there in the classpath when compiling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-6632519186475260887?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/6632519186475260887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=6632519186475260887' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6632519186475260887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/6632519186475260887'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/10/debugging-swing.html' title='debugging swing'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GAwRaHy3Rmw/SwwBnAsNf_I/AAAAAAAAAHg/IoMBmKWFTgs/s72-c/11242009_55242+PM.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4794212556192894773</id><published>2008-10-02T19:56:00.009+03:00</published><updated>2008-12-09T15:42:27.056+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>trashing code</title><content type='html'>Did you see much software having features removed in newer releases, cause I can't actually name a single one. Imagine the product management board saying &lt;span style="font-style: italic;"&gt;Hey, customers are not using this feature, let's trash it&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I am not commenting on their behavior, and for good reasons probably, they prefer other methods of "removing" features. One is hiding them from the user by offering a &lt;span style="font-style: italic;"&gt;basic &lt;/span&gt;vs an &lt;span style="font-style: italic;"&gt;advanced &lt;/span&gt;interface, or grouping some features under an &lt;span style="font-style: italic;"&gt;Advanced &lt;/span&gt;menu item, or offering a &lt;span style="font-style: italic;"&gt;More things to do&lt;/span&gt; step. This way, what they and the GUI designers are doing is protecting the user from the ever increasing GUI complexity, enable them to do things as fast as possible.&lt;br /&gt;&lt;br /&gt;In this context, I suggest that you, yes you, the developer in the cube right behind the R3 pole, start thinking about protecting yourself from the ever growing complexity, which we feel both when reading and writing code. A good way to do this is fight back: start controlling the size of the code base.&lt;br /&gt;&lt;br /&gt;That being said, this morning I am particularly happy because I see my project fellows throwing away code: today it was a draw, 3 classes added, 3 removed.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SOUBeSzfNFI/AAAAAAAAAFI/7o04cv4LPHY/s1600-h/trash.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SOUBeSzfNFI/AAAAAAAAAFI/7o04cv4LPHY/s320/trash.PNG" alt="" id="BLOGGER_PHOTO_ID_5252606160353047634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Before starting to read IT literature, I thought I was weird feeling this way about throwing away code. But I see there are a lot others feeling the same thing, and &lt;a href="http://martinfowler.com/articles/designDead.html#id59956"&gt;they&lt;/a&gt; can express the idea much better than me.&lt;br /&gt;&lt;br /&gt;So start feeling happy when code gets deleted, it is a sign of healthy code while more features are added to the product.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4794212556192894773?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4794212556192894773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4794212556192894773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4794212556192894773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4794212556192894773'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/10/trashing-code.html' title='trashing code'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GAwRaHy3Rmw/SOUBeSzfNFI/AAAAAAAAAFI/7o04cv4LPHY/s72-c/trash.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-3638386320219183739</id><published>2008-08-28T14:50:00.005+03:00</published><updated>2008-10-23T14:59:38.502+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>SLOC can be good for your morale (II)</title><content type='html'>&lt;a href="http://lucian-ciufudean.blogspot.com/2008/07/sloc-can-be-good-for-your-morale.html"&gt;Here&lt;/a&gt; is the theory, below is the result: my last refactoring as seen through the eyes of &lt;a href="http://www.campwoodsw.com/sourcemonitor.html"&gt;SourceMonitor&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SLaTR_rjz1I/AAAAAAAAAEI/FpJxY9RtFd8/s1600-h/sourcemon.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/SLaTR_rjz1I/AAAAAAAAAEI/FpJxY9RtFd8/s320/sourcemon.PNG" alt="" id="BLOGGER_PHOTO_ID_5239537153853345618" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-3638386320219183739?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/3638386320219183739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=3638386320219183739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3638386320219183739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/3638386320219183739'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/08/sloc-can-be-good-for-your-morale-ii.html' title='SLOC can be good for your morale (II)'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/SLaTR_rjz1I/AAAAAAAAAEI/FpJxY9RtFd8/s72-c/sourcemon.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-2282472020736758962</id><published>2008-08-12T10:50:00.004+03:00</published><updated>2008-10-23T14:51:06.382+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>windows to the rescue</title><content type='html'>For the record, I took the screenshot yesterday,  &lt;span style="font-weight: bold;"&gt;2008&lt;/span&gt;! No comment ...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SKFDS4gJAtI/AAAAAAAAAD4/Nw8Xb8PyKRw/s1600-h/windows_to_the_rescue.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_GAwRaHy3Rmw/SKFDS4gJAtI/AAAAAAAAAD4/Nw8Xb8PyKRw/s400/windows_to_the_rescue.bmp" alt="" id="BLOGGER_PHOTO_ID_5233538233665127122" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-2282472020736758962?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/2282472020736758962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=2282472020736758962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2282472020736758962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2282472020736758962'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/08/windows-to-rescue.html' title='windows to the rescue'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GAwRaHy3Rmw/SKFDS4gJAtI/AAAAAAAAAD4/Nw8Xb8PyKRw/s72-c/windows_to_the_rescue.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-2886398892024359079</id><published>2008-07-16T15:17:00.044+03:00</published><updated>2009-02-18T14:30:56.870+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>SLOC can be good for your morale</title><content type='html'>While &lt;a href="http://en.wikipedia.org/wiki/Lines_of_code"&gt;Wikipedia&lt;/a&gt; tells you there are 2 advantages and so many as 9 disadvantages for using the SLOC metric in software programming, I'll tell you yet another advantage.&lt;br /&gt;&lt;br /&gt;Start by thinking about TDD and the psychological reason why TDD is good: it shows you &lt;span style="color: rgb(255, 0, 0);"&gt;red &lt;/span&gt;turning to &lt;span style="color: rgb(0, 153, 0);"&gt;green, &lt;/span&gt;effectively rewarding you for the done job.&lt;br /&gt;&lt;br /&gt;Now I've stepped into a project with such a scrambled source code that I find myself constantly refactoring while doing other tasks. Sometimes the refactoring gets bigger and turns into a standalone job and this is the case when I'd love to see a line like this one on my display after I'm done:&lt;span style="color: rgb(0, 153, 0);"&gt; Great job, you maintained all the functionality, all tests pass, the code base is smaller and easier to understand!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ok, I'm giving the tools too much credit ... I'll run the tests myself and ensure the functionality is preserved. But hey, what about &lt;span style="color: rgb(0, 153, 0);"&gt;the code base is smaller and is easier to understand!&lt;/span&gt; To a big extent I think &lt;a href="http://www.paulgraham.com/power.html"&gt;the shorter the better&lt;/a&gt;, and to skip the debate let's take the proof to the extreme, just go through the C - Cobol code comparison &lt;a href="http://en.wikipedia.org/wiki/Lines_of_code"&gt;here&lt;/a&gt; and see which one is easier to grasp. You're right, the shorter one.&lt;br /&gt;&lt;br /&gt;This means you can measure (part of) the success of a (big) refactoring with a metric derived from SLOC, along the lines of effective SLOC, this as long as the tool that computes this metric for you is smart enough to yield the same results for: &lt;blockquote&gt;&lt;pre&gt;i++;&lt;/pre&gt;and &lt;pre&gt;i = i + 1;&lt;/pre&gt;&lt;/blockquote&gt;and &lt;blockquote&gt;&lt;pre&gt;void m() {&lt;br /&gt; date = new Date();&lt;br /&gt;}&lt;/pre&gt;and&lt;pre&gt;void m() {&lt;br /&gt; n();&lt;br /&gt;}&lt;br /&gt;void n() {&lt;br /&gt; date = new Date();&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;P.S. Guess what, I've edited the post and made it shorter ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-2886398892024359079?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/2886398892024359079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=2886398892024359079' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2886398892024359079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2886398892024359079'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/07/sloc-can-be-good-for-your-morale.html' title='SLOC can be good for your morale'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-5423818594514852638</id><published>2008-06-23T18:09:00.006+03:00</published><updated>2008-06-27T08:59:18.143+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>hiring</title><content type='html'>If you say to me &lt;span style="font-style: italic;"&gt;How are you?&lt;/span&gt; these days and don't expect a useless, no-substance Western answer like &lt;span style="font-style: italic;"&gt;Not so bad&lt;/span&gt;, I'll reply back with &lt;span style="font-style: italic;"&gt;Good, hiring&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;And it is the &lt;a href="http://www.joelonsoftware.com/articles/fog0000000073.html"&gt;HOW&lt;/a&gt; I am doing it that matters this time. I am putting extra effort to eliminate phonies in interviews, those that sound brilliant and don't do the job, so you'll get a hands-on test at the end of the 2h interview which is structured like this:&lt;br /&gt;&lt;br /&gt;- discussion on recent projects and professional experience&lt;br /&gt;- questions from various subjects like algorithms, data structures, technologies, software development&lt;br /&gt;- hands-on test&lt;br /&gt;&lt;br /&gt;I am only looking for 2 engineers, so hiring one not good for the job will mean 50% failure. Fingers-crossed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-5423818594514852638?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/5423818594514852638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=5423818594514852638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5423818594514852638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/5423818594514852638'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/06/hiring.html' title='hiring'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-8774170227206908917</id><published>2008-06-11T09:40:00.005+03:00</published><updated>2008-06-11T10:00:13.727+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>XML and aliens</title><content type='html'>&lt;span style="font-style: italic;"&gt;[...] If SETI@home works, for example, we'll need libraries for communicating with aliens. Unless of course they are sufficiently advanced that they already communicate in XML. [...]&lt;/span&gt;&lt;span&gt; - Paul Graham&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Man, this line is so good, I had to reproduce it here and post yet again a &lt;a href="http://www.paulgraham.com/articles.html"&gt;link&lt;/a&gt; to Paul Graham's essays so that other know-it-all programmers can read them and realize they know next-to-nothing.&lt;br /&gt;&lt;br /&gt;Humble me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-8774170227206908917?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/8774170227206908917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=8774170227206908917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8774170227206908917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/8774170227206908917'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/06/xml-and-aliens.html' title='XML and aliens'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-1997912202435164188</id><published>2008-03-24T21:08:00.037+02:00</published><updated>2008-10-29T15:07:59.451+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>soap with attachments, axis1 and href</title><content type='html'>Warning: Read on only if these terms together instantly give you a headache or bring you bad memories.&lt;br /&gt;&lt;br /&gt;If you use axis in your project (and indeed it hides nicely the details of constructing SOAP messages and lower level APIs like SAAJ) you probably write code like this to invoke a remote service with attachments:&lt;br /&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;X_BindingStub service =&lt;br /&gt;(X_BindingStub) new X_ServiceLocator().&lt;br /&gt;getY([&amp;lt;url&amp;gt;]);&lt;br /&gt;service.setUsername(&amp;lt;username&amp;gt;);&lt;br /&gt;service.setPassword(&amp;lt;password&amp;gt;);&lt;br /&gt;MyBusinessObject obj = new MyBusinessObject();&lt;br /&gt;obj.setXXX(...);&lt;br /&gt;service.addAttachment(new DataHandler(...&lt;br /&gt;service.remoteMethod(obj);&lt;/pre&gt;&lt;br /&gt;But it might be that unless your business object (that Axis will serialize into the BODY part of the SOAP message) will reference the attachment, the remote system will simply ignore the attachment, or worse, your entire message.&lt;br /&gt;&lt;br /&gt;This linking is not something the Axis guys invented, just something that they made harder to control. See &lt;a href="http://www.w3.org/TR/SOAP-attachments"&gt;http://www.w3.org/TR/SOAP-attachments&lt;/a&gt; for the different ways to link the SOAP message with the attachment within a MIME message.&lt;br /&gt;&lt;br /&gt;...and here is how you could do it with Axis while leveraging the classes that &lt;code&gt;wsdl2java&lt;/code&gt; generated:&lt;br /&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;Service service = new Service();&lt;br /&gt;Call call = (org.apache.axis.client.Call)&lt;br /&gt;service.createCall();&lt;br /&gt;// set call endpoint, username, password&lt;br /&gt;&lt;br /&gt;// locate the description of the remote method you want&lt;br /&gt;// to call in X_BindingStub and use it here:&lt;br /&gt;OperationDesc oper =&lt;br /&gt;new org.apache.axis.description.OperationDesc();&lt;br /&gt;oper.setName("remoteMethod");&lt;br /&gt;ParameterDesc param ...&lt;br /&gt;...&lt;br /&gt;call.setOperation(oper);&lt;br /&gt;&lt;br /&gt;// locate the remote method you want to call in&lt;br /&gt;// X_BindingStub and use that code fragment here:&lt;br /&gt;call.setUseSOAPAction(true);&lt;br /&gt;...&lt;br /&gt;call.setOperationName(new javax.xml.namespace.QName(...&lt;br /&gt;&lt;br /&gt;// create the attachment&lt;br /&gt;AttachmentPart ap = new AttachmentPart(new DataHandler(&lt;br /&gt;"All my worries are gone now", "text/plain"));&lt;br /&gt;String contentIdRef = ap.getContentId();&lt;br /&gt;&lt;br /&gt;// construct the XML string that the remote function&lt;br /&gt;// expects (it'd be very easy if you could take this from&lt;br /&gt;// the remote service logs). Link to the attachment by&lt;br /&gt;// setting the href attribute of an XML elem. Note that&lt;br /&gt;// the remote method must expect the href attribute on&lt;br /&gt;// the very XML elem where you place it&lt;br /&gt;String xmlString = "&amp;lt;xxx&amp;gt;...href=\""&lt;br /&gt;+ contentIdRef + "\"...&amp;lt;/xxx&gt;";&lt;br /&gt;&lt;br /&gt;// call the remote service&lt;br /&gt;call.addAttachmentPart(ap);&lt;br /&gt;call.invoke(new Object[] {new SOAPBodyElement(new&lt;br /&gt;ByteArrayInputStream(xmlString.getBytes("UTF-8")))});&lt;/pre&gt;&lt;br /&gt;It might be that the same works with axis2, your turn to test and let me know. As for MIME and DIME attachment encodings, both work, just use this extra code for DIME attachments:&lt;br /&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;call.setProperty(&lt;br /&gt;Call.ATTACHMENT_ENCAPSULATION_FORMAT,&lt;br /&gt;Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);&lt;/pre&gt;&lt;br /&gt;Did it work? No?! You must have done smth wrong ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-1997912202435164188?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/1997912202435164188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=1997912202435164188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1997912202435164188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1997912202435164188'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/03/soap-with-attachments-axis1-and-href.html' title='soap with attachments, axis1 and href'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-907672409049159915</id><published>2008-03-11T14:32:00.011+02:00</published><updated>2010-12-08T12:48:00.036+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>works as designed</title><content type='html'>You definitely heard this one, developers use it as a reason for closing bugs, you even used it yourself. It sounds perfectly natural, at least to me, the developer. I bet testers hate it. 3 simple words to close a bug with.&lt;br /&gt;&lt;br /&gt;And now I'm questioning if the construct is correct. How much sense does &lt;i&gt;design&lt;/i&gt; make to a tester? And considering that some teams have this open policy where clients can see all the product bugs, how much sense does &lt;i&gt;design&lt;/i&gt; make to a client?&lt;br /&gt;&lt;br /&gt;To find out the answer, try this: in UAT, go to your client and tell her that the bug she's found actually works as designed, i.e. according to the design. Don't be surprised if she asks you &lt;span style="font-style: italic;"&gt;What design?&lt;/span&gt; Now if you are smart you'd shut up and go check the &lt;span style="font-weight: bold;"&gt;spec &lt;/span&gt;that she counter-signed&lt;span style="font-weight: bold;"&gt;, &lt;/span&gt;if you are not-so-smart (read stupid or inexperienced) you'd say: &lt;span style="font-style: italic;"&gt;What design?! The UML class design, the interaction and ORM diagrams&lt;/span&gt;!&lt;br /&gt;By now the smart  reader noticed that the &lt;i&gt;works as designed&lt;/i&gt; construct is flawed. If this is the case, then my proof &lt;span style="font-weight: bold;"&gt;worked as specified&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;P.S. If I were the client, I'd only sign contracts that say the software vendor must ship &lt;span style="font-weight: bold;"&gt;works as intended&lt;/span&gt; software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-907672409049159915?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/907672409049159915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=907672409049159915' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/907672409049159915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/907672409049159915'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2008/03/works-as-designed.html' title='works as designed'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-699179157424718483</id><published>2007-10-30T14:15:00.001+02:00</published><updated>2009-02-06T13:42:02.755+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>beware of airline websites - short review of www.brusselsairlines.co.uk</title><content type='html'>So here I start, armed with my brand new FF, going to &lt;a href="http://www.brusselsairlines.co.uk/en_uk/shop/flights/default.aspx"&gt;http://www.brusselsairlines.co.uk/en_uk/shop/flights/default.aspx&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The one way flight option is selected by default, so it must be they don't really want me to fly with their company on my way back?! A friend of mine at a UK airline tells me that the bookings they get are more than 90% returns, so you see my point.&lt;br /&gt;&lt;br /&gt;I'll fly out from London, Heathrow is very close to me so I go on and delete Gatwick from the default entry &lt;span style="font-weight: bold;"&gt;London Gatwick&lt;/span&gt;, then tab to the &lt;span style="font-weight: bold;"&gt;To&lt;/span&gt; input field that suddenly changes to &lt;span style="font-weight: bold;"&gt;Abidjan&lt;/span&gt;. Common guys, you can do better than that, you are a Belgian company, where would you like me to fly? I'll help you this time, it is Brussels. So here I go and type in &lt;span style="font-weight: bold;"&gt;Brussels&lt;/span&gt;, all the way to the end because there is no AJAX to help me on, nor a drop-down.&lt;br /&gt;&lt;br /&gt;The calendar control is useless&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GAwRaHy3Rmw/RycpwIFNkJI/AAAAAAAAACw/aGbQ9lLrU2c/s1600-h/calendar.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_GAwRaHy3Rmw/RycpwIFNkJI/AAAAAAAAACw/aGbQ9lLrU2c/s400/calendar.JPG" alt="" id="BLOGGER_PHOTO_ID_5127112607564402834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;so I'll have to enter the dates manually. Click the departure day control, choose the 24th, yes, November is correct, well done, click on the arrival day control, choose 25 and it is so smart that it figures it has to choose a return month for me, but it gets it all wrong: I can't possibly fly out in Nov and return in October!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GAwRaHy3Rmw/RycsXYFNkMI/AAAAAAAAADI/LGfsZT5Wmdg/s1600-h/search.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_GAwRaHy3Rmw/RycsXYFNkMI/AAAAAAAAADI/LGfsZT5Wmdg/s400/search.JPG" alt="" id="BLOGGER_PHOTO_ID_5127115480897523906" border="0" /&gt;&lt;/a&gt;Ok, by now I should have overcome all obstacles, after all I did not expect that a journey from London all the way to Brussels would incur no risks at all, I am happy to fight them.&lt;br /&gt;&lt;br /&gt;Click &lt;span style="font-weight: bold;"&gt;Submit&lt;/span&gt;, and here I am ... where?! NO, I told you I was going to Brussels, not to &lt;span&gt;Abidjan&lt;/span&gt;, oh yeah, ok, that's fair, let's blame my English. (by the way, the desperate one in the upper right corner of the picture below is not me ... frown)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GAwRaHy3Rmw/Ryct34FNkNI/AAAAAAAAADQ/WFQi-MyOJl0/s1600-h/search_result.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_GAwRaHy3Rmw/Ryct34FNkNI/AAAAAAAAADQ/WFQi-MyOJl0/s400/search_result.JPG" alt="" id="BLOGGER_PHOTO_ID_5127117138754900178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I will behave, so I won't use the browser Back button, and click &lt;span style="font-weight: bold;"&gt;Change your selection&lt;/span&gt; instead. One thing you got wrong is the button label, it should say &lt;span style="font-weight: bold;"&gt;Where did you say you wanted to go?&lt;/span&gt; you don't remember right? don't worry, let me choose again Heathrow instead of Gatwick, Brussels instead of &lt;span&gt;Abidjan&lt;/span&gt; (this time there are dropdowns, so they guessed my mind, they might be good after all), wow, my travel dates are the correct ones. No, it is not a flexible date search, I told you it was an exact date one.&lt;br /&gt;&lt;br /&gt;So show me what you've got. Leaving at 10:20 is sensible, returning in the evening. (At this moment, I don't dare play a lot with the radio buttons). I proceed to the payment pages, use my card, and I get the confirmation page saying the flight is actually leaving at 11:20 instead. So I put this on the recent DST changes and wait for the confirmation email and e-ticket. I'll probably have to call them and confirm the travel times?&lt;br /&gt;&lt;br /&gt;Yes, 2 new items in my Inbox. E-ticket and booking confirmation. Only that  the latter starts with&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Server Error in '/' Application.&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Input string was not in a correct format.&lt;br /&gt;....&lt;br /&gt;&lt;other info=""&gt;&lt;/other&gt;&lt;/span&gt;&lt;br /&gt;Did you actually want to communicate to me something important instead, like baggage allowance information, regulations, how many bottles of cider I am allowed to pack?&lt;br /&gt;&lt;br /&gt;Also thanks for the stack trace but no, I won't debug your application.&lt;br /&gt;&lt;br /&gt;To the developers supporting the site:&lt;br /&gt;- my life should be simpler than this&lt;br /&gt;- I used FF 2.0.0.8&lt;br /&gt;- no, I won't try it with IE, that's your job&lt;br /&gt;- yes, I did maintenance and support work for the website of an airline company&lt;br /&gt;&lt;br /&gt;To the site owners:&lt;br /&gt;- for the sake of your customers, enforce some quality metrics on your website solution maintainer&lt;br /&gt;- you'll even get fewer calls in support, so you'll save money&lt;br /&gt;- you'll even get fewer bookings done by agents, so you'll save money&lt;br /&gt;&lt;br /&gt;I hope you fly better than your website performs, see you in Brussels!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-699179157424718483?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/699179157424718483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=699179157424718483' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/699179157424718483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/699179157424718483'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2007/10/60-seconds-review-of.html' title='beware of airline websites - short review of www.brusselsairlines.co.uk'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GAwRaHy3Rmw/RycpwIFNkJI/AAAAAAAAACw/aGbQ9lLrU2c/s72-c/calendar.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-4856871826683444242</id><published>2007-10-28T13:48:00.001+02:00</published><updated>2008-12-09T04:53:23.428+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>software and taps</title><content type='html'>What software and taps have in common is the public interface: APIs vs knobs.&lt;br /&gt;&lt;br /&gt;In case of software, you expect that the API will work as documented and without side effects. Sometimes the paradigms used in the API are so common that they simply need no documentation or one does not have to read it before using the API. This is the case of the setter/getter paradigm in Java Beans or the basic &lt;a href="http://rest.blueoxen.net/cgi-bin/wiki.pl?MinimumMethods"&gt;REST methods&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I agree that in case of taps there is no documentation to read, nor that I'd read it before taking the first shower in the new flat. I simply expect them to work as ... expected.&lt;br /&gt;&lt;br /&gt;Now, in the flat I am staying in UK, here is how the "undocumented public interface of the taps" works (the arrows show how to turn the taps on):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GAwRaHy3Rmw/RySdVoFNkII/AAAAAAAAACo/6rITzRJUglw/s1600-h/taps2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_GAwRaHy3Rmw/RySdVoFNkII/AAAAAAAAACo/6rITzRJUglw/s400/taps2.JPG" alt="" id="BLOGGER_PHOTO_ID_5126395270716559490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Every now and then when I try to adjust the water temperature, the water becomes too hot and burns my skin. The same thing happens to me when I use bad APIs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-4856871826683444242?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/4856871826683444242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=4856871826683444242' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4856871826683444242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/4856871826683444242'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2007/10/software-and-taps.html' title='software and taps'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GAwRaHy3Rmw/RySdVoFNkII/AAAAAAAAACo/6rITzRJUglw/s72-c/taps2.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-1404898852690273826</id><published>2007-10-19T16:43:00.003+03:00</published><updated>2011-11-08T23:07:10.956+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>good blogs</title><content type='html'>We are talking every day of specialization as a mean of making our work more efficient, still I am always appreciating non-programming skills like GUI design and marketing (just to name a few) in programmers. If you accept this idea, then this post is for you.&lt;br /&gt;&lt;br /&gt;If you also accept the idea that the blogs you read are an extremely valuable source of such information, here are a few advices for you to arrive at just that &lt;span style="font-style: italic;"&gt;critical mass &lt;/span&gt;of blogs in your reading list, realize that the ROI here should be good content in little time.&lt;br /&gt;&lt;br /&gt;Set a &lt;span style="font-weight: bold;"&gt;threshold&lt;/span&gt; of how much reading you'll do every day, it might be 20 or 30 minutes. Do not allow blog reading to take up more than that, getting things done is more important.&lt;br /&gt;&lt;br /&gt;If there are no blogs on your &lt;span style="font-weight: bold;"&gt;reading list&lt;/span&gt;, you should know at least one name that sounds like making a big difference in the industry. Look up his/her blog and start from there. Other colleagues in the company that have the &lt;a href="http://www.paulgraham.com/gba.html"&gt;hacker&lt;/a&gt; reputation could help with a few URLs.&lt;br /&gt;&lt;br /&gt;Read &lt;span style="font-weight: bold;"&gt;regularly &lt;/span&gt;and yes, make exceptions, you don't &lt;span style="font-style: italic;"&gt;have&lt;/span&gt; to do it every day.&lt;br /&gt;&lt;br /&gt;Find a decent &lt;span style="font-weight: bold;"&gt;RSS reader &lt;/span&gt;to aggregate your blogs. They come in 2 flavors: as a desktop or a web application. You'll only know what suits you after a few months of reading. I switched to Google Reader now for the main reason that it has a centralized database that keeps older posts in the history, no longer available through the current RSS  feeds.&lt;br /&gt;&lt;br /&gt;Look for blogs that have these characteristics:&lt;br /&gt;&lt;br /&gt;They are &lt;span style="font-weight: bold;"&gt;inspiring&lt;/span&gt;. They don't let you forget that you do this job for fun also and not only to make a living.&lt;br /&gt;&lt;br /&gt;They make your brain do unthinkable connections between old stuff and the new stuff that you are reading. They are &lt;span style="font-weight: bold;"&gt;filling in the gaps&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;New ideas &lt;/span&gt;are born into your brain. It might be a new software you could write or how you could improve the development process of your team.&lt;br /&gt;&lt;br /&gt;When you read them, &lt;span style="font-weight: bold;"&gt;time flies by. &lt;/span&gt;You are bothered by that Outlook popup reminder that you have a meeting in 15, 5, oops, you're late.&lt;br /&gt;&lt;br /&gt;They contain &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;links &lt;/span&gt;to other good blogs, book titles and &lt;a href="http://www.joelonsoftware.com/articles/fog0000000017.html"&gt;good software&lt;/a&gt;, so your reading list grows.&lt;br /&gt;&lt;br /&gt;They just feel &lt;span style="font-weight: bold;"&gt;smart &lt;/span&gt;- no need to comment on this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-1404898852690273826?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/1404898852690273826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=1404898852690273826' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1404898852690273826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/1404898852690273826'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2007/10/good-blogs.html' title='good blogs'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8570987307752040883.post-2041181158668569373</id><published>2007-10-18T14:27:00.000+03:00</published><updated>2007-10-28T15:54:33.792+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>your personal blog</title><content type='html'>There are 2 things a personal blog can do for you .... er ....actually only 1, cause the 2nd I thought about was to leave you how you are, i.e. &lt;span style="font-style: italic;"&gt;unnoticed&lt;/span&gt; - which is not actually acting upon yourself.&lt;br /&gt;&lt;br /&gt;The 1st one is to make your voice, opinions, ideas, comments, protests known. And if they are really good, depending on the audience, you'll be more marketable, you will gain respect from the community and (this is the thing I hope) the mere writing will teach you how to write well - you are no longer writing for yourself you see, but for a wider audience.&lt;br /&gt;&lt;br /&gt;So there are a couple of things you need to figure out when you start a blog:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the URL: despite what you are thinking, this is not important. It is the &lt;span style="font-style: italic;"&gt;content&lt;/span&gt; that matters, so if you are looking for a smart name for the URL, stop, find one that is close enough to your name (and it is not stupid), and instead think of a smart name for your blog title&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;blog title: it has to be short and smart, so if you are not a native English speaker (like myself), ask for a review from an English friend&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;personal description: it has to say something meaningful about yourself and be ... smart&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Once you've got these, the only thing missing is the content, which believe me is the most important. People won't find you by trying out various URLs, they will still continue to search the Internet on their favorite topics - good for you if your blog posts score high. And make sure that your name is displayed on every page (i.e. part of the content), so that people searching for your name have higher chances of seeing a link to your blog within the first search results.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The good thing is that if the content is bad it won't do yourself any harm (embarrassment not counted), it will only leave you in the dark. But you've been there already right?&lt;/p&gt;&lt;img style="border: 1px solid blue; z-index: 90; opacity: 1; position: absolute; left: 318px; top: 108px;" id="smallDivTip" src="chrome://dictionarytip/skin/book.png" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8570987307752040883-2041181158668569373?l=lucian-ciufudean.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lucian-ciufudean.blogspot.com/feeds/2041181158668569373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8570987307752040883&amp;postID=2041181158668569373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2041181158668569373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8570987307752040883/posts/default/2041181158668569373'/><link rel='alternate' type='text/html' href='http://lucian-ciufudean.blogspot.com/2007/10/your-personal-blog.html' title='your personal blog'/><author><name>Lucian Ciufudean</name><uri>http://www.blogger.com/profile/04943427308875124376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_GAwRaHy3Rmw/Sz274Ph9ChI/AAAAAAAAAHw/6hssYwLUw5o/S220/profile.JPG'/></author><thr:total>0</thr:total></entry></feed>
