<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Meticulous Geek &#187; English</title>
	<atom:link href="http://themeticulousgeek.com/category/english/feed/" rel="self" type="application/rss+xml" />
	<link>http://themeticulousgeek.com</link>
	<description>Life, rantings and small portions of not too useful information</description>
	<lastBuildDate>Thu, 03 Jun 2010 19:46:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>The Chileans Got Him</title>
		<link>http://themeticulousgeek.com/2010/06/03/they-got-him/</link>
		<comments>http://themeticulousgeek.com/2010/06/03/they-got-him/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 18:31:03 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[fuckups]]></category>
		<category><![CDATA[madness]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[world]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=658</guid>
		<description><![CDATA[Finally, that asshole Joran van der Sloot has been captured. Apparently, by the Chileans. Not surprisingly, as allegedly he crossed the border with Peru some hours ago. This post is solely based on tweets and a somewhat arcane blog but the Twitter storm is picking up and more and more other sources are popping up [...]]]></description>
			<content:encoded><![CDATA[<p>Finally, that asshole Joran van der Sloot has been captured. Apparently, by the Chileans. Not surprisingly, as allegedly <a href="http://www.nowpublic.com/world/joran-van-der-sloot-peru-murder-update-caught-chile-2624459.html">he crossed the border with Peru some hours ago</a>. This post is solely based on tweets and <a href="http://insession.blogs.cnn.com/2010/06/03/breaking-news-joran-van-der-sloot-arrested/">a somewhat arcane blog</a> but the Twitter storm is picking up and more and more other sources are popping up <a href="http://www.google.com/search?q=van+der+sloot+captured&#038;hl=en&#038;safe=off&#038;prmd=nu&#038;source=lnms&#038;tbs=nws:1&#038;ei=PvgHTM2RNYiA4QaXu9yOAQ&#038;sa=X&#038;oi=mode_link&#038;ct=mode&#038;ved=0CAoQ_AU">via Google search</a> too. </p>
<p>I almost forgot to <a href="http://nl.wikipedia.org/wiki/Joran_van_der_Sloot">consult the Global Consensus for advice</a> but lets see what it has to say about our <em>beloved</em> <strong>Joran van der Sloot</em>:</p>
<blockquote><p>
Joran Andreas Petrus van der Sloot (Arnhem, 6 augustus 1987) is een Nederlander die sinds juni 2005 verdacht wordt van betrokkenheid bij de verdwijning op Aruba van Natalee Holloway, een jonge vrouw uit de Verenigde Staten. Van der Sloot wordt sinds 30 mei 2010 tevens verdacht van betrokkenheid bij de dood van Stephany Flores in Peru. Van der Sloot ging naar school op Aruba, waar zijn vader werkzaam was als rechter in opleiding.
</p></blockquote>
<p>Ok, that&#8217;s Dutch so it will probably not be very useful to a lot of readers. Let me fix that for you:</p>
<blockquote><p>
Joran Andreas Petrus van der Sloot (Arnhem, 6th of August 1987) is a Dutchman who is suspected to be involved in the disappearance of Natalee Holloway, a young woman from the US. Since the 30th of May 2010, Van der Sloot is also suspected to be involved with the death of Stephany Flores in Peru. Van der Sloot went to school in Aruba where his father was working and studying to become a judge.
</p></blockquote>
<p>Supposedly, he is currently hanging around the <a href="http://wikimapia.org/13910689/es/Cuartel-Borgo%C3%B1o-de-la-Polic%C3%ADa-de-Investigaciones">Cuartel Borgoño de la Policía de Investigaciones</a> in <em>Chile</em>.</p>
<p>Many thanks to Chile for doing what our puny nation could not: <strong>capture this son of a bitch and put him on hold for a while</strong>. I sincerely hope that this crazy monkey sphincter will be put on hold <strong>indefinitely</strong> because there is just a little too much unnecessary death in too short a timespan surrounding this guy.</p>
<p>I am fucking ashamed to share a native language with this donkey turd and he should be taken care one way or another. It doesn&#8217;t fucking matter, just put him away indefinitely or kill him outright &#8211; we don&#8217;t care. He&#8217;s a fucking piece of waste and while we&#8217;re at it, we just as well might fucking take care of his motherfucking parents because I hold these people responsible for doing a piss poor job on bringing this piece of megalomaniac scum into the world.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2010/06/03/they-got-him/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encapsulating vs Hiding</title>
		<link>http://themeticulousgeek.com/2010/05/10/encapsulating-vs-hiding/</link>
		<comments>http://themeticulousgeek.com/2010/05/10/encapsulating-vs-hiding/#comments</comments>
		<pubDate>Mon, 10 May 2010 21:08:26 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[smalltalk]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=526</guid>
		<description><![CDATA[A short while ago I posted this rant about a incompetent programmers and a good friend posted the following comment: You say OOP is about hiding mutable state. Isn’t it about encapsulating mutable state? Maybe it’s just a matter of wording – but &#8220;hidden&#8221;, in my dictionary, means that it’s totally out of reach. Encapsulated [...]]]></description>
			<content:encoded><![CDATA[<p>A short while ago I posted <a href="http://themeticulousgeek.com/2010/05/04/the-gip/">this rant</a> about a incompetent programmers and a good friend posted the <a href="http://themeticulousgeek.com/2010/05/04/the-gip/#comment-30">following comment</a>:</p>
<blockquote><p>You say OOP is about hiding mutable state. Isn’t it about <em>encapsulating</em> mutable state? Maybe it’s just a matter of wording – but &#8220;hidden&#8221;, in my dictionary, means that it’s totally out of reach. Encapsulated state (again, in my dictionary) can be modified, but only through controlled operations.</p></blockquote>
<p>When I was writing my comment in the rudimentary comment box the text just kept growing and growing. Suddenly, the pink borders of that box began flashing with fluid rainbow color gradients. At that point I realized that I should probably dedicate a new post to this subject.</p>
<h4>The Short Answer</h4>
<p>If I want to stay inline with mainstream terminology and common wisdom than I should absolutely have used &#8220;encapsulated&#8221; and in fact, it was exactly the word I was looking for but could not find. Instead, I used the rather blunt &#8220;hidden&#8221;. It is also absolutely true that often the state that I was talking about is still modified using methods or something like it (I tend to prefer <em>message</em>). However, after pondering this question for a bit, I really think at that point I <strong>do</strong> meant <em>hidden</em> so let me show just what I&#8217;m talking about.</p>
<h4>The Long Answer</h4>
<p>Just for kicks, let&#8217;s see what the <a href="http://en.wikipedia.org/wiki/Object-oriented_programming">general consensus</a> has to say about OOP:</p>
<blockquote><p>Object-oriented programming (OOP) is a programming paradigm that uses &#8220;objects&#8221; – data structures consisting of datafields and methods together with their interactions – to design applications and computer programs.</p></blockquote>
<p>Thank the Lord! There is no mention of <code>class</code> or <b>classes</b> in there. I&#8217;ve never edited the global consensus before but if I ever see a mention of one of those words for this particular definition then that&#8217;s going to be the first time. For the rest, the definition is just shit. It sounds like something an anthropologist would jot down when he saw a few programming monkeys doing it in the wild.</p>
<p>If I would be to give a redefined definition of what I said in a previous post than it would be something like:</p>
<blockquote><p>OOP is about programming with objects, only objects and doing it with messages.</p></blockquote>
<p>But I&#8217;m not going to do that. Instead, I&#8217;m going to show the following class:</p>
<pre class="brush:csharp">
class Operation : IExpression
{
    readonly IEnumerable&lt;IExpression&gt; expressions;

    public Operation(IEnumerable&lt;IExpression&gt; expressions)
    {
        this.expressions = Enforce.NotNull(expressions, "expressions");
    }

    public string Compile(IDictionary&lt;string,object&gt; context)
    {
        return new Sequence(this.expressions).Compile(context);
    }
}
</pre>
<p>Hopefully that makes some sense. It is just a simple class that resembles something that can be compiled into code. In my case, I&#8217;m using it to compile to SQL but the pattern is more generally useful. For me this resembles an acceptable piece of OOP and I would argue that the state is completely hidden. Of course, if I put some expressions in there as a client than I know that they ought to be in there somewhere but that is not the point. If I pass an instance of <code>Operation</code> to someone else then he or she would have absolutely no knowledge of what state that object is carrying. The only thing they can rely on is that it probably knows how to do its job and that it has a <code>Compile</code> method that converts it to a string using a <code>IDictionary&lt;string,object&gt;</code> instance.</p>
<p> Continuing with the human analogy, you generally don&#8217;t know what mutable state another human has. You can make some assumptions about it but you can never really know. The only thing you can do is to <em>ask</em> them about it. Even then, they might not want to tell you or in other circumstances they might lie about it so that information is not really something to depend upon. The only thing left to do is to just have them do it and see what they make of it. If you are really insecure about the outcome you can even have multiple people do the same thing concurrently and use the result that suits you most. This solution translates beautifully to software too.</p>
<p>Another problem is that trying to mutate human state &#8211; either for better or worse &#8211; doesn&#8217;t always work. Not everybody likes to learn new things and it also takes a dedicated effort of some form to imprint any kind of paradigm. This is generally annoying but it does mean than an human instance can be easily fed to the next operation. Translated to objects it means that instances should not be forthcoming with regard to mutation of their internal state. In other words, they should offer little opportunity for outside forces to mess with their internal state. In fact, it should be hidden as much as possible because one of the <em>Meticulous Laws</em> tells us that: <strong>&#8220;The less the internal state of a particular instance resembles the messages it can send, the more useful it is.&#8221;</strong>
</p>
<h4>Hide the state! Pull the lever!</h4>
<p>Sorry, I just could not help throwing a <a href="http://www.bay12games.com/dwarves/">Dwarf Fortress</a> reference in there (be sure to <a href="http://www.bay12games.com/support.html">support the toad</a> if you like it). Somehow though, I feel that hiding the state is on par with the importance of pulling a lever (or not pulling a lever for that matter) in Dwarf Fortress. The future of the fort or in our case, the code depends on it. Hiding stuff is important. </p>
<p>For me, one of the big problems with encapsulation is that I&#8217;m now seeing shit like this:</p>
<pre class="brush:csharp">
class Expression
{
    IList&lt;IExpression&gt; expressions = new List&lt;IExpression&gt;();

    public IList&lt;IExpression&gt; Expressions
    {
        get
        {
            return this.expressions;
        }
        set
        {
            this.expressions = value;
        }
    }
}
</pre>
<p>There is usually some other class involved to do the probing of the internal state using the convenient (but wrong) external access methods. And I&#8217;m still being nice, usually, the <a href="http://themeticulousgeek.com/2010/05/04/the-gip/">fuckers</a> don&#8217;t even bother to include properties and/or to adhere to the C# style conventions. They usually write a bunch of nonsense <em>Javafart</em>  or <em>VBShit</em> (or something like that). Usually, this code consists of an humongous amount of <code>getThisMotherfucker</code> or <code>setThatMotherfucker</code> methods that don&#8217;t have anything to do with OOP or <em>encapsulating state</em> for that matter. Let alone <em><b>hiding state</b></em>. For most, encapsulation means wrapping it with yet another class with absolutely no behavior defined at all. It&#8217;s just a bunch of getters and setters passing values all over the place. For me, &#8220;encapsulation&#8221; is somewhat on par with &#8220;data structures consisting of datafields and methods together with their interactions&#8221; (from the general consensus definition for OOP). I don&#8217;t like it because it&#8217;s not strong enough. People are easy to get the wrong impression and thus make a mayor <em>fuckupage</em> of the code.</p>
<h4>Functional, OOP and Prototyping</h4>
<p>There is this interesting dual between FP (functional programming) and OOP. In FP it is all about data. First, analyze the data, then model the data and then start to build your awesome functional library on top of data. When a new operation on the data is requested you are able to smack that bitch in no time but if the data changes, you are fucked because you more than likely have to change a lot of your function definitions. Now look at OOP. You are analyzing the data, modeling the data and then start to build your awesome objects on top of that data. When a new piece of data is added there is no problem, you stuff that in some class, somewhere. However, whenever you a new operation is requested your&#8217;re fucked because you suddenly got to traverse your well defined hierarchies of classes to facilitate for this new functionality. To me, the dualism in this is striking and it actually affects the way you have to think.</p>
<p>After a lot of fail, I found out that there is usually absolutely no need for class hierarchies. Just forget them. If you just consider an object a little piece of functional (immutable) data with accompanying operations then you&#8217;re all set. The only time you need to think about classes proper is when you are refactoring duplicate code. Sometimes, an abstract class here or there can do wonders for your code base. Otherwise, there&#8217;s little use for them &#8211; use interfaces instead. There is also a lot more in common between functional and object oriented programming than might be apparent at first sight.</p>
<p>For me, the only <em>real</em> OO programming language is Smalltalk. It is not just because of the OO optimized syntax but mainly about the fact that it is objects all the way down. Everything, literally everything is an object. Down to the lowest bits of code, everything is an object and everything is done with messages. And even when you&#8217;ve hit the bottom, it goes even further because <a href="http://wiki.squeak.org/squeak/64">the specifications to Smalltalk (aka &#8220;The Blue Book&#8221;)</a> are written in Smalltalk too! Unfortunately it&#8217;s very niche but it still remains as an excellent study object. A lot of techniques are applicable to more pragmatic programming environments and the inner workings of the Smalltalk machine itself are well described in the Blue Book and worth studying and/or trying out in your environment of choice.</p>
<p>I&#8217;m practical though and consider C# a very reasonable compromise. With C# 3.0,  a lot of work was done to move C# into the functional slice and with 4.0 we get to enjoy the dynamic slice of the cake as well. That said though, why I am I even ranting about this obtuse Smalltalk in the first place? Well, it mainly has to do with <em>cloning</em> or <b>copying</b> objects to generate new variations. Another thing that one might notice if he or she would browse the Smalltalk code is that there are a lot of operations but not a whole lot of getters and setters. In fact (and not only in Smalltalk), classes really do tend to <em>hide</em> their state rather than just <em>encapsulate</em> it. A lot of classes that actually do something useful accept a few parameters in their constructor or factory messages and offer a range of operational messages in return. Usually, the actual state that is used or stored isn&#8217;t clear and it really doesn&#8217;t matter because everything useful can be done with operational messages. By this, I mean messages that actually do something useful with the matter at hand instead of bluntly returning the value that is stored inside. Of course you&#8217;ll find some getting and setting but these are never important for that actual problem at hand and usually have to do with a more user friendly way of initializing the orchestra you&#8217;re directing.</p>
<h4>So WTF Is The Point?</h4>
<p>I know there is not really a point in the rant so far. I&#8217;ve babbled somewhat about functional and object oriented programming but what am I really trying to say? Well, it&#8217;s actually very simple:</p>
<blockquote><p>Mutable state is the spawn of the devil</p></blockquote>
<p>Mutable state really is evil and more importantly: often unnecessary.</p>
<p>Programming without mutable state is bliss and this is where functional programming comes in. This school of thought has always avoided mutable state and global state (very evil this! beware of danger!)  and they might be able to learn us some things. Not least on how to actually get anything useful done with this style of programming.</p>
<p>IMHO, you really need to understand a bit about FP to do decent OOP but especially in the future. Nowadays, programmers can still be somewhat lazy and don&#8217;t worry about multi core processing too much but in the future this will simply be not possible anymore. If you insist to write your code in an imperative matter, utilizing mutable global or even local state all over the place, then you <b>will</b> have a hard time adapting to the new paradigm. Functional code (without side-effects) is the future. Microsoft is slowly adapting its community by introducing facades in the form of Linq, Parallel Extensions, Reactive Extensions and maybe even F# itself. By way of these, developers are slowly eased into more functional programming styles without even having a clue. Java has had Scala for a long time and I know that <strong><em>were</em></strong> I programming in a Java oriented environment, this would be one of my favorite puppies.</p>
<p>Learning a bit of functional programming <strong>WILL</strong> (and I don&#8217;t like to shout) make you a better programmer</p>
<h4>Wrapping up</h4>
<p>I can endlessly continue with this stuff but the long answer is getting long enough. In the end I&#8217;m getting more and more convinced that I really meant <em>hidden</em> (versus <em>encapsulated</em>) in the first place even though in that particular post, &#8220;encapsulated&#8221; would probably have been better. There is nothing inherently wrong with exposing the state to be modified by external sources using a logical operation or some other means of encapsulation as long as it is perfectly clear that state is modified. I like it better though when objects expose better and improved objects with new state and characteristics by themselves without me having to mutilate their state. I also like to use objects as seeds for new objects but maybe that&#8217;s just me.</p>
<p>With the fast garbage collectors that we have today, I&#8217;m fighting for more mapping and less mutilation. I&#8217;d rather have a new fresh copy of some kind of object with my desired properties than the same object with some kind of internal state mutilated according to my wishes. When I get a fresh object I&#8217;m free to do whatever I what with it. When I get the same object modified, some other motherfucking object might be hanging on to it causing all kinds of strange things to blow up whenever I try to do something remotely interesting with my latest toy. It also explains why I&#8217;m totally in love with <code>IEnumerable</code>. It&#8217;s powerful yet it doesn&#8217;t allow for people to easily screw up.</p>
<p>In OOP, imperative programming and mutable state remain important and allow us to do useful and powerful things but they should be the exception rather than the norm.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2010/05/10/encapsulating-vs-hiding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The GIP (Guild of Incompetent Programmers)</title>
		<link>http://themeticulousgeek.com/2010/05/04/the-gip/</link>
		<comments>http://themeticulousgeek.com/2010/05/04/the-gip/#comments</comments>
		<pubDate>Tue, 04 May 2010 20:55:23 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=427</guid>
		<description><![CDATA[The Guild of Incompetent Programmers (GIP) is a group of programmers who are doing it wrong. Even though the GIP as a name, entity or organization is not very well known, most people have encountered one of its members or at least work produced by one of its members. There are a lot of sister [...]]]></description>
			<content:encoded><![CDATA[<p>The Guild of Incompetent Programmers (GIP) is a group of programmers who are <a href="http://knowyourmeme.com/memes/youre-doing-it-wrong">doing it wrong</a>. Even though the GIP as a name, entity or organization is not very well known, most people have encountered one of its members or at least work produced by one of its members. There are a lot of sister organizations like the Guild of Incompetent Designers and the Guild of Database Bullies but for now though, I am just going to talk about the GIP.</p>
<p>The members of the GIP can be summarized with the following qualities:</p>
<ul>
<li>big design up front (BDUF)</li>
<li>can only do it imperatively and love global state</li>
<li>do not use the right tool for the job</li>
<li>think OOP is all about classes</li>
<li>solution over problem</li>
<li>are clueless about our field</li>
<li>shy away from learning</li>
<li>cannot use anything but the <a href="http://martinfowler.com/bliki/VersionControlTools.html">shredder</a></li>
</ul>
<p>The GIP as a whole is a group of developers and programmers who enjoy in reinventing the wheel over and over for every problem they face. It might be any combination of sheer obliviousness and/or an angst for new things and threading on unfamiliar territory. Or it might be something else altogether. Anyway, they are doing it wrong and because of this they cause themselves and the rest of the world a lot of problems in the process. </p>
<h4>Big Design Until Fail</h4>
<p>Big Design Up Front (BDUF) is a software fail of global proportions. This probably means that global economy is involved as well so it&#8217;s not a particularly small problem. What amazes me is that I still see cool young people trying to do BDUF when they are fresh out of college (or still learning) but this probably means that a large part of the teaching staff are members of the GIP too. Another explanation might be that these people are so afraid of the actual typing in of code that they try to create a sort of a safety net: if the actual coding fails they will at least have the big design to show for their efforts.</p>
<p>BDUF fails because it is part of some bureaucratic dance that is performed to make one or more people that have absolutely nothing to do with actual development happy. Another way of saying this is that BDUF is just a waste of time. The actual big design is unfortunately useless once you&#8217;re ready to start coding. Although, to be fair, on rare occasions it will hold until the first customer review.</p>
<p>To be clear: there is <strong>absolutely nothing wrong</strong> with doing design or <em>trying to get to know a problem domain</em> with some other means than code. Things just get ugly when <strong>solutions</strong> are designed with some other means than code. It&#8217;s comparable to the idea of building and assembling every component of the metaphorical bridge (on site) 1:1 before building the actual bridge. No engineer in his right mind would even consider this.</p>
<h4>Important!</h4>
<p>Note that I&#8217;m not comparing the actual craft to building a bridge. This would be like saying that writing a book is like building a bridge. Although it would be an interesting philosophical discussion to investigate how far these do align it think most people would agree that writing a book is somewhat like writing a song but nothing like how we actually construct a building or distribute the song. For now though, I am going to leave the rabbit hole of software development metaphors for later and continue with the rant.</p>
<h4>The Imperative Way</h4>
<p>It is not that everybody is doing it. Imperative programming is sometimes required, frequently handy and also sometimes the clearest way to express a solution. Imperative programming in itself is not necessarily bad or wrong but the unwillingness of some people to look into these other paradigms is striking and almost offending. Often, this is exactly the same group of people that just love the global state container, write their stuff in 600+ line of code chunks and feel strangely comfortable when there is a list of 100+ global variable declarations on top of their module, class or whatever top level their using. Unfortunately though, these people are also completely unaware of the impact and consequences that making heavy use of global mutable state (and also local mutable state) may have:</p>
<ul>
<li>threading issues (requires locking)</li>
<li>hard to trace bugs (requires debugging and stepping)</li>
<li>hard to (automatically) test</li>
<li>poor orthogonality</li>
<li>readability most likely suffers</li>
</ul>
<p>Threading issues and hard to trace bugs make the code hard to scale and maintain. Setting up the code base in such a way that lots of mutable state is involved usually implies that testing stuff in isolation quickly becomes difficult or at least very annoying. This in turn often leads to poor orthogonality and an overall poor design which will quickly evolve to a monolithic piece of code that no sane person would like to work on. On top op that, it will also have lot of broken windows all over the place. Now imagine a gigantic pile of shit, which is somewhat the same. Would you like to work on that?</p>
<h4>A Rock and a Stick</h4>
<p>A lot of this is in a separate post but as it also has to do with the unwillingness to learn and the unawareness of those that came before us (history of our field) a few things can still be said. One of the things that I have trouble comprehending is why someone would not be interested in learning about technology, concepts and ideas that are relevant to his or her field of experience. If you can tell me your ideas about games or movies, why can you not tell me the equivalent about the field of your profession? This is the knowledge and experience gathered throughout the times that actually enables us to make our living. More and more of that knowledge becomes available everyday and <del datetime="2010-05-04T18:47:58+00:00">is</del> should be readily accessible for everyone (and that means <em>everyone</em>).</p>
</p>
<p>Nobody can be expected to know everything but you should be able to formulate what interests you in your field of profession. Who are your heroes?  What are you experimenting with? Who do you admire? What magazines or blogs do you read or who&#8217;s feeds are you subscribed to? (feeds? what&#8217;s a feed? you&#8217;re a feed!) Most of the people have not even considered these questions for themselves so there is no reason why they would have an answer. So with a blank stare and thoughts about food or females they continue on their merry way. Rock and stick at the ready.</p>
<h4>OOP: Look Ma &#8211; No Classes!</h4>
<p>Once upon a time, I thought I could handle the big stuff. I was a rock and stick programmer who mastered the rock as well as the stick. But, I was insecure. Until now, on a small scale, my simple creations turned out reasonable well. Yet, <em>how</em> do these really big programs and systems work. How <em>can</em> they work? How can someone develop and maintain them with a <strong>team of people</strong>? How can some actually <em>reason about them without resorting to a bunch of code?</em></p>
<p>Then, I found a job pretty much in my technological hot spot of that time and proudly went out with my polished rock and stick for an interview. I was excited to get the job but quickly found that the simple rock and stick that my education thought me to use so well were not very useful for constructing solutions to real-life problems. Also, I found that the guidelines on how to construct blueprints for the things I was to build were not really applicable. I really tried and my first project went actually pretty well but that was only because I was the only one working on that with full control over everything that went on with it. Doing a little bit of work after-hours was an easy way to pull stuff right back on track and way in front of the schedule. Even if it meant sucking up bad decisions made a few weeks earlier.</p>
<p>So, what does all this stuff have to do with Object Oriented Programming? Well, it was exactly during that time that I found there was something lacking with the whole concept. Of course, I was thought everything about <code>class</code>, <code>interface</code>, <code>override</code>, <code>static</code>, <code>private</code>, <code>virtual</code> and a whole host of other useless stuff and also all the shit about polymorphism and that other important concept that I always forget about (just call it polyotherfuckism, it does not matter). I knew all that religious shit by the letter but eventually found out that none of it really matters. It&#8217;s all just shit. Forget, all those fucking keywords. You know what OOP stands for right? Object Oriented Programming. That means programming with fucking objects. Who the fuck would have thought that huh?</p>
<p>For a while I&#8217;ve been trying to convince my colleagues that OOP is about objects rather than classes but somehow that shit does not sink in very well. They always come up with contrived class hierarchies involving animals or vehicles but unfortunately not one of my projects involved those kinds of entities or such a perfect mapping from example to real-life. Strangely enough, nobody ever turns up with the human analogy even though that one makes the most sense. It just proves that these people do not understand the fundamentals principle to OOP:
</p>
<p><strong><em>Hide</em></strong> mutable state in objects (and everything is an object)</p>
<p>You see, that is not too hard. Just <em>hide</em> the fucking state. Make sure that nobody is mutilating something that is not his or her own. Actually, the part in brackets is the real definition but unfortunately that is too vague for the people who are the target of this rant. To them, I can offer the following consideration to make it extra clear. How would you feel if I asked you: &#8220;can I chew on your fingers for a while please?&#8221;</p>
<p>A lot of object oriented programming languages do not even have classes to begin with. Instead, you just define an object globally that has the properties for a large group of other objects and clone that mother fucker for each new instance that is required in a local scope. It is much more to the how nature works which has mothers (mutual parents) and local variations (trapped in a scope like a valley, mountain top or cave. These are prototype based languages. Sometimes though, it is possible to affect all clones of some object even after they have been instantiated (like in current JavaScript) but while quite powerful, it allows people to easily construct their favorite class based inheritance adapters on top of the language thereby foregoing the much more powerful and arguably more natural prototyping. This is like adding Asian treats to Caucasian Europeans <em>after they are born</em>. A powerful, strange and dangerous concept indeed.</p>
<p>Object oriented programming is not about classes. It is about objects and hiding mutable state within objects to send around as packages to some other part of the system. Objects should not go about mutilating other objects. Instead, they should offer a set of operations that either are safe to call every time you feel like it but <em>ideally offer some kind of mutated version of the truth that cannot be changed but can be used to create a new future truth</em>. Classes have nothing to do with OOP and everything to do with code re-use. Prototyping is king and interfaces rule. Favor composition over inheritance and for the love of God, please forget class hierarchies.</p>
<h4>Don&#8217;t tell me what to do!</h4>
<p>If you want something, say what you want. Do not tell me how to make it or you will regret it later and try to blame it on me. It&#8217;s that easy. To stick in another fucking analogy: if my car makes a stupid noise I go the garage and say: &#8220;get rid of that fucking noise.&#8221; I do not say: &#8220;change this part and that part and maybe that part and then check that and then also that that motherfucking other piece of shit that&#8217;s supposed to be working in tandem with that other piece of crap&#8230;&#8221;.</p>
<p>I do not tell them what to do. I tell them what the outcome should be and let them figure out the path to arrive there. And this shit is true not just for people, it also holds up when your coding. Treat objects like people. Make them responsible for their tasks and depend on them to do the right thing. You&#8217;re the <em>orchestrator</em> making stuff dance or perform to your will. Don&#8217;t try to be the <em>dictator</em>.</p>
<p>If you are someone in charge of managing developers please know that we are only here to please you. But please tell me what you want, not how want to have it done. Otherwise, hire some monkeys.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2010/05/04/the-gip/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>YMFUHBML</title>
		<link>http://themeticulousgeek.com/2010/05/04/ymfuhbml/</link>
		<comments>http://themeticulousgeek.com/2010/05/04/ymfuhbml/#comments</comments>
		<pubDate>Tue, 04 May 2010 09:33:33 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[madness]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/2010/05/04/axmlymfuhbml/</guid>
		<description><![CDATA[YMFUHBML is a new form of markup language that I just invented. It stands for Your Mother’s Fucked Up Home Brew Markup Language. Actually, I only invented the acronym as the credit for the actual language specification goes to the International Guild of Incompetent Programmers. YMFUHBML is designed to fuck up your mind and your [...]]]></description>
			<content:encoded><![CDATA[<p><strong>YMFUHBML</strong> is a new form of markup language that I just invented. It stands for <em>Your Mother’s Fucked Up Home Brew Markup Language</em>. Actually, I only invented the acronym as the credit for the actual language specification goes to the International Guild of Incompetent Programmers. </p>
<p>YMFUHBML is designed to fuck up your mind and your XML parsing techniques. Whether your using <code>XmlReader</code>, <code>XmlDocument</code> or some other standards based solution, YMFUHBML is guaranteed to break it because, believe it or not, in one document it manages to break two important rules that are associated with <em>real</em> XML documents (there might be more discrepancies but these two annoy me the most):</p>
<ul>
<li>XML documents should have a single root node </li>
<li>Attributes consist of name-value pairs</li>
</ul>
<p>Not too hard now is it? I though so too but apparently some people (like the designer of YMFUHBML) even manage to screw this simple stuff. Take a look at the following horror which resembles a response message that I had to accept a while ago:</p>
<pre class="brush:xml">&lt;status&gt;ok&lt;/status&gt;
&lt;message&gt;the request has been successfully received&lt;/message&gt;
&lt;file file.001&gt;
foo
bar
quux
&lt;/file&gt;
&lt;file file.002&gt;
baz
&lt;/file&gt;
</pre>
<p>And yes, those are the complete contents of the response I get. Now to be honest, parsing this is not hard but my pet peeve is with the fact that some people who should know better mistakenly think this is XML when it is actually YMFUHBML. Where the single root node we all know and love? And what the fuck is that file stuff supposed to be?</p>
<p>If you&#8217;re not going to adhere to what XML is supposed to be then why the fuck are you using those motherfucking tags to add structure? Please, stop doing stuff like this that because it is wrong and gives the impression that you are a business developer who maybe should consider moving to another field of profession.</p>
<p>XML is so simple yet every time I hear that someone is going to give me some XML to consume I get YMFUHBML instead. In the end it all boils down to <a href="http://themeticulousgeek.com/2009/12/07/about-being-agile/">common problems like people reinventing the wheel and not using the right tool for the job</a> which is causing a lot of unnecessary friction and annoyance.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2010/05/04/ymfuhbml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About Being Agile</title>
		<link>http://themeticulousgeek.com/2009/12/07/about-being-agile/</link>
		<comments>http://themeticulousgeek.com/2009/12/07/about-being-agile/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 23:18:56 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[madness]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=308</guid>
		<description><![CDATA[The powers that be probably won&#8217;t like it all that much but programming remains an art. To those who want to argue that it is a craft instead I say: a craft is just a special form of art. So we are both right. That doesn&#8217;t have a lot to do with the stuff below [...]]]></description>
			<content:encoded><![CDATA[<p>The powers that be probably won&#8217;t like it all that much but programming remains an <strong>art</strong>. To those who want to argue that it is a <em>craft</em> instead I say: a craft is just a special form of art. So we are both right. That doesn&#8217;t have a lot to do with the stuff below but I wanted to get it out of the way nevertheless. The problem is that there is a large class of programmers who don&#8217;t share this opinion. There is even a special name for them: <em>non programmers</em>. In this post I like to talk about them for a bit.</p>
<h4>Programmers in Disguise</h4>
<p>If you consider yourself a programmer (maybe even a good programmer) then consider this: how many of the great people in our field do you actually know? For example, do you know who Jim Gray was? Alan Kay or Adele Goldberg perhaps? Martin Fowler? Edsger Dijkstra maybe? Yukihiro Matsumoto a.k.a. Matz? Why the Lucky Stiff? Guido van Rossum? Simon Peyton Jones? Alonzo Church? John Backus? Anders Hejlsberg? Not to mention a whole host of other giants. Most of them still active today. Note that I was about to link all those people to their respective pages but that was just starting to look like a giant search engine lure. If you really want to know more about them then I recommend Google videos. You&#8217;re abound to find some other interesting links too to start your research with.</p>
<p>Who doesn&#8217;t know about <a href="http://en.wikipedia.org/wiki/Douglas_Engelbart">Douglas Engelbart</a> with the <a href="http://video.google.com/videoplay?docid=-8734787622017763097&#038;q=engelbart#">Mother of all Demos</a> in <strong>1968</strong>!. Shame on you if you have not seen this before.</p>
<p>Some of the people I talk to and that pretend to be programmers haven&#8217;t even heard of these people. Now, that&#8217;s not too bad in itself. Knowing these guys doesn&#8217;t make you a better programmer but it does show something about the passion you have for the field that you are working in. It&#8217;s not whether you know them or not &#8211; it is about the desire you have to learn about them (you can abstract this to <em>it&#8217;s not whether you know [A; B; n] or not &#8211; it&#8217;s about your desire to learn about [A; B; n]</em>). Most of the times, they just shrug their shoulders and off they are, on their merry if-while-case away.</p>
<p>Often, I encounter this attitude with business people who know a little bit about programming. Maybe they programmed a VB app in the 90&#8242;s or maybe they know either the SQL Query Designer or (everyones favorite) FrontPage just a little bit too well. Sprinkle that with a suit and smooth talking skills and you have yourselves a business programmer. Usually, these guys are living in an ancient world where only <code>while</code>, <code>if</code> statements and global state seem to exist. The unfortunate fact is that they somehow seem to be able to <em>get things done</em> without any respect for the <em>art</em> (or <em>craft</em> if you insist). I can only use the words of Prince (as I ironically like to call him) when I say that those dudes still party like it it&#8217;s 1999. In fact, it&#8217;s even slightly worse but unfortunately that&#8217;s the best I can come up with so I&#8217;m being lenient.</p>
<p>A lot of times, these are the same guys that breed giganormous <code>if</code>-trees of <code>loop</code>, more <code>if</code>, <code>while</code>, more <code>loop</code>, <code>case</code> (we&#8217;re talking some serious VB here), even more <code>while</code>, more <code>if</code>, even some more <code>if</code>, another <code>while</code>, yet another <code>while</code>, yet even more <code>if</code> and then another <code>case</code> for good measure all in some humongous monster of donkey eating, steel shitting angry pile of smelly thing that those dudes like to call <code>Sub</code>.</p>
<p>Sometimes they even dare to call it a <code>Function</code> but at this point it doesn&#8217;t even matter anymore. You could just as well call it <code>SmellyPileOfCrap Foo</code> and nobody would even care. It would not even be <em>that</em> bad but the worst part is that all of this is copied meticulously over from another +6000 line method that does exactly the same as the other one except for one or two lines that are apparently not worthy enough to be duplicated. But then again, things only get really interesting when you find the same pile of crap duplicated across a bunch of other piles of shit. It&#8217;s like finding a cake of shit with other kind of shit sprinkled on top and then finding that same cake four or five times more in unsuspected places all scattered in something that resembles your house. It&#8217;s all one big fantastic <em>crapfestaciacious</em> vision of <em>crapunholiness</em>.</p>
<h4>Just Being Pragmatic</h4>
<p>Oh my sweet Jesus, do I like to talk about being pragmatic? Hell yes! See, you weren&#8217;t expecting for me to answer that question did you? You just <em>assumed</em> I was asking one of those fancy so called <em>rhetorical</em> questions? Well let me tell you sonny: <strong>assumption is the mother of all fuck-ups!</strong> And yes, I am aware that this quote is from an incredibly <a href="http://www.imdb.com/name/nm0091899/"><del datetime="2009-12-07T21:27:49+00:00">bad</del> movie</a>.</p>
<p>Still though, there is something magical about being pragmatic. Just look at the <a href="http://www.google.com/dictionary?aq=f&#038;langpair=en|en&#038;hl=en&#038;q=pragmatic">fucking definition</a> that Google gives us:</p>
<blockquote><p><em>pragmatic</em><br />
A pragmatic way of dealing with something is based on practical considerations, rather than theoretical ones. <br/>A pragmatic person deals with things in a practical way.</p></blockquote>
<p>You know those <em>agile</em> guys? They are being pragmatic. You know what? Those functional guys? They are being pragmatic too. Just in a crazy mathematical kind of way. Those Ruby guys? Pragmatic. Python? Pragmatic. Lisp fanatics? Pragmatic. Unix kernel hackers? Pragmatic. The absolutely waziliously huge PHP community? Just being pragmatic (well maybe not <em>all</em> of them).</p>
<p>Looking at the definition, that sounds like something a business person would love. It even goes so far as to tell us that a pragmatic person deals with problems &#8220;based on <strong>practical considerations, rather than</strong> <em>theoretical ones</em>&#8220;. Now what&#8217;s not to like about that from a business perspective? In reality though it means a bunch of so called coding <em>craftsmen</em> working their ass off with the simple tools they have. From my perspective, it&#8217;s like watching a bunch of cavemen trying to rebuild the Twin Towers with a rock and a stick. The only unfortunate part that I am one of those cavemen. </p>
<p>So apparently, at least from this perspective, being pragmatic means behaving like a software cavemen and treat everything with familiar tools: a rock and a a stick. Or respectively, in our case, a <code>while</code>. and an <code>if</code>. The sad conclusion is that most of the industry is either not doing <em>it</em> or we are <a href="http://knowyourmeme.com/memes/youre-doing-it-wrong"><em>doing it wrong</em></a>.</p>
<p>Those business people should like <em>being pragmatic</em> too but unfortunately they don&#8217;t think <em>being agile</em> is cool. They also don&#8217;t like someone <em>hacking</em> on their <em>precious</em> code. I can&#8217;t tell them a piece of code is shit anymore. I have to tell them that it is not exactly what I would&#8217;ve written. Even if the piece of code is something I wrote myself a few weeks earlier. They like guys who are being pragmatical by throwing a bunch of copied <code>while</code> and <code>if</code> loops at a problem until the problem seems to be solved. Then, when a few weeks later the issue regresses it is registered as new and solved by throwing yet another rock and stick, doing the lucky dance and hoping that no new bugs crop up.</p>
<p>The powers that be once told me to implement a look-ahead search for one of our websites. Unfortunately, the look-ahead would need to function with a particularly awkward set of columns and I knew this wasn&#8217;t going to happen with our current setup. First, I tried to convince them to building a set of indices for that particular set of columns so we could get to the results more efficiently. The fact that stuff would not be <em>real time</em> was just too much. Then, I tried asking for more raw power but in the end, the reply I got was a casual: &#8220;Google can do it too, so we can too&#8221;. Now <em>that</em> is being pragmatic I tell ya. Those so called <em>pragmatic</em> guys I mentioned before should take a page from his book and just take a look at Google.</p>
<div style="text-align:center">
<img style="border: solid 2px #5f5f5f;  margin-right: 16px" src="http://themeticulousgeek.com/wp-content/google-can-pub.png" />
</div>
<h4>Bonus</h4>
<p>In fact, there&#8217;s another useful abstraction that I think of now that I&#8217;m writing this. If you are wondering whether some [A; B; n] is the right thing to do, ask yourself this: what if everyone did [A; B; n]? If the outcome is a positive vision then its probably the right thing to do.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2009/12/07/about-being-agile/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Extreme Advertising</title>
		<link>http://themeticulousgeek.com/2009/10/21/extreme-advertising/</link>
		<comments>http://themeticulousgeek.com/2009/10/21/extreme-advertising/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 16:42:34 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[creation]]></category>
		<category><![CDATA[unrelated]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=300</guid>
		<description><![CDATA[Couldn&#8217;t resist creating this. I seem to have been spending too much time over at knowyourmeme lately. In other news, a big post is coming up soon. I just don&#8217;t know about what it is going to be yet.]]></description>
			<content:encoded><![CDATA[<p>Couldn&#8217;t resist creating this. I seem to have been spending too much time over at <a href="http://knowyourmeme.com/">knowyourmeme</a> lately.</p>
<div style="text-align:center;padding-bottom:24px;padding-top:16px">
<img src="http://themeticulousgeek.com/wp-content/carrots.png" style="border:solid 1px white"/>
</div>
<p>In other news, a big post is coming up soon. I just don&#8217;t know about what it is going to be yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2009/10/21/extreme-advertising/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Achievement Unlocked: RROD</title>
		<link>http://themeticulousgeek.com/2009/09/14/achievement-unlocked-rrod/</link>
		<comments>http://themeticulousgeek.com/2009/09/14/achievement-unlocked-rrod/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 08:16:16 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[fuckups]]></category>
		<category><![CDATA[madness]]></category>
		<category><![CDATA[xbox]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/2009/09/14/new-achievement-rrod/</guid>
		<description><![CDATA[About a year ago, my brother and I were playing Guitar Hero 3 on PS3 and really wanted to play Rock Band instead. Unfortunately, the game was nowhere to be found for that particular system but we did manage to find it for the Xbox 360. So, instead we bought that version, the Band in [...]]]></description>
			<content:encoded><![CDATA[<p>About a year ago, my brother and I were playing Guitar Hero 3 on PS3 and really wanted to play Rock Band instead. Unfortunately, the game was nowhere to be found for that particular system but we did manage to find it for the Xbox 360. So, instead we bought that version, the Band in a Box instrument kit and also an Xbox 360 console and life was good.</p>
<p>Over the course of last year, the amount of games and the time I played that console grew larger and larger and now it&#8217;s definitely the most played console in my house. At least, until three minutes past five yesterday. After spending the last few days achievement hunting together with my brother we managed to <em>unlock</em> the infamous red ring of death.</p>
<div style="text-align:center;padding-bottom:16px"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Jkr3_dj9Mc8&amp;hl=en&amp;fs=1&amp;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Jkr3_dj9Mc8&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></div>
<p>Before that, I was hoping (but never fully confident) that my Xbox would be devoid of any problems. Sadly, I was wrong and it seems that the buzz around the failure rate of Microsoft&#8217;s console is not entirely unjustified.</p>
<p>The good news is that I can send it back to Microsoft for repairs for free. The bad news is that repairs will take two to three weeks and I&#8217;ll be damned if my two days old copy of GH5 has to gather dust for all that time.</p>
<p>So this afternoon, my brother will pickup a new Xbox and we will just transfer the HD from the broken one as it has to be removed before sending it anyway. In the end this means that we will have two Xboxes but that&#8217;s not a problem. We&#8217;ll just put one at my parents house and use that for backup in case the new one decides to bail out too.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2009/09/14/achievement-unlocked-rrod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More The Guild!</title>
		<link>http://themeticulousgeek.com/2009/08/20/more-the-guild/</link>
		<comments>http://themeticulousgeek.com/2009/08/20/more-the-guild/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 16:16:50 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[theguild]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xbl]]></category>
		<category><![CDATA[xbox]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=281</guid>
		<description><![CDATA[Finally! After waiting eagerly for months and checking the XBL videos at least every two days, the good news has arrived: season 3 starts the 25th of August! If you don&#8217;t know what The Guild is, go check that link now even if you are not a gamer or not really into MMO&#8217;s (like me). [...]]]></description>
			<content:encoded><![CDATA[<p>Finally! After waiting eagerly for months and checking the <a href="http://marketplace.xbox.com/en-US/videos/default.htm">XBL videos</a> at least every two days, the good news has arrived: season 3 starts the 25th of August! If you don&#8217;t know what <a href="http://www.watchtheguild.com/">The Guild</a> is, go check that link now even if you are not a gamer or not really into MMO&#8217;s (like me).</p>
<div style="text-align:center"><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/urNyg1ftMIU&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/urNyg1ftMIU&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></div>
<p style="margin-top:16px">And the good stuff doesn&#8217;t stop there because they also released this awesome music video! Always a sucker for these upbeat dance tracks I really dig it and somehow find the slow-mo editing (or whatever they call that) strangely exciting. By the way, this effect looks especially great on the background layer with <a href="http://www.watchtheguild.com/characters/tinkerballa/">Tinkerballa</a> (Amy Okuda) who is mesmerizing even when she is not dancing so hot.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2009/08/20/more-the-guild/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syntax Highlighting Test</title>
		<link>http://themeticulousgeek.com/2009/06/25/syntax-highlighting-test/</link>
		<comments>http://themeticulousgeek.com/2009/06/25/syntax-highlighting-test/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 08:12:17 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=264</guid>
		<description><![CDATA[Below is some JavaScript code to see if the syntax highlighting is working. $(document).ready(function() { $('.with-default').focus(function() { if($(this).val() == $(this).attr('default')) { $(this).val('').removeClass('with-default'); } }).blur(function() { if($(this).val() == '') { $(this).val($(this).attr('default')).addClass('with-default'); } }); }); Now fingers crossed that it works&#8230;]]></description>
			<content:encoded><![CDATA[<p>Below is some JavaScript code to see if the syntax highlighting is working.</p>
<pre class="brush:js">
$(document).ready(function() {
  $('.with-default').focus(function() {
    if($(this).val() == $(this).attr('default')) {
      $(this).val('').removeClass('with-default');
    }
  }).blur(function() {
    if($(this).val() == '') {
      $(this).val($(this).attr('default')).addClass('with-default');
    }
  });
});
</pre>
<p>Now fingers crossed that it works&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2009/06/25/syntax-highlighting-test/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Guitar Hero World Tour Controllers</title>
		<link>http://themeticulousgeek.com/2008/11/28/guitar-hero-world-tour-controllers/</link>
		<comments>http://themeticulousgeek.com/2008/11/28/guitar-hero-world-tour-controllers/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 11:21:05 +0000</pubDate>
		<dc:creator>basp</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[guitarhero]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[xbox]]></category>

		<guid isPermaLink="false">http://themeticulousgeek.com/?p=233</guid>
		<description><![CDATA[Rythm games rule! After playing a good deal of Guitar Hero III and Rock Band for the last two months, Guitar Hero World Tour finally arrived Wednesday last week. The included tracklist is cool and pretty extensive. Unfortunately though, within a week I encountered some game stopping problems with the included guitar and drum kit [...]]]></description>
			<content:encoded><![CDATA[<p>Rythm games rule! After playing a good deal of Guitar Hero III and Rock Band for the last two months, Guitar Hero World Tour finally arrived Wednesday last week. The included tracklist is cool and pretty extensive. Unfortunately though, within a week I encountered some game stopping problems with the included guitar and drum kit controllers.</p>
<p>First, the guitar. After playing maybe a total of four or five hours, the day after the game arrived, the strum button started making this horrible and annoying squeaking sound. Sometimes it seems to quiet down only to get really annoying again half a minute later. It is still usuable but I have to turn up the volume of my sound system pretty high in order to not get distracted by the squeaking. It is worst when alternate strumming which is unfortunate because I really drove myself to perfect the technique whilst playing GH3.</p>
<p>Next up is the drum kit. After reading about (but luckely not encountering) the problems with the RB drum kit I had pretty high expectations of the GHWT drum kit. Turns out these where misplaced. It looks and feels great (especially the sound and bounce on the pads) and works beautifully with Rock Band. However, after exactly one week, during &#8220;The Hand that Feeds&#8221; (on RB, using the GHWT kit) the green drum pad stopped working completely. At first I thought it might be just a temporary glitch so I tried with the GHWT disc but (not surprisingly) the green pad still wasn&#8217;t working. </p>
<p>So now I am not happy at all (and that is putting it mildly). The guitar controller is so annyoing it is almost unplayable and the drum kit is so broken that it <em>is</em> unplayable. But not only that, I also loose a good deal of my spare time dealing with support and sending the stuff back. This is what annoys me the most of all because that should&#8217;ve been time playing the game.</p>
<p>Ah well, fortunately though the Rock Band instruments are still working perfectly (even the flimsy kick pedal is still going strong) which is admittely not something that I expected a while ago when I first started playing. Now I can only hope for the same kind of luck with the Rock Band 2 controllers &#8211; if that game ever arrives in Europe that is.</p>
]]></content:encoded>
			<wfw:commentRss>http://themeticulousgeek.com/2008/11/28/guitar-hero-world-tour-controllers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
