<?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-6569953596318705576</id><updated>2012-01-08T20:44:10.600-05:00</updated><category term='BASIC'/><category term='Seminars'/><category term='MCSE'/><category term='Metric'/><category term='Static Typing'/><category term='Coming Soon'/><category term='contracting'/><category term='Apple'/><category term='Ecquire'/><category term='Paul Graham'/><category term='Great Minds'/><category term='Testing'/><category term='CodeDevl'/><category term='colleauges'/><category term='medical'/><category term='Bruce Eckel'/><category term='divination'/><category term='internet company'/><category term='Languages'/><category term='AI'/><category term='Smalltalk'/><category term='Post Compilation Dynamics'/><category term='Salaried'/><category term='Dark Back Room'/><category term='PyCon'/><category term='License'/><category term='Apache'/><category term='work'/><category term='Knuth'/><category term='Automation'/><category term='Dynamic Typing'/><category term='Inked Magazine'/><category term='Independent'/><category term='word of caution'/><category term='Scheduling'/><category term='Stallman needs to grow up a bit'/><category term='Subversion'/><category term='Javascript'/><category term='Arc'/><category term='Design'/><category term='Perl'/><category term='Employment'/><category term='Kernighan'/><category term='greybeards'/><category term='Consultant'/><category term='Failure'/><category term='Somerton'/><category term='Agile'/><category term='Django'/><category term='Well Being'/><category term='Lesson Learned'/><category term='Cheetah'/><category term='pain'/><category term='OOP'/><category term='multiple displays'/><category term='Alpha'/><category term='Methodology'/><category term='Hg'/><category term='AOP'/><category term='Unix'/><category term='Python'/><category term='reflection'/><category term='Microsoft'/><category term='Yesteryear'/><category term='Poor Programmers'/><category term='version control systems'/><category term='Sciatica'/><category term='professionalism'/><category term='Yorn'/><category term='Oracle'/><category term='BSD'/><category term='Lisp'/><category term='Robert Morris'/><category term='complacency'/><category term='Configuration'/><category term='Libraries'/><category term='TI994/a'/><category term='Burlington Coat Factory'/><category term='CGI'/><category term='productivity'/><category term='SimulaE'/><category term='Scheme'/><category term='usability'/><category term='Conventions'/><category term='School'/><category term='theory'/><category term='Podcasting'/><category term='self-review'/><category term='Engineering'/><category term='principles'/><category term='Antitrust the Movie'/><category term='Algorithms'/><category term='PHP'/><category term='BAMP'/><category term='Linux World'/><category term='Joomla'/><category term='common headaches'/><category term='Pickle'/><category term='Ruby'/><category term='Dealing with Fires'/><category term='Holovaty'/><category term='Code Sample'/><category term='80 hours'/><category term='Vicodin'/><category term='Pascal'/><category term='GANTT Charts'/><category term='Responsibility'/><category term='Bicycling'/><category term='Strict'/><category term='Dynamic Languages'/><category term='Larry Wall'/><category term='Zork'/><category term='Parsing'/><category term='Amateurs'/><category term='Prolog'/><category term='Announcement'/><category term='Mercurial'/><category term='H-1B Visas'/><category term='Quality'/><category term='Environment'/><category term='Rexx'/><category term='Community'/><category term='socratic method'/><category term='GIT'/><category term='software engineering'/><category term='TextMate'/><category term='Beta'/><category term='Career'/><category term='History'/><category term='Communication'/><category term='Ethics'/><category term='suffering'/><category term='startups'/><category term='Time Management'/><category term='MySQL'/><category term='Project Management'/><category term='QA'/><category term='migraine'/><category term='Rails'/><category term='Moore&apos;s Law'/><category term='Ruts'/><category term='BBS'/><category term='college'/><category term='XML'/><category term='FreeBSD'/><category term='self-employed'/><category term='Life Cycle'/><category term='Best Practices'/><category term='Refactoring'/><category term='Objects'/><category term='Guido van Rossum'/><category term='Matz'/><category term='Templates'/><category term='InnoDB'/><category term='Development'/><category term='Developers'/><category term='Rapid Application Development'/><category term='Maps'/><category term='Professionals'/><category term='MUD'/><category term='Emacs'/><category term='Hacking'/><category term='Project Planning'/><category term='OS'/><category term='Solo'/><category term='Criticisms'/><category term='Passionate'/><category term='weaknesses'/><category term='Kaart'/><category term='XP'/><category term='MBP'/><category term='Bad Design'/><category term='words of advice'/><category term='Opportunity'/><category term='human interfaces'/><category term='Cartography'/><category term='Visual Basic'/><category term='Kaplan-Moss'/><category term='Ritchie'/><category term='Coding'/><category term='Macintosh'/><category term='LAMP'/><category term='Social'/><category term='Team Projects'/><category term='C/C++'/><category term='dvcs'/><category term='TIMTOWDI'/><category term='Readability'/><category term='Java'/><category term='strengths'/><category term='Code Evaluation'/><category term='Website Design'/><category term='experiences'/><category term='Engines'/><category term='RMS'/><category term='jobs'/><category term='Functional Programming'/><category term='user friendliness'/><category term='Update'/><category term='Speed'/><category term='The Future'/><category term='iPad'/><category term='SVN'/><category term='failed language implementation'/><category term='Books'/><title type='text'>www.codedevl.com</title><subtitle type='html'>Software Engineering Perspectives of Eric G. Elinow :: Miscellaneous personal and professional ramblings about software throughout its lifecycle with a slant towards Python, Scala, Unix, Intelligent Agents and Real-World Simulations.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-8519538504493178456</id><published>2012-01-08T20:44:00.000-05:00</published><updated>2012-01-08T20:44:10.625-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='theory'/><category scheme='http://www.blogger.com/atom/ns#' term='Great Minds'/><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='80 hours'/><category scheme='http://www.blogger.com/atom/ns#' term='college'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='startups'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='greybeards'/><title type='text'>Theorising vs. Doing</title><content type='html'>&lt;span style="font-size: x-large;"&gt;O&lt;/span&gt;ver the past many years I've found myself slowly moving (in my personal projects) from the realm of actually implementing code about which I've been curious to spending my overwhelming majority of my free time to theorising about various concepts and/or interests, primarily in the field of human language parsing, simulation and simplification of generic real-world object modelling. &amp;nbsp;Several of these have been mentioned and explored in previous posts over the last 7 years. &amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-large;"&gt;I&lt;/span&gt; believe a great reason for this change in focus is partially age, and primarily due to the extent that my days are focused on building the next great startup application. &amp;nbsp;We recently (as of the New Year) pushed the past eleven months worth of work into existence as our new primary (Python/Django) product replacing the previous multiple iterations of our legacy (Java) product. &amp;nbsp;The focus and scope of the project limited my ability to go off on tangents wherein I could code my personal projects freely. &amp;nbsp;This was by no legal hand binding, it was simply a matter of wanting to focus my writing to building our product to the level it needs to be, to the high standards we require (and rightfully so). &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-large;"&gt;T&lt;/span&gt;his leave one (me, namely) with little actual time to thunk down in front of my primary workstation to commit theory to codebase, hence I've found myself working it out on handheld whiteboards, sketchpads, &amp;nbsp;napkins, chalk on the ground whilst playing with my daughter or even simply working these theories out in my head. &amp;nbsp;While I would like in many cases to put my thoughts into actual runnable logic, I've found that the exercise of stepping through theoretical code in my mind has kept me sharper regarding my thought processes. &amp;nbsp;True, I cannot share this as easily with friends afar, but given that many of my personal friends are also senior level engineers, discussing (when we do) casually my theories and ideas, they get the gist quickly. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: x-large;"&gt;T&lt;/span&gt;he point I'm trying to get across here is that while today is perceived as one wherein a bunch of 20 year olds either in or fresh-out-of college spend an obscene amount of hours in incubators or at startups killing themselves churning out ridiculous amounts of code, there is most definitely no slow down in the thinking processes of the more senior of us out there. &amp;nbsp;We just don't find a necessity it raw churning out of code as it is the concepts that drive the field and aid in future innovation. &amp;nbsp;Let those who wish to "do" continue to run their path, but lets not overlook the value of those who've moved their focus (whether by situation or by intention) to the more abstract realm of theory as the two are inextricably bound. &amp;nbsp;We need ensure that these two distinct groups of people are in contact with one another because it will ultimately lead to the newer advances, bettering our field for all involved.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-8519538504493178456?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/8519538504493178456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=8519538504493178456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8519538504493178456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8519538504493178456'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2012/01/theorising-vs-doing.html' title='Theorising vs. Doing'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-7367732455962298600</id><published>2011-03-24T08:41:00.000-04:00</published><updated>2011-03-24T08:41:32.720-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Environment'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='startups'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Yorn'/><category scheme='http://www.blogger.com/atom/ns#' term='Ecquire'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>New environments (mentally) as it were... (a.k.a. something old, something new)</title><content type='html'>Since my last update made a little over a month and a half ago, much has changed. &amp;nbsp;I've accepted a position as Lead Software Engineer for&amp;nbsp;&lt;a href="http://www.yorn.com/"&gt;Yorn, LLC&lt;/a&gt;&amp;nbsp;located in Conshohocken, PA. &amp;nbsp;I haven't abandoned my prior position with the publishing house in NYC, merely time-shifted those hours elsewhere. &amp;nbsp;Taking this new venture (on top of my previous work, plus the other tech-startup of which I'm a co-founder, &lt;a href="http://www.ecquire.com/"&gt;Ecquire&lt;/a&gt;&amp;nbsp;has proven to be&amp;nbsp;a necessity for my sanity. &lt;br /&gt;&lt;br /&gt;Working primarily for the past many years as the sole Software Engineer for a half dozen magazines in a Django/Python/Javascript/CSS/HTML/FreeBSD Unix environment whilst also wearing the SysAdmin hat has been... &amp;nbsp;draining. &amp;nbsp;This wasn't due to having nothing to do, this was more to do with having very little room for innovation as the end product wasn't the new SaaS &lt;a href="http://www.yorn.com/"&gt;website&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="http://www.ecquire.com/"&gt;Outlook plugin&lt;/a&gt;, it was simply repetition with the only real variances being that as dictated by wet-behind the ears designers and graphic artists whose concerns about a given site was more about look than UX.&amp;nbsp;&amp;nbsp;Don't get me wrong, some of the designs have been&amp;nbsp;gorgeous, but not without the pendantic whining common with individuals who only knowing Adobe Photoshop aren't happy when you explain to them that there is a different methodology at work in producing like-layouts im a web framework.&lt;br /&gt;&lt;br /&gt;Either way, back on topic. &amp;nbsp;I feel for the first time in quite a while that not only am I solving real problems that pertain to a large scale of individuals and companies (as opposed to readership by fashion and/or tattooing enthusiasts) but I am finally in a position in which I have a cohort in crime, a partner, a colleague. Best of all, he's brilliant. &amp;nbsp;A proper individual for the field, something when I've been trying to find for ages. &amp;nbsp;A PhD in computer science and a quarter century in the field along with all of the traditionally odd hobbies and sense of humour found more commonly in those with very intellectual professions. &amp;nbsp;Even though we've only met face to face on three&amp;nbsp;occasions, we've shared many phone calls and Skype sessions whilst working out our designs and product development and it has simply been a breath of fresh air for me. &amp;nbsp;I have someone off of whom I can bounce complex ideas knowing full well that I'm understood, as well as presenting me the opportunity to expand my own learning horizons.&lt;br /&gt;&lt;br /&gt;Excitement stirs ones involvement in a given project and considering that this is what has (and is) happening to me, it is paying off in not only a clearer mind and what I believe are more robust ideas emminating from my thoughts but it has reduced my stress allowing me to be more productive all around whether in the publishing work, my own startup and more importantly in my family life. &amp;nbsp;It all comes back to ensuring that whatever one does, they need to sometimes step of a comfort zone in pursuit of that which provides incentive and drive in ones given interests and/or profession(s). &amp;nbsp;I was too conservative earlier on in my professional career and I believe I would've benefited greatly had I stepped out of my cocoon years earlier rather than (as most introverted engineering types do) not think highly enough of myself to be worth more than an&amp;nbsp;abysmal&amp;nbsp;income and working environments to which I was subjected for over seven years.&lt;br /&gt;&lt;br /&gt;Times have changed and the future is looking brighter and brighter. &amp;nbsp;&lt;a href="http://www.ecquire.com/"&gt;Ecquire&lt;/a&gt;&amp;nbsp;&amp;amp;&amp;nbsp;&lt;a href="http://www.yorn.com/"&gt;Yorn&lt;/a&gt;&amp;nbsp;have paved the way to a better future. &amp;nbsp;I stepped past my initial nervous/worried leanings and jumped into the world of proper tech startups finding that the grass truly has shown to indeed be greener on the other side. &amp;nbsp;Now, onto another exciting and challenging day of practising my craft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-7367732455962298600?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/7367732455962298600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=7367732455962298600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7367732455962298600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7367732455962298600'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2011/03/new-environments-mentally-as-it-were.html' title='New environments (mentally) as it were... (a.k.a. something old, something new)'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6963309266539725247</id><published>2011-02-03T14:35:00.001-05:00</published><updated>2011-02-03T14:35:26.971-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='complacency'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='jobs'/><category scheme='http://www.blogger.com/atom/ns#' term='Career'/><category scheme='http://www.blogger.com/atom/ns#' term='The Future'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruts'/><title type='text'>2011 and my prospects...</title><content type='html'>&amp;nbsp;&amp;nbsp; &amp;nbsp;Having recently entered the new year, I find it fitting to share some recent happenings and thoughts on how they might apply to not only my situation but those of others with a penchant for software engineering and/or administrative careers.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;The past year has been one of making connections. &amp;nbsp;I have met some great people including several combinations of Angel Investors, Venture Capitalists, Software Engineers and Computer Scientists. &amp;nbsp; My experiences with our startup, Ecquire (http://www.ecquire.com) has proven quite enlightening as well as fun. &amp;nbsp;In fact it was through my co-founders I was introduced to so many others in the field, such as Rick Rasansky and Trip Denton of Yorn (&lt;a href="http://www.yorn.com/"&gt;yorn.com&lt;/a&gt;), and Gabriel Weinberg of the amazing search engine&amp;nbsp;DuckDuckGo (&lt;a href="https://www.duckduckgo.com/"&gt;duckduckgo.com&lt;/a&gt;)&amp;nbsp;which protects our privacy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;What I have come to realise is that while I have been working with software behind the scenes of a considerable number of websites on their various frameworks, the technology doesn't challenge me and has proven to be quite repetitive. &amp;nbsp;There are still some challenges, but there is far more aesthetic issues than technical ingenuity involved. &amp;nbsp; The issue of technical seclusion is also an issue at hand. &amp;nbsp;With my primary client for whom I have a special relationship due to past employment in the earlier half of the previous decade, there is a loneliness on two levels. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;The first being that I am not only the only Software Engineer, but the only technical person period. &amp;nbsp;I wear many hats including CTO and Systems admin. &amp;nbsp;I handle all technical contracts for servers and what not, at least related to any only presence. &amp;nbsp;I'm more than capable of handling these roles though it can be rather isolated and not because I'm physically in a different location.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Which leads me to the second reason, that being one of no technical peers with whom I can discuss, debate and/or share views on projects. &amp;nbsp;The owner of the various entities is more understand on technical issues that many with whom I've dealt over the years but there are still limitations of understanding. &amp;nbsp;Again, I do highly commend him for intelligence, trust and understanding though there are limits of which no one other than a peer would quite grasp simply because it is something that needs to be experienced for commiserating to be legitimate.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;As a means of striving for more in not only personal life, but my professional one as the combination of both affect my happiness and general stress levels, I've been partaking a re-design/porting job with a technical group which is more up my alley. &amp;nbsp;I am still delivering the service and quality to which I have committed myself with my primary clientele, let that be stated for the record. &amp;nbsp;It is just that I need this to keep my mind from atrophying. &amp;nbsp;I need to be challenged in my field, not to mention be given the opportunity to innovate without having to wear every hat and focus so much on outward aesthetics. &amp;nbsp;I like &amp;nbsp;beautiful design and beautiful code, much so less visuals as that is truly the realm of designers.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Where I'm coming to for the sake of others is the following: &amp;nbsp;Push to keep yourself challenged and happy in your field. &amp;nbsp;For a long time we allow ourselves (especially as we have more people depending upon us in our personal lives such as our families) to become complacent with the idea of security and daily consistencies in our work. &amp;nbsp;The problem with this is that we start to stress over the rut in which we find ourselves. &amp;nbsp;We internalise the urge to snap at others when for the millionth time (exaggeration of course) we painfully banal question or task is asked of us. &amp;nbsp;Though inside, we die just a little bit more each time, in spirit at least.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;The solution (or at least one solution) is to not let fear or complacency hold a firm grasp on us. &amp;nbsp;It is one thing to allow for short term bursts of such ideals for the sake of a greater good but to allow it to trap us long term in what is almost definitely a downward spiral is unbecoming of our abilities and intelligences both as individuals and collectively as the technical backbone of our industries respectively. Push to find new challenges and if they are drying up as a lake in a newfound desert, look elsewhere over the horizon as our abilities only go so far when our outlook and prospects of change seemingly whither into nothingness which ultimately leave us a shell of our former glorious selves.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;I'm not taking this new year lying down. &amp;nbsp;I'm feeling reinvigorated with new purpose, prospects and challenges not only for the betterment of my familial situation but for my peace of mind now and into the foreseeable future. &amp;nbsp;I wish the same to all of you whom finding yourself in a similar situation might find my words useful and/or inspirational.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6963309266539725247?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://codedevl.blogspot.com/2011/02/2011-and-my-prospects.html' title='2011 and my prospects...'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6963309266539725247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6963309266539725247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6963309266539725247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6963309266539725247'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2011/02/2011-and-my-prospects.html' title='2011 and my prospects...'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6945359614899974302</id><published>2010-09-27T00:37:00.000-04:00</published><updated>2010-09-27T00:37:33.948-04:00</updated><title type='text'>Romanticisation, Research &amp; Reality</title><content type='html'>As I've now hit that point in my mid-late 30's, I've had some internal conflicts recently see resolution. &amp;nbsp;This won't be one my traditionally long winded/verbose entries, though it won't be short enough for a micro-blog post either but here it goes...&lt;br /&gt;&lt;br /&gt;Over roughly the past two decades I've been torn by issue of not attending university, especially one such as MIT, Stanford, Virginia Tech or UC Berkeley in pursuit of a Masters/PhD in computer science. &amp;nbsp;I feel that I missed out on the social aspect (aside from the excellent environment for furthering myself in a group setting in my field of interest/passion/expertise. &amp;nbsp; This is simply a recurring romanticised view I have over my regret. &amp;nbsp;I only envision the good parts, not the tedious drawn out study periods, the painfully boring pre-requisite programs/classes and lecture in mundane subjects solely to satisfy the higher education machine. &amp;nbsp;I am an autodidact and a fairly effective one at that. &amp;nbsp;University would have most likely quickly become the bane of my existence. &amp;nbsp;I experimented with higher education and within the first semester found the pace horribly slow and in the case of required classes, a horrible waste of my time and money (I paid the tuition with my own cold hard cash). &amp;nbsp; I opted to leave before wasting any additional money and simply continue to do what I had always done, educate myself for a variety or sources, as well as getting my hands dirty in my field of interest (amongst others for well-roundedness).&lt;br /&gt;&lt;br /&gt;This brings me to one of the reasons which fed the romanticised ideal as prescribed in the previous paragraph(s); my research in the field of immersive virtual environments. &amp;nbsp;I have spent a considerable amount of time since my childhood in the areas of researching virtual environment simulations (e.g. simulations of real-world objects and scenarios). &amp;nbsp;This could entail human interaction with every day objects to be used for gaming or habit studies or to simulate atoms at the molecular level or even the macroscopic planets, interstellar bodies and galaxies in our and other places of the universe. &amp;nbsp;This is the kind of research which would have either lent itself towards achievement of my PhD or conversely, the focus of my post-doctoral research under a grant.&lt;br /&gt;&lt;br /&gt;Finally, the reality (hint: it isn't all that bad). &amp;nbsp;Working in an academic environment in professorial/research dual/split roles would've been a wonderful way to go, though it wouldn't allow me the flexibility I currently have in terms of working from my home whilst raising a toddler, and being home for my elementary school aged child as well. &amp;nbsp;Do I get funding to pay for my personal pursuit/continuance researching simulations and their many facets? &amp;nbsp;No. &amp;nbsp;Do I have a surplus of time to allow me to pursue said interests after my family and work related endeavours are satisfied? &amp;nbsp;Not much at this point in time. &amp;nbsp;Do I feel that the overall balance of what could have been versus what truly is and what still may come my way is reasonable, fair and not worth feelings of regret? &amp;nbsp;Yes. &amp;nbsp;I'm rather happy with where I am as a Software Engineer for the past 15+ years and while I'd still love grant money to further fund my research, I can't say that I don't &amp;nbsp;enjoy some of the daily challenges of my already existing present-time workload.&lt;br /&gt;&lt;br /&gt;Just because we might find ourselves in a situation that isn't exactly as we'd initially thought we would want doesn't mean that there aren't equivalent outcomes that still satisfy our initial hopes and aspirations. &amp;nbsp;I suggest that those of you who have dealt with the aforementioned conundrum, take a good long look at how you might still achieve the equivalent that fits best into your existing life plan and stop worrying so much about such exactness in realisation of ones dreams, otherwise they might never materialise in any recognisable form.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6945359614899974302?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6945359614899974302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6945359614899974302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6945359614899974302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6945359614899974302'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2010/09/romanticisation-research-reality.html' title='Romanticisation, Research &amp; Reality'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-2886423072165272954</id><published>2010-08-13T00:27:00.001-04:00</published><updated>2010-08-13T00:28:29.198-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='multiple displays'/><title type='text'>The Usefulness &amp; Addictive Nature of Multiple Displays</title><content type='html'>It seems to be a divisive issue when dealing with developers, engineers and programmers alike... The usefulness or annoyance of multiple displays. &amp;nbsp;Recently having upgraded to my fifth display, I felt it was about time that I weigh in on the issue/share my opinions.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_v8PKau5MOVU/TGS86hN7rFI/AAAAAAAABIA/8jm7IDkzntQ/s1600/five_displays_ege_640x480.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="476" src="http://3.bp.blogspot.com/_v8PKau5MOVU/TGS86hN7rFI/AAAAAAAABIA/8jm7IDkzntQ/s640/five_displays_ege_640x480.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Five displays : One 1920x1080, Two 1920x1200, One 1280x1024 and One 480x800 :: 8.4 Mega Pixels in All&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Back in 2001 at an interview with Health Market Science in Conshohocken, PA (now in King of Prussia, PA I believe), I had witnessed a key benefit of new up and coming startups for their developers... &amp;nbsp;multiple displays for each workstation/desktop. &amp;nbsp;Flash forward a few more years and one Mac Book Pro later and I find that ever company at which I would work, I would attach a secondary display so as to provide more desktop real estate. &amp;nbsp;Whether this was to provide a shell or two in which to run emacs while accessing a db frontend or browser preview window, it proved beneficial in terms of productivity with less switching between screens, windows and what not.&lt;br /&gt;&lt;br /&gt;Ever since my first exposure to such setups (which were astronomical in price to setup back in the 90's and the beginning of the newest millennium), I was rather enamoured by them. &amp;nbsp;Now in 2010 I find myself working not on laptops, but full blown 64 bit Unix workstations. &amp;nbsp;A major benefit of such setups is the ability to run a considerable number of graphic cards and their associated displays. &amp;nbsp;Some wonder what could I possibly have running that dictates so many displays.&lt;br /&gt;&lt;br /&gt;I personally like to keep a web browser open at all times so using the picture above, I will explain as best as possible. &amp;nbsp;So, as I was stating in the previous line, the left most display is running a full height copy of Google Chrome, flanked by three separate terminal windows running a mix of local and remote shells on &amp;nbsp;various servers. &amp;nbsp;The middle large display is running my current favourite IDE for python development in fullscreen (in this case, NetBeans 6.8). &amp;nbsp;The right hand most screen is used for additional remote shells used more so for large rsync'ing and process monitoring. &amp;nbsp;The upper left screen (a great displaylink/USB powered 480x800 (or 800x480) from Mimo) is used for Skype &amp;amp; Adium (and both are pinned to all spaces/virtual desktops due to content), and the upper rightmost monitor is a free for all to display whatever is needed in addition to all of the aforementioned items (pdf viewing, techtalk viewing, the occasional movie, db schemas or gui, etc.). &lt;br /&gt;&lt;br /&gt;The biggest issue I currently have with the setup is physical layout. &amp;nbsp;A table roughly 144 cm (60 in) wide can only handle three widescreen displays (between 23" &amp;amp; 24" diagonally) when in a concave configuration. &amp;nbsp;Having to position the additional displays above the lower displays does cause the occasional confusion regarding pointer location. &amp;nbsp;A better layout would be an array of identical displays, preferably with VESA mounts in a 5 wide portrait layout or a two rows of three in landscape layout. &lt;br /&gt;&lt;br /&gt;I highly recommend that others who haven't had the opportunity to work in multiple display setups to try it out as soon as possible. &amp;nbsp;Those simple keyboard shortcuts used to swap from window to window and/or virtual desktop to other virtual desktop do take up time and can interrupt one's flow. &amp;nbsp;Is it really worth it when displays are so cheap these days?&lt;br /&gt;&lt;br /&gt;Caveat emptor: &amp;nbsp;The use of multiple displays causes varying ranges of discomfort when penned/cornered/shackled into a single screen machine, not to mention there is desire to acquire more screens after getting acclimated to the first addition, second addition, etc.&lt;br /&gt;&lt;br /&gt;Till next time...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-2886423072165272954?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://codedevl.blogspot.com/2010/08/usefulness-addictive-nature-of-multiple.html' title='The Usefulness &amp; Addictive Nature of Multiple Displays'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/2886423072165272954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=2886423072165272954' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/2886423072165272954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/2886423072165272954'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2010/08/usefulness-addictive-nature-of-multiple.html' title='The Usefulness &amp; Addictive Nature of Multiple Displays'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_v8PKau5MOVU/TGS86hN7rFI/AAAAAAAABIA/8jm7IDkzntQ/s72-c/five_displays_ege_640x480.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-3176984617344528912</id><published>2010-04-16T23:34:00.000-04:00</published><updated>2010-04-16T23:34:24.458-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='internet company'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='startups'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>The Romanticism of Internet Startups.  My experiences, part I.</title><content type='html'>I wasn't sure what drove me to this point, that of writing about startups (of all things). &amp;nbsp;I believe it has much to do with the recent launch of the newest startup of which I am a founder as well as the Software Engineer behind the technology in said venture, &lt;a href="http://www.ecquire.com/"&gt;Ecquire&lt;/a&gt;. &amp;nbsp;In the past months during which the project has progressed to our recent launch at the end of March, my own fascination with startups and my own experience in dealing with them came back into focus.&lt;br /&gt;&lt;br /&gt;Back during the dot com boom in 2000, I was starting my 6th year as the lead developer for a manufacturing firm in Philadelphia, Pennsylvania. &amp;nbsp;The realisation that I was growing rather weary at what I felt would become a dead end job well below my desires and capabilities would later come true for the individual(s) that came later to replace me once I'd left. &amp;nbsp;I recently found out via a visit, the software I had authored in the 20th century for said company is still being utilised during every one of their&amp;nbsp;6 production days a week, year round. &amp;nbsp;I figured authoring a critical application that as been running for over 10 years a full production environment without failure is one point of pride I happily take away from that point in my professional career. &lt;br /&gt;&lt;br /&gt;Moving on, both with this post and what I was getting at after all of those years at what was becoming a job with no real future, unless I wanted a full frontal lobotomy. &amp;nbsp;I started to look around at my potential opportunities and having at the time been rather conservative in the kinds of companies in which I would &amp;nbsp;allow myself to envision employment, only one of which I was aware of it being a startup. &amp;nbsp;I had interviewed in a new industry as an attempt at something new with a company at the time located in a new office complex in Conshohocken, Pennsylvania, called Health+Market+Science. &amp;nbsp;It was the&amp;nbsp;epitome&amp;nbsp;of dot com culture from the very casual attire, dual flat screens (15"-17"ers at the time) to the fully stocked kitchen with both Mountain Dew and Jolt colas and of course the obligatory ridiculous hours kept by the early twenty-somethings. &lt;br /&gt;&lt;br /&gt;I ended up not taking that job as the hours just weren't conducive to me, having been married with a home to which I preferred to return to during daylight hours. &amp;nbsp;I did however find myself in an awkward situation as a friend happened to be working for a financial startup as a contractor and try as he may, they never offered him a salaried position. &amp;nbsp;After suggesting the position for which I interviewed to him, he found it a more compatible match both in terms of age range, distance from his rented home and preferred environment. &amp;nbsp;He gave appropriate notice at his soon-to-be-former contract and suggested to the CTO to have me in for an interview. &amp;nbsp;To make a really long story short, I interviewed and was offered a full time position at a considerable increase over my previous place of employ for the prior seven years.&lt;br /&gt;&lt;br /&gt;The new environment was definitely a relief from the previous mid-size company dynamic, though it didn't come without its own oddities and personalities. The projects cam quickly and were fairly varied. &amp;nbsp;Our niche in the market and in terms of financial companies was breaking new ground in an area of the industry that was too new to have many established competitors or applications which could simply be purchased and utilised for daily goings on. &amp;nbsp;The environment code wise was simple, replace the existing PHP documents with something better, and at that time and in that case, perl was the solution. &lt;br /&gt;&lt;br /&gt;I'm not going into the whole rundown of the years at the company and its daily goings on however I was state that true to its nature we worked some late evenings, the odd weekend and had a blast all the while. It ultimately changed as the company grew and due to certain situations with some of the legacy code's lack of efficiency with our increased activity (i.e. it wasn't scaling), my boss (the CTO) was removed and I took his place. &amp;nbsp;It would be several more years that I would be at this company which would end six months after the new owners completely destroyed the client relationships and staff morale. &amp;nbsp;I ended with the obligatory hire-a-thug escorting me from the facility (though I am a considerably larger individual and therefore felt no threat), and a decent severance package. &amp;nbsp;The new CEO hated me from day one because while promising to continue to provide the high quality of work my team and I output on a regular basis, I also made it clear that we were not 'yes men', nor would I or any of my team kiss anyones ass because of self-imposed importance via titles or roles. &amp;nbsp; You earned respect, you never gained it by your business card or past. &amp;nbsp;He was never understanding of that mindset and as such I was given a nice severance pay while other people were just thrown to the street. &lt;br /&gt;&lt;br /&gt;Ultimately my first foray into an internet based startup was a fun adventure that definitely provided lots of learning opportunities and allowed me the environment to grow and expand my comfort zone. &amp;nbsp;All in all, I wasn't unemployed for more than thirty or so minutes as on my way away from the office on that fateful friday afternoon for the last time, I made a phone call and found myself employed starting the upcoming week... at another startup. &amp;nbsp;More about that in another post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-3176984617344528912?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/3176984617344528912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=3176984617344528912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3176984617344528912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3176984617344528912'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2010/04/romanticism-of-internet-startups-my.html' title='The Romanticism of Internet Startups.  My experiences, part I.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-2048926238886484448</id><published>2010-03-19T01:42:00.001-04:00</published><updated>2010-03-19T01:55:12.492-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux World'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><category scheme='http://www.blogger.com/atom/ns#' term='Pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>What's In Your Dead-Tree-Format Library?</title><content type='html'>Whilst cleaning and reorganising my home office, I came to the realisation that I have accumulated quite a decent amount of books on the various topics in my trade &amp;amp; hobby, software engineering. &amp;nbsp;After placing my various titles properly in groups on the shelves, I took a photo and it is shown below. &amp;nbsp;What follows is a breakdown on each book, my thoughts and the source of how it was attained (where remembered/applicable). &amp;nbsp;Note: Not included are three books currently in transit via Amazon. &amp;nbsp;One is on ajax, and two are FreeBSD server administration related.&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/_v8PKau5MOVU/S6LyJkT97YI/AAAAAAAABAE/8xBtZ1mzcZs/s1600-h/bookshelfx600w.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="540" src="http://4.bp.blogspot.com/_v8PKau5MOVU/S6LyJkT97YI/AAAAAAAABAE/8xBtZ1mzcZs/s640/bookshelfx600w.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Top shelf first, going left to right:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;The Linux Database Bible&lt;/u&gt; :: This was a $50.00 book received as a freebie when I attended Linuxworld 2002 at the Jacob Javits Center in NYC. &amp;nbsp;I can't say that I've used this book much for anything other than the occasional reading fodder when nothing else was within reach. &amp;nbsp;I'm sure it would be of more use to newbies to both Linux and databases, even now.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Python Essential Reference, 2nd Edition&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; I picked this up back in 2003 whilst doing work for a financial company at which I was both senior developer as well as newly appointed (reluctant) CTO. &amp;nbsp;This is a David Beazley book, and I highly recommend any version of it (there are several newer than my copy) as he is clearly full of expert level knowledge on all things Pythonic.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Python Cookbook&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; This was another 2003 or 2004 purchase mainly out of curiosity to see what crafty, yet elegant solutions other Pythonistas has designed and/or implemented. &amp;nbsp;Definitely a wealth of information on a multitude of topics be it recursively traversing b trees or working with simple CSV files.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Python Pocket Reference&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; A simple reference mostly useful for the "batteries included" libraries.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Python Programming Patterns&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; This book has shown me why we generally don't rely heavily upon patterns such as those overly used in Java software. &amp;nbsp;I purchased this along with the Python Cookbook, and quite frankly if I had only acquired this book, my disappointment would have be far greater as I would've had nothing to take my mind off of it.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Perl to Python Migration&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Picked this up at the Micro Center in St. Davids, PA in the early 2000's when I started to migrate some of our perl applications over to Python in the financial world. &amp;nbsp;Highly recommended, especially for heavy, long-term perl hackers.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Pro Django&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Picked this up in early 2009 as further reference and idea material for the 4 websites I write and maintain for a series of internationally published magazines. &amp;nbsp;I'm torn on the value of this book, but at least it goes beyond beginner level.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;The Definitive Guide to Django, 1st Edition&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Purchased as a reference as soon as it came out, references version .96 of the framework, so if a person is using v1.xx or higher, there are going to be quite a few caveats in the examples, otherwise a wonderful reference, especially when it comes to the appendices.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Practical Django Projects&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; A bit of a disappointment as it focuses on blog creation for which a series of examples of this ilk already can be found online for free, not to mention in the Pinax project.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;PHP and MySQL Web Development&lt;/u&gt;&lt;i&gt; ::&lt;/i&gt; I just received this book from a business partner and whist I generally avoid PHP like the plague, I am glad to have references which are a bit more current these days for when I do need to venture into such environments.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Setting up LAMP&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Same as above. &lt;br /&gt;&lt;br /&gt;&lt;u&gt;PHP Solutions&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Ditto for this book as well.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Pro Drupal Development&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; ibid on this one too. &amp;nbsp; I don't think I'll ever end up using Drupal, but at least I have a reference if I ever need tit.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Programming PHP&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; I inherited this from the previous CTO at the financial firm at which I worked back in 2002/2003 and it has served me well as a reference book.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;PHP Pocket Reference&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; This also was provided to me with the Programming PHP book.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Programming Ruby, 1st Edition&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; The Pick Axe book as it is more fondly referenced by Rubyists. &amp;nbsp;I picked this book up in 2007 so as to further my own understanding of perl's successor. &amp;nbsp;I was, in fact, reading it early this evening, though I still find it considerably less useful professionally for me than Python and other solutions.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Programmers at Work, 1st Edition&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; This was left to me by a business associate from Ecquire prior to relocated elsewhere. &amp;nbsp;It is the predecessor of "Coder's at Work", and contains some early Apple, Microsoft, Adobe, Xerox and HP developers and views on the industry.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;HTML 3&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Truth be told, this was bequeathed to me by the surviving relatives of my ex-wife when her younger brother died in an untimely manner. &amp;nbsp;It is rather outdated, though kept solely as a remembrance of a young life that had potential in several areas of his life.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;The Pragmatic Programmer&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; I might not like a lot of the most recently branched out Pragmatic series be it books or podcasts, but this book is gold in my eyes. &amp;nbsp;I made this a company purchased, required reading for all developers from Junior to Senior level everywhere I've worked. &amp;nbsp;It most recently was recommended to an Intern I mentored during the 2009 summer season. &amp;nbsp;It has also proven valuable to other associates, even those not directly involved in the Software Engineering field(s).&lt;br /&gt;&lt;br /&gt;&lt;u&gt;OOP Demystified&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; I purchased this book as a means of helping to teach others the basics of Object Oriented Programming. &amp;nbsp;It is a rather basic book, and uses the transitional OOP examples cases of registering for a class and doing payroll, like umpteen other books on the topic.&lt;br /&gt;&lt;br /&gt;Middle shelf second, again from left to right:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Open Source Development with CVS&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Picked this book up on an departmental outing back in 2000 when moving into the Lead Developer role at a Manufacturing company which didnt have an existing source control system in place, and it wasn't yet time to use Subversion and the company was too cheap to acquire Perforce licensing.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Practical C Programming&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Every developer has at least one reference book for C, many have more. &amp;nbsp;I'm not a big C guy myself, though I find this O'Reilly reference book a wonderful additional to any library, maybe short of the K&amp;amp;R tome.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Teach Yourself C++&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; This book by Al Stevens was something I'd picked up as the desire to torture myself with C++ a.k.a. Bjarne's plague upon the coding world. &amp;nbsp;I sooner should've picked up a book on Smalltalk or Objective-C. &amp;nbsp;Note, the book is written well, my comments are mainly aimed at the abomination which is C++.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Learning Java&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; I didn't buy this book as a Java reference in as much as I did for its first four chapters, which by and far the single best example laden object oriented chapters of any book, bar none. &amp;nbsp;Oh, and they are quite humorous as well.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Head First Java&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; When recently wanting to get back into the Java world a bit more than in the past (with my playful experimenting), this was ordered on the recommendation of a good long term friend of mine, himself a Senior Software Engineer focused heavily in Java environments.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Java in a Nutshell&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Standard fare O'Reilly reference book, though drier than others and while laid out clearly, something felt amiss.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Core Java&lt;/u&gt;&lt;i&gt; ::&lt;/i&gt; Sun's own sanctioned Java tome. &amp;nbsp;Massive, and packed full of information (and for the price is had to be). &amp;nbsp;Heavy examples on applets and AWT, which as of this writing is a decade out of date. &amp;nbsp;Makes a great bookend due to its size.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Java2&lt;/u&gt; : A Beginner's Guide &lt;i&gt;::&lt;/i&gt; Probably one of the nicest Java2 introductory manuals. &amp;nbsp;This one has been loaned out to newbies to Java more than any other Java book in my library. &amp;nbsp;Clearly written and never dull.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Javascript, The Missing Manual&lt;/u&gt;&amp;nbsp;&lt;i&gt;::&lt;/i&gt; Recently purchased and while full of information spends too much effort on jQuery, so much to the point that the book might've been more aptly named "jQuery", and subtitled "with a chapter or two on non-jQuery javascript".&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Linux Programming&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Also bequeathed by my ex-wife's famliy.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Linux in 10 Minutes&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; ibid. &amp;nbsp;See above.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Turbo Pascal, 3rd Edition&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; Pascal, while originally a teaching language is also an imperative, procedural language good for systems programming much like C and only slighly slower. &amp;nbsp;Having moved to Pascal from various versions of Basic and ML, I was happy to take this off of my wife's friend after he completed his Pascal course at university. &amp;nbsp;The section on algorithms is still one which I reference routinely, hence the reason isn't packed away in a box.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Perl 5 Programmer's Reference&lt;/u&gt; &lt;i&gt;::&lt;/i&gt; A $4.99 special at a Banes &amp;amp; Noble in Abington, PA back in 2001. &amp;nbsp;Only covered version 5.004 of perl, but was so well laid out that it beat anything that O'Reilly could muster for perl references. &amp;nbsp;Quite possibly out of circulation/print as of this article's writing.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Learning Perl Object, References and Modules&lt;/u&gt; &lt;i&gt;::&lt;/i&gt;&amp;nbsp;Essential reading for any non-purely functional code to get written when subjected to perl environments.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Programming with CGI.pm&lt;/u&gt; &lt;i&gt;:: &lt;/i&gt;Nothing says well engineered than written by an engineer at Jet&amp;nbsp;Propulsion&amp;nbsp;Laboratories.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Programming the Perl DBI&lt;/u&gt; &lt;i&gt;::&lt;/i&gt;&amp;nbsp;Anyone doing anything with databases in perl, &amp;nbsp;will benfit from this thin yes most definitely useful book.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Perl Best Practices&lt;/u&gt; &amp;nbsp;&lt;i&gt;::&lt;/i&gt;&amp;nbsp;I pick this up after reviewing another copy at an Internet Hosting firm for which I did someork..&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Object Oriented Perl&lt;/u&gt; &lt;i&gt;:: &lt;/i&gt;Damien Conway's opus for Perl and Object Orientation. &amp;nbsp;Explains limitations and information for making robust Django.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Practical PostgreSQL&lt;/u&gt; &lt;i&gt;::&lt;/i&gt;&amp;nbsp;Acquired when the original plans for some of my publishers dontnet&lt;br /&gt;&lt;br /&gt;Bottom shelf lastly, contains my spoken language reference library which contains books on:&lt;br /&gt;&lt;br /&gt;Dutch, French, Japanese, Welsh, German, Korean, Russian and Spanish. &amp;nbsp;The majority being in Dutch including several novels and grammer books, followed in a distant second by Welsh grammar books (mostly picked up in Waterstones in London surprisingly), then in a close third, Japanese. &amp;nbsp;I like languages and I do not limit myself to simply one or two. &amp;nbsp;Anyone who follows looks at the list of people whom I follow on twitter will easily see all of the above languages utilised, sans Welsh (quick, somebody contact Alan Cox!). &lt;br /&gt;&lt;br /&gt;Bonus: &amp;nbsp;Some of my die-cast cars including my highly favoured Peugeot 206 WRC model that I picked up for £2.99 at Hamley's in London back in '03. &amp;nbsp;I collect the occasional model car here and there, mainly German, French, English and Italian based, but that is fodder for another blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-2048926238886484448?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/2048926238886484448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=2048926238886484448' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/2048926238886484448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/2048926238886484448'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2010/03/whats-in-your-dead-tree-format-library.html' title='What&apos;s In Your Dead-Tree-Format Library?'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_v8PKau5MOVU/S6LyJkT97YI/AAAAAAAABAE/8xBtZ1mzcZs/s72-c/bookshelfx600w.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-405438302848529249</id><published>2010-03-09T23:59:00.001-05:00</published><updated>2010-03-10T00:00:32.336-05:00</updated><title type='text'>The Greying of an Engineer</title><content type='html'>My birthday is upon me once again, this time in 11 minutes from the time that I compose this brief entry. &amp;nbsp;As I contemplate what the next year holds for me I find myself having certain realisations floating around my head. &amp;nbsp;I will attempt to share these with little fanfare and leave interpretations to the reader. &lt;br /&gt;&lt;br /&gt;1. Throughout my entire life thus far, one item has remained a constant: &amp;nbsp;I love to design software and have since I was in the single digit age range.&lt;br /&gt;&lt;br /&gt;2. The reason I'm not a horribly rich coder is simply because my goal has never been that of becoming rich, whereas it has been that of writing great code.&lt;br /&gt;&lt;br /&gt;3. There are is a lot of talent out there, but it has nothing to do with youth vs. older coders. &lt;br /&gt;&lt;br /&gt;4. New methodologies come and go all of the time. &amp;nbsp;Functional vs. Object Oriented paradigms, Low Level vs. High Level languages, Waterfall vs. Agile development. &amp;nbsp;All are capable, all can be utilised in effective manners, it simply comes down to competence and compatibility of those involved.&lt;br /&gt;&lt;br /&gt;5. You can teach an old dog new tricks, though after having learned said new trick(s), one might still prefer the original. (e.g. I think that jQuery is a wonderful invention, but don't expect me to use it as I feel it isn't explicitly clear. &amp;nbsp;I'll take document.getElementById('idname') anyday over perl/rubyesque tokens.&lt;br /&gt;&lt;br /&gt;Given that my goal was to post this before my birthday comes, I'm ending it abruptly here. &amp;nbsp;Till my next post.. -Eric&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-405438302848529249?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2010/03/greying-of-engineer.html' title='The Greying of an Engineer'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/405438302848529249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=405438302848529249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/405438302848529249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/405438302848529249'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2010/03/greying-of-engineer.html' title='The Greying of an Engineer'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6721696722394820498</id><published>2010-01-28T23:19:00.007-05:00</published><updated>2010-01-30T01:17:09.876-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stallman needs to grow up a bit'/><category scheme='http://www.blogger.com/atom/ns#' term='TI994/a'/><category scheme='http://www.blogger.com/atom/ns#' term='BASIC'/><category scheme='http://www.blogger.com/atom/ns#' term='iPad'/><category scheme='http://www.blogger.com/atom/ns#' term='Yesteryear'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><category scheme='http://www.blogger.com/atom/ns#' term='RMS'/><title type='text'>You kids get off my lawn! (oh, and the Apple iPad)</title><content type='html'>Lately I've been rather busy with work, primarily my main client as well as with the newer work I've been doing with a soon-to-be unveiled startup of which I'm a partner.  Our product is launching by the end of the first quarter 2010 and I will be sure to update the site with all the details.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What is really on my mind lately is the annoyances I've been feeling more and more lately regarding what I feel is a loss of substance in the field of computing, interfaces and the sector of artificial intelligence research.  Though just recently with the launch of the newly unveiled Apple iPad did I start to feel some alleviation.   I will address several of the aforementioned items, but will leave the AI discussion for another post as it will be a lengthy one at best.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Firstly, as 2010 has rolled upon us I started reflecting on how it must be for kids these days and their constant exposure to computers.  Primarily how difficult it must be for future programmers and software engineers to get started programming on machines so complex with operating systems so complex that to do even the simplest task requires learning what potentially are complex API's.    When I was starting out with computers back in 1979-1980 one could buy a computer (which came with at least BASIC) as well as general instruction books explaining how to program in said language.  Within 15-30 minutes any kid would be able to draw bitmapped graphics on screen and possibly even animate and/or add sound as well. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Given that the machine in question on which I first started (a 16-bit machine no less), the TI-994/a, was a 1.067mHz speed daemon, there is much to be said for its overall capabilities.  This blog post is larger in size than that machine had RAM (a whole 16k's worth).   So, it is true that with all of the amazing capabilities and speed of our newer machines (such as my primary machine with its 8 hyperthreaded cores over two physical quad-core Nehalem Xeon's and 6gb of RAM (of a possible 64gb)) it would be expected.  Still, something is lost in the overall simplicity.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Furthermore, my recent curmudgeonly slanted mindset spread to thoughts about how access for all destroyed the quality of the average computer user, especially those networked users (which nowadays includes virtually everyone).  When I first started online, there was no AOL, there was no web, there was the internet, but it was limited to Academia, Science Research facilities and the Government.  We had modems primarily running at 110/300/440 and later 1200 baud and up.  We had acoustic coupler RS232 interfaces (they while novel, are not something which I find myself longing for once again) and we were happy as can be.  We knew that getting online and/or running into other computer programmers/enthusiasts (they were usually one in the same back in the day) would lead to interesting conversations/exchanges of a higher intellectual level as opposed to nowadays where the overwhelming majority of computer users are simply that, users who couldn't code their way out of a cardboard box.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enter the Apple iPad.   A machine designed for everyone BUT programmers/software engineers &amp;amp; developers.  It provides the mundanes with the functionality to go on about their daily online existences and I'm truly hoping that such devices as this catch on.  I hope that items such as this replace the majority of those users' computers.  This would give us a kind of return back to the day when the technorati and intellectually gifted were the only ones with machines capable of creating new software.  It will help like minded people easily be able to pick out those of similar ilk simply by their possessing an actual computer.   &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I realise that there are people complaining about the iPad specifically those under the spell of Stallman (RMS) and his free software foundation but it is time for them to be grown ups about the situation.  If someone creates software, it is their right to keep the source closed, just as it is Stallman's right not to run it on his machine(s).  He can be an idealist with cramming such a non-sensical mindset on everyone.  Most people really could care less because there are those sources which provide for the applications people want and use, and have no desire (or capability) to modify them anyway, hence the iPad and future devices of similar type are perfect as end users are consumers of the fruits borne of software engineers, not producers of such software.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I realise that as usual, I'm diverging from my original topic by going off on a mildly related tangent, so i'll wrap this up by simply stating that it is my hope that with the newer type of device designed solely for the everyday user that we will see a reduction in actual programmable computer sales indicative of a clear divide between producers and consumers once again making a clear distinction between those with the mental prowess and logic abilities/desire to create software and utilise machines to their fullest, and those who are simply consumers of said labour.    &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thoughts?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6721696722394820498?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2010/01/you-kids-get-off-my-lawn-oh-and-apple.html' title='You kids get off my lawn! (oh, and the Apple iPad)'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6721696722394820498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6721696722394820498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6721696722394820498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6721696722394820498'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2010/01/you-kids-get-off-my-lawn-oh-and-apple.html' title='You kids get off my lawn! (oh, and the Apple iPad)'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-4361331249102349398</id><published>2009-09-30T23:39:00.002-04:00</published><updated>2009-10-01T00:29:18.584-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PyCon'/><category scheme='http://www.blogger.com/atom/ns#' term='Conventions'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>PyCon 2010</title><content type='html'>I just made my submission to give a 30 minute talk at PyCon (US) 2010 in late February of the upcoming year.  I was contacted by PyCon staff with the suggestion that I present a talk sharing my various Python based experiences at various places of employ.  I made sure to get the submission in earlier this evening before the ability to do so was shutdown as the window for submisions closed for the 2010 event. Now I must wait until sometime in November to hear as to whether or not I'll be presenting.  I will keep everyone posted either way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-4361331249102349398?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/4361331249102349398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=4361331249102349398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4361331249102349398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4361331249102349398'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2009/09/pycon-2010.html' title='PyCon 2010'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6416620668660518027</id><published>2009-08-28T02:08:00.005-04:00</published><updated>2009-08-28T02:52:34.622-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Speed'/><category scheme='http://www.blogger.com/atom/ns#' term='failed language implementation'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='Bad Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Update to Post Regarding Hacking &amp; Ruby</title><content type='html'>&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;This will be a very short entry as it is rather late and I'm looking forward to sleep.  I would do but I do feel that I have to get some observations off of my chest after the past 6 hours of exploring ruby (for the third time).  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#1.  Ruby isn't as intuitive as one might suspect.  Maybe python and others of similar influence (groovy) have raised the bar too high in terms of dynamic language syntax and expectations.  The standard ruby idioms are inconsistent and ill-named in several cases, mostly involving native data sets.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#2.  Namespaces in Ruby are an even bigger mess than perl.  To some degree, perl's system seemed to make sense yet from what I've read, seen and with which I experimented, I find the namespace setup for Ruby to be subpar and dare I saw far from fluid in implementation details.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#3. Ruby is indeed very slow, especially when working with the Array types in combination with large datasets and continual pre-requisite 'include?' method calls for each datum in said set.   I did find that I was able to achieve the same results wanted via Hash population followed by a dump of keys to an Array with a noticable speedup, removing the need for the very slow 'include?' method.  Membership tests are a joy of high level languages, but a drain on some resources, ruby more than others though without a doubt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#4. The novelty of mutable and immutable version of method calls (collect! vs. collect, slice! vs. slice) is just that.  A novelty.  This is an ambiguity which I believe does not help to further ease of readability and usability.  It further necessitates that non-standard library code implement similar idioms and 'practices'  for uniformity's sake with the downside being a snowball effect in this area.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#5. Ruby isn't sure if it wants to be perl, c, smalltalk or itself as can be determined by the mix and match of terms, keywords and standard method names.  It doesn't feel like a concrete language that was purpose built, but more like an object system with various sources for tacking on the remaining pieces of the language so as to round out the feature range.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;These experiences with Ruby (for the third time) may have been different had I not been spoiled by Python (most notably), or were I not coding in the field for the past 15 years.  This is not the case nonetheless.  I couldn't see myself coding in this language for anything mission critical or heavy duty and after looking at the problems many of the ruby back-ended software systems and/or websites vs. the other high-level dynamic languages have suffered, it becomes quite clear when industry giants such as Google and IBM throw their weight behind Python.  &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;This isn't meant to be an argument starting post about Ruby vs. Python as they can be found elsewhere, though if the shoe fits...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6416620668660518027?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2009/08/update-to-post-regarding-hacking-ruby.html' title='Update to Post Regarding Hacking &amp; Ruby'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6416620668660518027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6416620668660518027' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6416620668660518027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6416620668660518027'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2009/08/update-to-post-regarding-hacking-ruby.html' title='Update to Post Regarding Hacking &amp; Ruby'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6644650053347851597</id><published>2009-08-26T00:18:00.004-04:00</published><updated>2009-08-26T00:47:34.345-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='Rexx'/><category scheme='http://www.blogger.com/atom/ns#' term='Pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Professionals'/><title type='text'>Ruby &amp; Project Realisations</title><content type='html'>&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;This isn't going to be a long post as it is rather late in the evening (morning) and not only am I trying to rest my leg (hyperextended my knee playing football (soccer for the Americans out there) on Monday evening), but I'm also in need of greater amounts of sleep having a four month old daughter for whom I am the primary care giver starting tomorrow given that my wife works in the academic world. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Short and to the point (for me at least) is that I'm delving back into Ruby (for the third time chronologically), but for the second time on a 'serious' level (i.e. with the intent to actually produce usable code and not simply proof-of-concept understanding code).  I'm realising that while I love python which has been part of my daily work for the past five plus years, moreso Django/python in the past two, that it is becoming my 'Java/C#' if you will.  By that I mean that it is my work language.  It is a clean and elegant language which allows me to focus on getting what I wish completed, completed with minimal fuss and easy maintainability due to its explicit albeit brief and neatly aligned syntax.  I feel though that something is missing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;If I can go back a little (and long time readers from previous versions of this blog circa 2002-2006 would remember me discussing this before) and bring up what eventually became my professional lingua of frustration: perl.  Larry Wall's masterpiece which I utilised professionally from as far back as 1995 albeit I was working with rexx and pascal(!) more so then.  I used perl and was attracted to it because of its expressive hacker roots, but was eventually disgusted by the lack of a decent enforceable object model for doing any kind of OOP work, not to mention maintainability was not its strong suit regardless of how meticulous one might be as a software engineer/coder, etc.   This is what ultimately lead me to look at ruby but only briefly as it had residual taste of perl all over it.  I found python shortly thereafter and have been happy ever since, until recently.  &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Sure I've looked and learned other languages in the meantime (as well as used them for personal and professional purposes), but just for the past three weeks or so I've realised that some of python's strong suit do indeed take some of the more guttural joy out of  hacking out code.  In my line of work I find formality and structure do wonders at getting solid code and meeting my clients' needs, which is the whole point.  I'm at the point professionally where I don't get calls or emails saying that "something broke".  It is much akin to Apple computers.  Things just work without fail, as should be expected.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;This ties into my other piece of the recent puzzle.  I'm doing web framework design and implementation (amongst other custom software components) for primarily lifestyle, art and fashion magazines.  It does pay the bills and it is at least involved with a creative branch of what can be a boring industry (publishing), though I find myself pining for more intellectually/scientific/theoretical research based projects/content.  This isn't going to be happening anytime soon where I'm currently spending my efforts (professionally as it were).  I have no design to stop doing what I'm doing and for whom I'm doing said work.  I enjoy the relationship I have with my clients and there isn't anything wrong there.  I'm being kept busy with new work so that's nothing about which to complain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;What I am looking to do is start working on some more experimental/theoretical designs and codebases/classes/packages in Ruby so that I can further explore the language and enjoy the more 'hack' mindedness which I find comes with such an expressive language.   I will most definitely share my results with all the CodeDEVL readership (as well as podcast subscribers).  I may even post a screen-cast soon as my copy of Snow Leopard for my Octo-Mac Pro (8-Core) should be here on Friday and includes new screen-cast capturing built-in to Quicktime X.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;If anyone is in the Doylestown region of Pennsylvania and would like to meet up to talk code, please drop me a line.  My email is simply 'eric' at this domain (assuming you're not reading this from the source blogger domain but the domain for which the header image at the top of the page states clearly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;I'll keep everyone informed.  Until next time..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; -Eric&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6644650053347851597?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2009/08/ruby-project-realisations.html' title='Ruby &amp; Project Realisations'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6644650053347851597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6644650053347851597' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6644650053347851597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6644650053347851597'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2009/08/ruby-project-realisations.html' title='Ruby &amp; Project Realisations'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-3571773113863891435</id><published>2009-07-25T22:39:00.003-04:00</published><updated>2009-07-25T23:18:41.688-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Moore&apos;s Law'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><category scheme='http://www.blogger.com/atom/ns#' term='History'/><title type='text'>New Development Machine Ordered</title><content type='html'>After years of working primarily on laptops, I finally decided that it was time to move to a desktop.  A brief history is in order so as to show the road travelled (for posterity).  All machines were purchased new and the prices include necessary manufacturers extended warranties, etc. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;April 2002 : Whilst getting prepared for an upwardly vertical move in my field after working at Alliance Remanufacturing as their Lead Software Developer for internal applications for the production, procurement, quality assurance and management divisions, I purchased an Apple 14" iBook G3 @ 700 MHz w/768 MB of memory for $2,500.  This unfortunately was plagued with a flaky motherboard (logic board) issue causing video issues.  The machine had 4 logic boards in 3 years under full warranty.  I learned the value of AppleCare very quickly, as well as the quality and speed of Apple's customer service.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;June 2005 : At this time I was working for Payment Processing Center, LLC writing cheque/bank draft processing backend software as well as managing a real time financial reporting web portal.  The logic board in the iBook G3 gave up its ghost yet again and now being out of warranty, it wasn't worth fixing.  The replacement came in the form of an Apple 12" iBook G4 @ 1.2 GHz w/1.25 GB of memory for approximately $1,550.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;February 2006 : Due to a Federal Raid (later proven to be due to certain clientele and not my place of employ nor its directors), the iBook G4 was seized by the Federal Government for a period of many months with no promised return date.   During the next few months I was forced to work on a Windows machine and it was like being a fish out of water.  I'm a Unix person through and through and while I took solace in one of our FreeBSD boxes, it wasn't enough.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;April 2006 : Still at Payment Processing Center though still without word regarding the seized iBook the decision to buy a professional level Intel based (Core Duo, 1st Generation) replacement.  I ordered an Apple 15.3" Widescreen MacBook Pro @ 1.83 GHz w/1 GB of memory for approximately $2,700.  The machine which would take me through several large projects for a multitude of clientele including but not limited to: a national retailer with 400 locations in the United States as well as an international magazine publishing group hosting several publications.  It would ultimately be maxed out at the 2 GB of memory to which it was limited, being a first version Core Duo (NOT Core 2 Duo), and only 32 bit.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This brings us to today, with the MacBook Pro being out of Apple Care and currently being used as a desktop for over 1.5 years (hooked up to two external displays, two printers, one scanner, 3 external USB Hubs (4, 4 &amp;amp; 7), several external hard drives and an external Firewire Raid Array, it is time to move on to a more appropriate development machine capable of handling the newer software, operating system(s) and expansions needs as dictated by my work demands.  Due for pickup later this week is an Apple Mac Pro workstations with dual quad-core xenon "Nehalem" hyperthreaded processors (effectively 16 cores) at 2.26 GHz each, with 6 GB of memory by default for approximately $3200.  This provides the expansion abilities I need not to mention the fastest performing Unix workstation anywhere near that price range with the ability to handle 4 TB of storage internally as well as 64 GB of memory.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The end of this upcoming week can't come soon enough for me.  It is amazing to think how far technology has come in just the past 7 years. From a fast Risc based G3 @ 700 MHz to what amounts to 16 64 bit cores at 2.26 GHz Intel Xenon "Nehalem" (Risc like design and performance customised for Apple by Intel).  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More on the new workstation forthcoming.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eric&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-3571773113863891435?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/3571773113863891435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=3571773113863891435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3571773113863891435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3571773113863891435'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2009/07/new-development-machine-ordered.html' title='New Development Machine Ordered'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-8812844243187279321</id><published>2009-06-13T01:46:00.006-04:00</published><updated>2009-06-13T02:46:32.563-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='professionalism'/><category scheme='http://www.blogger.com/atom/ns#' term='experiences'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Planning'/><title type='text'>Enforcing the Software Engineer Archetype &amp; Related Principles</title><content type='html'>It is hard to believe I've been engineering software for the past 14 years, mainly because that isn't reality.  I started off like most others, as a programmer/developer and grew personally and professionally over time.  As time progresses in our studies and experiences in design, development and deployment we change.  This change is more oft than not, for the best.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I was growing up, I looked towards getting a CS degree so as to become the aptly named "Computer Scientist".  What I've found over the years via practical and situational based circumstances is that Computer Science isn't my primary interest.  While it is true that there are pieces of the CS realm which have always garnered my attention, such as Artificial Intelligence, it doesn't ring true as a whole. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today reminded me just how much I would like to think I have changed both in my focus, overall goals and discipline pertaining to the whole process of building software systems.  Now the example I'm going to loosely reference is centered around phase one of a much larger long term project.  This first phase was somewhat of a rush job as per the client due to botched (i.e. prematurely advertised) promotions for said application's 'live-date'.   &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I knew that taking this on such short notice would require a very strict set of time guidelines and clearly defined checkpoints and milestones if all was going to be implemented in a proper manner, one supporting a proper holistic software lifecycle approach.  This of course required the initial overview of the phase being clarified, the requirements gathering phase, the initial layout with timeline estimates and expectations being put forth and finally said estimates being agreed upon with a little 'wiggle' room so as to allow for human error in the previous steps.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, here's what happened today which precipitated this posting.  This project has a launch date of 15-Jun-09 and today being the last business day prior to that date, one could say that the end was almost upon me/us at the time.  Weekends are out because as an adult and a family person with children, I value my personal and family time very highly, much higher than that of my professional work.  That being said, I am indeed an experience professional and know how to accurately plan work into a give time frame clearly stating what can and cannot be realistically expected within a given time schema. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today approximately one hour before the weekend officially arrived thus signaling the end of this phase of the project, both the designer and the overall project coordinator (not on the Software Engineer side mind you) started throwing out 'new' items for this existing phase almost completed.   It is at moments such as these where the undisciplined and junior level individuals panic and ultimately sacrifice their own time for the sake of someone else's lack of professionalism by agreeing to make the changes. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did the opposite.  I made the correct move by stated clearly to all parties that we had agreed upon timelines and that they have been kept.  The idea of introducing new components not part of the original design at such a late stage of the phase was outright idiocy.   I pride myself in my completeness of the whole process and will not let a failure to plan on someone else's behalf negatively affect the quality work I strive so hard to ensure.  Any changes need to be reviewed to ascertain what side-effects might be caused by their inclusion (especially into a more mature codebase at this point) and not to mention the quality/testing cycle which obviously wouldn't be possible due to time constraints.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I am trying to get at is that I learned that for the sake of professionalism, quality and ethics, one must have the ability to say "No" when others fail in their planning/design.  After all, the requirements gathering phase is when a competent Software Engineer brings to light questions that would hopefully coax such ideas from the requirements 'givers' if you will.  It is our duty and creed to help our clients both internal and external to bring clarity to their actual needs as many times they are unsure of the specifics until discussed with others.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I say unto aspiring Software Engineers of the future:  People look to us for accountability, and part of that equation is keeping the other variables in the equation (team members, requirement providers, planners, designers and what not) accountable to the process, even if it means telling someone 'No'.   Provide your reasons, and hold steadfast as these software engineering processes exist for the benefit of our projects' quality and overall success, not for the sake of being friendly or 'helping out' someone who failed to do their part in the overall planning and execution of a project and/phase thereof. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-8812844243187279321?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2009/06/enforcing-software-engineer-archetype.html' title='Enforcing the Software Engineer Archetype &amp; Related Principles'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/8812844243187279321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=8812844243187279321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8812844243187279321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8812844243187279321'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2009/06/enforcing-software-engineer-archetype.html' title='Enforcing the Software Engineer Archetype &amp; Related Principles'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-8237608694803999300</id><published>2009-03-10T22:48:00.005-04:00</published><updated>2009-03-13T22:25:15.226-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GANTT Charts'/><category scheme='http://www.blogger.com/atom/ns#' term='Dealing with Fires'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Planning'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Communication'/><title type='text'>New Projects, and how to handle the juggling act that ensues.</title><content type='html'>Today marks yet another year in which I've been aboard this mortal coil as it circles our solar system's centre point.  So as I sit here watching to see if the remake of 'The Day the Earth Stood Still" is a much of a car wreck as has been stated and re-stated for the past few months, or if it will end up being one of those guilty pleasures.  More so on to the point of this most recent update:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We in the United States of America are currently experiencing a rather nasty economic downturn/recession due to unregulated mismanagement of the country over the past many years and as such are having (as a country) to deal with roughly one in every nine persons of working age being unemployed.  Yet in all of this unfortunate turmoil as brought about by the economic calamity, I find myself inundated with more simultaneous clients and projects than ever.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While I have managed multiple projects before, it was usually with the benefit of a staff.  In this instance I find myself as the sole Engineer on the job.  I enjoy being the centre of a given project, especially focused projects with clear requirements as they encompass the most fluidity in terms of project and process flow beginning to end.  In this case however, due to a recent spate of decisions by several key individuals in charge of my various client entities, there has been an influx of new projects, primarily new ventures and re-launched (and recently acquired) web entities. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These are all primarily fashion and lifestyle media groups and magazines and while  they all have a similar bent to them, the amount of design behind the scenes differs greatly from one entity to another.  I find that the sites in which there is a solid plan  are to most enjoyable on which to work because this is a start, middle and end whereas projects lacking any real direction simply waste a considerable amount of time, effort and never seem to measure up to properly designed sites. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are several major concerns here when juggling this many projects, but thankfully there are just as many solutions:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Problem #1: Keeping focused on a specific code base.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Solution #1: Thanks to the beauty of multi-windowed environments, comments and code versioning systems such as Mercurial (Hg), Subversion or Git, we can save our place, with comments and safely return to them at a later time with notes on where we left off.  A bigger part of the solution here is a proper code editor that focuses on all elements of a project in a shelf or sub window.  By utilising an editor of this type (such as TextMate for OS X), we can keep one window open for each contracted project, each with its own attached drawer and as such simply minimising a given window completely puts a specific project out of sight and out of mind.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Problem #2: Estimations and management of many projects for multiple clients.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Solution #2: Give only rough estimates and keep in mind any potential work which may or may not come into the fray.  There is also an amazing tool which only requires a writing surface and the appropriate complimentary writing implement (paper &amp;amp; pencil, whiteboard and a dry erase marker, etc.)  The infamous GANTT chart, which allows for a wonderful representation of project portions/phases and time phases.   One should not be afraid to over-estimate their time frames for a given project and/or portion of a project.  One bit of wisdom which was learned after having it repeatedly played out by both myself and others is that men (not as much as on the women's side of the equation) generally underestimate by a factor of 3.  If it is assume that a guy honestly believes that a project with take &lt;i&gt;x&lt;/i&gt; minutes, in reality the time frame would be closer to &lt;i&gt;x&lt;/i&gt;&lt;sup&gt;3&lt;/sup&gt; minutes.  Gauge oneself over time and projects and adjust the factor accordingly, however start with the aforementioned suggestion as it has proven accurate in my experiences and that of others whom I know personally and professionally.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Problem #3: How should one handle priority requests and/or 'must dos' such as time sensitive changes or additions necessary to client business function regardless of assumed actual worth/priority.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Solution #3: This is much simpler than one would expect.  When discussing the issue with the client (wether internal (if a salaried employee and dealing with internal 'customers') or external) point out that this will be shifting the entire project timeline by the time required to complete this unscheduled emergency.  Now this isn't always practical or appropriate such as in situations in which a previously scheduled change was turned into a 'must do'.  In situations such as these that portion of the scheduled project can be removed from ones GANTT (or other scheduling) chart(s) it their entirety. &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; There is one caveat with this approach;  when removing a project portion due to unexpected/unplanned rushed completion, always add in additional time when shifting the remaining pieces of the project(s).  The primary reason for this is simply because additional time should be made available regression testing and/or additional testing due to the reduced time frame and unscheduled manner in which said changes were made, one in which a great possibility for error introduction was more likely.  The other major reason for doing as such is simply to protect oneself when another one of these situations occur.  It would be foolish for anyone to think that if this happens once, that it is unlikely to occur again.  Generally there are those who have little emergencies all the time, and those who 'suffer' from such events rarely if ever.  If it happens once, be sure to assume it will occur again as it is usually the result of bad planning or communication somewhere between the engineer and the end customer though more oft than not it is a middle-manager or a sales person making promises which had they been honest and/or considerate of others, they wouldn't have made in the first place.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Handling multiple projects can be easy if one enforces certain rules (albeit with a willingness to bend as long as attention is paid to making adjustments so as to not allow oneself to be run into the ground by continually pushing more amounts of work into a time frame never intended for said work as such.).  The importance of communication is key in this instance as expressing realistic time frames in the first place would resolve many of the ugly situation which sadly arise in real world environments on an ongoing basis.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-8237608694803999300?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2009/03/new-projects-and-how-to-handle-juggling.html' title='New Projects, and how to handle the juggling act that ensues.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/8237608694803999300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=8237608694803999300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8237608694803999300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8237608694803999300'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2009/03/new-projects-and-how-to-handle-juggling.html' title='New Projects, and how to handle the juggling act that ensues.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-1524522274279627846</id><published>2009-02-13T14:51:00.002-05:00</published><updated>2009-02-13T15:13:49.659-05:00</updated><title type='text'>Guiding the Future Generation...</title><content type='html'>This is more of an announcement than a standard codedevl.com content update, of where there will be one in the upcoming week.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On 09 March, 2009, I will be partaking of the 'Career Week' activities at Central Bucks East High School by serving on a panel along with other professional in various fields of Engineering, Mathematics and Technology as a means of not only sharing what it is we do but also answering posed questions by the future minds of our respective fields.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I feel it is a very important responsibility of experienced professionals to better server their community (both locally and the whole world in the large scheme of things) by passing on what knowledge one possesses to the following generation(s) to ensure that the gain wisdom proliferates through the ages.  I hope other readers of codedevl.com take an active role in this endeavour as well, and if so please feel free to post about it either here or on your respective sites. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-1524522274279627846?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/1524522274279627846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=1524522274279627846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1524522274279627846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1524522274279627846'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2009/02/guiding-future-generation.html' title='Guiding the Future Generation...'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-475152453129571520</id><published>2009-01-22T16:05:00.004-05:00</published><updated>2009-01-22T19:38:56.466-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='MCSE'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Basic'/><category scheme='http://www.blogger.com/atom/ns#' term='Criticisms'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Dealing with Horrible Legacy Code</title><content type='html'>&lt;div&gt;I know, I know.. it has indeed been a while.  What can I say, I've been busy with work.  Even though the US is deep in a recession so bad that Microsoft and IBM are executing mass layoffs (Microsoft's ever), there are those of us; especially on the Unix side of things (I gather Linux users as well) who are swamped with new projects.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As many readers would know, I have for the past year and a half been offering my software engineering services to an international publishing firm based out of New York with branches in Pennsylvania and Japan.  Yesterday I was in Manhattan for a meeting of introductions to the individuals with whom I would be coordinating on not one, nor two nor even three projects, but four new magazine entities.   This now brings my overall responsibility in terms of publications I  handle to a clean half dozen.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm glad I'm not in the Microsoft world (for multiple reasons not to mention primarily because I refuse to work with junk and this includes any MS OS), but for the reason that with all of these layoffs, a mass amount will be MCSE's and VB/.NET programmers, architects and engineers.  This does however segue into my first point (trust me, there is a relation).  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my most recent project, a sister publication of it actually needed some work done to their rss feeds.  Apparently this was first and foremost to fix a broken rss subscription page (where one could select which 'feeds' to follow).  This problem had been present for over a year from what I've told, and it was so bad that the page itself was throwing a PHP debug page when accessed.  This is wrong on many levels, most immediately that the debug mode was still on in the server configuration (the other errors being that they were using PHP, and allowed something to go on for over a year, broken.)  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not wanted to reinvent the wheel as well as having a sense of right and wrong I contacted the original developers of the software and let them know that since they were the only individuals with write access to the entire group of applications involved (not to mention this was custom built by them), that it was their fault 100%, and their responsibility to fix it, and quickly at that.  As a side note, I had been informed by my client that they had made repeated requests to said developers about this problem for over the past year and were informed that it would take 'a lot of time', and that they would be billed accordingly.  Long story short, I got in the developers faces about professionalism, the fact that had they any procedures in place for regression testing when changes were made and a proper set of document and qa tests, this problem would have been squashed the moment it was introduced.  Three hours after sending my well crafted letter, I received an email back from said development house that the problem was rectified, all is working and that there was no charge.  No charge indeed, I wouldn't accept one if they tried as it was entirely on them.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This brings me on to point number two as I could rant about the prior issue if left to my own devices.  My continued disdain for the overwhelming use of PHP.  I know it was a great idea that filled a niche when it was created, but it truly has grown to be something rather heinous: the sucessor to visual basic.  I say this because as with VB, the purpose was to make creating software in said language possible, even 'easy' for the 'non-programmer'.  This is a simple point to remember so I won't waste additional time stating it.  Non-programmers shouldn't be programming, period.  You either are a programmer, or you aren't.  If you aren't, you have no business behind the keyboard writing code for anything that ever goes into use in a company by anyone, including yourself.  Engineering isn't a child's game and it requires discipline and continual study and exercising of one's skills.  We won't pretend to do your job, you don't pretend to do ours as you are only making things worse. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This came about because while looking at the code to find the original rss problem (which was fixed without having to write any code in that monstrosity),  I became disgusted at how hackish the whole application was.  It was guilty of all of the following and more:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- ambiguous variable names&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- includes of code snippets where objects should have been &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- nested structures 4+ levels deep&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- very few if any comments in the code&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- very little meaning in those few comments that actually pass as informative. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- non-sensical file hierarchy for modules, includes, etc.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;- hardcoding of parameters in both equality tests and branch based if statements. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&amp;amp; much, much more.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is enough to make one partake in an involuntary protein spill reflexively.  The good news of it all is that this old code base (I use the term code VERY loosely) will be redesigned and re-implemented by me and I can guarantee (because I DO guarantee my work) that it will be faster, cleaner, easier-to-use, easier-to-upgrade (including maintenance) than the existing system and will be constructed in a considerably shorter period of time. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is times like these where I'm glad that these other places exist.  It is hard to not look good when everyone else is so hideously bad.  I just feel bad for the poor companies and individuals who utilise these companies' services. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;recent job, nasty code built hackish bit by bit, quickly&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;no comments&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;php (*the open source equivalent of Visual Basic*)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-475152453129571520?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2009/01/dealing-with-horrible-legacy-code.html' title='Dealing with Horrible Legacy Code'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/475152453129571520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=475152453129571520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/475152453129571520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/475152453129571520'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2009/01/dealing-with-horrible-legacy-code.html' title='Dealing with Horrible Legacy Code'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-7876666982488122030</id><published>2008-12-05T20:34:00.007-05:00</published><updated>2008-12-11T20:03:04.633-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='version control systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='Hg'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Planning'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Mercurial'/><title type='text'>New Projects &amp; Version Control Systems</title><content type='html'>It has been over a month and a half since my last entry and I apologise for the delay.  I have been working tirelessly to finish up my primary design, development, implementation and maintenance functions on what has been my primary project for the past thirteen months.  I've been doing this so that I may jump head first into my next project, which while not being a 'huge' undertaking is big enough.  By big enough I mean that doing well at the project will land me the role of redesigning a major site from the ground up into the Django framework.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;For the past 13 months I've been working heavily in the world of Django and find myself absolutely enamoured with it.  I have designed a considerable amount of applications for Django, though none of them are released to the world because they are the product of a contract.  My field of expertise was never in that of online applications and/or frameworks so it is stil a new world for me (if we exclude the nine years running a twelve line bulletin board system on a heavily modified Amiga).&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I've always been happiest working in middleware and engineering backend systems, though I have to say that I'm finding a certain level of pleasure from the results of my front-end work.  When i wrote backend systems, the only others who could appreciate said system(s) other than myself, were developers privy to the project.  On frontend systems, there are actual users who I would like to think 'benefit' from my designs and implementations. It is nice to know from actual users that your work is appreciated.  Call it ego stroking, or call it what you will but I find that it does inspire one to keep pressing on regardless.  I happy to be doing these projects and as soon as it is launched, I'll be happy to post about it here.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This brings me onto the second purpose of this entry, my new favourite version control system.  In the beginning of my experience using version control systems back in the 1990's, I simply used CVS like the rest of the world (sans those lucky enough to use Perforce).   As time and technologies advanced to newer and better systems, I followed along and moved up to Subversion.  Subversion was a well done upgrade for CVS users and easy enough for the uninitiated to learn.  I used this most recently when I did work for Curlington Boat Factory (name changed to project myself) writing their point-of-sale returns authorisation/queue system in Python for four hundred some odd cash registers.  This worked our quite well despite the fact that the software house for whom my partner (at the time) and I were contracting weren't able to provide the subversion server on their machines until we were &lt;sup&gt;7&lt;/sup&gt;/&lt;sub&gt;8&lt;/sub&gt;&lt;sup&gt;ths&lt;/sup&gt; of the way through said project.  We ended up (very early on mind you) taking matters into our own hands and setting up on my partner's server at his apartment.  This wasn't looked upon highly by said software house, but any CVS on any server regardless of not being in control of the software house was far better than no source control at all.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next we come to my brief stint working for a OCD kid who started his business at the right time with mom and dad's money, but due to poor decisions on his behalf watched it dwindle in popularity, further plagued by poor management and attempts to treat a small business as if it were a conglomerate thereby sealing its fate with a tender kiss on its cheek.  I thankfully left the company before the owner went psycho and let go of all the talent in a horribly vicious manner.  Before all of that ugliness transpired, I went forward with trying the newest and brightest trend in distributed version control.  I am speaking of the one and only 'Git', championed by a certain arrogant (albeit brilliant) Finnish kernel programmer.  There was an immediate joy in using Git and I have to say that most striking feature is the blazing speed when dealing with a large quantity of files.  I established all of the existing software base for said company (over ten years worth) into its first repository, utilising Git.  Yes, for over ten years, there was no VCS in place. Git really did shine in this role, though I am pretty sure that due to myself and the system administrator not longer being there, cob webs must be forming in the places where Git once speedily did its work.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;Let us fast forward to my newest discovery (if you can actually call it one as such).  On this newest project which I just started today full time, I have been doing administrative setup work for the past few weeks on and off in small gaps of time as they availed themselves to me.  The normal deal of establishing a dedicated server on a FreeBSD host (as Linux just will not cut it for me even though I've been using it since kernel v0.99d), along with all the necessary bits.  Once the development languages, utilities, database and web servers were in place the issue of VCS came into play.  For this time around I decided that Git, while great for many projects doesn't seem as pythonic a package as I'd like.  Using Python long enough really makes one desire beauty, power, simplicity and consistency in all of their tools.  This brings us to the most pythonic vcs of them all, Mercurial (known simply by its periodic table element, Hg).  Mercurial, like Git is also a distributed version (revision) control system.  Easy to setup, easy to use and highly recommended.  I'm not going to wax poetic about the differences between these systems as they all serve a purpose.  What I will do is state very clearly that Mercurial feels the most natural, works rather well and is quick at what it does.  Your mileage may vary.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Until next time...&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-7876666982488122030?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/12/new-projects-version-control-systems.html' title='New Projects &amp; Version Control Systems'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/7876666982488122030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=7876666982488122030' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7876666982488122030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7876666982488122030'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/12/new-projects-version-control-systems.html' title='New Projects &amp; Version Control Systems'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-5324352163215085344</id><published>2008-10-16T19:51:00.006-04:00</published><updated>2008-10-16T20:33:59.318-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Burlington Coat Factory'/><category scheme='http://www.blogger.com/atom/ns#' term='H-1B Visas'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='principles'/><category scheme='http://www.blogger.com/atom/ns#' term='Engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Ethics'/><title type='text'>Django Projects Galore and Vile Ethics of other Coding Firms..</title><content type='html'>It has happened yet again.  I've been brought on for another Django project.  This time it is about taking an existing site for yet another magazine publisher and converting their Wordpress driven site into a real full-blown site complete with blogs, forums, user profiles, dynamic main page content, complete customisation from within the framework and included applications and ultimately a site in which a developer is not needed for day to day changes.  &lt;br /&gt;&lt;br /&gt;As it exists, this publication is an off shoot of their primary magazine.  A magazine whose website was written and managed by an outside from that I believe coded the entire site so as to require additional invoicing and servicing for all but the most minute changes. This is a disgusting business model and one with which I've had the misfortune of experiencing whilst working as a sub-contractor to a sub-contractor for Burlington Coat Factory.   &lt;br /&gt;&lt;br /&gt;The H-1B Visa Project Manager who wasn't too fond of me because I don't believe that coding in dress attire and/or a tie makes someone a better worker (to the contrary, i will NOT wear dress attire for day to day work as it is a pointless expression of old brick-and-mortar mindsets).  He also was the first time that I was reprimanded for having an eloquent solution that adapted automatically to the growth needs of the end-clients database/system.  I wrote the software to handle dynamically gathering and sequencing additional 'like' fields as they were added to Burlington's transaction schema.  The way I designed and wrote the software, the MOMENT the schema changed, my software contributions would immediately include relevant changes, without a restart of any of the daemons I engineered.   I was told that the reason why i shouldn't have done this is because the sub-contractor for which i was writing this code could then go back and charge an exorbitant amount of money each time minor changes were made.  This disgusts me, and I find it ethically wrong.  &lt;br /&gt;&lt;br /&gt;I am an engineer and work independently by choice as I can first and foremost hold myself and solutions I produce, to higher standards; delivering what my clients want and need, not solely based upon what they say they want and most definitely not building them into a corner for profit over common decency and professional standards.&lt;br /&gt;&lt;br /&gt;Once the project has been completed, I will be quite happy to share the url(s) with CodeDEVL readers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-5324352163215085344?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/10/django-projects-galore-and-vile-ethics.html' title='Django Projects Galore and Vile Ethics of other Coding Firms..'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/5324352163215085344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=5324352163215085344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5324352163215085344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5324352163215085344'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/10/django-projects-galore-and-vile-ethics.html' title='Django Projects Galore and Vile Ethics of other Coding Firms..'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-8721216737702197475</id><published>2008-09-10T11:14:00.002-04:00</published><updated>2008-09-10T11:23:52.538-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Bicycling'/><category scheme='http://www.blogger.com/atom/ns#' term='Holovaty'/><category scheme='http://www.blogger.com/atom/ns#' term='Kaplan-Moss'/><category scheme='http://www.blogger.com/atom/ns#' term='Update'/><title type='text'>Django 1.0 has been Released, Film at 23:00.</title><content type='html'>I know that it has been a while since I have last posted, but I'm not one to post meaningless empty ramblings on a regular basis.  I just want people to know that I'm still alive and will still be posting when I have something worthy of your time.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will mention in brief that Django v1.0 has been released and we are all thankful to BDFL's Adrian Holovaty and Jacob Kaplan-Moss for their amazing efforts in making this release come to fruition.  I would also like to add that the biggest 'gotcha' between .96.x and 1.0 is in the standardisation of certain db api arguments.  maxlength has become (more aptly) max_length.  There is also now a DecimalField type which can be used rather than the less accurate (for monentary purposes) FloatField.   Read all about it at the &lt;a href="http://www.djangoproject.com/"&gt;Django Website&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, for those interested, I have also started another non-computer related blog over at &lt;a href="http://www.bucksbicycling.com"&gt;Bucks Bicycling&lt;/a&gt;, a site related to vehicular, commuter, recreational and sport cycling.  I'm currently working on a fixed gear conversion of an old cheapie AMF Roadmaster Scorcher as well as a 1985 Schwinn Sprint road bike.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will be posting shortly pending upon the official status of the newest Django 1.0 based project on which I've been secretly working.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Till then..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-8721216737702197475?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/8721216737702197475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=8721216737702197475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8721216737702197475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8721216737702197475'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/09/django-10-has-been-released-film-at.html' title='Django 1.0 has been Released, Film at 23:00.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-3407070988697446974</id><published>2008-07-18T12:46:00.004-04:00</published><updated>2008-07-18T13:40:29.948-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Solo'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Dark Back Room'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Quality'/><category scheme='http://www.blogger.com/atom/ns#' term='Methodology'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>In defence of the lone coder archetype</title><content type='html'>All too often these days we see companies and methodology evangelists touting the system du jour whether it be Extreme Programming (XP/Pair Programming), or Agile as being the "One True Path" to coding enlightenment.  All other be damned is roughly what said mantra translates to in common speak.  We're told to beware the engineer who works alone in a dark back room for weeks on end.  We're told to such a thing is heresy against the gods of modern application development.  &lt;div&gt;We're being lied to by the methodology evangelists.  I'm not here to down speak any of the other methodologies currently in use for software development.  I am here, however to point out the benefits of the 'lone engineer'  (not to be confused with the lone gunman).  Lets set a few things straight though. &lt;/div&gt;&lt;div&gt;A coder with little to no professional experience in the field is not the optimal individual for this kind of setup.  This is more for a seasoned professional who has at least been a team lead on several projects from conception through maintenance phases.  I'm not saying it isn't possible to pull it off without significant experience, but I wouldn't place bets on such an individual succeeding at the whole task at hand in said company.&lt;/div&gt;&lt;div&gt;This kind of environment requires a disciplined engineer.  We're talking about someone who knows the questions to ask, and how to dig deep to find the true needs of the client(s).  This also means that the engineer needs to stand his/her ground when it comes to setting a solid schedule for phases of the project(s).  There is room for variability in terms of time frames for each phase, but that the plan must be laid out in a linear fashion.  This is engineering after all, and one doesn't plan to build the rooms before the foundation is laid.  &lt;/div&gt;&lt;div&gt;Agile methodologies are more akin (though not parallel to) modular housing construction.  Individual sections or units can be build simultaneous and changed (to a certain extent) by separate sub-teams.  Whereas the lone engineer mentality is more akin to traditional construction in which the design is finalised, the foundation is laid and construction occurs in layers from the bottom up with customisations being generally last.  &lt;/div&gt;&lt;div&gt;This isn't to imply that software built in this manner cannot change or adapt in a timely manner, far from it.  Seasoned engineers/developers understand that the only true constant is change.  We constantly work on new ways in which to design flexibility and mutability into our systems regardless of the specifics.  This however just goes back to one of my earlier points in that this requires someone who isn't wet behind their ears.  You can only know and plan for the unexpected via flexible designs after having cut your teeth in real world projects, and by faltering.  Everyone makes mistakes, and it is through these mistakes that we grow and better ourselves.   I'm not implying that senior level engineers don't make mistakes, I'm just pointing out that their success to failure ratio is pretty strong in favour of the success side. &lt;/div&gt;&lt;div&gt;One of the key benefits of the lone engineer methodology is that focus can remain solid with no deviation due to intra-coder/intra-team conflicts.  And while this can at teams be a negative, overall it proves itself beneficial towards the ultimate goal, a finished software package/eco-system designed from the ground up to benefit the requisitioner(s)/client(s).  &lt;/div&gt;&lt;div&gt;The issues of coding standards still must be kept, however there is definite consistency when only one individual is involved.  This is also a liability as said engineer must have strict standards, commentary and documentation from beginning to end so that in case of any situation rending the engineer on the project incapacitated in any form, another could come in and continue with minimal delay.  These are issues which affect other methodologies, some more than others.  &lt;/div&gt;&lt;div&gt;There are downsides as well though.  There are no direct peers upon which one can depend in times of need or collaboration.  There are no peers to assist in code review sessions, meaning that the QA of any project must be proficient at testing, and enforce strict recursion testing when any changes are made to a product in production as QA becomes that final line of defence against human error.  The reality is, no usable (as in serves a real purpose) piece of software is bug free and to think otherwise is the sign of a fool.  What is realistic is having a system robust to handle errors when they occur, even if that is infinitesimally infrequent. &lt;/div&gt;&lt;div&gt;I'm getting off track here.  My point is that in this newer, more extreme era in which coding fundamentalists believe they possess the one-true-way of coding and all others be damned, we must step back and realise the grave miscalculation they are making so boldly.  After all, those methodologies weren't what were utilised to get us where we are today, nor were they even thought of when some of the staples of our art were invented.  This doesn't mean that the next great piece of software or language won't be produced in such a manner, as it/they may.  It means that we as professionals shouldn't be so narrow minded with tunnel vision when approaching different methodologies in an attempt to find which works best for the project/company/industry at hand.&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-3407070988697446974?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/07/in-defence-of-lone-coder-archetype.html' title='In defence of the lone coder archetype'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/3407070988697446974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=3407070988697446974' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3407070988697446974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3407070988697446974'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/07/in-defence-of-lone-coder-archetype.html' title='In defence of the lone coder archetype'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-390812468326512561</id><published>2008-06-26T21:37:00.004-04:00</published><updated>2008-06-26T22:08:40.820-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kaart'/><category scheme='http://www.blogger.com/atom/ns#' term='Alpha'/><category scheme='http://www.blogger.com/atom/ns#' term='Maps'/><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Metric'/><category scheme='http://www.blogger.com/atom/ns#' term='SimulaE'/><category scheme='http://www.blogger.com/atom/ns#' term='Cartography'/><category scheme='http://www.blogger.com/atom/ns#' term='Beta'/><category scheme='http://www.blogger.com/atom/ns#' term='Update'/><category scheme='http://www.blogger.com/atom/ns#' term='Coming Soon'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>SimulaE Cartography Program - simulae-kaart.py</title><content type='html'>As a quick follow up to the previous entry regarding rooms being a void and not an object, I can happily announce that the first working alpha of simulae-kaart has been committed to code this evening.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The function of this bit of code is simple:  Produce the necessary wall/barrier objects needed to create the voidspaces we call rooms.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The current working codebase does the following already:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;* Allow graphical design in a 2d environment utilising unicode representative tokens.&lt;/div&gt;&lt;div&gt;* Returns Multidimensional Lists designating literal start &amp;amp; end points of wall objects&lt;/div&gt;&lt;div&gt;* Allows for walls in traditional cardinal orientation (north-south, east-west, nw-se &amp;amp; ne-sw)&lt;/div&gt;&lt;div&gt;* Also allows for arbitrary wall/barrier positioning at any angle (true 360 degrees).&lt;/div&gt;&lt;div&gt;* Default scale based on cubic decimetres, variable scaling coming soon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Upcoming functionality to be added:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- Auto population of a given map grid&lt;/div&gt;&lt;div&gt;- Auto insertion of portal objects inside any giveen barrier/wall object.&lt;/div&gt;&lt;div&gt;- Automatic map scaling down to the smallest micro and largest macro levels&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Stay tuned for further information.  If anyone else is interested in signing up for future beta&lt;/div&gt;&lt;div&gt;testing, I can be reached at this domain, under the email account of eric. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-e&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-390812468326512561?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/06/simulae-cartography-program-simulae.html' title='SimulaE Cartography Program - simulae-kaart.py'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/390812468326512561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=390812468326512561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/390812468326512561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/390812468326512561'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/06/simulae-cartography-program-simulae.html' title='SimulaE Cartography Program - simulae-kaart.py'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-980714076527890939</id><published>2008-06-05T22:50:00.003-04:00</published><updated>2008-06-05T23:03:44.975-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Environment'/><category scheme='http://www.blogger.com/atom/ns#' term='SimulaE'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Objects'/><title type='text'>Simulae3 Update: Room Object? What ever do you mean?</title><content type='html'>This is just a simple, quick update to let it be known that the issue pertaining to how to accurately represent a room in Simulae3 has been resolved.  I spent about an hour with a blank book of graph paper and pen poised in my hand and thought about the problem till the following realisation hit me:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Rooms are an abstract, a void.  They only exist as a concept without substance to us.  They are the empty space created by barriers, some of those barriers contain portal objects (e.g. windows, doors, openings).  It is using this logic that the next piece of Simulae3 can be designed.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SimulaeKaart.py&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A simple cartography-based program (kaart) being the word for map in Nederlands (Dutch).  Physical space will be represented in 10 centimeter square grids (though variable map design may be possible).  The whole point of this is that in the real world, we use GPS and surveying to accurately place physical locations, Simulae3 will be no different. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other quick note is that the concept of rooms are also knocked out in that a room knows not of its purpose, it is only by human reasoning and deduction that a particular enclosure/void/"room"'s purpose can be ascertained.  If you take an empty house with two rooms near the room with the stove and dishwasher, how does one know which is the dining room (if either).  One doesn't, one chooses to assign that role by the placement of the appropriate objects (appropriate to a dining room that is) within said void. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Simply put, this conundrum has been resolved and the next phase of design and coding can continue.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-980714076527890939?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/06/simulae3-update-room-object-what-ever.html' title='Simulae3 Update: Room Object? What ever do you mean?'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/980714076527890939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=980714076527890939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/980714076527890939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/980714076527890939'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/06/simulae3-update-room-object-what-ever.html' title='Simulae3 Update: Room Object? What ever do you mean?'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-9040872776642385276</id><published>2008-05-28T00:22:00.004-04:00</published><updated>2008-05-28T01:11:56.497-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='words of advice'/><category scheme='http://www.blogger.com/atom/ns#' term='word of caution'/><category scheme='http://www.blogger.com/atom/ns#' term='suffering'/><category scheme='http://www.blogger.com/atom/ns#' term='common headaches'/><category scheme='http://www.blogger.com/atom/ns#' term='migraine'/><category scheme='http://www.blogger.com/atom/ns#' term='pain'/><category scheme='http://www.blogger.com/atom/ns#' term='medical'/><title type='text'>Migraines: A common misunderstanding</title><content type='html'>&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px; font-family:arial;font-size:12px;"&gt;&lt;a name="329" class="red" style="text-decoration: none; font-weight: bold; color: rgb(51, 102, 204); "&gt;&lt;b face="arial, verdana, sans-serif" size="12px" style="  color: rgb(51, 51, 51); line-height: 120%; "&gt;&lt;div class="black " face="arial, verdana, sans-serif" size="12px" style="  color: rgb(51, 51, 51); line-height: 120%; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Mi - graine: &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(n)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;A headache characterized by throbbing head pain, often greater on one side; may be preceded by a warning (aura) and accompanied by nausea, vomiting, and sensitivity to light and sound; in rare cases, weakness, language problems, or other neurologic disorders are associated with migraine.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Over my years of coding I've endured what I thought were migraine headaches, not uncommon to those of us who spend waking moment after waking moment staring at multiple screens as part of both work and hobby.  I say "thought" because up until this past weekend, I was sure that the harsher headaches I had endured qualified as the infamous 'migraine' variety.   I was wrong.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;On this past Saturday, I had the pleasure of seeing one of my best friends (and also my best man at my wedding) tie the knot with his sweetheart (both are coders by trade as a sidenote).  The day was perfect, the weather was wonderful (as it was an outdoor ceremony) and all was well in general.  I on the other hand aside from coping with sciatica down both sides of my body (a relapse of a previous L4/L5 left disc rotation), awoke with what I thought, was one of my annoying 'migraine' headaches.  I took Excedrin Migraine along with Vicodin for my other-pain and proceeded onto the wedding with my wife.  The headache didn't subside, regardless of a second round of 'migraine' strength medication.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The first lesson to be learned here is that Excedrin Migraine (I'm pretty sure any over the counter "migraine" medication as well) , while great for 'bad' headaches, is lightweight against 'textbook' migraines (more on this later).  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     After the wedding was over and we made the drive home (hellish for me as my headache seems to have grown from annoyance to throbbing), I started to feel dizzy with a bit of nausea, yet did not succumb to an involuntary protein spill thankfully.  I ended up retiring fairly early figuring that my 'migraine' was just particularly bad and was exacerbated by the fact that our table at the reception was next to the live band.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     Sunday morning arrived and that horrible headache was still present.  I took two vicodin and several aspirin in the hopes that it would finally kill the beast within but it was all for naught as much to my dismay, the headache only soldiered on.   I spent much of the day in a narcotic (vicodin) induced stopor in an attempt to mask the pain which was at this point pressing heavily on my head, and would remain this way the rest of the day into the evening when I retired early in an attempt to once again let tomorrow come without the now 36 hour headache.  Little did I know that this was about to get worse, much worse. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     Memorial Day arrived, complete with plans to go to my in-laws for a barbeque and family goodness.  04:00 on the clock and I arose from my sleep to the udder shock that the pain was not only existant, but worse.  I quickly (well, as quickly as I could) went downstairs to take three Advil (I was now out of Excedrin Migraine), and then return to bed, hoping this was finally the end.  The time was 08:00 according to the clock and I was expected to rise.  Problems.  The headache was still there, and it was rather angry with me.  Outside of glancing to see that it indeed was 08:00, I had to keep my eyes shut, the dizzy feelings, nausea and pain from the light (through the blinds, mind you) was unbearable.  It felt as if my head had been mounted between the the grips on a vise.  I at this point, took the decidedly un-male action and asked my lovely wife (and child) to get me to the Doylestown Hospital Emergency Room.  Something was obviously wrong and I was quite worried, not to mention blinded by the pain.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     After what seemed like an hour (when in reality it was half of that), I entered the ER and was promptly thrown in a wheelchair, tagged and admitted to ER room #5.  At this point the pain caused me to writhe in pain in my open-backed hospital gown in my new metal bed.  Another 10 minutes came and went, along with an increase in the pain until one of the nice ER nurses (and a doctor I believe) tapped my arm to place an IV line, which was utilised shortly thereafter to inject a medication (a narcotic of which I'd never heard) that immediately overpowered the pain with a feeling of numbness.  This enabled me to speak somewhat lucidly to several nurses as well as a doctor about all of the aforementioned backstory leading up to this point.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     First comes the catscan at this point to check for abnormalities.  None found.  Then the blood tests, no oddities either.  ER Doctor then comes to the conclusion that a LP (Lumbar Puncture) was the next logical step.  I consented, though it was not to be, after a considerable number of jabs and sharp pains, said doctor gave up and contacted a Neurologist who would come in later to do said LP.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);   line-height: 14px; -webkit-border-horizontal-spacing: 20px; -webkit-border-vertical-spacing: 20px;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     The pain started to return and I was given another dose of said magic narcotic.  All remained well for another 90 minutes or so (at this point, I've been in ER room #5 for approximately 6 hours).   During this time the Neurologist arrived and I spoke with him and allow him to have a crack at a lumbar puncture.  Needless to say he was an expert at this procedure and was able to withdrawal 4 vials of the clear &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);  line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;cerebrospinal fluid from my spinal column.  He then surreptitiously disappeared for what seemed like hours.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;    It was at this point, my pain surprisingly started to return, first on the right side of my head, but then started to migrate over to my left side as well.  The pain became so severe that I could tell that the lights were on in the next room over (separated by a curtain), even though I had a folded over pillow case upon my eyes, with my hand over that.  The lights in my room had been out since my arrival as they were painful, even with my eyes shut.  I felt as if I were going to tear the metal sides of my bed clear off.  I suffered like this for another 60 or so minutes as we were awaiting the results of the spinal fluid from the lumbar puncture, and it was already stated that I was given an extraordinarily large amount of narcotics already and they worried about providing anymore until they knew more about the cause of my pain.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     After all was said and done, I was told that this whole episode of the worst head pain in my life, was a 'real' migraine.  I was told that they would provide me some additional medication intravenously before being discharged which would 'kill the headache' this time.  I was also being given more subscriptions, one for vicodin (as if I didn't have enough for my back pain, which I already try to avoid using), but a medication which i had never heard of before, specifically meant to stop migraines at their onset.  That final migraine killing injection came, along with a complimentary spewing of my stomach contents shortly thereafter and I was on my way to being released.  I was informed by the doctors that there were a few things I could do to keep migraines at bay aside from the medication provided.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Caffeine, Caffeine, Lots of Fluids, and of course, more Caffeine."&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  font-style: italic; font-weight: bold;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     I'm thankful to all of the wonderful nurses, doctors and specialists who provided help to me after suffering what ultimately will be remembered and hereafter referenced by me as the 60-hour migraine.  I will never use the term "migraine" mistakenly to mean a "severe" or "bad" headache as they not only aren't in the same ballpark, they're not in the same league, region or country.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     I decided to share this with everyone in the coding community because I'm sadly sure that this will happen (if it hasn't already happened to some of you) again, and to others.  I hope that having read this, those who find themselves suffering one of these 16 tonne behemoths will not wait an exorbitante amount of time before doing exactly that which I did, contact professional medical help as quickly as possible.  No one should have to suffer that kind of pain any longer than it takes to realise what said pain was; that being a 'real' migraine.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     Wishing everyone good health.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Eric&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-9040872776642385276?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/05/migraines-common-misunderstanding.html' title='Migraines: A common misunderstanding'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/9040872776642385276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=9040872776642385276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/9040872776642385276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/9040872776642385276'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/05/migraines-common-misunderstanding.html' title='Migraines: A common misunderstanding'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-4997935357038877670</id><published>2008-05-21T00:34:00.004-04:00</published><updated>2008-05-21T01:26:38.467-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='socratic method'/><category scheme='http://www.blogger.com/atom/ns#' term='SimulaE'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Sciatica'/><category scheme='http://www.blogger.com/atom/ns#' term='Vicodin'/><category scheme='http://www.blogger.com/atom/ns#' term='Parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Simulae3: A Testament to Socratic Design.</title><content type='html'>&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Socratic Method: &lt;/span&gt;the pedagogical technique of asking leading questions to stimulate rational thinking and illuminate ideas.&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I first started working on SimulaE (long before it was even referred to by the aforementioned name), it was a solo project.  This isn't to say that I haven't written all of the code from day one to this very moment, because I have.  I can however say that the design portion of its various incarnations wouldn't have evolved in the manner which they did were it not for the diligent use of the Socratic Method.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My earliest versions of designing the Simulae virtual world simulation suite of libraries and what not were designed and written by me in response to the original interactive fiction/text adventure engines, then consequentially MUDs (Multi User Dungeons).   The proof of concept of building a better designed mousetrap was simple enough to bring to fruition.  This took place over years, dependent upon my free time and interest in furthering what was simply a flight of fancy for me from my programming youth and Zork playing escapades. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What really became apparent was when I worked for another company and had the pleasure to work with a very intelligent individual by the name of Tim.  He is a systems/network administrator as well as a capable coder though the latter is not his primary goal, nor role professionally.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tim was interested in my Simulae project and as such I found a kindred spirit through whom I could interact by applying the aforementioned Socratic Method.  Through a constant back and forth barrage of theories and examples along with postulates about the hows and why virtual components modeled after reality need to be viewed in a certain light, we would come up with a whole new understanding about the direction of the project.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was during this time initially working together that the present tense English Parser component (parser.py) came to be realised and produced.  It took a total of seven point-releases to go from simple noun verb understanding to parsing complex compound sentences with a massive understanding of 45,000 adjectives, 9,500 verbs and multitudes on various parts of English speech.  This series of productive success if anything re-enforced the validity of this methodology in the realm of software design. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is now though, with this in mind that I have taken utilising this method to the next level and enacting it with completely uninvolved individuals (uninvolved in the sense of the projects topic and internals).  In the past several days Simulae3 has emerged from the bowels of my TextMate application.  The code is simple, shorter and far more capable than any previous incarnation and things are moving forward at a great clip.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This brings me to the current point of interest and a call for assistance for anyone willing to get into sometimes heated dialogue about object models.  The object model system is based around the three basic SimulaeObject types.  The only piece of the puzzle still causing an issue is the matter of Portal Objects (entranceways between other container type objects.)  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For the sake of argument, just look at it this way:  A room is a container, that leads from one room to other rooms of 'greater' building enclosure.  A set of lips in a Mobile Object (hereafter MOB) (e.g. 'actor' in OO/UML terminology) is simply a Portal Object to the mouth of said MOB.  A window is simply a portal between the outside 'container' object (in this case a root SimulaeObject), and the room in which our Actor/MOB would be in (to see said POB destination from said perspective).  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I need others with whom I would be able to work out ideas so that this conundrum can be resolved and the next phase of Simulae can come about for code release and testing.  If anyone is interested, contact me at this domain via my email address: eric&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am going to finish on that note being that due to medical reasons dealing with my sciatica, I ingested a full dosage of two Vicodin tablets (as per my primary physician), and as such I'm getting ready to crash hard.   I hope to hear from some of you in the hopes of moving forward, but I'd like for Tim to give me a call in any case so that I we can bounce some ideas back and forth on these issues.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-4997935357038877670?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/05/simulae3-testament-to-socratic-design.html' title='Simulae3: A Testament to Socratic Design.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/4997935357038877670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=4997935357038877670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4997935357038877670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4997935357038877670'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/05/simulae3-testament-to-socratic-design.html' title='Simulae3: A Testament to Socratic Design.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-1912768516556216169</id><published>2008-04-27T22:10:00.003-04:00</published><updated>2008-04-27T23:09:28.234-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='SimulaE'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Objects'/><category scheme='http://www.blogger.com/atom/ns#' term='Algorithms'/><title type='text'>SimulaE - Model Update</title><content type='html'>I've made mention of my virtual world simulation project on multiple blog entries, most recently related to Ruby and making a rewrite of the existing engine in said language to test out its applicability (the language not the simulation), which by the way I found to be the lesser language for this kind of application, but I'm not saying anything about the language as a whole.  Either way, onto SimulaE, which after all is what this post is about today.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have been rattling my brains (and occasionally those of my friends) regarding the basic SimulaE Object model, which up to this point has served its purpose.  Though the time has come for it to evolve.  It can implemented in a simpler manner and I have known this in my mind all along though it hasn't been an issue in the process of designing the parser which has for the most part been satisfactorily completed. Now that my focus has returned to the object model, I feel it a fine time to share that update thus far.  Comments are always welcome and most are appreciated.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The fault before was that I broke the objects into the wrong sub classes.  Originally I had the parent Object class,  and subclasses for Room objects, Exist Objects and Person Objects.  This is a horrible idea and leads to unnecessary complexity.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The newest model:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Object (super class)&lt;/div&gt;&lt;div&gt;MovableObject (isa Object)&lt;/div&gt;&lt;div&gt;PortalObject (isa Object, isnota MovableObject)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PortalObjects, hereafter POB are a much more dynamic version of the previous "room" objects.   A POB behaves in the following manner(s):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Object(s) enter into the object containing said portal.&lt;/div&gt;&lt;div&gt;2. Exits an object when contained therein.&lt;/div&gt;&lt;div&gt;3. Can exit (when specified) to a specific object, though by default exists to the parent container object.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If a MovableObject, hereafter MOB, &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;is not&lt;/span&gt; contained within the same container as the POB, POB leads into the container.  &lt;/div&gt;&lt;div&gt;If the MOB &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;is&lt;/span&gt; contained within the same container as the POB, POB leads out of the container.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By working in this manner, we ensure that the simulation object model more closely mimics the real world, whilst still allowing for exceptions to transpire for non-real world based applications of this group of models as well as anything they may be working on at CERN in Switzerland which breaks our current understanding of physics. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I haven't had time to implement this new set of models yet, but as I write that code, I will be posting the revised Python source.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-1912768516556216169?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/04/simulae-model-update.html' title='SimulaE - Model Update'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/1912768516556216169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=1912768516556216169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1912768516556216169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1912768516556216169'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/04/simulae-model-update.html' title='SimulaE - Model Update'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-5242225654616325438</id><published>2008-02-24T23:44:00.004-05:00</published><updated>2008-02-25T00:54:41.028-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='Post Compilation Dynamics'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Evaluation'/><title type='text'>Quick Django Tip: Dynamic Application Object Retrieval</title><content type='html'>In my recent django adventures I needed to introduce site-wide search functionality and in the process of doing so, encountered a small roadblock towards doing so.  Apparently due to the nature of Django's API for db interaction (as of the last stable release version), there is a limitation as to the use of python variables in API calls.  I found this to be a hinderance, but only for so long.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The follow code snippet was something I whipped together which by utilising Python's 'eval' built-in, overcame the aforementioned limitation regarding the API's ability to interpolate native Python (e.g. non-django explicit) varaibles.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Things to know to understand the following example:  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;search_input&lt;/span&gt; is a list of cleaned and pre-processed user-driven terms, split into separate expressions, (e.g. ["dynamic langauge", "agile", "programming", "paradigm"]). &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;search_schema&lt;/span&gt; is a dictionary in which the key is the django model/class through whose objects we are attempting to search, and the value is a list of specific model attributes to attempt said search.  (e.g.   User_Profile : ['firstname' , 'lastname', 'address_1', 'bio_info', 'favourite_books'])&lt;br /&gt;&lt;div align="left" width="90%"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" width="90%"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;container_xref&lt;/span&gt; is a simple alias mapping for the actual django application names to our internal references inside this search code base.  Obviously this whole bit could be written without said setup, but for readability given the scope of the actual application involved, and the fact that I was not searching simply a few static fields in one django application, but several dozen fields through about two dozen separate applications, this container_xref dict was appropriate.   It is through this mapping dict which we place any matched object results (so as to not waste any additional space via unnecessary list initialisations.) for eventual results generation.&lt;/div&gt;&lt;div align="left" width="90%"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" width="90%"&gt;Note: the key "total_results" in the container_xref was a simple means of keeping track of overall search matches, rather than relying upon the Django templating engine (view) from doing work responsible from the processing (controller) perspective.  In retrospect, there are better ways this could have been handled, and in future point revisions, this will be addressed.&lt;/div&gt;&lt;div align="left" width="90%"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" width="90%"&gt;------&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;for search_string in search_input:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  for application in search_schema.keys():&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;    for attribute in search_schema[application]:&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;code_to_eval = "%s.objects.filter( %s__icontains='%s' ).order_by('-id')" %       &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;                     (str(application), str(attribute), str(search_string))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;        try:&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;          eval_results = eval(code_to_eval)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;          for eval_result in eval_results:&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;            if eval_result not in container_xref[application]:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;              container_xref[application].append(eval_result)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;              container_xref['total_results'] += 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;        except Exception:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;    ### Case specific exception handler types, assignments and resultant actions &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;          ### specific to each application in which the above is implemented, go here.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left" width="90%"&gt;-----&lt;/div&gt;&lt;div align="left" width="90%"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/code&gt;&lt;div align="left" width="90%"&gt;As can be seen from the above, simple inline substitution proceeded by evaluation of said string results in post-compilation dynamic search functionalities within django, addressing simple problems one might run into with the existing API which will most likely be addressed in future versions.  &lt;/div&gt;&lt;div align="left" width="90%"&gt;&lt;br /&gt;&lt;/div&gt;Your results may vary.&lt;/div&gt;&lt;div align="left" width="90%"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" width="90%"&gt;Eric&lt;br /&gt;&lt;/div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-5242225654616325438?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/02/quick-django-tip-dynamic-application.html' title='Quick Django Tip: Dynamic Application Object Retrieval'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/5242225654616325438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=5242225654616325438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5242225654616325438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5242225654616325438'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/02/quick-django-tip-dynamic-application.html' title='Quick Django Tip: Dynamic Application Object Retrieval'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-526759140508954798</id><published>2008-02-19T13:51:00.006-05:00</published><updated>2008-02-20T12:35:41.644-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Guido van Rossum'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Matz'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='Engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Objects'/><category scheme='http://www.blogger.com/atom/ns#' term='Static Typing'/><title type='text'>Ruby: Somehow I overlooked this Gem of a Language</title><content type='html'>About 5 years ago I started looking into a language that prior to it's "Rails" fame, was lesser known and even lesser utilised.  I tried it a bit and found it leaving me wanting more.  I've kept tabs on it over the years, reading the tutorials and writing several quasi-AI experimental applications for my SimulaE research, but I ended up being enticed by Python, a language which I stand by, including the wonderful (but until recently unused by me) framework Django (Python's Rail's equivalent, focused on Publishing).   &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've programmed professionally using Python for several contracts/years now and find it quite enjoyable.  In fact, I'm currently coding specifically in Python for Inkedmagonline.com, but that doesn't mean that I don't continue my personal exploration and education for both personal and professional reasons.  I decided to re-experience Ruby by picking up the hallowed PickAxe book and giving it another honest chance.  I'm glad I did.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I believe that Python, and the values espoused in Tim Peter's "De Zen van Python" (The Zen of Python) (my copy just happens to be in Dutch, otherwise I'd post it for others) have helped me to look at Ruby in a different light.  There are some key differences in the two languages, but I can see now the inherent power in Ruby that I was overlooking before.  In fact, some of those key pieces, syntactically as they were which make Ruby so enticing this time around are the very same 'features' I feel are missing in Python.  It only took me working in an environment with situations where said language features would prove the best solution to the problem(s) on hand for me to realise it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am not going to spend time detailing all of the specifics, though I may mention one or two nonetheless.  I'm more so bringing this point up so that others might be reminded that giving something new a single chance might be to your own disadvantage.  After all, I didn't like Python the first time I tried it either.  I think it is partially a matter of how we grow as developers that allow us to know what we're missing, that same spark of realisation that gives us the "a ha" of relief when we find it hiding in a new language, programming methodology, etc.  &lt;/div&gt;&lt;div&gt;What brought me back to looking into Ruby a second time is of all things, Smalltalk.  The whole "everything is an object" concept is nothing new to me, or to programming languages.  However in dynamic strongly typed languages, it is.  More importantly is manner of how even rudimentary objects such as integers, floats and strings are treated in Ruby.  They have methods which can be both called using the standard instance.methodname call format, and have their standard methods overridden.  The second being something far more wonky and kludgy in Python (and a non-option in perl).  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The fact that key methods are instance based such as "len" or "length" for example makes a world of difference for consistency.  It speaks to the overall design that "Matz" (Yukihiro Matsumoto creator of Ruby) had in mind during the planning phase.  In Python, a language in which everything is truly an object as well, this starts to get rather confusing.  While Python does treat every integer and string as an object, it mixes the traditional functional paradigm for calling items such as 'len' so that to find the value of 'a', one would type len(a), as opposed to the more object based a.len ..  This seems counter-intuitive and quite frankly a real surprise when you look at the overall design of Python.&lt;span class="Apple-style-span"  style=" ;font-family:arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm not ripping on Python as I do wholeheartedly enjoy the language, I'm just starting to feel aches and pains over decisions which are ingrained into the language, as well as not being seen as an issue or being addressed in py3k (or Python 3000/Python v3.0) as it were.  I just think that my eyes have been opened to Ruby again and I like what I'm seeing.  I am actively looking to find a future professionally as it were utilising it as nothing beats having fun while accomplishing what one would hope accounts to 'great' things.  We'll see what the future holds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next Step:  Migrate my SimulaE virtual world/real model object simulation from Python into Ruby as a test run.  Lather, rinse, repeat and then see what the side-by-side comparison's look like.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Until next time...&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-526759140508954798?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/02/ruby-somehow-i-overlooked-this-gem-of.html' title='Ruby: Somehow I overlooked this Gem of a Language'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/526759140508954798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=526759140508954798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/526759140508954798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/526759140508954798'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/02/ruby-somehow-i-overlooked-this-gem-of.html' title='Ruby: Somehow I overlooked this Gem of a Language'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-5261356671387417914</id><published>2008-02-05T21:02:00.000-05:00</published><updated>2008-02-05T22:32:28.066-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rapid Application Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Website Design'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Functional Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='contracting'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic Typing'/><category scheme='http://www.blogger.com/atom/ns#' term='Engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><category scheme='http://www.blogger.com/atom/ns#' term='Static Typing'/><category scheme='http://www.blogger.com/atom/ns#' term='Salaried'/><title type='text'>The Importance of Being Challenged</title><content type='html'>In this most recent engineering, architecting and development endeavour which I simply refer to as my "job" or "contract", I have come to some conclusions which I feel require sharing.  I'll be very straightforward so as to not waste certain readers' time.  Many of the more seasoned lifetime coders will know (and have experienced many times over) that which I am writing about, which can be summed up as such:  If you are not being constantly challenged, you are atrophying as a developer.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I often write about my own experiences as I know them better than any single other developers experience(s).  This is not because I feel that I'm the end all be all of coders.  Far from it, I do feel that I'm good at what I do, however I prefer to look at my writings as a form of navel gazing, a self-reflective ascertaining how I can better grow in my art and profession.  It is exactly the same manner in which I'm going to proceed regarding today's message.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I have mentioned, I have most recently jumped into a contract situation at the personal request of a rather successful life-long entrepreneur and given that the opportunity sounded rather interesting, I turned down a salaried position worth almost double because the challenge that was proposed.  Please don't get me wrong, I took a position fixing a half-assed php open-source hot or not style rating system because the employee responsible by no fault of his own necessarily, and due to a lack of a sense of urgency was unable to get a system such as that prescribed, in place by a contractual client deadline.  This was not the reason I took the contract, whilst simultaneously being precisely why I took the contract. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm not a fan of php, and most definitely not a fan of a vast majority of already written php applications open source or otherwise.  What I am referring to more so is that I was brough into an environment where it wasn't the same old same old.  Now I wouldn't have stayed were the job going to continually require php specifically just out of my distaste of said language.   I did know that while I don't consider myself a web developer, I would be required on more than one occasion to work on web applications.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These weren't to all be simple ones either, any moderately proficient web developer and non-web developer alike could figure a good many of these solutions out.   What really did it for me was that I would be required to not only work under a fairly frequent set of short deadlines due to the nature of the publishing industry as well as the time frame required to keep the site and features current.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The importance of all off these ramblings is this simple point.  Being experienced and disciplined as a Software Engineer/Developer/Architect, etc. ad nauseam helps me to know 'what' I need to do, and gives me insight as to how I might go about solving an issue.  It is however, the actual specifics which put those tidbits of understanding and knowledge into play which go outside a given comfort zone.  It is only then, when we find ourselves in unfamiliar territory, under threat of tight deadlines coupled with our own personal desires to do our best and produce code to which we are proud to associate our name.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know that earlier in my career there were times (albeit very few, which I can honestly say) that I too fell into this 'comfort zone'.  I found out though, that this comfort zone is boring and causes one to stagnate.  We code because we love it.  Coding and problem solving is in our blood, and in our hearts.  It is how we look at the world and as such isn't something from which we can remove ourselves.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you only know low-level languages, learn a high level language.  If you only work in functional programming paradigms, learn object or aspect oriented ones.  If you only work with interpreted languages, learn compiled langauges, etc.  I'm not saying give up your current lingua franca, I'm simply saying expand your horizons.  The more ways you have of looking at, describing and ultimately understanding a given problem, the more ways you have to solve said problem.  This doesn't solely benefit you, it benefits everyone for whom your code will be written and utilised. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You knowledge needs to be a living, dynamic pool of information, not a static, never changing one and the way to ensure that is to aggressively fight off the status quo.  Be aggressive, absorb all that you can.  The best way to do this isn't by dipping your toes into the shallow end of the kiddie pool, it is accomplished by putting on your goggles and climbing that high dive, plunging in head first.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Take a chance for once, you might just learn something.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Till next time..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-5261356671387417914?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/02/importance-of-being-challenged.html' title='The Importance of Being Challenged'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/5261356671387417914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=5261356671387417914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5261356671387417914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5261356671387417914'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/02/importance-of-being-challenged.html' title='The Importance of Being Challenged'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-7496407893712153717</id><published>2008-01-29T22:55:00.001-05:00</published><updated>2008-02-20T12:24:54.314-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='failed language implementation'/><category scheme='http://www.blogger.com/atom/ns#' term='Scheme'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='Robert Morris'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Paul Graham'/><category scheme='http://www.blogger.com/atom/ns#' term='Arc'/><title type='text'>Arc: An evolution of Lisp/Scheme, or a outdated implementation at launch.</title><content type='html'>So the day has finally come in which prolific geek &amp;amp; insightful essayist Paul Graham along with Robert Morris released Arc, their evolutionary love child of Lisp &amp;amp; Scheme.  I think it is safe to say that many of us have (and will continue to) read Paul's wonderful essays on a multitude of geek and coder centric topics, and generally with much joy and agreement.   Many of us have been following the work that Graham and Morris have been undertaking with the new baby "Arc". &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now that this day has arrived, we can see that it wasn't as deserving of all the pomp and circumstance to which we were planning for it to be attributed.  Seems that there are a considerable amount of deficiencies and intentional short comings to the language.  Normally this wouldn't be seen as anything out of the ordinary for a 'new' language, and would be generally a non-issue.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The problem is that this is the year 2008 and people have come to expect more from their languages.  Ignoring established standards along with ignoring the need for designing to meet the needs of developers globally all the while using the cop-out of it being purely for exploratory programming is just bad form.   &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The world doesn't need another Lisp, the original is wonderful just as it is, that's part of its beauty.  I don't see anything in Arc that couldn't be done as functions and/or macros in Lisp that required the entire 'creation' of a new language.  The way I see it is this; for prototyping as well as production usage we already have several languages that excel in those domains, specifically Lisp and Python.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Generally the idea of rewriting existing languages with little difference from their predecessor(s) is a waste of time and effort which could've been better spent elsewhere.   There are exceptions to this scenario such as that of Ruby.  It is a language that in the past I used to dislike because of certain key flexibilities much akin to the reasons for spaghetti perl, but it successfully fixes many of perl's wrongs, and corrects some of Pythons short comings as well.  It serves serves enough of a purpose as that of supplanting perl with a better thought out design, and thanks to Rails, its future looks solid.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Arc on the other hand is like a still born fetus.  Much was expected and there was potential to be just like its parent(s), but death was announced during a delayed delivery and upon further examination, it was discovered that it wasn't a proper offspring, but a clone in fetal form.  My advice to Paul and Robert is the following:  recall the release, and make it truly something worthy of release, with proper compatibility and compliance with modern norms.  Make it usable to others as opposed to just a few tinkerers interested more in lisp and scheme basics. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An on a more pleasant note to Paul;  Please keep on writing your essays and providing your viewpoints as they are appreciated, I just wish that your judgement call in the case of 'Arc' was as well thought out as your writings have proven to be over time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-7496407893712153717?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/01/arc-evolution-of-lispscheme-or-outdated.html' title='Arc: An evolution of Lisp/Scheme, or a outdated implementation at launch.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/7496407893712153717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=7496407893712153717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7496407893712153717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7496407893712153717'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/01/arc-evolution-of-lispscheme-or-outdated.html' title='Arc: An evolution of Lisp/Scheme, or a outdated implementation at launch.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6707354981840051615</id><published>2008-01-04T14:13:00.001-05:00</published><updated>2008-02-20T12:27:28.687-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Joomla'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='Inked Magazine'/><title type='text'>The New Django Powered Inked Magazine Website is Up!</title><content type='html'>&lt;div&gt;This will be rather brief as it is more of an announcement than one of my more traditional journal entries. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;After a  short two or so months from start to finish, I have successfully setup my first Django powered website.  &lt;a href="http://www.inkedmagonline.com/"&gt;Inked Magazine&lt;/a&gt; has been relaunched effective January 2nd, 2008.  This replaces the Joomla powered site which existed prior to both myself and the current ownership of the magazine were involved in the project.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Phase one has been completed, with extras.  The customer photo galleries, the cover photo application, the user profile system as well as the main magazine feature areas have been established and are active.  As of today, I will have available for all registered users the ability to host a blog on our site (using our software which I wrote in a few days), mind you it is still early in the feature process, though it without doubt serves most blog authors needs.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will be adding features as time progresses, but until mid-January 2008, I'm on a tight schedule to build the entire forum application so that the beginning of the "New and Improved" Inked Network can go live.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don't think one needs Ruby on Rails when you have Django.  Much of the same great functionality and without having to use Ruby all the while using Python.  [Update: After having revisited Ruby as a language on its own, sans Rails notoriety, I've found that my previous assertions regarding Rails specifically was unwarranted.  It simply took my experiences with Django and Python to make Ruby and Rails far clearer to me.]&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will return to my normal posting after the Forum application is up and running.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Till then, keep on coding.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6707354981840051615?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2008/01/new-django-powered-inked-magazine.html' title='The New Django Powered Inked Magazine Website is Up!'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6707354981840051615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6707354981840051615' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6707354981840051615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6707354981840051615'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2008/01/new-django-powered-inked-magazine.html' title='The New Django Powered Inked Magazine Website is Up!'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-8695279349246299316</id><published>2007-12-31T21:43:00.000-05:00</published><updated>2008-01-04T14:24:26.455-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='self-review'/><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='contracting'/><category scheme='http://www.blogger.com/atom/ns#' term='weaknesses'/><category scheme='http://www.blogger.com/atom/ns#' term='divination'/><category scheme='http://www.blogger.com/atom/ns#' term='strengths'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='colleauges'/><category scheme='http://www.blogger.com/atom/ns#' term='self-employed'/><title type='text'>Reflections on 2007, Looking forward to 2008</title><content type='html'>Given that it is nary a few minutes past 22:00 on the east coast of North America, I figure it is time for one of 'those' looking back and looking forward type posts, but with a codedevl slant.  This past year has been a rather bizarre one as it marks the first year of my professional career (over 13 years) in which I've been employed by more than two firms/companies.  I mean technically I've only been employed by one firm, the time prior and currently I've been self-employed, so does it count?&lt;br /&gt; &lt;br /&gt;   While this isn't necessarily an issue for many others out there, it was a point of concern for me as I have been traditionally conservative in my career moves and choices.  It isn't as if I'd suddenly threw caution to the wind and job hopped.  I will say that it was all thanks to the federal government for starting the ball rolling over a year ago when they raided the offices of a previous employer due to nefarious actions of several of their customers (unbeknownst to any of us at the time).  The government claims it wasn't a raid but a search and seizure.  As far as I know, that is classified as a raid, more so because the agents were wearing bullet proof vests with guns drawn..  all three dozen of them.&lt;br /&gt;&lt;br /&gt;   I've started to obvious stray from the where I was going.  Simply put I found myself working with a skeleton crew at a company for an additional five months while legally being unable to process our normal transactions, hence no hope of future work.  The warnings started coming and as such, the few of us which remained knew the end was near so we all started prepping for the day when it would all come crashing to an end, an end to a wonderful half decade as a working family as it were.  It took less than a week for me to land a new gig working on a project for Burlington Coat Factory and previously mentioned in a previous entry.  I do have to say that I grew more as a software engineer during that first jump into contracting than I had in many of the prior years, including my time as team lead, department lead and CTO.&lt;br /&gt;&lt;br /&gt;   I brought all of this us because it lead to how I started out the year of 2007.  I was finishing up my contract having successfully deployed the new point of sale returned goods system for Burlington's stores nationally.  I knew when my last day would be and started to look for interesting jobs, but preferably salaried ones, which I found without trouble, so much to the point that I finished my contract on a Friday and started my next job with Blue Gravity Communications, Inc. the following Monday.  As that saga has also come and gone (by my own choice), many things have changed, primarily my outlook on contracting vs. salaried employment, my work environment and my work ethic.&lt;br /&gt;&lt;br /&gt;   I found that there really isn't a major difference between salaried employment and contract employment, other than the 'false sense' of security in a salaried job.  The reality of it is that one can be let-go from a salaried position very easliy, unless you're in Nederland, France, Denmark, Sweden or Norway (and a few others I'm sure I forgot).  The overall benefits of being self-employed become clear rather quickly once the newness of contracting fades away.  You have more responsibility, and more freedom.&lt;br /&gt;&lt;br /&gt;   You work harder to prove and build and/or strengthen your reputation, and don't mind it.  You have flexible hours (at least in my case and/or other cases where on-site 9-5 is not required, which is a pretty common flexibility.  You don't have to deal with as many managers or supervisors.  You don't have to stress over working with a certain group of people forever.  You are able to work multiple clients simultaneously (as much as you can personally handle), and finally, you truly have more control over yourself and your future than ever afforded in a salaried position.&lt;br /&gt;&lt;br /&gt;   My environment was always a sticking point throughout my various locales of employment, ranging from a room full of others in a different department, a room full of peers, a room full of subordinates (though I hate the term, being very much an egalitarian), and of course, in a room all by my lonesome.  I worked many of my years in a solitary environment, for a full time employer and as such had plenty of human interaction.  Yet during those years I yearned for more interaction, a room in which I could openly be around others.  I finally got my chance when I became CTO and Development Lead at one company.  I was able to secure an open office with no partitions and a relaxed layout.&lt;br /&gt;&lt;br /&gt;   This proved to be an enjoyable environment, but I found later on that it didn't allow me to produce my best work.  Separating myself from the others didn't do much to help either.  It was only when I worked as a contractor for my first time that I started to realise what my environmental needs are.  I returned into the salaried world and worked side by side with some great people,  even entering into the halls of foosball with one of my aforementioned peers.  It was only after I re-entered the realm of self-employment contracting for Pinchazo Publishing Group, Inc. (owners of Nylon and Inked magazines most notably), that I setup my home office an came to terms with a new reality.&lt;br /&gt;&lt;br /&gt;   I work best, in my home office, alone with minimal contact from others with the exception being my request to speak with others over designs or processes changes in order to meet project/structural demands.   I do enjoy the company of others but know that I work more diligently, more exacting and am ultimately more focused when in my own space.  I did find however that this new environment does have its perks, one of those being flexible time to meet up with peers and past co-workers for quality time.&lt;br /&gt;&lt;br /&gt;   This leads me to my final point of realisation.  My work ethic has changed dramatically for the best.  To be honest I found that I was too easily distracted in other environments when a salaried employee.  I had far less "in-the-zone" moments when in a workplace, and on someone else's payroll.  Again I think this is due to distraction and a certain level of security (a false one at that).  I'm not particularly fond of making this public admission, but at least I've recognised it and willingly state it for the record.  I know what I need to be the best that I can, producing the best work of which I'm capable.  Now that my reputation and future prospects rely mostly  upon my current projects and the manner in which they are complete, it makes me stay more focused and on task.&lt;br /&gt;&lt;br /&gt;   I also must say that due to the lowered stress in my career at this juncture in time, I am able to enjoy my art/trade for more than ever before.  When one couples that feeling of relief along with my combined experiences, gained knowledge and wisdom (or lack thereof at times), caring becomes a top priority.  I care about my work, and I strive to produce the best that I can.  I own the process, the engineering, the schedule and the maintenance and as such demand of myself nothing but my best, and I love every moment of it now.   I know what I'm worth now, and I know what my code and expertise are worth and what it takes to ensure that I'm operating at my best.&lt;br /&gt;&lt;br /&gt;    Finally, this brings me onto my outlook for the upcoming year.  Hopefully, much of the same and barring any catastrophes, I see a very promising future ahead with the current outfit for which I'm contracting.  The work is exciting, doing things the right way and engineering a whole system is something upon which I thrive.  I look forward to learning new technologies, I'm excited about the prospect of new advances and of course, I'm happy that I love coding and truly feel as if I've found my ultimate environment to do what I feel that I do best: Engineer great software.&lt;br /&gt;&lt;br /&gt;   Happy New Year to all, here's looking forward to a great 2008!&lt;br /&gt;&lt;br /&gt;Eric&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-8695279349246299316?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/12/reflections-on-2007-looking-forward-to.html' title='Reflections on 2007, Looking forward to 2008'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/8695279349246299316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=8695279349246299316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8695279349246299316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8695279349246299316'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/12/reflections-on-2007-looking-forward-to.html' title='Reflections on 2007, Looking forward to 2008'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-7100030649302603267</id><published>2007-11-26T23:03:00.002-05:00</published><updated>2009-06-13T01:44:43.801-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GANTT Charts'/><category scheme='http://www.blogger.com/atom/ns#' term='Rapid Application Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Cheetah'/><category scheme='http://www.blogger.com/atom/ns#' term='Website Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Projects'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Scheduling'/><category scheme='http://www.blogger.com/atom/ns#' term='Engines'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Planning'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Django and Gantt Charts</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;It has now been almost a full week since I started the complete inkedmag.com site and infrastructure redesign in Python using the Django web publishing framework on FreeBSD, and I am happy to report that it is awesome.   Mind you we're talking version .96 of the product, yet it truly is a dream with which to work.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I only recently started working with (and writing about) Cheetah, a wonderful python template engine, and had to very quickly learn yet another (Django's own template system).  I must admit that Cheetah is easier to ready and learn quickly, but Django's system is considerably more agile in terms of conditionals and modifiers inside the template itself.  There even happens to be a simple mechanism for cycling through a list continually changing on each iteration of the loop within which the cycle conditional resides.  Simply put, it is wonderful for automatically changing the background colour of a row in a list.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;For those unfamiliar with Django, it is simply one of the better web frameworks for content publishing on the web these days.  While learning curve can be a little steep for some pieces of the framework, as a whole the speed at which once can produce working pages and applications is staggering.  The ease and elegance of the system truly makes one enjoying creating new applications within the framework.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;The first application I chose to migrate from native python into the framework was a simple store locator.  The new version not only is considerably less lines of code, the database management was done for me at application creation/initialisation.  I then simply exported the data from my existing application and imported it into the new table(s) Django created.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I could go on waxing poetic about every little bell and whistle, but I'd just be paraphrasing what many others have already pointed out online and otherwise.  Don't think of it as Ruby on Rails because it isn't, though that isn't to be taken as an insult to Ruby.  It is much more focused, cleaner and far simpler to setup and get running, including all of its own admin interfaces for the applications you create, as well as its own standalone development web server.  Check it out, you won't be disappointed.  This is going to save me a considerable amount of time.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Which brings me to my second point; Gantt charts.  They are simply not something I find myself utilising on any regular basis, though I think that is going to change.  I'm my own boss and have found that gantt charts produce the easiest visual way to show people the various pieces necessary for a project, when each portion can be expected to start and finish, all in parallel with the other projects for which I'm responsible (and/or coordinating).  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I feel that the use of this tool more than others really gives a great method by which to see which projects will take the bulk of the time, and what projects overlap, etc.  We have a system rewrite to produce and a whole server to replace, not to mention migrating certain custom software into the framework all before the new year.  This is doable, but only because we've clearly set realistic (though tight nonetheless) goals and time frames.    Consider using a gantt chart if you have more than one project or component of a project which needs to be done in a given time frame.  Use one if you need to share with one or more people your schedule and need them to understand as quickly and clearly as possible that with which you are juggling or dealing.  You find yourself quickly addicted to its usability.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-7100030649302603267?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/11/django-and-gantt-charts.html' title='Django and Gantt Charts'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/7100030649302603267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=7100030649302603267' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7100030649302603267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7100030649302603267'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/11/django-and-gant-charts.html' title='Django and Gantt Charts'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-1341205395656843542</id><published>2007-11-12T16:52:00.001-05:00</published><updated>2007-11-12T20:04:14.451-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Website Design'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='human interfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Rapid Application Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='LAMP'/><category scheme='http://www.blogger.com/atom/ns#' term='user friendliness'/><category scheme='http://www.blogger.com/atom/ns#' term='BAMP'/><category scheme='http://www.blogger.com/atom/ns#' term='BSD'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Where Javascript Helps the User Experience.</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;     As is well known by a good deal of the regular readers of this blog, I have moved back into the world of being an independent Software Engineer, in an open ended contract with Pinchazo Publishing Group, Inc.  Their best known publications are &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.nylonmag.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Nylon&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; (featured recently in the newest iPhone commercials from Apple), and the recently re-launched &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.inkedmag.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Inked&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;, a tattoo-culture centric magazine, both of which are distributed globally.  &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I bring up all of these specifics because it marks a decidedly big shift in my own coding career.  I have traditionally worked on back-end and middle-ware systems, making incompatible systems play nicely together, hardly have I ever had to deal with front ends and end user interactivity.  Sure, I did the web page for &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.thelesis.org/"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Thelesis&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;, a non-profit group, including the framework and almost all graphics, and continue to maintain that site to this very day.  As a whole though, I never felt a desire to deal with the front end, I like the logic behind the interface point of view.  Well, now I'm in a situation where I'm needed to make tools with which end users will interact primarily.  Odd change eh?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;It was at my previous employer, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.bluegravity.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Blue Gravity Communications&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;, a wonderful FreeBSD centric (with some Linux) hosting company that I found myself needing to really start to learn Javascript in order to convenience the end users in the selection processes.  It was here that I started to learn more about a language with which I never thought I would have a need.   I couple this to mention from a &lt;/span&gt;&lt;/span&gt;&lt;a href="http://ponderousprog.blogspot.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;good friend&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; about a &lt;/span&gt;&lt;/span&gt;&lt;a href="http://weblog.raganwald.com/2007/08/block-structured-javascript.html"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;post&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; from a &lt;/span&gt;&lt;/span&gt;&lt;a href="http://weblog.raganwald.com/"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;wonderful developer&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; (my aforementioned friend's previous co-worker), regarding how wonderful javascript can be in one's toolbox.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;With all of this in mind, I needed to jump into the world of user friendly interfaces.  I know from my own experiences perusing the web that I know what a non-intrusive interface is like, but it really isn't best to ask developers what a good interface is all about.  By nature, we are far simpler in our needs and all too willing to overlook certain practises that we don't see as a problem.  Keep in mind, many developers, myself included, still prefer command line interfaces because of how much quicker they generally are.  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I've already called upon javascript for certain pre-submit form checking, which is ultimately a convenience to the end user because it saves them having to reload the page, or worse off, play hit and miss with multiple loops of the process of submitting and seeing what was wrong with their form submission.  This is a very unfriendly approach in 2007 which is sadly still utilised by many large web based corporations.  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;This time was different as I was coding the first version (what I would normally tag as a beta) of I&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.inkedmagonline.com/gallery/"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;nked magazine's online tattoo gallery&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;.  The concept is simple, allow users (and store owners) to upload tattoo photos for general viewing on the website, and if a specific photo is from a tattoo shop/parlour in our tattoo shop database (covering 4 out of every 5 shops in the United States), make a link to that shop so that browsers of the gallery can associate certain quality work with a given producer of body art.  Very simple, great use for your standard LAMP (in this case BAMP [BSD, Apache, MySQL and Python]) configuration. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;However, end users could care less about the underlying technology, they care about ease of use.   It was with this mentality in mind that I approached the gallery's first incarnation.   Limit the amount of non-photo graphics (for speed), limit the amount of time a page actually needs to be refreshed and/or requested, and make the controls relevant and simple to understand.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;This was (I believe successfully) achieved by use of a strong reliable template engine for the purpose of controlling what user control elements were presented for navigation on any given screen.  Ultimately, if a person is browsing paginated libraries of content, we only wish to have he navigation controls relevant to where said individual is in their browsing activities, visible.  Meaning that if a person is on the first page of a five page gallery, don't render the button that links to the first page, and don't render the button which links to the previous page (as it is non-existant).  Likewise, we don't want have buttons for the "next" page, or the "final page" when we're actually on it.  This may seem logical, which I'd like to think it is, yet so many seem to overlook these kinds of details.  These are details which can cause frustration from users who unintentionally click on a button which goes to the same page they are already browsing, or in the case of a "ghosted" button, make them wonder why it isn't working at all.  Only present that which is needed, and nothing else if at all possible.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;More importantly, and even less obstructive, javascript for auto-zooming the photo gallery images themselves without having to pop-up a window, or even worse, replace the current viewing page with a simple image link or dedicated page with headers and footers in addition to the image.  These elements are time killers, and javascript is one wonderful way in which to resolve the problem.  Not only does this kind of visual add an interactive feel to the page(s), far more similar to the way a user would experience their own operating system (especially these days with candy like OSes), but it means they aren't hindered by unnecessary delays and can focus clearly on that for which they came to the page in the first place.  To view photos of tattoos that interest them, or share theirs with the world.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-1341205395656843542?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/11/where-javascript-helps-user-experience.html' title='Where Javascript Helps the User Experience.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/1341205395656843542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=1341205395656843542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1341205395656843542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1341205395656843542'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/11/where-javascript-helps-user-experience.html' title='Where Javascript Helps the User Experience.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-3223838492962857046</id><published>2007-11-07T20:46:00.000-05:00</published><updated>2007-11-07T22:49:19.468-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Rapid Application Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Cheetah'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Projects'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Cheetah, Python's Powerful Template Engine</title><content type='html'>&lt;span class="Apple-style-span" style=";font-family:'times new roman';font-size:100%;"  &gt;     About six months ago I wrote an entry about using the Template Toolkit for perl, and how I found that it was almost as if giving perl a little taste of Python.  Now, fast forward to present time and I find myself as my own boss once again and in a dedicated open-ended contract with Pinchazo Publishing Group for Nylon Magazine and more recently, Inked Magazine.  This opportunity has also proved to be beneficial for me in that I get to choose the technologies with which to arm these businesses moving forward for their presence on the internet.&lt;br /&gt;&lt;br /&gt;This brings me to some realisations to which i came today.  Python's template engine "Cheetah" is considerably better than aforementioned Template Toolkit for perl.  I'm currently writing a new online gallery application using Python, MySQL, Javascript, CSS and of course HTML on a BSD server running Apache 2.2.  Today was the first actual coding day for implementing my design, and while there were certain changes of some underlying routines, I have to say that it is moving along much quicker and smoother than alloted/anticipated.  I attribute this heavily to the ease of use found within the Cheetah library.  &lt;br /&gt;&lt;br /&gt;Some template engines add a quasi familiar set of language constructs which make using such a system doable but with that kludgey feeling.  That is not that case with Cheetah and in true Python fashion, it integrates using constructs that closely parallel the standard Python syntax, as well as offering several additional alternatives to help adapt  in various situations and code bases.&lt;br /&gt;&lt;br /&gt;The beauty of using template system (as has been said before) is that you add an additional layer of separation of code from display to the point that in team/diverse environments, the coders and artists don't interfere with one another.  A simple protocol of self-discipline for each individual to stick to their roles ensures that both content and display functionalities can be developed, and changed simultaneously without concern over coordinating the end result.  The busier the schedule, the crazier the deadline, the quicker (and with a much higher level of confidence and lower level of stress) that a project can be implemented/modified/redesigned.&lt;br /&gt;&lt;br /&gt;Once the gallery is fully operational, I will be updating this post to add a working link to the site.  It should only be a few days from the committal of this blog entry, so keep up to date by subscribing via the codedevl rss feed (courtesy of atom).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-3223838492962857046?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/11/cheetah-pythons-powerful-template.html' title='Cheetah, Python&apos;s Powerful Template Engine'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/3223838492962857046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=3223838492962857046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3223838492962857046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3223838492962857046'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/11/cheetah-pythons-powerful-template.html' title='Cheetah, Python&apos;s Powerful Template Engine'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-5373287443356022355</id><published>2007-10-31T22:40:00.000-04:00</published><updated>2007-10-31T23:33:06.452-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developers'/><category scheme='http://www.blogger.com/atom/ns#' term='Well Being'/><category scheme='http://www.blogger.com/atom/ns#' term='Consultant'/><category scheme='http://www.blogger.com/atom/ns#' term='Social'/><category scheme='http://www.blogger.com/atom/ns#' term='Somerton'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><category scheme='http://www.blogger.com/atom/ns#' term='BBS'/><title type='text'>The Importance of Developers' Social Circles</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     I just received a phone call this evening from Philip F., a previous quasi-co-worker (an employee at a software shop for whom I used to contract) and we took some time to catch up on how things have been in both of our personal/professional worlds.  I took the time to explain that I was no longer working as an employee for a New Jersey based internet hosting provider, and he informed me that he was now teaching some of the same classes on web based coder that he himself had just completed as a student.  Just for the record, he's been coding for almost two decades, it was more of a catchup on certain technologies with which he didn't focus on professionally.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     This eventually led into the topic of getting plans together for grabbing dinner together, as our previous plans to do so were disrupted at the last minute and we'd not had the opportunity to reschedule.  We're going to do so this time and it made me think of how important it is for developer/engineers and architects to spend time face to face, even over something as ubiquitous as dinner.   We need this kind of camaraderie as a means of acquiring new information that while not directly affecting each of us in the same manner, it does provide us expanded horizons.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     Getting together over some nice Indian, Thai or Moroccan food while chatting away aimless on topics as innocuous petty work incidents to full blown coding feats is a means by which we as a community of software professionals bond.  It is this circle of connections which proves to be the most rewarding in terms of contacts for future work, but more so importantly, for our own social well being, knowing that others share some of the same pains prevalent in the coding environment through which we endure to produce wonderful products.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     This reminds me of many, *many* years back when from 1987 through 1996 I owned and operated an electronic bulletin board system (BBS) called Somerton Telecomm International BBS (also known as Somerton Telecomm as well as Somerton BBS).  We had 6,000+ verified users in 39 countries and 42 US states, 12 phone lines and a very active user base, but ultimately it was the weekly dining get-togethers at 01:00 in the morning at locale eating establishments (the great Northeastern United States collections of diners as it were) to munch on food whilst blabbering away, in person to others on various topics of interest to all those involved.  We would spend hours, sometimes longer just go off verbally on anything and everything online related or otherwise.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     It is exactly this kind of face to face interaction that helps to grown the world view of a given coder, as well as assist in the act of interacting with others in a more relaxed environment.  So I suggest to everyone out there, contact previous coders, architects and/or engineers with whom you've worked and arrange to get together over a glass of wine, or a formal meal, and simply enjoy the company of a peer with whom you can speak openly, about so many varied topics.  I'm sure that there are more than a few topics via which you can converse happily. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     Don't wait, take action today, your mental stability will thank you.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-5373287443356022355?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/10/importance-of-developers-social-circles.html' title='The Importance of Developers&apos; Social Circles'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/5373287443356022355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=5373287443356022355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5373287443356022355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5373287443356022355'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/10/importance-of-developers-social-circles.html' title='The Importance of Developers&apos; Social Circles'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-1297220610389040604</id><published>2007-10-28T17:55:00.000-04:00</published><updated>2007-10-28T19:09:26.786-04:00</updated><title type='text'>Apple OS X 10.5 Leopard Upgrade Experiences</title><content type='html'>&lt;span style="font-family: times new roman;font-size:100%;" &gt;Just a few days ago, on 26 October, 2007, I received my 5 license copy of OS X 10.5 "Leopard" via FedEx.  I quickly wanted to share my upgrade experiences to this, the newest incarnation of Apple's Unix operating system.  I say Unix with a capital U because as of this newest version, Apple joins the ranks of HP, IBM and Sun as having a fully certified (Unix 2003 Standard) Unix operating system.  No longer is it simply "Unix based" or "Unix Like", huzzah to Apple for this endeavour.&lt;br /&gt;&lt;br /&gt;    The upgrade was simple enough on my primary machine, a Core Duo MacBook Pro with 2 GB of ram.  Inserted the Dual Layer DVD and walked away.  Everything was updated when I came back, and after all of that, only two simple plugins didn't work 100%, Growl, and SizzleKeys for iTunes.  Either way, the Growl team is working on this, so no worries.&lt;br /&gt;   Before I go into my experiences, I will state that when I went to upgrade my son's Quicksilver (PowerMac G4 933), I found that the DVD drive (being a previous generation) was rejecting the DVD so, being thankful that this was a Macintosh, I didn't panic.  I pulled out a firewire cable, plugged on end into the PowerMac and the other into my MacBook Pro.  Held the T key down on the MBP, Powered on, and the PowerMac now booted into Leopard from the MBP's DVD Drive.  I decided to do a full install from scratch for this computer and it proved to be almost as quick as the install on the MBP.&lt;br /&gt;&lt;br /&gt;   The first thing I noticed upon booting was the finder, and how it auto mounted all the computers in the network that it could find.  This was all done in the background, via separate threads in the OS, so no locking up like previous editions.  It even found and mounted window shares (I have to say that the icon for a windows share (a BSOD or Blue Screen of Death)) is rather an amusing jab at MS.  As juvenile as it is, it made me laugh.  In our house, serious machines for Software Development, Art, Music, Work, et al, are all Macs and the game machine (for Civilization 4) is a windows box.   Accessing any of those machines was simple and quick.  And since I had setup my son's machine with Parental Controls on, I was even able to click a button to share his screen via a VNC connection.  Very smooth Apple, VERY smooth.&lt;br /&gt;    Time Machine is as simple as it gets.  There happens to be, connected to the PowerMac, a 160 GB firewire external drive hooked up which Time Machine instantly saw and after accepting its choice, everything was done in regarding to backing up the machine on a regular basis.  I've yet to restore any documents, but I don't doubt that it will work exactly as advertised by Apple, as so many other things do (if they didn't, I wouldn't be working on Apples, but back on a FreeBSD machine).&lt;br /&gt;&lt;br /&gt;    Coverflow and Quickview are options that I can already see as coming in handy.  While graphic intesive and eye-candyish, they are nonetheless very useful.&lt;br /&gt;   The multiple desktop features which has been around in KDE and Gnome amongst other window managers for ages is finally available on the mac, though now that I work on a multi-display setup most of the time, I don't see myself as using this.   My 1440x900 &amp;amp; 1600x1200 displays provide sufficient real estate.&lt;br /&gt;   There are many more features which I could discuss in great depth, but I'll leave that after I've utilised them more.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-1297220610389040604?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/10/apple-os-x-105-leopard-upgrade.html' title='Apple OS X 10.5 Leopard Upgrade Experiences'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/1297220610389040604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=1297220610389040604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1297220610389040604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1297220610389040604'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/10/apple-os-x-105-leopard-upgrade.html' title='Apple OS X 10.5 Leopard Upgrade Experiences'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-4374101832574431830</id><published>2007-10-13T20:05:00.000-04:00</published><updated>2007-10-25T08:16:24.673-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Poor Programmers'/><category scheme='http://www.blogger.com/atom/ns#' term='Bad Design'/><title type='text'>In Buildings and Software, a Poorly Designed Foundation More Oft than Not Leads to Disaster.</title><content type='html'>&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Verdana; color:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Recently I’ve had the misfortune of being exposed to a multitude of software packages constructed in PHP and I have to say that I am very disappointed.  I’m not talking about the language specifically as it is capable, even though I don’t particularly care for it.  I’m talking about code that unless run in absolutely perfect conditions (a.k.a. the developer’s box), the code fails to work as described by said developer.  This point alone stresses the importance of proper testing and the benefit of peer-based code review. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I have noticed this issue as being more common in what I refer to as the ‘lazy languages’.  These are your weakly typed dynamic languages, specifically those lacking any real enforcement of data constructs, and lacking proper exception handling.  The lack of these two key language features don’t necessarily cause bad coding to transpire, but what they do is allow poor programmers (and non-programmers alike) to continue on with poor practices because nothing (on the compiler/interpreter end of the code) will dare to call said programmer(s) on his/her problems.  Careless coders will naturally gravitate to these languages as it lets them continue to live in their own little make believe world, the world in which they are competent coders and/or designers. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This isn’t to say that there aren’t good or even great coders that didn’t start out in the same manner as mentioned previously.  It is all part of the learning process through which we grow.  This isn’t exclusive to coding obviously, but it most definitely is applicable.  The most important point which I need to stress is that recognising poor habits and working to eradicate said habits is paramount to becoming a better coder.  Don’t wait, act now.  The code you save may be your own.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-4374101832574431830?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/10/in-buildings-and-software-poorly.html' title='In Buildings and Software, a Poorly Designed Foundation More Oft than Not Leads to Disaster.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/4374101832574431830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=4374101832574431830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4374101832574431830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4374101832574431830'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/10/in-buildings-and-software-poorly.html' title='In Buildings and Software, a Poorly Designed Foundation More Oft than Not Leads to Disaster.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-5682637507146156373</id><published>2007-10-10T20:01:00.000-04:00</published><updated>2007-10-25T00:10:32.497-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='LAMP'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='BAMP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='InnoDB'/><title type='text'>Building a Better Box for a Client</title><content type='html'>&lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Verdana; "&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="font: 13.0px Times New Roman; letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;As was mentioned in a previous entry&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;, I stated that I was willing to try being an independent contractor again sometime.  That time is now.  As such, my new corporate overlords are a media publishing group and I’ve been called in to do a ground up architecture and engineering job, along with continued long term maintenance.  Unlike before this situation appeals to me because it lacks on of the most common issues in the realm of development in general, legacy upkeep.  Sure, there is the little issue pertaining to a php application which needs to be put on a website short term, but after that we’ll be trying to limit php to specific applications on a limited (only as-needed) basis.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Ultimately we’re looking at starting with a fresh new remote server and that being said, my own experience brings me down to a quasi LAMP setup.  Traditionally I’ve found that when I want a rock solid &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;remote&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; host, one which I know can go years on end in a reliable manner,  I chose FreeBSD.  Nothing against Linux other than I find it fine for a Desktop or a Server, but more so the desktop than the server.  I find that there still is no substitue for Apache when it comes to matters related in pushing out pages to the web.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Next is a point of contention, the database.  I’ve been using MySQL since version 3.23.24a (or something around that revision number), and have found that it met my needs about half of the time.  Much of it (at the time) revolved around the issues pertaining to MySQL’s myisam faults and weaknesses regarding concurrence in high insert/update environments.   I know some people out there (many actually) will start arguing this point right away, and I still say unto you that this is a known weakness.  The myisam database storage engine is designed for speed, not high-concurrecy, nor transaction safety.  When paird with the InnoDB engine, and the removal of the auto-commit flag (as it negates the whole point of using a transaction safe engine), most of those issues disappear.  The other issues pertain to foreign keys, store procedures, etc., which have been slowly addressed in versions since the 3.xx base.  Now we’re at the 5.xx family and much has improved.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;However, all of these points still cause MySQL to pale in comparison compared to PostgreSQL.  True, MySQL has proven to be very capable and very popular, especially among the Linux crowd and cheap hosting crowd.  I will be installing MySQL on the new machine to handle support of third party web applications, though when it comes to hosting any important data, there can be only one choice, and it isn’t MySQL.  PostgreSQL is the clear winner here, the closest db engine we have to Oracle without being Oracle.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Finally, we approach the last letter in our acronym.  The ‘P’, which can stand for a multitude of langauges scripting, web and otherwise.  We have PHP which is wonderful for quick and simple (an a handful of not so quick and simple) web based applications.  It is an easy language for the novice to learn, and in the hands of an expert, even more so capable, though it has its faults, and among those security being the top.  Much effort has been made (especially post 4.2.3 and 5.x versions/trees, and I hope to see this evolution continue, though I still don’t see myself using it much as I don’t feel compelled by the language as a whole.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Next we move to another ‘P’, which in actuality is a ‘p’, perl.  The oldest of the languages we’re discussing here, but not by that much of a time frame.  Perl grew out of the personal needs of a C programmer, Larry Wall as a combination replacement of both sed and awk (amongst other Unix utilities).  I’ve been paid to code in Perl for the better part of the past 11 or so years, and I can say after all of that time several things.  On the good side, perl is found everywhere, has a large code base, and is fast.   On the bad side, I’ll have to limit my dislikes and faults found within perl so that this entry doesn’t go on for thousands of words.  Limiting my issues with perl we will see that it allows, almost seduces people into writing ugly, cryptic code.  Yes, yes, yes, the code some perl monks/mongers write may be very crafty.  Crafty does not equate with great, let alone good quality.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;All too often we see people referring to the TIMTOWDI (There Is More Than One Way to Do It) mindset of perl as being a benefit, though I see it (time and time against, countless of codebases later, even the CPAN library) as being a flaw and weakness.  If you don’t enforce a certain level of clean design into the language itself, you end up with a mess, or as many others have stated, a write-only language, one which even the author(s) of programs cannot read/decipher down the line.  My suggestion is for perl coders to follow Java coding guidelines.  I mean, we’re talking about a language that doesn’t has several decent levels of rules and coding enforcement (such as the ‘use strict’ pragma), but is so foolish as to allow people to code in a manner contrary to that pragma when it already exists in the core language.  How about a proper exception handling system?  Eval blocks or non-core/second-class libraries do not make a proper first class handling system.  This is asinine in a language that has been around for over 20 years as of this writing.  I could go on, but I’d rather not.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This brings us to a non-p ‘P’ in LAMP, Ruby.  Ruby to me is an evolution of perl in many regards, especially its object based design and proper exception handling system, however it still fails miserably in the sense of massive overuse of tokens and pascal-esque verbatim block terminators.  Rails has made Ruby a mainstream language, and I do feel that it has considerable potential ever more so than Rails alone, but it still has a ways to go when it comes to speed and cleanliness.  Matz has be working hard on it, and I’d like to think there are great things ahead for the language from the land of the rising sun, but at the current moment, I still find it lacking as non-web specific development platform.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Finally we come to where I’m heading, and I’m sure others have already figured that one out.  Python rounds out the last ‘P’ in the equation.  Python is almost as old as Perl, and is rooted in development languages as opposed to the shell and various utilities.  In this language we see a very capable, 100% object-based development language which is capable of handling coding projects of any size which espouses clean design, human readability, code re-use, distributable byte-code compiled classes/applications and proper exception handling as a first class citizen.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;So as we can see where, the solution i find most reliable and long-term maintainable with minimal development time, maximum return for design/coding efforts, security and platform flexibility is simple.  So it isn’t technically a “LAMP” solutions, more as it is a BAMPP solution encompassing BSD for the OS, Apache for the web serving, MySQL and PostgreSQL for the database(s), and Python for application development.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I came to the above choices after years of experimenting and experiencing and I do suggest others experiment on their own if they have that luxury/time frame available to them, but I do offer the above as a recommendation as I would (and have, and will) bet my own future livelihood on the flexibility and reliability of the aforementioned combination of technologies.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica Neue; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-5682637507146156373?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/10/building-better-box-for-client-as-was.html' title='Building a Better Box for a Client'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/5682637507146156373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=5682637507146156373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5682637507146156373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5682637507146156373'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/10/building-better-box-for-client-as-was.html' title='Building a Better Box for a Client'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-3258732358259895956</id><published>2007-10-07T20:00:00.000-04:00</published><updated>2007-10-25T10:37:50.381-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Independent'/><category scheme='http://www.blogger.com/atom/ns#' term='Engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Employment'/><category scheme='http://www.blogger.com/atom/ns#' term='Consultant'/><category scheme='http://www.blogger.com/atom/ns#' term='Opportunity'/><title type='text'>Perspectives: Moving On to Greener Pastures, with Perks.</title><content type='html'>&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Verdana; color:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;It is amazing how quickly situations and environments change.  One moment I’m in what I consider a bait-and-switch job, and the next I find I’m getting calls and offers from every direction.  As is par for the course, only a small percentage of the positions availed and/or offered to me were of true interest to me at this point in my career.  I’m appreciative for the opportunities availed by those companies, individuals and startups with whom I’ve spoken to and/or met personally in the past two months, and I wanted to state that for the record, but that brings me to the present.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Times New Roman"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;My new position as Chief Software Architect for several companies belonging to a successful  entrepreneur.  This is not a new experience for me, but I have to say that the flexibility included with this new position provides me a certain level of freedom sorely missing from the anomaly that was my previous position.  I wholeheartedly look forward to this new venture and know for sure that two days from now (as of this writing), when I am on my way to New York to meet up with one of the firms for which I will be helping to reshape technology-wise, that I made the right decision.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I will miss interacting with my soon to be former co-workers, though I won’t miss the rest of the environment there, which ironically was one of the original reasons for choosing the position in the first place.   Conversely, just as I have things that I will miss with my soon to be former position, I have much to look forward to with my newer role and corporate overlord.  Either way, I have much for which to prepare and at this point I’m already planning the establishment of the core tech upon which to base the new infrastructure.  I’m thinking Postgesql, Python, Java and OpenSUSE on a Core 2 Duo platform, and in a later entry, I’ll be discussing which of the aforementioned technologies upon which I decided, but until then..  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-3258732358259895956?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/10/perspectives-moving-on-to-greener.html' title='Perspectives: Moving On to Greener Pastures, with Perks.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/3258732358259895956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=3258732358259895956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3258732358259895956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3258732358259895956'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/10/perspectives-moving-on-to-greener.html' title='Perspectives: Moving On to Greener Pastures, with Perks.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-4531236208604627653</id><published>2007-09-25T19:58:00.000-04:00</published><updated>2007-10-25T10:39:06.645-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Readability'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='Amateurs'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Professionals'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='TIMTOWDI'/><title type='text'>Write Source Code for Other Developers, Not the Computer.</title><content type='html'>&lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Verdana; "&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Times New Roman"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I’m not sure as to whom to attribute the following statistic, but i believe it was something along the lines of this;  Code is read vs. written on at a 10:1 ratio, meaning that the is far more reviewing of any specific codebase than there is writing to said code.  Furthermore, the majority of software positions involve maintaining and modifying existing code as opposed to creation of new code from the ground up.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Times New Roman"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;To what does all of this allude?  The importance of writing clean code.  Knowing full well that other developers are going to have to read, understand and most likely modify your code in question at some point(s) in the future.  This is where our responsibility as software professionals (even in the case of hobbyists) comes into play.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Several languages have tried to address this problem by intrinsic design decisions.  Most notably among those in recent times are Java and Python.  Java does so by its explicitness by design, and Python by its forced formatted a la the whitespace requirement.  Both are effective in what they do, however there are still a multitude of ways in which both can be written in a harder to read format.  Obviously choice of variable, function, class and object reference names is a very large point of readability (or not) which really cannot be enforced by a language specification.  Let us take a look at this very issue and while we’re at it, i’ll be clear that this is not a Python vs. Java issue discussion.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;All too easily so many coders (I know this from having had to look at, understanding and refactor their code) overlook one of the best sources for building readable code, and that is their naming convention.  There have been several best practices and coding style specifications documents produced that one might think me as flogging a dead horse, but I assure you this is not the case.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;In the following examples we see a variation of languages and how we might commonly see the same variable name referenced (and initialised as it were):&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Smalltalk:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;num_of_doors = 4 ;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Python:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;numberOfDoors = 4    OR    numDoors = 4    OR    number_of_doors = 4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Ruby:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;numberOfDoors = 4;    OR    numDoors = 4;    OR    number_of_doors = 4;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Java, C#:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;int numberOfDoors = 4;    OR    int numDoors = 4;    OR    int number_of_doors = 4;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Lisp:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;number-of-doors := 4;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;C, C++:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;int intNumDrs = 4;    OR    int num_drs = 4;    OR    int int_drs = 4;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Perl:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;my $vzoiuwriozufsd = 0x04;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The point here is that there are many varied ways in which the same variable can be referenced.  I am of the opinion that much along the lines of Guido van Rossum of Python (and to a lesser extent ABC) fame, that there really should be one and only one &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;obvious&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; way to do it.  This isn’t to say that I think everyone should code in the same language, and speak the same tongue, etc.  What it does mean though, is that to be understood by others (and sometimes by ourselves), we need consistency, and unless we have a set of strict guidelines set out for us as software engineers, developers, etc., we might as well code in our own made up dialects.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I am of the opinion that a proper interpreter, compiler, virtual machine, etc., should be more than capable of quickly turning long variable, class, function and method names into concise tokens with small internal footprints.  So much to the point that there is no excuse for not being verbose.  At one point in time, every single byte of allocated memory for names of the aforementioned items was a crucial issue which required extreme concise naming conventions to be followed.  Those times are gone in this day and age, allowing us to be clearer and more expressive.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I can see using single letter counter variable names, but never could I imagine naming a class, method or function in such a sparse manner.  I like to think that clean code reads somewhat like a choose your own adventure book, were it to have a greater variety of options available.  Functional or Object Oriented is immaterial here, as cleanly written code isn’t tied to a specific construct or paradigm.  I think most of the following rules are applicable to pretty much every language out there.  Emphasis below pertains to items that I feel are not language specific guidelines.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;As can be seen, most of the above are applicable to languages other than Python.  I find myself at my current place of employment having to deal with the problems for which this list addresses.  Much of what I’m doing is updating a legacy code base that is literally plagued with dozens of individual programs and modules that are blatant attacks on decent code.  They (collectively) single-handedly break most of the above guidelines.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;First off it is almost entirely written in perl, which instantly shoots down the Readability counts factor (and no, it wasn’t done with the strict pragma, and yes it uses a bunch of requires and plenty of global variables).  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Secondly, errors don’t pass silently because there is no built-in exception handling in perl.  Evals of code blocks does not equate to a proper exception system, nor does an add-in module.  Exceptions are something which need to be a core part of the design of the language, and perl falls far short of the bottom of the heap on this issue alone.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Thirdly, when one is expected to maintain code in an environment wherein the expectation is to follow the existing coding schema as it were, with global variables, no exception handling, etc., it truly becomes a daunting task because one must force his/herself to think ‘wrong’.  The logical and/or proper solution that is naturally though of as a solution would only lead to reprimand, simply because trying to think in such a manner will produce mistakes, primarily because trained seasoned professionals don’t think in the same manner as the less experienced coder(s) responsible for the legacy code int eh first place.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Finally, (I’ll leave it to three to be nice to those few perl hackers who’ve read this far), after ten plus years of coding in perl, I’ve come to learn that the TIMTOWDI (There Is More Than One Way to Do It) mantra of perl is one of the biggest problems that arise from the language.  It is this careless and dare I say reckless mindset which has led to so many atrocities in the professional coding world.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;My point is simple enough to follow.  Write readable code, as it is a defining factor as to how far you’ve matured in the field of software development.  It doesn’t necessarily mean you are even that good at what you do, but what it does do is show how you understand a rudimentary problem that so many others have failed to realise.  Readability Counts, and without it, we are truly lost.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-4531236208604627653?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/09/write-source-code-for-other-developers.html' title='Write Source Code for Other Developers, Not the Computer.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/4531236208604627653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=4531236208604627653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4531236208604627653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4531236208604627653'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/09/write-source-code-for-other-developers.html' title='Write Source Code for Other Developers, Not the Computer.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-3837288210728310736</id><published>2007-09-15T19:57:00.000-04:00</published><updated>2007-10-25T17:42:20.026-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='Life Cycle'/><category scheme='http://www.blogger.com/atom/ns#' term='XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Responsibility'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Quality'/><category scheme='http://www.blogger.com/atom/ns#' term='Methodology'/><category scheme='http://www.blogger.com/atom/ns#' term='Failure'/><title type='text'>Why projects fail, or more appropriately why QA cannot be an afterthought in the software cycle.</title><content type='html'>&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px;  color:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Over the years I have been in a multitude of software development environments, and bar none, the biggest reason as to why software projects fail can be overwhelmingly attributed to quality assurance.  More precisely it is either the complete and utter lack of a QA process (let alone a team), or simply the absence of sufficient testing procedures. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Quality of software isn’t simply the fit, finish and packaging.  It is a whole encompassing methodology through which the program(s) involved are designed, revised, (when the time comes) patched, and upgraded.  It has been a long held observation of mine that coders in general don’t think of QA for several reasons.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    They feel that their programs were well designed and that they’ve accounted for all scenarios.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    The program(s) is/are too short to possibly have any error(s).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    They can be their own quality/testing department.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    They can/have figure(d) out all the necessary permutations of possible interactions that user(s) &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;would&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; possibly consider entering.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    There is no budget, nor push for a proper QA department and/or QA procedures.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;While the above is a very, very small subset of all the possible reasons that I’ve seen/heard, the reality of it is that these are being given as actual excuses when confronted about what QA processes are in place.  The reality of it is that there are a lot of substandard, unprofessional software developers out there, who despite all the best practices of established community acknowledged developers and software engineers, continue to believe that it isn’t worth their time.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The outlook is sadly very grim from where I stand.  All too often there is considerable resistance from management, and more so from other coders when the topic of writing tests first, something we have been reminded of recently from (most notably) XP and Agile development circles.  Managers don’t want to waste time on a tight deadlined project writing code that will never make it out of the door and to the customer(s), and other coders in so many situations feel it is boring and unnecessary.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The reality of it all is that those mentalities doom its transgressors to a endless of cycle of bug chasing and failure.  The impression that the end-user/client receives of a given software firm/group/coder is based almost entirely on the quality of their work, but there simply doesn’t seem to be the necessary forethought by those responsible to make the decisions toward quality.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Quality isn’t simply a department which points out and/all flaws in a product, and quite frankly shouldn’t be taken as such.  Coders, particularly bad ones despise a proper quality arrangement because it points out all of their flaws without ever really providing an equal amount of praise.  Developers as a whole like to hear positive affirmation about their work.  The code produced as, such as an artists, an extension of their being, and thus hearing about problems with their work, they all too often take it personally.  They see it as an attack on their character, and that which makes them who they are.  This is something I would expect of a child, but not a professional.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;It doesn’t have to be this way.  We as a collective group of software developers, engineers and architects are the ones responsible for ensuring that quality of not an afterthought.  We have to make it a priority to &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;build&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; quality into ever facet of not only our software, but every facet of our varied processes.  The size of the application is immaterial.  Whether a simple shell script, or a half-billion lines of code suite, the same level of attention to quality is a pre-requisite for success.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This includes the planning process as well.  Writing tests before actual code is produced is wonderful, and needs to always occur.  This requires discipline, which many seem to lack and/or overlook as a legitimate need.  It goes further than that though, all the way to the planning stages.  What is the point of having a high quality-focused mindset at the code level, if the project itself is lacking the same on so many other levels. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;We need to demand this mindset from the get go.  It is&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; our&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; responsibility to ensure that the necessary practises are put into place from the beginning, because no one else is going to care, let alone take the initiative.  If you take pride in your work, you need to ensure that it does as it is/was requested, and that requires the right methodology as well as mindset.  Not to imply that our lives depend upon this, but in reality it does.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;It isn’t as if all of this effort isn’t without reward.  We need to teach the next generation of coders to start with quality as their foundation, and it will simply become a ubiquitous piece of the process.  The benefits of this holistic view are many, and among them are:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    Stable code&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    No surprises&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    Happy clients&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    Time to work on the next big thing (tm)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    Less stress&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    Future business&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    ◊    Peer appreciation&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Quality is everyone’s responsibility, and that means it has to start with each individual, no exceptions.  So if you, or others which fit the bill as prescribed above have hangups on this issue, then it is time to think long and hard about it and either hangup your coding chaps, or take that next step and better yourself in your field, kicking your &lt;/span&gt;&lt;/span&gt;&lt;insert&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; credentials up a notch, by having a quality centric mindset.&lt;/span&gt;&lt;/span&gt;&lt;/insert&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;In future editions of the codedevl.com journal, I will be taking a more detailed look at each of the phases of the quality aspects of the software life-cycle.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-3837288210728310736?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/09/why-projects-fail-or-more-appropriately.html' title='Why projects fail, or more appropriately why QA cannot be an afterthought in the software cycle.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/3837288210728310736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=3837288210728310736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3837288210728310736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3837288210728310736'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/09/why-projects-fail-or-more-appropriately.html' title='Why projects fail, or more appropriately why QA cannot be an afterthought in the software cycle.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-4669516077054606810</id><published>2007-09-11T19:47:00.000-04:00</published><updated>2007-10-25T19:47:11.499-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Podcasting'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Life Cycle'/><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><category scheme='http://www.blogger.com/atom/ns#' term='GIT'/><title type='text'>It’s been a while... I’ve been busy coding away.  Here’s an update.</title><content type='html'>&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; color:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    I’ve been rather busy recently now that our beta version of software where I am employed has made its way to production.  Since that has transpired, all of our Trac entries can be attacked in a more systematic manner.  Here’s a little rundown of what I’ve been doing.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Handling my son’s integration into his newest school year endeavour, as well as my wife’s into hers.  She just completed her masters degree and is starting her second year (first full year) as a teacher of Biology..  to kids born the year that she and I graduated (together) from high school.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Creating the backlog of CodeDevl.com podcasts, and editing.  I never realised exactly how much time it takes to edit a podcast recording.  For every five minutes spoken, there are ten minutes spent editing and cleaning up.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Learning and implementing GIT version control/repository software at our place of employ, as well as my local network as a replacement for Subversion (SVN).  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Wrote a python (base classes pure) application which handles all migration of beta software to both the GIT repository paths as well as handling moves to production (including automated changes to certain header includes).  I’m rather happy with this application as it has saved many issue from transpiring.  Due to the haphazard manner in which some of the code base is arranged (particularly the beta vs. live paths), problems can and have occurred, hence my reasons for taking the initiative to create said program.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Additional work with re-learning Java, and keeping current with other technologies (Python 3K/3000/3.0), Javascript, Ruby, Smalltalk concepts and to a lesser degree Lisp (not including additional emacs functionalities).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    I do promise that I will be continuing to update both this written journal as well as the podcast site, and just wanted to let those reading that I have not dropped off the face of the earth, just immersed myself back into the changing flow at my workplace. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-4669516077054606810?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/09/its-been-while.html' title='It’s been a while... I’ve been busy coding away.  Here’s an update.'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/4669516077054606810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=4669516077054606810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4669516077054606810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4669516077054606810'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/09/its-been-while.html' title='It’s been a while... I’ve been busy coding away.  Here’s an update.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-7420325316010847856</id><published>2007-08-21T19:45:00.000-04:00</published><updated>2007-10-24T22:43:36.702-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeDevl'/><category scheme='http://www.blogger.com/atom/ns#' term='Podcasting'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><title type='text'>Announcing the CodeDevl.com Podcast</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I’ve been writing on matters of a computer centric theme on and off for roughly 18 years, I figured it was time to compliment my ramblings via a different medium.  First and foremost, I do this knowing full well that I post these words more so as an act for myself as a personal journal pertaining to my primary field of interest.  Secondly, I post with the hope that a few others may find humour, warnings and/or lessons to learn in what I have experienced.  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;That being said, I’ll give a basic rundown of what a listener to the codedevl.com podcast can expect.  The first dozen or so podcasts will be slightly more verbose variations of the existing codedevl.com journal entries, with the eventual hopes that I will have guest software engineers whom i’ve come to know over the years.  I am also making it known that while this site doesn’t currently allow for interactive comments, audio responses are welcome via email addressed simply to eric at codedevl.com. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I appreciate those of you who continue to follow the various happenings and writings (and lack thereof) at codedevl.com, and just want to let everyone know that I do have several things waiting for future release dates.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;  &lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-7420325316010847856?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/7420325316010847856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=7420325316010847856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7420325316010847856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7420325316010847856'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/09/announcing-codedevl.html' title='Announcing the CodeDevl.com Podcast'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6010919408063696232</id><published>2007-08-12T19:37:00.000-04:00</published><updated>2007-10-24T22:50:19.488-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='License'/><category scheme='http://www.blogger.com/atom/ns#' term='Environment'/><category scheme='http://www.blogger.com/atom/ns#' term='Conventions'/><category scheme='http://www.blogger.com/atom/ns#' term='Seminars'/><category scheme='http://www.blogger.com/atom/ns#' term='Employment'/><category scheme='http://www.blogger.com/atom/ns#' term='BSD'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Future Aspirations.</title><content type='html'>&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I recently had dinner with a previous pseudo-co-worker from my previous contract to catch up on things since parting ways.  I say "pseudo-co-worker" because ultimately when one is a contractor, he/she has no co-workers with only the exception of other contractors on the same project for which they were contracted.  He works for a software production firm primarily in Java, and that little tidbit of information started me thinking.  What I have wanted for all of these years in the profession was to work for a software house.  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I know that some of the open source crowd are going to say "why not contribute to new and/or existing open source project?" to which I simply point out that is isn't the same.  I have written and distributed code under both the artistic license as well as the BSD license, but ultimately it isn't solely about the code, it is about the environment.  Right now, I work in an environment in which there is really one person with whom I can speak and joke regarding code and geekdom in general, and I enjoy that.  I do know however, that much like my previous work associate, I want the whole environment, surrounded by other coders of varying capabilities and disciplines.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I'm sure some might imply that I have a sort of fantasy view of these environments, but I beg to differ based upon the opinions of others that I know personally.  There is a certain camaraderie in highly skilled engineering/creative homogeneous work place environments which just isn't found elsewhere.  If anyone reading this has ever had the opportunity to read any blogs from the original coding group at &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.netscape.com/"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Netscape&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; or &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.folklore.org/"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Apple&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;, you'll know full well as to what I'm referring.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I know full well that there are high stress time periods at those companies and that more so those environments are more conducive to non-family-life encumbered employees, but there are definitely exceptions as such.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; "&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Either way, back to my &lt;/span&gt;&lt;/span&gt;&lt;a href="http://cdscott.blogspot.com/"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;friend&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;.  I think he pointed out something to me that I feel would me help with my, dare I say, professional environmental depression, that being -- attending programming/tech conferences.  Back in 2000, I attended Linux World in New York at the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.javitscenter.com/"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Jacob Javits Center&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;, and then again in 2001.  It was a blast, by and far.  I do have to say that 2000 was a much better event than 2001 not only because of the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.ibm.com/"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;IBM&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; sponsored rave, BattleBots, and free (as-in "beer") bar, but because of the people there.  It seemed to go quite a bit more corporate in one single year.  I met many interesting people during those conventions, and even received several job offerings as well, though I didn't take any, as much as I should've since a few were at software houses.   Either way, I've lost my focus of this post, but I can say that I've made it a personal resolution to start heading to more developer related cons, now the questions are, which ones?  &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.python.org/pycon"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;PyCon&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;?  &lt;/span&gt;&lt;/span&gt;&lt;a href="http://java.sun.com/javaone/sf/index.jsp"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;JavaOne&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;?  &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.lugradio.org/"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;LUG Radio Live (US or UK)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;?   I guess time will tell. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6010919408063696232?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6010919408063696232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6010919408063696232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6010919408063696232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6010919408063696232'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/09/future-aspirations.html' title='Future Aspirations.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-3319621330434634306</id><published>2007-07-10T19:22:00.000-04:00</published><updated>2007-10-24T22:55:05.698-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pickle'/><category scheme='http://www.blogger.com/atom/ns#' term='SimulaE'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><category scheme='http://www.blogger.com/atom/ns#' term='Objects'/><title type='text'>Python's 'Pickle' Module</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Recent changes to the SimulaeObject class have proven to be a big leap forwards in regards to flexible object manipulation for both testing and live environments.  The issue at hand was in regards to how to load and/or save object 'types' as it were.  Initial thoughts were to go with a simple configuration file which contained each and every object a la something akin to the httpd.conf file from Apache 1.3 (&amp;amp; 2.x?) for handling virtual hosts.  Then it dawned on me that this was a mistake which I personally made once before, and was almost about to fall victim to once more.  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The solution was sitting right in front of me all along, the standard library's 'pickle' module (or alternatively the 'cpickle' variation for speed's sake).  Due to the issues presented in a virtual world simulation the topic of object blueprints and simulation population ease come to mind rather quickly.  The best environment for manipulating these new objects will ultimately be via the methods provided by both the the SimulaE package (SimulaE.loadObject(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;filename_to_load&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;, [&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;optional_load_path&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;]) as well as at the code level in the parent class in SimulaE.SimulaeObject.saveObject(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="text-decoration: underline ; letter-spacing: 0.0px"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;filename_to_save_as&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;, [&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;optional_save_path&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;]).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;By going this route it has been realised that a simple loop and/or script-like routine could be used to create all the generic object templates needed for design platforms, and for customisation all one need do is use the loadObject routine, make the necessary alterations and re-save said item as a more concrete, concise and specialised object, named appropriately of course.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Let us take an example of a room type object (more simply put, a larger container object).  We'll use simple constructor information here for the sake of staying on focus.  We're going to make a 4 metre x 5.5 metre dining room, with a 2.75 metre ceiling, simple called "Dining Room".  It will be empty sans an already pickled to storage butler object we've created for the sake of this example (whose filename is simply "butler_jeeves"), though future discussions on SimulaE's container and stack loading methods are forthcoming.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;b&gt;import SimulaE&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;b&gt;generic_dr = SimulaE.SimulaeObject(name='Dining Room', width=4.0, length=5.5, height=2.75)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;b&gt;generic_butler = SimulaE.loadObject('butler_jeeves')&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;b&gt;generic_dr.addToContents(generic_butler)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;b&gt;generic_dr.saveObject('diningroom4x5.5x2.75wButler')&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;We now have a pickled version of this generic dining room of the aforementioned dimensions, sporting its own copy of Jeeves the butler, saved to a physical file on whatever storage device we're set to utilise.  We can overwrite said object by simply saving the item with the filename as it exists on whatever storage device is in use.  There is also the flexibility of specifying alternative file save and load paths with allow for multiple parallel simulations and/or individuals to work in safe separate but equal spaces, very much along the lines of a Unix mentality.  Another advantage by working in this manner is being able to create a path full of simulation objects and copy said path en masse for alternative and/or backup purposes.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Either way you slice the pickle (module), it proves to be quite (ful)filling, making one feel quite (programmatically) satisfied.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-3319621330434634306?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/3319621330434634306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=3319621330434634306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3319621330434634306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/3319621330434634306'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/07/pythons-pickle-module-recent-changes-to.html' title='Python&apos;s &apos;Pickle&apos; Module'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-4982446645749900139</id><published>2007-07-07T19:24:00.000-04:00</published><updated>2007-10-24T23:01:56.534-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Java Redux.  Redux.</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I was perusing the internet last evening to pass the time before getting into a vicious round of &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Champions of Norrath : Return to Arms&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; with my lovely wife.  I had Java on my mind for a bit of the commute home and as such decided to do a bit of googling.  For whatever reason, I decided to lookup “&lt;/span&gt;&lt;/span&gt;&lt;a href="http://knuth.luther.edu/~bmiller/JavaForPython.html"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Java for Python Programmers&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;" much along the lines of a great "&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.amazon.com/Perl-Python-Migration-Martin-Brown/dp/0201734885/ref=sr_1_1/002-8401439-3985666?ie=UTF8&amp;amp;s=books&amp;amp;qid=1184686919&amp;amp;sr=8-1"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Perl to Python Migration&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;" book I'd acquired years back.  To my utter shock, results were actually returned.  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This whole 'ordeal' with Java has been going on with me for something over 7 years.  I started teaching myself Java way back when, but found it to be utterly too verbose for productivity, opting for perl in its place.  Then perl very quickly proved to be lacking when it came to large projects, and code cleanliness (by design mind you, I have written production code which after 7 years upon seeing it again, was very easy to follow in spite of its 7,000+ line codebase), and utter hackishness about it, regardless of the raw power.  I moved to Python both personally and then shortly thereafter, professionally where I enjoy myself most.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;However, there are certain things I've come to realise over the past many years, more so over the past few specifically.  One is that I should force myself to code in one of the behemoth languages to the point of solid fluency regardless of how dreadfully painful it can be.  Two is that most jobs are hybrid these days and require a wider set of disciplines in terms of technologies, languages and toolsets than in the past, and whilst I don't have any need for Java in my current work endeavours, it doesn't negate said need in the future.  Three is that Java makes the most sense being that C/C++ are for all purposes outside of hardware tied code (such as operating systems, device drivers, compilers), dead for application creation, period.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;And so it is that I venture forth again into the wonderful realm of re-re-learning the evil behemoth formerly known as oak.  May she not be as cruel a mistress as in the past as my understandings of her workings have been greatly enhanced thanks to python sharing so many of those conceptual designs and paradigms coupled with my adoration for the latter language.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Wish me luck.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-4982446645749900139?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/4982446645749900139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=4982446645749900139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4982446645749900139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4982446645749900139'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/07/java-redux.html' title='Java Redux.  Redux.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-7686331150158215929</id><published>2007-07-05T19:21:00.001-04:00</published><updated>2007-10-24T23:05:54.176-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Macintosh'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='SimulaE'/><category scheme='http://www.blogger.com/atom/ns#' term='MBP'/><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><category scheme='http://www.blogger.com/atom/ns#' term='Lesson Learned'/><category scheme='http://www.blogger.com/atom/ns#' term='Parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Check External Data/Configurations First.</title><content type='html'>&lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px;  "&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I was recently on holiday with my family visiting other members of my family as well as friends.  It was at this time I pulled out my trusty MacBook Pro, fired up TextMate, pulled down the newest subversion repository of my simulation software 'SimulaE' and attempted to show my friend the crafty english parser component I wrote.  I showed him the test suite with all of its various scenarios and then suggested he throw an attempt at it so that he may be amazed at its crafty logic.  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;He did, and it failed, and I was surprised to say the last.  So given that I was on vacation, I wasn't going to focus must time on this issue other than updating the subversion repository so that I could look into the issue at a later time.  Well, two days ago I finally did so, and found out after careful checking that one of the datafiles utilised for cross checking and sub classifications of parts of speech of english lacked the necessary word (also the culprit of the mis-parse).  After making a quick addition to the aforementioned lookup file, the test ran just fine, and passed with flying colours.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Lesson learned (for what feels like the millionth time);  check your support configuration and/or data files, because your code isn't broken, just doing what it is supposed to, based upon the information it has available (data files) to it.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-7686331150158215929?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/7686331150158215929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=7686331150158215929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7686331150158215929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/7686331150158215929'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/07/check-external-dataconfigurations-first.html' title='Check External Data/Configurations First.'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6381227173243061174</id><published>2007-05-26T19:17:00.000-04:00</published><updated>2007-10-24T23:09:22.258-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='SimulaE'/><category scheme='http://www.blogger.com/atom/ns#' term='Quality'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Parsing'/><title type='text'>Present Tense English Parser : Part I</title><content type='html'>&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px;  color:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;As part of an ongoing project during which I have been designing, building and testing in one way or another over the past decade and a half, I have arrived as the parser phase.  Well, I will correct that statement.  I have tinkered with creating parsers before, but thanks to the expressive nature of the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.python.org/"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Python&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; language, I was finally ready to make a serious attempt at writing an English present tense command based parser.  I'm not going to make a massive post about this, though I am going to post the test results.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Note, all the tests pass.  What a passing result actually means is this; The parsers job as of version 0.5.4 is to break apart the sentence(s) properly into their components via identification of verbs, conjunctions, prepositions, articles, conjunctions, pronouns and punctuation.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Creating Parser Instance:                                                                                  : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Loading Configuration for Instance:                                                                 : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Testing for version: 0.5.0 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  paint the gold bucket black                                                                             : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  get the big , heavy hammer and kill Bob with it !                                           : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  get hammer and squirrel from Bob and then hammer squirrel into the wall .  : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  get the gold gold                                                                                             : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  kill elf and get gold                                                                                         : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  paint the bucket gold                                                                                       : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  paint the gold bucket black !                                                                           : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  get gold                                                                                                            : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  kill elf , get gold                                                                                              : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  get the large gold brick .                                                                                  : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  paint the bucket gold .                                                                                     : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  get the large , gold brick .                                                                                : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Testing for version: 0.5.1 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  get rock , pliers , hammer and squirrel and hammer squirrel into the wall .     : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Testing for version: 0.5.2 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  kill the trite little elf with my sword , then wipe the blood off of it !                : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  destroy the cantankerous creature before you eat your dessert                        : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  kill the trite little elf with my sword , then wipe the blood off of my sword !  : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  kill the trite little elf with my sword .                                                               : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Testing for version: 0.5.3 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  hammer the hammer into the big hammer                                                       : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  hammer the hammer into the hammer                                                             : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Testing for version: 0.5.4 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#4040cc;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  kill the trite little elf with my lavacious sword , then wipe the blood off it !   : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  go to the store and buy a new cellphone                                                        : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  slit Fred's throat and capture the warm , red blood in a cup !                         : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  play with my toys and listen to my music .                                                    : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#4040cc;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;  play with my toys and listen to music .                                                          : Passed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p color="#4040cc" style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;As can be seen, the variety of possible inputs for the parser vary from simple to complex, from grammatically perfect to questionable fragments.  Being that the purpose of this parse is first and foremost for use in a command environment in which interaction is needed, thus the present tense only requirement.  This is a massive relief on the demands of the parser, but even still, it can be see from the above that the system can differentiate key words which can be used in both noun and adjective forms.  The system also handle post adjective usage.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The system currently most notably recognises over 9,000 verbs (regular and irregular), 50 prepositions, and a whopping 46,000+ adjectives.  A call for test case phrases is hereby announced.  I am satisfied enough with the stage one parse process that I hereby am moving on to the second parse stage, that is the creation and order of individual statements (as dictated by their prepositions), in preparation for the third and final stage, in which the parser sends the results from stage two to the action engine.  Both those p&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;hases will be the subjects of new posts, accordingly.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6381227173243061174?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6381227173243061174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6381227173243061174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6381227173243061174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6381227173243061174'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/05/present-tense-english-parser-part-i-as.html' title='Present Tense English Parser : Part I'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-1456766253811975065</id><published>2007-05-08T19:12:00.000-04:00</published><updated>2007-10-31T23:42:33.459-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bruce Eckel'/><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><category scheme='http://www.blogger.com/atom/ns#' term='Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='Functional Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Prolog'/><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Emacs'/><title type='text'>Thinking in Lisp (with respect to Bruce Eckel)</title><content type='html'>&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px;  color:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;It isn't what you might think based solely on the title of this post.  Bruce Eckel of &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.mindview.net/"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;www.mindview.net&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; isn't coming out with yet another book prefixed with "Thinking in"...  or maybe he is.  As far as I know though, he has yet to, nor is he expected to write one on Lisp.   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;On a quasi-regular basis I make the effort to learn something new in the realm of computing whether a concept, paradigm, and/or language.  I decided that given my past experience and interest (since I was considerably younger) in artificial intelligence programming concepts coupled to early leanings towards &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Prolog"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Prolog&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;, a French born AI/logic language created around the same time as I was back in the early seventies, that it was time to return to my roots.  This time around I decided that after being an &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.gnu.org/software/emacs"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;emacs&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; junkie for so long, that the obviously choice for me this time around would be the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Lisp_(programming_language)"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Lisp&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; functional programming language.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Now the point of this post is not to go into the semantics of the Lisp language but to stress a more important point which I feel would be of greater value to any and all who might stumble across these pages.  Learning to think in Lisp changes the way you think about code logic.  I'm a fairly big proponent of &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;OO&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; design and programming, though I ultimately believe in using the right tool for any given job/project.  Lisp has a wonderful simplicity about it, a simplicity with a considerable amount of power behind it.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The concept is not unlike Unix methodologies.  Simple, small programs which do one thing, but do it exceedingly well, which can then be piped to one another to do larger tasks.  Mind you this is slightly different but not by much.  Lisp works dealing with functions (and lots of parentheses).  You string together multiple simplistic functions together to produce more complex functionality.  A simple example might be finding the average of two numbers.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(defun AVERAGE (x y) (/ (+ x y) 2.0))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;defun is used to define the function with the given name "AVERAGE", followed by its parameter requirements.  The actual body of said function consists of doing a division operation (/) by 2, against the results of an addition function (+) of the two provided parameter.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I feel that this example while a little simplistic does at least point out the basic mindset of Lisp programming, which still hold consistent with my above statement on its likeness to Unix shell mannerisms.  While I don't see myself coding entire systems (on a regular basis at least) in Lisp, I do have admit that I'm going to continue my studies on this language as I have been finding that my perspective has shifted thanks to learning this new and different programming paradigm, which ironically isn't new when it comes down to it.  It was just pushed aside to make way for the 'next great thing™.'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I heavily recommend some of the freely available books and information on learning Lisp and its concepts as listed below (Note: All items are PDF formatted for convenience):&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;a href="http://www.apress.com/free/content/practicalcommonlisp.pdf"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Practical Common Lisp&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;a href="http://www.lispmachine.net/books/common_lisp_the_language.pdf"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Common Lisp: The Language&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;a href="http://www.lispmachine.net/books/Common_Lisp_A_Gentle_Introduction_To_Symbolic_Computation.pdf"&gt;&lt;span class="Apple-style-span"  style="font-family:times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Common Lisp: A Gentle Introduction to Symbolic Computation&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-1456766253811975065?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/05/thinking-in-lisp-with-respect-to-bruce.html' title='Thinking in Lisp (with respect to Bruce Eckel)'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/1456766253811975065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=1456766253811975065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1456766253811975065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/1456766253811975065'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/05/thinking-in-lisp-with-respect-to-bruce.html' title='Thinking in Lisp (with respect to Bruce Eckel)'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-2294823418581254423</id><published>2007-04-26T19:09:00.000-04:00</published><updated>2007-10-28T19:12:13.292-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Consultant'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Algorithms'/><title type='text'>Coding in 'The Zone'</title><content type='html'>&lt;div style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="color: rgb(64, 64, 64);font-size:100%;" &gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;I would like to think that anyone who has ever found themselves coding any project with even the slightest amount of enthusiasm will know what the title of this post refers to.  The illustrious 'zone' as it were is that place a coder's mind goes to when dealing with a particularly difficult, complex and/or interesting piece of code/logic.  You generally don't know when you're in the zone, you only know you were once you're out of it.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="color: rgb(64, 64, 64);font-size:100%;" &gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;font-size:13px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(64, 64, 64);font-family:Verdana;font-size:13px;"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;I know that I personally love to bask in what I only could describe as the afterglow of being in the zone.  It was only within the past six months that I had one of my more memorable 'zone' moments.  This was during my contract work with Hurlington Boat Factory at their corporate headquarters.  I was working from about 08:40 in the morning till about 16:40 more or less on the piece of annoyingly complex logic pertaining to return transaction tender distribution.  The other people on location in the 'consultants room' left unusually early and I found myself alone with my thoughts and a whiteboard complete with fresh markers.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;font-size:13px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(64, 64, 64);font-family:Verdana;font-size:13px;"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;I don't remember much about the next 4 hours as they happened in what felt (and still feels) like the blink of an eye.  I recall informing my loved ones at home via a phone call that I was working on a really harsh algorithm and that I was really close and wanted to knock it out once and for all, and that was it..  Next thing I noticed, I was done.  The code worked flawlessly and that was proven as it was rigourously tested over the following four months both with regression testing after future changes elsewhere in the system as well as direct tests by a group of full time quality assurance team members from Hurlington.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;font-size:13px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(64, 64, 64);font-family:Verdana;font-size:13px;"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;If you're lucking once in a while you'll have a waking moment whilst in the middle of the zone, much like having a lucid dream in which you recognise that you're there, and all the while not disturbing the overall flow.  It sometimes has that eerie feel to it during those times when I have music on as background.  Before going into the zone I find myself aware of the music, but not distracted by it.  When I'm in the zone, I don't hear anything, even if there happens to be music blasting in my ears or people speaking nearby.  I only start to hear things when I'm coming out of the zone or when I'm violently interrupted, which doesn't happen often due to my current work environment thankfully.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;font-size:13px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(64, 64, 64);font-family:Verdana;font-size:13px;"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;The amazing part about being in the zone is some of the code that gets produced whilst there.  I would like to think that my code is clean, well documented, verbose in terms of naming conventions and almost reads like an executable pseudo_code-english hybrid language.  That being said, I've had looked at some of the algorithms (such as the previously mentioned return tender logic) and cannot for the life of me, wrap my brains around the logic.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Verdana;font-size:13px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p   style="margin: 0px; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(64, 64, 64);font-family:Verdana;font-size:13px;"&gt;&lt;span style="letter-spacing: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;Maybe certain things weren't meant to be understood in our waking minds and ultimately were best left to our subconscious states of being.  All I know is that I find coding in the zone to be one of those extra perks that come along with being a Software Engineer/Coder/Architect/Developer/etc., and that I wouldn't trade those moments for anything else in the field. &lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-2294823418581254423?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codedevl.com/2007/04/coding-in-zone-i-would-like-to-think.html' title='Coding in &apos;The Zone&apos;'/><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/2294823418581254423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=2294823418581254423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/2294823418581254423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/2294823418581254423'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/04/coding-in-zone-i-would-like-to-think.html' title='Coding in &apos;The Zone&apos;'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-4150970850402807357</id><published>2007-04-20T19:08:00.000-04:00</published><updated>2007-10-24T23:16:26.344-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='BSD'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Objects'/><category scheme='http://www.blogger.com/atom/ns#' term='CGI'/><title type='text'>Simple Rapid Application Development in Python</title><content type='html'>&lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px;  "&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I've always found it interesting reading about coding paradigms and what not, including ways in which a coder can increase his/her throughput. Meaning, how can I quickly pump out software that is easily portable, eloquently written, and easily maintainable by either myself and/or someone else one, two, six, eighteen months down the road? &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I've found out the answer to that question, in the form of a language, and it isn't Perl, Java, or Ruby. Simply put, it is Python by Guido van Rossum. The language that I loved to hate for so long due to what was perceived as a nasty control freak mentality regarding white space sensitivity, and the "lack" of freedom of being able to use {'s, ('s, ['s and ;'s anywhere I wanted. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I've been using Python as mentioned previously in this blog for both large professional projects as well as certain other miscellaneous personal object-focused projects of mine and about two years ago when accepting a one-off project outside of my normal employment environment, I decided to try utilising my new favourite language for professional work. I must say that it was indeed a very simple program that I could've easily written in Perl, but no where as cleanly as in Python. The standard python libraries/classes included with every distribution (including as a stock install on my OS X 10.3 Panther equipped Apple Macintosh G3 iBook which I was using at the time) made it a clear choice (at least to attempt).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The premise of the program was amongst the most simplest of tasks. The client has a Microsoft Frontpage created website with a form. It currently points to no where because the individual doesn't know anything about capturing form data, so that's where I come in. All that is wanted is for all of the fields to be commingled into an e-mail to be fired off every time someone submits that form. He doesn't initially even want data format and/or content checking, but I inquired anyway (I'm not some code monkey who doesn't try to analyse what the non-coder *really* needs/wants/means). &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The code itself took a matter of about 15 minutes to write down, organise and test. The code is more than fifty-percent blank lines and/or comments. Using the standard smtplib and cgi libraries/classes, this turned out to be an absolute breeze. The advantage of easily stepping through the dictionary (hash) produced by the cgi.FieldStorage() method was a cinch thanks to the built-in cgi.has_key() and cgi.value() methods. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;While this is hardly an example of actual RAD, or any detailed work for a language such as Python, it does give a simple real world example of why I will continue to push for the use of this language. What I wrote worked the first time I wrote it, without any errors. I reads like pseudo-code and it was enjoyable to write because it flowed so easily from my mind into Python's very natural syntax. I used to espouse Perl for such things, but in comparison, I find it difficult to think that I held Perl in such regards for natural syntax. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This doesn't mean that I'm a one language only person. Much of the application infrastructure I've produced at my current (and previous) employers' establishments I design and implemented in Perl on a multitude of Linux and/or FreeBSD boxes. This has changed as I've moved to a FreeBSD centric platform layout, with the intent of someday using Python as the shining star for any medium to large implementations, and let it share the small jobs with a mix of Perl and Bash scripts. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I only wish I could get others to give Python a fair shot as it truly is one of those languages that deserve a second look, it may just changed your entire perspective on how you code. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-4150970850402807357?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/4150970850402807357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=4150970850402807357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4150970850402807357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/4150970850402807357'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/04/simple-rapid-application-development-in.html' title='Simple Rapid Application Development in Python'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-5885891835595684949</id><published>2007-04-15T19:06:00.000-04:00</published><updated>2007-10-24T23:20:27.976-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Guido van Rossum'/><category scheme='http://www.blogger.com/atom/ns#' term='Passionate'/><category scheme='http://www.blogger.com/atom/ns#' term='Great Minds'/><category scheme='http://www.blogger.com/atom/ns#' term='Larry Wall'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernighan'/><category scheme='http://www.blogger.com/atom/ns#' term='Knuth'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='Methodology'/><category scheme='http://www.blogger.com/atom/ns#' term='Ritchie'/><title type='text'>The Importance of Being Passionate About Coding</title><content type='html'>&lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px; f "&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Throughout the years I’ve worked with a considerable amount of software professionals and have known a countless number of computer enthusiasts.  I dare say that the number of those who are passionate about their involvement in the&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; aforementioned fields is far greater in the latter of the two groups.  I wasn’t going expound about this topic for some time but a recent phone call from a previous semi-co-worker (an employee where I recently held a contract) who had just returned for forty days in India learning some new technologies.  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    I have personally seen a multitude of coders over the years who were quite competent (or close enough) at what they did in terms of developing new systems or upgrade existing ones.    What I don’t see as often is that elusive fire that burns within the not-so-common coder, software engineer, developer, etc.  Some of you may be that person or know that person.  The one that is incessantly infatuated about this new algorithm, concept or design which might be revolutionary or simply solves a problem in an elegant way.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Even if you don’t know someone personally, you know of people like this.  In the spotlight we know of people like Guido van Rossum, Larry Wall, Donald Knuth, Kernighan &amp;amp; Ritchie.  Mind you not all amazing coders are language developers, though I would fancy a guess that most if not all of those who have the yearning for their craft have on one or more occasions figured out whether on paper or in their heads a way in which they would design a language or re-work an existing methodology to make it better.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Coders with this mindset and thirst don’t operate this way for fortune or fame, they do it because they have a natural yearning to create, design and improve solely for the purpose of knowing that whatever it was they needed to do was being done right.  You might recognise these people by their visible expression of excitement when discussing a new piece of code they worked on or a problem they re-worked.  However it is usually more apparent when you speak with them about coding in general.  Their eyes widen and you can hear the infatuation in their voice.  They sound much the way they did when they first discovered coding whether it was as a child or as an Adult.  That’s the fire and passion I’m referring to, and it is my hope that everyone, coder or not, gets to know at least one person like this, even if they themselves are one of these people.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-5885891835595684949?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/5885891835595684949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=5885891835595684949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5885891835595684949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5885891835595684949'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/04/importance-of-being-passionate-about.html' title='The Importance of Being Passionate About Coding'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-8282207683913236030</id><published>2007-04-04T19:03:00.000-04:00</published><updated>2007-10-24T23:23:10.199-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Bad Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='Methodology'/><category scheme='http://www.blogger.com/atom/ns#' term='Objects'/><category scheme='http://www.blogger.com/atom/ns#' term='Strict'/><title type='text'>Updating Existing Perl to 'use strict' Standards</title><content type='html'>&lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px; "&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Now that a little over a week and a half has passed at my new place of employment, I find that I understand my new environment enough to make some observations in a not-too-specific manner out of respect for my new employer.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    First let me state that all of the existing software is a product of its environment and that it all functions as it was intended.  That being said I’m able to say with a clean conscience (after that little preamble) state that the code was ... lacking.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    I am thankful for this to some degree.  For one thing it provided an opportunity for employment at a place I enjoy with some very intelligent individuals who all seem to have their own special abilities and areas of expertise.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    More importantly though, I’m thankful because it places me in a situation I find most mentally stimulating.  It makes me re-think an entire existing architecture and being that I have held the role of Software Architect (amongst others) for much of my professional life, it is all the more appropriate. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    It is one thing to walk into an new environment with a clean slate in which one may design to their heart’s content, yet another wholly different situation when the software exists in a production environment of one form or another.  There are so many more facets with which to deal when the database structure and all of the depending software is tightly build upon that aforementioned code base.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    The whole point of this rambling is that my first week and a half has passed and while I have done much more with the database redesign, class design, object handlers, etc., I have finally been able to enjoy that great feeling which comes when turning previously un ‘strict’able perl code into a fully compliant piece of code.  I might also add that I ensured the code conformed within the guidelines of Damnian Conway’s “Perl Best Practices” book, which while a little different than my own manner of laying out perl code, is wonderful none the less.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Now that this honeymoon is over, I can move onward and upward to greater code causes to champion, and based upon the intents of the owner of the company I don’t doubt that there will be a wonderful logic requiring plethora of future projects for which I am to contend.  I only hope that others out there are as lucky in their endeavours.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-8282207683913236030?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/8282207683913236030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=8282207683913236030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8282207683913236030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/8282207683913236030'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/04/updating-existing-perl-to-use-strict.html' title='Updating Existing Perl to &apos;use strict&apos; Standards'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-6799832865092884736</id><published>2007-04-02T18:56:00.000-04:00</published><updated>2007-10-24T23:25:57.235-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='School'/><category scheme='http://www.blogger.com/atom/ns#' term='Passionate'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux World'/><category scheme='http://www.blogger.com/atom/ns#' term='Great Minds'/><category scheme='http://www.blogger.com/atom/ns#' term='Environment'/><category scheme='http://www.blogger.com/atom/ns#' term='BASIC'/><category scheme='http://www.blogger.com/atom/ns#' term='Antitrust the Movie'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='Pascal'/><title type='text'>Some Coders that Stand Out in My Mind</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;No, no, no..  Unlike in the movie “&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;a href="http://imdb.com/title/tt0218817/"&gt;Antitrust&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;", I never was fortunate(?) enough to work in an environment like “The Egg”.  I’ve never worked for a huge computer company or internet startup during their heyday such as Google, Netscape (back in the day) or Apple though after reading of some of the stories of those of have, I feel like it must’ve been a blast (albeit tiring).  I can however say that I’ve met a multitude of interesting people over the years and would like to mention just a few of them here, with the hope of eventually getting in contact with one or more of them in the future.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    I will try to keep everyone in a quasi-chronological order for the sake of clarity when discussing the environment in which I interacted with said individuals.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Joseph ‘Joey’ Springer III:    Joey was my neighbour as a child who happened to live right around the corner.  We both had obsessions with computers from the earliest days of our youth.  His father was Joseph Springer, Jr., an engineer at RCA and ultimate provider of an early teletype machine along with a seemingly endless supply of punch cards with which we would goof around for countless hours.  While we never coded together, he was a close friend whose intelligence shone through at all times, not to mention he was a keen player of ‘Dark Castle’ on his sister Kathy’s Macintosh which she was required to have since she was attending Drexel University at the time.  I haven’t see Joey since the late 1980’s but know that he’s out there somewhere.  Last I heard he was achieving his degree in Mathematics somewhere in New Jersey, USA.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Walter ‘Walt’ Thesing &amp;amp; Michael ‘Mike’ Simons (a.k.a. Jesus):  Back in the 10th grade at the high school I attended after my stint at an Engineering and Science magnet school in Philadelphia, I took a class in Pascal.  I’d been programming for many years at this point, but never took any formal classes on the topic.   I’d known BASIC for quite some time but never had any experience in in other languages at any kind of serious level.   Well, it was in this class that I met Walt.  He was quite adept at coding the older Apple ][‘s our school utilised and spent much of his free time coding and playing his version of Tetris.  We ended up befriending one another in class along with my coding partner (at the time) Michael ‘Mike’ Simons (a.k.a. Jesus) and through the process learned that we shared a certain fondness for coding whilst listening to the B52’s.  It was through coding whilst listening to the aforementioned musical ensemble that the idea for this post as well as the memory of Walt popped into my head.  I don’t know if Walt went into computers professional, or another science/mathematics field, but it woud be a sad loss for those fields if this were how it played out.  Mike Simons went on to work with the Slackware Linux distribution and I last saw him at Linux World Expo, New York in 2001.  I’d like to hear from either of them if they’re out there.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Daniel ‘Dan’ Ervine:  During my seven year stint at Alliance Remanufacturing in Philadelphia, PA, USA at the turn of the past millennium I worked with a fledgling Network Engineer fresh out of a Marist College (a.k.a. Mattress College) named Dan.   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    When Dan and I first started working together he was still very much a Microsoft tool, but after exposing him to the real world of Unix and Unix knock offs like the various Linux distributions out there, I deemed him cured of his previous MS affliction.  We only got the opportunity to work with one another for a couple of years due to a restructuring which saw him lose his position right around the same time as his birthday and wedding.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    We’d worked together on several projects (primarily me assisting in his Networking world) since it was something I wanted to at least learn and partake in once since I never work in the administrative capacity these days.  We grew to become friends and had the joy of travelling several times on business together (including two Linux World Expos in New York) and CAMM in Connecticut. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    He’d changed dramatically over the years, all for the better and while it has only been a few years since I’ve been able to see and/or talk with him, I’d like to as I’m curious as to what he and his wife are up to, and where he is in his career, though I’m sure it’s a good place.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    So as I said earlier, there are many individuals with whom I’ve had interactions in the computing field which I’d like to speak to again given the opportunity.  I have many others whom I’d like to make mention but being that it is 00:45 in the morning as I type this  whilst watching “Ghost in the Shell : Standalone Complex” on the tele, I need to end it here.  I will continue this list in a later thread when time avails itself.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-6799832865092884736?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/6799832865092884736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=6799832865092884736' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6799832865092884736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/6799832865092884736'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/04/some-coders-that-stand-out-in-my-mind.html' title='Some Coders that Stand Out in My Mind'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-5952158314174609740</id><published>2007-03-31T17:43:00.000-04:00</published><updated>2007-10-24T23:27:29.837-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Libraries'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Engines'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Smells like Perl, Tastes like Python: Perl TT</title><content type='html'>&lt;p color="#404040" style="margin: 0.0px 0.0px 0.0px 0.0px; "&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;My recent procurement of new employment has thrown me back into the hellish world of perl.  For those unaware, perl is the dyslexic ginger stepchild of 2400 bps modem line noise, albeit executable and fast.  Now don’t get me wrong, I’ve been coding professionally in perl since 1995, and have produced several large enterprise applications that are still in use to this very day.  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Perl is a very capable language without a doubt however having used the language for so many years both professionally and for hobby I have become well aware of its faults and shortcomings.  This article isn’t specifically about pointing out the many issues perl has, some of which will be addressed in Perl 6 (when it eventually gets released in 2027).  Today I am only going to speak of one specific issue which is actually quasi addressed in a set of modules, all relating to the Template Toolkit.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    When coding in perl, even adhering to best practices such as those outlined in the excellent book by the one and only Damien Conway, author of the more notable “Object Oriented Perl”, one still finds perl problematic due to too much adherence to the ‘there’s more than one way to do it’ mantra.  The constructs are very low-level language based, which makes sense given perl’s humble beginnings but ugly none the less.  Some languages which have come into existence after perl have corrected this shortcoming and as previously stated, perl is moving towards correcting some of its ugliness, though a bit late.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    The current leading language which not only matches perl’s power in many areas, while exceeding perl’s abilities in others is Python.  Its focus on clean form through visually enforced coding constructs along with a more natural syntax which closely follows not only spoken speech but though processes is a testament to language advancements.  Which brings us to my main focus of this article, clean syntax in the style of Python, within a perl application.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    The perl Template Toolkit by Andy Wardley is the definitive all around powerhouse of template creation systems available within perl.  There are many others available but they all pale in comparison especially when you take into consideration the multitude of uses, formats and arenas in which Template Toolkit is competent. This is no mere mail merge replacement library, even though it will do just that exceedingly well.  The toolkit is much more than that, mainly due to its wonderful flexibility in its meta language utilised for in-template logic.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    This language within a language is also where I happen to draw its direct link to Python whether intentional or not.  Good design shines through and it just happens that the aforementioned comparison is dead on.  Let us begin with a sample of what I’m talking about but reviewing a simple .tt template from the Template Toolkit website.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    [% FOREACH team = teams -%]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    [% team.name %] [% team.played -%] &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    [% team.won %] [% team.drawn %] [% team.lost %]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    [% END %]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    All of the above would be located in a .tt template file.  A dictionary (a.k.a. associative array/hash) is passed called “teams”, containing the named elements of name, played, won, drawn and lost respectively with their associated values.  Unlike perl’s “c” style referencing methodologies which is fine and dandy for shell scripting or c programming it is by no means as clean as the more appropriate referencing styles utilised by most modern languages, specifically object oriented languages using the dot format.  As a side note, perl’s object system was ripped almost verbatim from Python, though poorly implemented (e.g. implemented with perl’s tmtowtdi mind-set as opposed to a proper object focus with structure and stringency.)  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    The above code is clean and simple, much like Python.  The only exception is the punctuation, which is only necessary as delimiters for the meta language.  Thanks to this cleaner approach taken by the Template Toolkit system, we can allow the logic to be cleaner by limiting the perl to only the minimal amounts thus ending up with cleaner overall code, especially handy in the world of cgi and/or form processing.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Let us face facts, of the following, how would you range readability from easiest to hardest.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Python:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    for team in teams:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;        print team.name, team.played + ‘-’&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;        print team.won, team.drawn, team.lost&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     Template Toolkit:                                     &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     [% FOREACH team = teams - %]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     [% team.name %] [% team.played -%]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     [% team.won % ] [% team.drawn %] [% team.lost %]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;     [% END %]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Perl:                                                               &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    foreach my $team (@teams) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;        print “$team{‘name’} $team{‘played’} -\n”;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;        print “$team{‘won’} $team{‘drawn’} $team{‘lost’}\n”;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    The above Python code is simple to understand, even by non-programmers.  The Template Toolkit version while a little messier due to the punctuation is still rather clear cut and simple to read, while the perl version adds a significant amount of unnecessary punctuation.  What this all comes down to is that if you have to code in a perl environment, there is now a way in which you can produce a cleaner codebase, mainly by keeping the data display layout and logic within .tt template files.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    So I commend Andy Wardley and all of those who assisted with this wonderful module (and its associated add-ons) in doing what Larry Wall and crew have been unwilling to do thus far within perl.  Dictate flexible standards which avoid the ugliness which has now grown synonymous with perl.  If you find yourself stuck in a perl environment, you now have some solace in a place to take refuge courtesy of the Template Toolkit.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana;  min-height: 16.0pxcolor:#404040;"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana; color:#404040;"&gt;&lt;span style="letter-spacing: 0.0px"&gt;&lt;span class="Apple-style-span" style="font-family: times new roman;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;    Oh, and for those of you who have moved on to one of the the languages of choice at google, Python, there is the ever flexible Cheetah template framework.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6569953596318705576-5952158314174609740?l=codedevl.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codedevl.blogspot.com/feeds/5952158314174609740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6569953596318705576&amp;postID=5952158314174609740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5952158314174609740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6569953596318705576/posts/default/5952158314174609740'/><link rel='alternate' type='text/html' href='http://codedevl.blogspot.com/2007/10/smells-like-perl-tastes-like-python.html' title='Smells like Perl, Tastes like Python: Perl TT'/><author><name>Eric Elinow</name><uri>https://profiles.google.com/115858933012311252050</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-Mr13jOiqy_4/AAAAAAAAAAI/AAAAAAAABno/CuX3eIOBFi4/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6569953596318705576.post-5709728988052601468</id><published>2007-03-22T17:38:00.000-04:00</published><updated>2007-10-24T23:30:28.432-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='Great Minds'/><category scheme='http://www.blogger.com/atom/ns#' term='Environment'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Consultant'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Quality'/><c
