<?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-11184227</id><updated>2011-07-07T16:30:34.811-07:00</updated><title type='text'>i program</title><subtitle type='html'>notes on programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://notesonprogramming.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://notesonprogramming.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Trucza Csaba</name><uri>http://www.blogger.com/profile/17868036127149938053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11184227.post-3883241771221465556</id><published>2008-05-20T09:42:00.000-07:00</published><updated>2008-05-20T10:19:48.904-07:00</updated><title type='text'>The Many Faces of Simplicity</title><content type='html'>There is an interesting series over at www.dev102.com called Programming Job Interview Challenge. They are at &lt;a href="http://www.dev102.com/2008/05/19/a-programming-job-interview-challenge-4/"&gt;Challenge #4&lt;/a&gt; already. You have to write a function foo which returns 17 if 7 is passed as parameter, 7 if 17 is passed as parameter. &lt;br /&gt;You cannot use conditionals and containers of any kind.&lt;br /&gt;And they say:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;This is not a real world problem but it does check how simple can we think, so think -  &lt;span style="font-weight:bold;"&gt;simplicity&lt;/span&gt;!&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Simplicity... One of my favourite words.&lt;br /&gt;&lt;br /&gt;So how do you transform 7 to 17 and 17 to 7 without conditionals and containers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A Simple Idea&lt;/span&gt;&lt;br /&gt;The first idea is that you should fix the &lt;span style="font-style:italic;"&gt;tens&lt;/span&gt; in the passed parameter: if it is 0 make it 1, if it's 1 make it 0. (If it's other than 0 or 1, you can do whatever you like.&lt;br /&gt;&lt;br /&gt;Wait... turning 0 to 1 and 1 to 0 is a logical negation thing... We could extract the tens, negate it and put it back. Simple enough. &lt;br /&gt;&lt;br /&gt;Let's see:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;int foo(int n)&lt;br /&gt;{&lt;br /&gt; int tens = n/10;&lt;br /&gt; int ones = n-tens*10;&lt;br /&gt; int new_tens = !tens;&lt;br /&gt; int result = new_tens*10+ones;&lt;br /&gt; return result;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Hmmm... The idea is pretty simple, but the code is quite verbose. Let's try and remove some of the noise:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;int foo(int n)&lt;br /&gt;{&lt;br /&gt; return (!(n/10))*10+(n-10*(n/10));&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ok, now we have a single line, which is absolutely not readable. Simple idea, simple code, hard to understand.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Another Simple Idea&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's see another approach. This time the idea is: if it's 7, add 10, if it's 17, substract 10. &lt;br /&gt;&lt;br /&gt;Or rephrased: if it's seven, add 1*10, if it's 17 add (-1)*10. &lt;br /&gt;&lt;br /&gt;So we just have to produce a 1 or -1 based on the tens:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;int foo(int n)&lt;br /&gt;{&lt;br /&gt; int tens = 2*(n/10);&lt;br /&gt; tens = tens - 1;&lt;br /&gt; return n - tens*10;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Compared to the first approach, the idea is a little bit more complex, but the code seems more simple. It is simpler measured some code complexity metric, but understanding what it does and how will be harder than the first one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A Tricky Solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As I was thinking about other solutions, bitwise operators came in my mind. Can we somehow manipulate the bits to get the solution we desire?&lt;br /&gt;&lt;br /&gt;First, the numbers in binary: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;07 = 00000111 &lt;br /&gt;17 = 00010001&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The idea is: we should find an operation which would flip the bits around until the correct result is produced. I remembered that there is something called &lt;a href="http://en.wikipedia.org/wiki/XOR_swap_algorithm"&gt;XOR Swap&lt;/a&gt; which can swap two variables without the need of a temporary. This gave the idea of the next solution: use xor on the parameter to produce the desired result. What magical number would produce the desired result? Let's see the numbers again, and find the places where the bits do not match (marked with !):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;07 = 00000111 &lt;br /&gt;17 = 00010001&lt;br /&gt;     ...!.!!.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If we take the 00010110 pattern and xor it with one of the patterns, it will produce the other pattern. Exactly what we need! So here is the code (binary 00010110 being 22 decimal):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;int foo(int n)&lt;br /&gt;{&lt;br /&gt; return n ^ 22;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is the shortest code (being the simplest by code metric), but you would not find out what and how it does just by looking at the code. Also the idea of solving the problem is quite complicated.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;And Finally: A Weird One&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;There is another variant of the tens-manipulation, which is simple in implementation,  moderately complex in understanding:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;int foo(int n)&lt;br /&gt;{&lt;br /&gt; return n+10*((n==7)-(n==17));&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Strictly speaking it conforms to the problem restrictions, however it can be considered that it violates the spirit of the problem statement, as (n == 7) is a boolean, which could be considered as a conditional. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Simplicity: Not That Simple&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We saw 4 solutions to the same problem. One thing I observed is that there are more than one thing to be considered:&lt;br /&gt;- the simplicity of the idea: how easy is to explain/describe how you solve the problem&lt;br /&gt;- the simplicity of the code: using code some metrics, how many statements, branches etc. are in your code&lt;br /&gt;- the readability of the code: how easy is to learn your intent just by reading the code&lt;br /&gt;&lt;br /&gt;And these measures tend to change independently.&lt;br /&gt;&lt;br /&gt;And all four solutions to the challenge proposed are acceptable. And they will be simple for one of the definitions above. And no one is better or worse absolutely than the others.&lt;br /&gt;&lt;br /&gt;So, next time someone (possible me) will argue about a solution being simpler than another, I will look hard to see which simplicity we are talking about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11184227-3883241771221465556?l=notesonprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesonprogramming.blogspot.com/feeds/3883241771221465556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11184227&amp;postID=3883241771221465556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/3883241771221465556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/3883241771221465556'/><link rel='alternate' type='text/html' href='http://notesonprogramming.blogspot.com/2008/05/many-faces-of-simplicity.html' title='The Many Faces of Simplicity'/><author><name>Trucza Csaba</name><uri>http://www.blogger.com/profile/17868036127149938053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11184227.post-112712561732684204</id><published>2005-09-19T03:18:00.000-07:00</published><updated>2006-10-25T04:21:51.750-07:00</updated><title type='text'>On errors and their handling</title><content type='html'>I just found an enlightening article about errors and their handling by Herb Sutter in CUJ.&lt;br /&gt;&lt;br /&gt;His clear definitions on what makes an error and how to handle them is most refreshing.&lt;br /&gt;&lt;br /&gt;However it makes one wonder: isn't it strange that this error and error handling issue is still not clarified?&lt;br /&gt;&lt;br /&gt;The article: &lt;a href="http://www.cuj.com/documents/s=8188/cuj0408g/"&gt;When and How to Use Exceptions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Another article which clarifies this thing (from the design-by-contract angle) is Bertrand Meyer's &lt;a href="http://se.ethz.ch/%7Emeyer/publications/computer/contract.pdf"&gt;Applying "Design by Contract"&lt;/a&gt; (pdf). While Eiffel-oriented, it sets some pretty solid foundations on contracts, their violation and how to cope with those violations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11184227-112712561732684204?l=notesonprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesonprogramming.blogspot.com/feeds/112712561732684204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11184227&amp;postID=112712561732684204' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/112712561732684204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/112712561732684204'/><link rel='alternate' type='text/html' href='http://notesonprogramming.blogspot.com/2005/09/on-errors-and-their-handling.html' title='On errors and their handling'/><author><name>Trucza Csaba</name><uri>http://www.blogger.com/profile/17868036127149938053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11184227.post-112377558147750970</id><published>2005-08-11T08:50:00.000-07:00</published><updated>2006-10-25T04:21:51.652-07:00</updated><title type='text'>The beauty of it...</title><content type='html'>While trying to wrap unmanaged C++ code in Microsoft's Managed Extensions for C++ I produced the following code:&lt;br /&gt;&lt;br /&gt;            return *(new Signal(&amp;predictor-&gt;GetInputSignal(index)));&lt;br /&gt;&lt;br /&gt;It hit me with it's Gaudi-esque beauty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11184227-112377558147750970?l=notesonprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesonprogramming.blogspot.com/feeds/112377558147750970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11184227&amp;postID=112377558147750970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/112377558147750970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/112377558147750970'/><link rel='alternate' type='text/html' href='http://notesonprogramming.blogspot.com/2005/08/beauty-of-it.html' title='The beauty of it...'/><author><name>Trucza Csaba</name><uri>http://www.blogger.com/profile/17868036127149938053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11184227.post-111944844431139753</id><published>2005-06-22T06:53:00.000-07:00</published><updated>2006-10-25T04:21:51.551-07:00</updated><title type='text'>Simplicity</title><content type='html'>&lt;p style="margin: 0in; font-family: Verdana; font-size: 10pt;"&gt;Keep It Simple versus Make It Simple&lt;/p&gt;   &lt;p style="margin: 0in; font-family: Verdana; font-size: 10pt;"&gt; &lt;/p&gt;   &lt;p style="margin: 0in; font-family: Verdana; font-size: 10pt;"&gt;Simplicity is hard.&lt;/p&gt;   &lt;ul style="margin-left: 0.5in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;" type="disc"&gt; &lt;li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle; font-size: 10pt;"&gt;&lt;span style="font-family: Verdana;"&gt;Mentality:      remove unnecessary cruft. This means you first add lots of things, then      you have to discard them. That hurts.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle; font-size: 10pt;"&gt;&lt;span style="font-family: Verdana;"&gt;Having a clear      focus might help. Then you can ask questions like: removing this thing      will hurt the focus?&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-top: 0pt; margin-bottom: 0pt; vertical-align: middle; font-size: 10pt;"&gt;&lt;span style="font-family: Verdana;"&gt;Separate      essential from auxiliary. A few essential points provide the most value.      Auxiliary things add little value.&lt;/span&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/11184227-111944844431139753?l=notesonprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesonprogramming.blogspot.com/feeds/111944844431139753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11184227&amp;postID=111944844431139753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/111944844431139753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/111944844431139753'/><link rel='alternate' type='text/html' href='http://notesonprogramming.blogspot.com/2005/06/simplicity.html' title='Simplicity'/><author><name>Trucza Csaba</name><uri>http://www.blogger.com/profile/17868036127149938053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11184227.post-111392416883033048</id><published>2005-04-19T08:18:00.000-07:00</published><updated>2006-10-25T04:21:51.356-07:00</updated><title type='text'>Commenting</title><content type='html'>There is an article published in the ACM Queue titled Comments are more improtant than code.&lt;br /&gt;&lt;br /&gt;After I first read, I was outraged. Being a supporter of self documenting, readable code, and a fan of extreme programming, I took the views of the author as a personal attack on me.&lt;br /&gt;&lt;br /&gt;After a good nights sleep, the rage went away and the thinking process kicked in.&lt;br /&gt;&lt;br /&gt;What's this commenting thing anyway?&lt;br /&gt;&lt;br /&gt;We all know from the second program we ever write, that writing comments is not only good, is a necessity.&lt;br /&gt;&lt;br /&gt;Reading the code written a month ago, and trying to recall the thinking process which led to a particular code is a painful experience.&lt;br /&gt;&lt;br /&gt;It would be nice if we could just core-dump our thinking process right next to the code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What can be in the code?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lots of intent can be written in the code itself. Depending on the maturity of the programmer he can use names (class, method, member), patterns, idioms to capture a lot of static information about the structure, relationship, collaborations.&lt;br /&gt;&lt;br /&gt;But there is so much more to know about the code. And this is where the comments can be a real help.&lt;br /&gt;&lt;br /&gt;Tricky code &amp;amp; non-obvious solution comments&lt;br /&gt;&lt;br /&gt;On the tricky parts (which are prime candidates to a healthy refactoring, according to XP proponents) one can explain the trick. But you better have a very good excuse for writing the tricky code.&lt;br /&gt;&lt;br /&gt;If it is because the problem to be solved begs for a non-obvious tricky solution, then it's not only a good practice to write the comment explaining why the obvious solution won't work, it's mandatory. Otherwise the next programmer will inevitably come up with the obvious solution and waste his time finding out that it does not work.&lt;br /&gt;&lt;br /&gt;If the trick is not mandated, the by all means take the XPers seriously and rewrite your code instead of commenting it.&lt;br /&gt;&lt;br /&gt;Method comments&lt;br /&gt;&lt;br /&gt;Sometimes pre and post-conditions can be expressed as assertions in the code itself, other times they can not be, or need extra explanations.&lt;br /&gt;&lt;br /&gt;Method comments are the perfect place for this.&lt;br /&gt;&lt;br /&gt;But writing method comments and not writing assertions where assertions are to be written, not throwing exceptions when exceptions are to be thrown is a bad thing.&lt;br /&gt;&lt;br /&gt;Class comments&lt;br /&gt;&lt;br /&gt;Explaining the goals of each class is the first and most oftenly misused form of comment.&lt;br /&gt;&lt;br /&gt;Writing a comment in front of each class about what it's responsabilities are is not very useful. Given a good class (good class name, clear interface, suggestive names, method comments if needed) will render most of the comments redundant (see below other problems with redundant comments).&lt;br /&gt;&lt;br /&gt;Most of the information often found in the class comments can be deduced from a good class. Poorly written classes need more explanation in the header, but it won't help understanding the code if one have to modify it.&lt;br /&gt;&lt;br /&gt;Class relationship comments&lt;br /&gt;&lt;br /&gt;The comments I often miss is the ones which explain the relationship and collaboration between several classes.&lt;br /&gt;&lt;br /&gt;However where you put these comments? Placing them in the header of the classes involved is not very wise.&lt;br /&gt;&lt;br /&gt;You better place them in separate text files, and add references to this text file in the header comments of the classes.&lt;br /&gt;&lt;br /&gt;External constraints&lt;br /&gt;&lt;br /&gt;Sometimes you have to explain an external constraint which influences your code (api, hardware, external components, bugs in libraries, etc).&lt;br /&gt;&lt;br /&gt;If the influence is local (mostly in bugs) then your comments should be local too. For example if a call in an API has a particular local effect (for example the call will fail for parameter A having 42), you make the workaround and comment it locally.&lt;br /&gt;&lt;br /&gt;However if the influence is not local, that is it influencess the design of your classes (often this is the case for facade components) then hiding the information in a local comment is bad.&lt;br /&gt;Write a separate text file with the relevant information, and referr to this document in your code.&lt;br /&gt;The references can be in the class comments and alos in code comments where you end up with non-obvious code (which cannot be refactored).&lt;br /&gt;&lt;br /&gt;Combinations&lt;br /&gt;&lt;br /&gt;Bad code with bad comments&lt;br /&gt;&lt;br /&gt;How many times I saw code which was a complete mess? Hard to read, nearly impossible to understand. Usually crap like this is not commented, or the comments are themselves a shame.&lt;br /&gt;&lt;br /&gt;Good code with bad comments&lt;br /&gt;&lt;br /&gt;Sometimes I read clearly written code with crappy comments. The comments are redundant or misleading or both. When the code conflicts the comment, you are in trouble.&lt;br /&gt;&lt;br /&gt;Good code with good comments&lt;br /&gt;&lt;br /&gt;A few times I saw clearly written code with little or no comment. The comments were in their place and helped understanding better the code itself.&lt;br /&gt;&lt;br /&gt;Bad code with good comments&lt;br /&gt;&lt;br /&gt;I never saw bad code with good comments.&lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;Writing good code is hard enough. It takes a lot of experience and lots of bad code written to get a grasp on wht is good code and how to write it.&lt;br /&gt;&lt;br /&gt;Writing good comments is even harder and you cannot learn it until you get used to good code. As good code becomes the way you write code, you'll start writing less bad comment.&lt;br /&gt;&lt;br /&gt;Code and comments are both good in communicating what you know.&lt;br /&gt;&lt;br /&gt;Use both of them visely.&lt;br /&gt;&lt;br /&gt;Todo&lt;br /&gt;The readable code challenge&lt;br /&gt;&lt;br /&gt;The readable comment challenge&lt;br /&gt;&lt;br /&gt;Other ways to communicate&lt;br /&gt;- knowledge bases&lt;br /&gt;- wikis&lt;br /&gt;- verbal communication&lt;br /&gt;&lt;br /&gt;Reading list&lt;br /&gt;- ACM Queue article&lt;br /&gt;- Code Complete&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11184227-111392416883033048?l=notesonprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesonprogramming.blogspot.com/feeds/111392416883033048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11184227&amp;postID=111392416883033048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/111392416883033048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/111392416883033048'/><link rel='alternate' type='text/html' href='http://notesonprogramming.blogspot.com/2005/04/commenting.html' title='Commenting'/><author><name>Trucza Csaba</name><uri>http://www.blogger.com/profile/17868036127149938053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11184227.post-111392051446787811</id><published>2005-04-19T07:16:00.000-07:00</published><updated>2006-10-25T04:21:51.283-07:00</updated><title type='text'>whoami</title><content type='html'>I program.&lt;br /&gt;&lt;br /&gt;I program for a living and for fun.&lt;br /&gt;&lt;br /&gt;I find great pleasure in exploring this infinitely flexible way of expressing myself.&lt;br /&gt;&lt;br /&gt;I enjoy the creative hours spent on pet projects.&lt;br /&gt;&lt;br /&gt;I enjoy the educative time spent reading books, articles.&lt;br /&gt;&lt;br /&gt;I enjoy the passionate arguments I have with other programmers.&lt;br /&gt;&lt;br /&gt;I consider the individual programmer as a craftsman.&lt;br /&gt;&lt;br /&gt;I consider programming still a long way of becoming an engineering discipline.&lt;br /&gt;&lt;br /&gt;I consider the future of programming at least as much fun and enjoyable as up until now.&lt;br /&gt;&lt;br /&gt;I am glad I become a programmer.&lt;br /&gt;&lt;br /&gt;I program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11184227-111392051446787811?l=notesonprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesonprogramming.blogspot.com/feeds/111392051446787811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11184227&amp;postID=111392051446787811' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/111392051446787811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11184227/posts/default/111392051446787811'/><link rel='alternate' type='text/html' href='http://notesonprogramming.blogspot.com/2005/04/whoami.html' title='whoami'/><author><name>Trucza Csaba</name><uri>http://www.blogger.com/profile/17868036127149938053</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
