<?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:blogger='http://schemas.google.com/blogger/2008' 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-8579476</id><updated>2024-09-28T19:37:56.994-07:00</updated><title type='text'>Reflections on Programming</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://reflectionsonprogramming.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8579476.post-5671068491399621955</id><published>2007-01-17T09:03:00.000-08:00</published><updated>2007-01-17T09:04:57.485-08:00</updated><title type='text'>Moving</title><content type='html'>I have decided  to consolidate my blogs into a single one at &lt;a href=&quot;http://john-dunne.blogspot.com/&quot;&gt;http://john-dunne.blogspot.com/&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/5671068491399621955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/5671068491399621955'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2007/01/moving.html' title='Moving'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-115341168901096447</id><published>2006-07-20T09:07:00.000-07:00</published><updated>2006-07-20T09:08:09.026-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>&lt;div style=&quot;text-align: left; font-style: italic;&quot;&gt;&lt;span style=&quot;font-family:Tahoma;font-size:85%;&quot;&gt;&lt;blockquote&gt;Watch where the footpaths go before you lay down  the sidewalks.&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/115341168901096447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/115341168901096447'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2006/07/quote-of-day.html' title='Quote of the Day'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-113829329287898754</id><published>2006-01-26T08:34:00.000-08:00</published><updated>2006-01-26T08:34:52.886-08:00</updated><title type='text'>Grooks</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;By way of &lt;a href=&quot;http://dig.csail.mit.edu/breadcrumbs/node/72&quot;&gt;Tim Berners-Lee&lt;/a&gt;, I found this wonderful collection of &lt;a href=&quot;http://chat.carleton.ca/%7Etcstewar/grooks/grooks.html&quot;&gt;Grooks&lt;/a&gt; by Piet Hein. They have a wonderfully whimsical character, like this one:&lt;br/&gt;&lt;blockquote&gt;&lt;pre&gt;BUDGETING: THE FIRST LAW &lt;br/&gt;&lt;br/&gt;If you want to know&lt;br/&gt;where your money went,&lt;br/&gt;you must spend it quickly&lt;br/&gt;before it&#39;s spent. &lt;/pre&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113829329287898754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113829329287898754'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2006/01/grooks.html' title='Grooks'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-113812912561081467</id><published>2006-01-24T10:58:00.000-08:00</published><updated>2006-01-24T10:58:45.650-08:00</updated><title type='text'>Great Quote</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;a href=&quot;http://www.darrenhobbs.com/archives/2006/01/agile_answers.html&quot;&gt;Darren Hobbs: Agile Answers&lt;/a&gt; &lt;br/&gt; &lt;blockquote&gt;Developing incrementally does not (in my opinion) mean taking your brain out before starting. &lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113812912561081467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113812912561081467'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2006/01/great-quote.html' title='Great Quote'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-113778787175309382</id><published>2006-01-20T12:05:00.000-08:00</published><updated>2006-01-20T12:11:11.766-08:00</updated><title type='text'>What happens when you don&#39;t &quot;get it&quot;</title><content type='html'>&lt;a href=&quot;http://blogs.pragprog.com/cgi-bin/pragdave.cgi/Random/Imitation.rdoc&quot;&gt;PragDave&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Without exception, these early attempts at imitation failed: the car companies replicated what they saw Toyota doing, but only on the surface. They didn&#39;t really understand what was behind these practices. It was like trying to become an artist by copying the angle and velocity of the brush held by a master.&lt;/blockquote&gt;You see this happen often with various &quot;agile&quot; practices, like test driven development, XP, or Scrum.  If all of the participants don&#39;t grok the practice, then they blindly execute a series of steps, and say, &quot;See.  It didn&#39;t work!&quot;&lt;br /&gt;&lt;br /&gt;There are two possible resolutions to this problem.&lt;br /&gt;&lt;br /&gt;You can &lt;span style=&quot;font-weight: bold;&quot;&gt;tighten up the process&lt;/span&gt;.  Unfortunately, if you didn&#39;t &quot;get it&quot; in the first place, you are likely to cause more harm than good.  At its pathological extreme, your team works like the staff of a McDonald&#39;s, with each person following a carefully prescribed methodology.  If you are building the software equivalent of a Big Mac, then this might be perfect for you.&lt;br /&gt;&lt;br /&gt;You can &lt;span style=&quot;font-weight: bold;&quot;&gt;invest in your people&lt;/span&gt;.  The old saw about giving a man a fish versus teaching him to fish applies here.  For even the most simple project, it is nearly impossible to prescribe everything.  At some point, personal judgement has to kick in, therefore it makes sense to equip the team with the mental tools needed to make the right decisions.&lt;br /&gt;&lt;br /&gt;I don&#39;t mean to &quot;dis&quot; process, but I think you reach a point of diminishing returns, with &quot;process improvement&quot; whereas &quot;people improvement&quot; will always pay off handsomely.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113778787175309382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113778787175309382'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2006/01/what-happens-when-you-dont-get-it.html' title='What happens when you don&#39;t &quot;get it&quot;'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-113632441403801573</id><published>2006-01-03T13:40:00.000-08:00</published><updated>2006-01-03T13:40:14.046-08:00</updated><title type='text'>Design by Contract is trademarked!</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;I was reading this article called &lt;a href=&quot;http://www.artima.com/cppsource/deepspace.html&quot;&gt;Contract Programming 101&lt;/a&gt;, when I ran into this little gem:&lt;br/&gt;&lt;blockquote&gt;Note: the term &lt;em&gt;Design By  Contract&lt;/em&gt; was trademarked in 2003 by Dr.  Meyer, so all the little  free software pixies are dropping the term like a hot coal.  The latest  favoured term is &lt;em&gt;Contract Programming&lt;/em&gt;, as suggested by Walter  Bright in 2004 and used in the recent proposal by Thorsten Ottosen and  Lawrence Crowl to the C++ standards body.&lt;/blockquote&gt;That is not cool!&lt;br/&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113632441403801573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113632441403801573'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2006/01/design-by-contract-is-trademarked.html' title='Design by Contract is trademarked!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-113174915191523233</id><published>2005-11-11T14:45:00.000-08:00</published><updated>2005-11-11T14:45:51.950-08:00</updated><title type='text'>Index Cards</title><content type='html'>Extreme Programming has this strong tradition of using index cards to track &lt;a href=&quot;http://www.c2.com/cgi/wiki?UserStory&quot;&gt;user stories&lt;/a&gt;, or to aid in design through the use of &lt;a href=&quot;http://www.c2.com/cgi/wiki?CrcCard&quot;&gt;CRC cards&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Now, I have always had a strong preference for Excel spreadsheets.&amp;nbsp;&amp;nbsp;You can print them, e-mail them, share them, and save them. &lt;br/&gt;&lt;br/&gt;But there is something wonderful in the very nature of index cards.&amp;nbsp;&amp;nbsp;Their very constraints create interesting feedback loops.&amp;nbsp;&amp;nbsp;Think of all the objections that you might have against them:&lt;br/&gt;&lt;br/&gt;&lt;em&gt;Index cards are too easy to lose.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;Yes – but why are you writing anything important on an index card in the first place?&amp;nbsp;&amp;nbsp; At the end of the day, the only important work product is the code.&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.agilemodeling.com/&quot;&gt;Requirements and any other models&lt;/a&gt; exist to facilitate conversations about the code.&amp;nbsp;&amp;nbsp;If you have been writing tests along the way, when the coding is done, the requirements don’t need to exist anymore.&amp;nbsp;&amp;nbsp;The requirements aren’t sacred.&amp;nbsp;&amp;nbsp;The only thing that is sacred, the desires of your users, cannot be captured in any format, but must be discovered through a constant dialog.&lt;br/&gt;&lt;br/&gt;&lt;em&gt;Index cards are too bulky.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;If you have more index cares than you can manage, then your user stories are either too fine grained or your scope is too ambitious.&amp;nbsp;&amp;nbsp;Either way, the cards are telling you that you need to change.&lt;br/&gt;&lt;br/&gt;This is a pet peeve of mine.&amp;nbsp;&amp;nbsp;Quite often, when you are doing the wrong thing, it will be difficult.&amp;nbsp;&amp;nbsp;The correct solution is not to make it easier to do the wrong thing, but to change what you were doing in the first place.&amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;em&gt;Only one person can “own” an index card at a time.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;So what?&amp;nbsp;&amp;nbsp;Distributed ownership is the worst thing that can happen in project management.&amp;nbsp;&amp;nbsp;If everyone owns a task, then no one is really responsible for carrying it out.&amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;Having said all that, I am still mulling over the use of index cards in my process, and have started collecting links about index cards in &lt;a href=&quot;http://del.icio.us/johndunne/indexcards&quot;&gt;del.icio.us&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113174915191523233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113174915191523233'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/11/index-cards.html' title='Index Cards'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-113145160402704058</id><published>2005-11-08T03:56:00.000-08:00</published><updated>2005-11-08T09:39:26.456-08:00</updated><title type='text'>Holistic thinking is disruptive</title><content type='html'>In the November issue of the &lt;a href=&quot;http://www.theatlantic.com/&quot;&gt;Atlantic Monthly&lt;/a&gt;, there was a &lt;a href=&quot;http://www.theatlantic.com/doc/prem/200511/primarysources&quot;&gt;brief article&lt;/a&gt; about the heuristics used by the US intelligence community to detect spies.&lt;br /&gt;&lt;blockquote&gt;They may also take a &quot;holistic view of world affairs&quot; that could lead them to believe espionage is &quot;morally justifiable.&quot;&lt;/blockquote&gt;You can read this any number of ways, and I won&#39;t debate the ethics of making decisions to support particular policies of this adminstration in spite of common sense (or holistic thinking) telling you otherwise.&lt;br /&gt;&lt;br /&gt;But I would like to touch briefly on his this might affect &lt;span style=&quot;font-style: italic;&quot;&gt;your&lt;/span&gt; organization. When it exceeds a certain size, every organization begets a hierarchy of departments.  While the organization, as a whole, might wish to move in one direction, each department has its own incentives, which sometimes contradict the organization&#39;s larger goals.&lt;br /&gt;&lt;br /&gt;In such a world, to think &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;holistically&lt;/span&gt; is to think about disruption, as any move to re-align the departments with the organization&#39;s goals will result in disruption to that department&#39;s practices.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113145160402704058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113145160402704058'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/11/holistic-thinking-is-disruptive.html' title='Holistic thinking is disruptive'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-113137949177607957</id><published>2005-11-07T08:04:00.000-08:00</published><updated>2005-11-07T08:04:51.826-08:00</updated><title type='text'>Behavior Driven Development</title><content type='html'>I recently read an interesting paper by &lt;a href=&quot;http://www.daveastels.com/index.php?section=1&quot;&gt;Dave Astels&lt;/a&gt;, entitled &lt;a href=&quot;http://blog.daveastels.com/?p=53&quot;&gt;A New Look at Test-Driven Development&lt;/a&gt;, which suggested that Test Driven Design is overly focused on testing, which gets in the way of reaping the true benefits of TDD.&lt;br/&gt;&lt;br/&gt;I agree that using the word “test” when describing TDD definitely gets in the way, when explaining it to other people.&amp;nbsp;&amp;nbsp;Management asks, “Why are we hiring testers if developers will be writing tests?”&amp;nbsp;&amp;nbsp;Developers ask, “Why should I write unit tests for code that will get tested by the (manual or automatic) acceptance tests?”&amp;nbsp;&amp;nbsp;And so on.&amp;nbsp;&amp;nbsp;You get the usual objections to TDD.&lt;br/&gt;&lt;br/&gt;So I am down with giving TDD another name, but what threw me was the suggestion that we ought &lt;strong&gt;&lt;em&gt;not &lt;/em&gt;&lt;/strong&gt;to use the word “test” when actually writing the tests.&lt;br/&gt;&lt;br/&gt;In Behavior Driven Development, tests are called “specifications.”&amp;nbsp;&amp;nbsp;Fixtures are called “contexts.”&amp;nbsp;&amp;nbsp;And instead of assert, one would say “should.”&amp;nbsp;&amp;nbsp;(Dave’s essay has examples of their usage.)&lt;br/&gt;&lt;br/&gt;Initially, I was fairly dismissive of what seemed like a cosmetic change, but I decided to give it a go for the past week.&amp;nbsp;&amp;nbsp;Here is what I found.&lt;br/&gt;&lt;br/&gt;&lt;em&gt;I wrote more, smaller test fixtures.&amp;nbsp;&amp;nbsp;&lt;/em&gt;Whereas I used to write test fixtures with names, like CustomerFixture, I found myself creating many little contexts, with names like CustomerWithOverdueBill or CustomerWithoutAddress.&amp;nbsp;&amp;nbsp;&lt;br/&gt;&lt;br/&gt;&lt;em&gt;I wrote more asserts per test.&amp;nbsp;&amp;nbsp;&lt;/em&gt;Each test started with a particular context, invoked a particular operation in that context, and then verified the expected resulting context.&amp;nbsp;&amp;nbsp;That verification often took multiple asserts.&lt;br/&gt;&lt;br/&gt;&lt;em&gt;The tests naturally had better names.&amp;nbsp;&amp;nbsp;&lt;/em&gt;In the past, when writing tests for a Customer class, I might have tests with names like testSetAddress.&amp;nbsp;&amp;nbsp;Now, I find myself thinking in terms of scenarios, so that the CustomerWithoutAddress context might have a specification like settingAddressForFirstTimeSendsNotifcation.&lt;br/&gt;&lt;br/&gt;In summary, this change in perspective has proven extremely useful, so I am sticking with it.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113137949177607957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113137949177607957'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/11/behavior-driven-development.html' title='Behavior Driven Development'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-113067756842869154</id><published>2005-10-30T05:05:00.000-08:00</published><updated>2005-10-30T05:06:08.443-08:00</updated><title type='text'>Could You Pass 8th Grade Math?</title><content type='html'>&lt;table width=350 align=center border=0 cellspacing=0 cellpadding=2&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#CDDEFF&quot; align=center&gt;&lt;font face=&quot;Georgia, Times New Roman, Times, serif&quot; style=&#39;color:black; font-size: 14pt;&#39;&gt;&lt;b&gt;You Passed 8th Grade Math&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor=&quot;#EBF2FF&quot;&gt;&lt;center&gt;&lt;img src=&quot;http://images.blogthings.com/couldyoupasseighthgrademathquiz/passed.jpg&quot; height=&quot;100&quot; width=&quot;100&quot;&gt;&lt;/center&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;Congratulations, you got 10/10 correct!&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.blogthings.com/couldyoupasseighthgrademathquiz/&quot;&gt;Could You Pass 8th Grade Math?&lt;/a&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113067756842869154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/113067756842869154'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/10/could-you-pass-8th-grade-math.html' title='Could You Pass 8th Grade Math?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-112897574738415872</id><published>2005-10-10T13:22:00.000-07:00</published><updated>2005-10-10T13:22:27.410-07:00</updated><title type='text'>Planarity.net</title><content type='html'>A way cool game that tests your facility with spacial relationships:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.planarity.net/#&quot;&gt;Planarity.net&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112897574738415872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112897574738415872'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/10/planaritynet.html' title='Planarity.net'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-112654430378433293</id><published>2005-09-12T09:58:00.000-07:00</published><updated>2005-09-12T09:58:23.813-07:00</updated><title type='text'>Are iterations hazardous to your project?</title><content type='html'>&lt;a href=&quot;http://alistair.cockburn.us/crystal/articles/aih/areiterationshazardous.htm&quot;&gt;Are iterations hazardous to your project?&lt;/a&gt;: &quot;That surprise experience helped open my eyes to why &#39;iterations&#39; may be hazardous to your project: Danger grows when the results of the iteration are not directly linked to delivering the product to the end user. Without that linkage, iteration results hang in the air just as badly as the old, pre-agile forms of wandering in the wilderness.&quot;&lt;br /&gt;&lt;br /&gt;This could be filed under the general heading of &quot;Don&#39;t let the process become the goal,&quot;  which is a disease that strikes nearly every organization.  &lt;br /&gt;&lt;br /&gt;Here is how it happens:&lt;br /&gt;&lt;br /&gt;Management wants feedback that the team is making progress towards a particular goal, so they add instrumentation to the process to gather metrics.  The team responds by trying to improve those metrics.  If management chooses the wrong metrics, the end effect is that they drive the team &lt;b&gt;away&lt;/b&gt; from its goals, rather than towards them.&lt;br /&gt;&lt;br /&gt;I think that all of Alistair&#39;s observations and recommendations are dead-on.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112654430378433293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112654430378433293'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/09/are-iterations-hazardous-to-your.html' title='Are iterations hazardous to your project?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-112377618675493546</id><published>2005-08-11T08:32:00.000-07:00</published><updated>2005-08-11T09:03:06.803-07:00</updated><title type='text'>Laziness Driven Design</title><content type='html'>I have become fanatical about writing unit tests for every method on every class, regardless of how trivial that method first appears. ( &quot;But it&#39;s just a getter!&quot; )&lt;br /&gt;&lt;br /&gt;This leads to an interesting &lt;span style=&quot;font-style: italic;&quot;&gt;laziness driven feedback loop&lt;/span&gt;.  Here&#39;s what happens:&lt;br /&gt;&lt;br /&gt;I am implementing a feature, and think that the shortest distance between two points, is to add another dependency onto one of my classes, but then I realize that this new dependency would further complicate all of my tests, requiring large changes. Ugh! I don&#39;t have time for sweeping changes to my test suite.&lt;br /&gt;&lt;br /&gt;So, in my laziness, I skip over the initial, obvious solution, think a little bit harder, and come up with a &lt;span style=&quot;font-style: italic;&quot;&gt;truly simpler solution.&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112377618675493546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112377618675493546'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/08/laziness-driven-design.html' title='Laziness Driven Design'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-112351917299709122</id><published>2005-08-08T08:06:00.000-07:00</published><updated>2005-08-08T09:39:33.040-07:00</updated><title type='text'>The PO-STAR Movement</title><content type='html'>In the past year, I have seen an increasing number of &quot;Plain Old *&quot; abbreviations:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://www.martinfowler.com/bliki/POJO.html&quot;&gt;POJO &lt;/a&gt;- Plain Old Java Objects&lt;/li&gt;   &lt;li&gt;POCO - Plain Old CLR (.NET runtime) Objects&lt;/li&gt;   &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Plain_Old_XML&quot;&gt;POX&lt;/a&gt; - Plain Old XML&lt;/li&gt; &lt;/ul&gt; At this point, I think it qualifies as a crypto-movement, and the clue to the genesis of this movement is in Andy Smith&#39;s &quot;&lt;a href=&quot;http://an9.org/devdev/why_frameworks_suck?sxip-homesite=&amp;checked=1&quot;&gt;Why Frameworks Suck&lt;/a&gt;.&quot;&lt;br /&gt;&lt;blockquote&gt;Frameworks hurt sharing. I’d really like to give you this fork Jimmy, but you’re gonna need a knife and plate to use it.&lt;/blockquote&gt;The alternative to PO* is to buy into some framework, which inevitably prevents code reuse as your classes become riddled with framework junk. &lt;br /&gt;&lt;br /&gt;You know a library is really a framework when:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;It requires you to derive your classes from some library class.&lt;/li&gt;   &lt;li&gt;It requires you to use their main() function.&lt;/li&gt;   &lt;li&gt;It requires you to use their Application class.&lt;/li&gt;   &lt;li&gt;It requires your classes to depend on some third party library.&lt;/li&gt;   &lt;li&gt;The setup() and teardown() methods of your test suites become really complex.&lt;/li&gt; &lt;/ul&gt; Nearly every time that I have written framework-like functionality into an application, I have found that I was able to factor it out in favor of simple library classes that are themselves PO* objects.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112351917299709122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112351917299709122'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/08/po-star-movement.html' title='The PO-STAR Movement'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-112343046811407372</id><published>2005-08-07T08:58:00.000-07:00</published><updated>2005-08-07T09:01:08.140-07:00</updated><title type='text'>I Heart Python</title><content type='html'>I have been playing around with Python at home, developing a simple web application, and I just wanted to say that I think that Python is awesome.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112343046811407372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112343046811407372'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/08/i-heart-python.html' title='I Heart Python'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-112343025425944290</id><published>2005-08-07T07:58:00.000-07:00</published><updated>2005-08-07T08:57:35.223-07:00</updated><title type='text'>Fear of the Domain Model</title><content type='html'>Did you ever notice that many programmer&#39;s tend to shy away from developing a domain model?&lt;br /&gt;&lt;br /&gt;This is a pretty reasonable reaction. We want to exploit our strengths, and leave the domain to the domain experts. We want to continue to improve our knowledge of computer technology, because this translates into a personal asset.&lt;br /&gt;&lt;br /&gt;I think that the ability to elicit domain knowledge from a domain expert and convert this into a viable domain model is a more important skill than the knowing the latest technology that your tools vendor is trying to push at your CIO.&lt;br /&gt;&lt;br /&gt;A rich domain model is truly fertile ground for &lt;a href=&quot;http://www.pragmaticprogrammer.com/ppllc/papers/1998_03.html&quot;&gt;developing applications&lt;/a&gt;, and building working, valuable applications is way more important than extending one&#39;s knowledge of the solution domain.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112343025425944290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112343025425944290'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/08/fear-of-domain-model.html' title='Fear of the Domain Model'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-112326735544625002</id><published>2005-08-05T11:42:00.000-07:00</published><updated>2005-08-05T11:42:35.476-07:00</updated><title type='text'>The Garden</title><content type='html'>&lt;div style=&quot;float: right; margin-left: 10px; margin-bottom: 10px;&quot;&gt; &lt;a href=&quot;http://www.flickr.com/photos/39354941@N00/31494557/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://photos21.flickr.com/31494557_ee32bd3391_m.jpg&quot; alt=&quot;&quot; style=&quot;border: solid 2px #000000;&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style=&quot;font-size: 0.9em; margin-top: 0px;&quot;&gt;  &lt;a href=&quot;http://www.flickr.com/photos/39354941@N00/31494557/&quot;&gt;&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/39354941@N00/&quot;&gt;Jennifer Dunne&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;This is picture of a flower in my wife&#39;s garden.&lt;br clear=&quot;all&quot; /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112326735544625002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/112326735544625002'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/08/garden.html' title='The Garden'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-111333822051725708</id><published>2005-04-12T13:37:00.000-07:00</published><updated>2005-04-12T13:37:00.516-07:00</updated><title type='text'>Thoughtless Interfaces</title><content type='html'>Here is a great write-up on how to &lt;strong&gt;not&lt;/strong&gt; create an interface:  &lt;a href=&quot;http://www.livejournal.com/users/sirenian/13646.html?mode=reply&quot;&gt;IFoo as Foo&#39;s interface is evil and should be punished.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It&#39;s all about responsibilities, people!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111333822051725708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111333822051725708'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/04/thoughtless-interfaces.html' title='Thoughtless Interfaces'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-111323559218020707</id><published>2005-04-11T09:06:00.000-07:00</published><updated>2005-04-11T09:06:32.180-07:00</updated><title type='text'>Toothpaste</title><content type='html'>&lt;div style=&quot;float: right; margin-left: 10px; margin-bottom: 10px;&quot;&gt; &lt;a href=&quot;http://www.flickr.com/photos/39354941@N00/9109906/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://photos4.flickr.com/9109906_518401c2f9_m.jpg&quot; alt=&quot;&quot; style=&quot;border: solid 2px #000000;&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style=&quot;font-size: 0.9em; margin-top: 0px;&quot;&gt;  &lt;a href=&quot;http://www.flickr.com/photos/39354941@N00/9109906/&quot;&gt;&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/39354941@N00/&quot;&gt;Jennifer Dunne&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;My wife took these wonderful pictures of toothpaste, which had quietly extruded itself from the tube in the middle of the night.&lt;br clear=&quot;all&quot; /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111323559218020707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111323559218020707'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/04/toothpaste.html' title='Toothpaste'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-111290830598712032</id><published>2005-04-07T14:11:00.000-07:00</published><updated>2005-04-07T14:11:45.986-07:00</updated><title type='text'>Trust is an essential deliverable</title><content type='html'>From &lt;a href=&quot;http://www.testing.com/cgi-bin/blog/2005/04/06&quot;&gt;Exploration Through Example&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;cite&gt;Sometimes teams are jumping into Agile to avoid the horror of the previous release. The code was too buggy, or too late, or cost too much per feature, or all three. In such a case, the programmer team is probably not trusted by the business people. If so, trust is an essential deliverable. It&#39;s not enough to be better; you have to be visibly better soon. Delivering tested, working features at frequent intervals is a key way to get trust back. Another way is close cooperation with a product owner that demonstrates that the team&#39;s orientation is toward helping her meet her goals. But more generally, the team should pay active attention to how well they&#39;re doing at building trust, not just at building code.&lt;/cite&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111290830598712032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111290830598712032'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/04/trust-is-essential-deliverable.html' title='Trust is an essential deliverable'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-111152164237186481</id><published>2005-03-22T12:00:00.000-08:00</published><updated>2005-03-22T12:00:42.370-08:00</updated><title type='text'>A Perfect Recipe for a SOA Failure</title><content type='html'>From &lt;a href=&quot;http://blogs.sun.com/roller/page/crupi/20050319#soa_is_a_business_driven&quot;&gt;SOA is a Business-Driven Architectural Style&lt;/a&gt;: &lt;br /&gt;&lt;br /&gt;&lt;cite&gt;&quot;It means that for SOA to be successful, it must be a &#39;top-down&#39; approach. And top-down, means problem to architecture to solution. It does not mean, working from what we have and just wrapping it with new technologies just because we can. This bottom-up approach is quite natural and easy and is the perfect recipe for a SOA failure. &quot;&lt;/cite&gt;&lt;br /&gt;&lt;br /&gt;I will go a bit further and say that any architecture that isn&#39;t bent on solving a particular problem is a recipe for failure.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111152164237186481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111152164237186481'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/03/perfect-recipe-for-soa-failure.html' title='A Perfect Recipe for a SOA Failure'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-111144110636980118</id><published>2005-03-21T13:22:00.000-08:00</published><updated>2005-03-21T13:38:26.370-08:00</updated><title type='text'>Searching Google for Books</title><content type='html'>I had heard about &lt;a href=&quot;http://print.google.com/&quot;&gt;Google Print&lt;/a&gt; a while back. &lt;br /&gt;&lt;br /&gt;I hadn&#39;t realized that the &lt;a href=&quot;http://print.google.com/googleprint/library.html&quot;&gt;Google Library project&lt;/a&gt; would mean that public domain books, like &lt;a href=&quot;http://www.google.com/search?q=book+huckleberry+finn&amp;sourceid=mozilla-search&amp;amp;start=0&amp;start=0&amp;amp;ie=utf-8&amp;oe=utf-8&amp;amp;client=firefox-a&amp;rls=org.mozilla:en-US:official&quot;&gt;Huckleberry Finn&lt;/a&gt;,  would now be searchable via Google.&lt;br /&gt;&lt;br /&gt;You just enter &quot;book&quot; followed by the book title in Google.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111144110636980118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111144110636980118'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/03/searching-google-for-books.html' title='Searching Google for Books'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-111142599621103400</id><published>2005-03-21T09:26:00.000-08:00</published><updated>2005-03-21T09:26:36.210-08:00</updated><title type='text'>Yahoo has acquired Flickr</title><content type='html'>&lt;a href=&quot;http://jeremy.zawodny.com/blog/archives/004362.html&quot;&gt;Thoughts on Flickr and Yahoo (by Jeremy Zawodny)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope they don&#39;t mess it up.  :-)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111142599621103400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/111142599621103400'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/03/yahoo-has-acquired-flickr.html' title='Yahoo has acquired Flickr'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-110978627611605608</id><published>2005-03-02T09:55:00.000-08:00</published><updated>2005-03-02T09:57:56.120-08:00</updated><title type='text'>Being Careful Is Not The Solution</title><content type='html'>Sometimes, when you touch a piece of code, or a build script, or a configuration file, you might feel the urge to be very careful, because your change might break the overnight build, or result in a subtle bug.&lt;br /&gt;&lt;br /&gt;Being careful is not the solution.  You cannot be careful all the time.  Sooner or later, you will let you guard down and make a mistake.  It is inevitable.  If you are lucky, this mistake will occur when you have loads of time to diagnose it.  If you are unlucky, you&#39;ll get a bad build at the 11th hour.&lt;br /&gt;&lt;br /&gt;When you find that you need to be careful, you should ask yourself, how can I change this situation so that mistakes are either impossible to make or discovered immediately after making them?&lt;br /&gt;&lt;br /&gt;If you think about it, you probably already know a few strategies for achieving this right now:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Unit tests insure that your classes behave as you expect them to.&lt;/li&gt;   &lt;li&gt;Asserts (Design by Contract) achieve the same thing from a different direction.&lt;/li&gt;   &lt;li&gt;Code generation eliminates duplication, so that you only have to make a change in one place.  &lt;/li&gt;   &lt;li&gt;Static type checking catches mistakes at compile time.&lt;/li&gt; &lt;/ul&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/110978627611605608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/110978627611605608'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/03/being-careful-is-not-solution.html' title='Being Careful Is Not The Solution'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8579476.post-110973404027874621</id><published>2005-03-01T19:27:00.000-08:00</published><updated>2005-03-01T19:27:20.276-08:00</updated><title type='text'>Jellyfish</title><content type='html'>&lt;div style=&quot;float: right; margin-left: 10px; margin-bottom: 10px;&quot;&gt; &lt;a href=&quot;http://www.flickr.com/photos/johndunne/5718906/&quot; title=&quot;photo sharing&quot;&gt;&lt;img src=&quot;http://photos6.flickr.com/5718906_de066a2be5_m.jpg&quot; alt=&quot;&quot; style=&quot;border: solid 2px #000000;&quot; /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style=&quot;font-size: 0.9em; margin-top: 0px;&quot;&gt;  &lt;a href=&quot;http://www.flickr.com/photos/johndunne/5718906/&quot;&gt;Jellyfish&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href=&quot;http://www.flickr.com/people/johndunne/&quot;&gt;JohnDunne&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;This is a jellyfish that we saw while poking around the aquarium at the Mandalay Bay hotel in Las Vegas.&lt;br clear=&quot;all&quot; /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/110973404027874621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8579476/posts/default/110973404027874621'/><link rel='alternate' type='text/html' href='http://reflectionsonprogramming.blogspot.com/2005/03/jellyfish.html' title='Jellyfish'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/16213725934255823205</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>