<?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-816423294913508661</id><updated>2012-01-26T20:10:07.302-08:00</updated><category term='c#'/><category term='Rx'/><category term='object database'/><category term='dependency injection'/><category term='design patterns'/><category term='factory pattern'/><category term='Reactive Framework'/><category term='Reactive Programming'/><category term='Complex Event Processing'/><category term='.net'/><category term='observer pattern'/><category term='philosophy'/><category term='game'/><category term='Event Stream Processing'/><category term='inversion of control'/><title type='text'>We Fearless Ones</title><subtitle type='html'>My thoughts while I try to answer the big questions in life.  Like, should I hang out the washing or have another coffee?  (Some questions are easier than others)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-7571370405237117626</id><published>2011-03-22T02:13:00.000-07:00</published><updated>2011-03-22T02:13:59.899-07:00</updated><title type='text'>PS3 Story on Target</title><content type='html'>I got interviewed by Target the other day, so I might be on TV3 some Tue soon.  They have a few other customer stories and they're going to ring Sony directly, so it should be interesting to watch.&lt;br /&gt;&lt;br /&gt;I took down the PDF of the court ruling because it had my name, address and phone number.  TV3 suggested it might be a good idea before the programme's screened.  If you need it, let me know and I'll black out the personal bits and republish.&lt;br /&gt;&lt;br /&gt;Otherwise, the main posts and comments for the PS3 hearing are &lt;a href="http://we-fearless-ones.blogspot.com/2009/05/playstation-3-durability-courts-ruling.html"&gt;here&lt;/a&gt; and &lt;a href="http://we-fearless-ones.blogspot.com/2009/06/disputes-tribunal-ruling.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-7571370405237117626?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/7571370405237117626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2011/03/ps3-story-on-target.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/7571370405237117626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/7571370405237117626'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2011/03/ps3-story-on-target.html' title='PS3 Story on Target'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-4005924297899699497</id><published>2010-01-31T21:43:00.000-08:00</published><updated>2010-01-31T22:13:01.277-08:00</updated><title type='text'>The Repository Pattern and Linq</title><content type='html'>I've just been around the block with the Repository pattern and Linq, and here are my thoughts.&lt;br /&gt;&lt;br /&gt;The Repository pattern is designed to hide all data access concerns behind a facade, so for clients of the repository, quite simply, there is no Linq.  I've seen a lot of people try to have their cake and eat it too, where they put the repository pattern in place then try all manner of witchcraft to let the client use Linq through it.  This is bad.  This is ice-skating uphill.  Don't do it.&lt;br /&gt;&lt;br /&gt;If you have a small project and want to use Linq for business logic, don't use the Repository pattern.  If you have a large project and want a testable facade, or a storage agnostic repository, use the pattern, but make sure you pass domain objects to it, not data access objects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-4005924297899699497?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/4005924297899699497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2010/01/repository-pattern-and-linq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/4005924297899699497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/4005924297899699497'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2010/01/repository-pattern-and-linq.html' title='The Repository Pattern and Linq'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-93841582613112548</id><published>2009-11-11T22:04:00.000-08:00</published><updated>2009-11-11T22:08:19.514-08:00</updated><title type='text'></title><content type='html'>Blogging velocity has slowed somewhat. Probably because there was so much code to post on my Rx Framework attempt I ran out of gas, then we had a baby. So bugger it, I wont post nothing on it and continue as if I wasn't going to.&lt;br /&gt;&lt;br /&gt;So, I'm on the deck bbqing some chicken with a beer and laptop. &amp;nbsp;What to post?&lt;br /&gt;&lt;br /&gt;I'll reflect on work. Fun times.&lt;br /&gt;&lt;br /&gt;Over the last several years I've been building an Ajax UI framework for porting Windows applications to the web. &amp;nbsp;The first version only worked in IE and I've been working on the next version which will, theoretically, work in all browsers. But now a client is paying to have the first version work in FireFox and Safari as well.&lt;br /&gt;&lt;br /&gt;I can't say I mind this too much and it (touch-wood) is turning out to be easier than I though. &amp;nbsp;Although I realise the devil is in IE6.&lt;br /&gt;&lt;br /&gt;First step: Consistent look in IE7+, FF and Safari. Get everything looking the same- it doesn't have to be pretty but if all browsers start with the same foundation that isn't too bad, it can be improved from there.&lt;br /&gt;&lt;br /&gt;This turned out easier than I thought by using the strict doctype and a good CSS reset. Removing any -moz- styles and the odd JavaScript fix for FF.&lt;br /&gt;&lt;br /&gt;Second step: Consistent&amp;nbsp;behaviour.&lt;br /&gt;&lt;br /&gt;Third step: Carefully get it working in IE6.&lt;br /&gt;&lt;br /&gt;Fourth step: Make it pretty.&lt;br /&gt;&lt;br /&gt;My chicken is burning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-93841582613112548?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/93841582613112548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/11/blogging-velocity-has-slowed-somewhat.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/93841582613112548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/93841582613112548'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/11/blogging-velocity-has-slowed-somewhat.html' title=''/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-7821623495811495496</id><published>2009-07-19T00:28:00.000-07:00</published><updated>2009-11-03T22:57:19.429-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rx'/><category scheme='http://www.blogger.com/atom/ns#' term='Reactive Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Reactive Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Complex Event Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='design patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Event Stream Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='observer pattern'/><title type='text'>.NET Reactive Framework</title><content type='html'>In our game, stories are first-class beings -&amp;nbsp;&amp;nbsp;invisible meddlers. They move around, observe and manipulate the world according to their plot. They wait for triggering conditions or patterns of events to occur, and then spring to life to advance the story.&lt;br /&gt;&lt;br /&gt;In our case, we have an evil story waiting for the betrayal of a paladin. When this happens, the story will unravel a series of events, involving a horror, a child's toy and a man with a poisoned name.&lt;br /&gt;&lt;br /&gt;How does the story listen out for the betrayal? Our game follows an event-driven design so we'll need to do some event-processing.&lt;br /&gt;&lt;br /&gt;I recently saw Erik Meijer's presentation on .NET's up and coming &lt;a href="http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Brian-Beckman-and-Erik-Meijer-Inside-the-NET-Reactive-Framework-Rx/"&gt;Reactive Framework (Rx)&lt;/a&gt;, which looks pretty cool and the right tool for the job. There are already a couple of other reactive programming frameworks out there, like &lt;a href="http://www.codeplex.com/clinq"&gt;Continous LINQ&lt;/a&gt; and &lt;a href="http://tomasp.net/blog/reactive-ii-csevents.aspx"&gt;Reactive LINQ&lt;/a&gt;, but I thought it would be interesting to see what's involved in writing one, so here we go.&lt;br /&gt;&lt;br /&gt;Rx is the mathematical inverse of IEnumerable, dubbed IObservable.  So instead of being able to iterate over a stream of objects you get to listen to a stream of events.&lt;br /&gt;&lt;br /&gt;No big deal really, but the cool thing is that it supports Linq, so you can query over event streams.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;IObservable&amp;lt;ICombatCommand&amp;gt; paladinFleeCmds =&lt;br /&gt;  from cmd in CombatMediator.CombatCommands&lt;br /&gt;  where cmd.CommandType == CommandType.Flee &amp;amp;&amp;amp;&lt;br /&gt;        cmd.Subject.CharacterType == CharacterType.Paladin&lt;br /&gt;  select cmd;&lt;br /&gt;&lt;br /&gt;paladinFleeCmds.Subscribe(cmd =&amp;gt;&lt;br /&gt;  {&lt;br /&gt;    IStoryPoint betrayal = new Betrayal(cmd.Subject);&lt;br /&gt;    story.RegisterStoryPoint(betrayal);&lt;br /&gt;  });&lt;/pre&gt;&lt;br /&gt;I'll post how to implement this kind of Linq-to-Events shortly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-7821623495811495496?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/7821623495811495496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/07/net-reactive-framework.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/7821623495811495496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/7821623495811495496'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/07/net-reactive-framework.html' title='.NET Reactive Framework'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-1174947421527566675</id><published>2009-06-28T19:18:00.001-07:00</published><updated>2009-07-18T01:09:18.432-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='object database'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>db4o - an Object-Database</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;b&gt;Versant&lt;/b&gt; have come up with an &lt;b&gt;object-database&lt;/b&gt; that is very easy to use.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In some cases, &lt;b&gt;performance&lt;/b&gt; might not be there when you need it, but when this isn't a problem the benefits easily stack up.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color:#3333FF;"&gt;const string&lt;/span&gt; dbFile = &lt;span style="color:#990000;"&gt;@"C:\FearlessOnes\db\Monsters.db"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;IMonster&lt;/span&gt; monster = &lt;span style="color:#3333FF;"&gt;new &lt;/span&gt;&lt;span style="color:#339999;"&gt;Horror&lt;/span&gt;(&lt;span style="color:#990000;"&gt;"Atlach-Nacha"&lt;/span&gt;,&lt;br /&gt;                              &lt;span style="color:#990000;"&gt;"Spinner in Darkness"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;// If the database doesn't exist, it will be created&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333FF;"&gt;using&lt;/span&gt; (&lt;span style="color:#339999;"&gt;IObjectContainer&lt;/span&gt; db = &lt;span style="color:#339999;"&gt;Db4oFactory&lt;/span&gt;.OpenFile(dbFile))&lt;br /&gt;{&lt;br /&gt;  db.Store(monster);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Nice and easy. Linq is also supported,&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color:#3333FF;"&gt;using&lt;/span&gt; (&lt;span style="color:#339999;"&gt;IObjectContainer&lt;/span&gt; db = &lt;span style="color:#339999;"&gt;Db4oFactory&lt;/span&gt;.OpenFile(dbFile))&lt;br /&gt;{&lt;br /&gt;  monster = (&lt;span style="color:#3333FF;"&gt;from&lt;/span&gt; &lt;span style="color:#339999;"&gt;IMonster&lt;/span&gt; m &lt;span style="color:#3333FF;"&gt;in&lt;/span&gt; db.Query(&lt;span style="color:#3333FF;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#339999;"&gt;IMonster&lt;/span&gt;))&lt;br /&gt;             &lt;span style="color:#3333FF;"&gt;where&lt;/span&gt; m.Name == &lt;span style="color:#990000;"&gt;"Atlach-Nacha"&lt;/span&gt;&lt;br /&gt;             &lt;span style="color:#3333FF;"&gt;select&lt;/span&gt; m).Single();&lt;br /&gt;&lt;br /&gt;  monster.Mode = &lt;span style="color:#339999;"&gt;MonsterMode&lt;/span&gt;.Hungry;&lt;br /&gt;  db.Store(monster);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Just reference one DLL, or two if you want to use Linq, and you're smiling.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;A great tool for developing the domain layer, even if you plan to use a relational database later. Download it &lt;a href="http://www.db4o.com/DownloadNow.aspx"&gt;here&lt;/a&gt;. The documentation is also very good.&lt;/p&gt;&lt;br /&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/816423294913508661-1174947421527566675?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/1174947421527566675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/06/db4o-object-database.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/1174947421527566675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/1174947421527566675'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/06/db4o-object-database.html' title='db4o - an Object-Database'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-3614028110210696729</id><published>2009-06-28T00:22:00.000-07:00</published><updated>2009-07-18T00:53:34.047-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inversion of control'/><category scheme='http://www.blogger.com/atom/ns#' term='dependency injection'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='design patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='factory pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='observer pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Inversion of Control (IoC)</title><content type='html'>&lt;p&gt;In our game, a monster wakes up because some players have entered its domain.  It's in a dark corner, so it waits for the players to pass by and then lunches them.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Assuming the flow of control starts with the monster object, how does it communicate its intentions to the combat system?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;1) The &lt;b&gt;direct approach&lt;/b&gt; would be for the monster to &lt;b&gt;create and reference&lt;/b&gt; the combat system.&lt;/p&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Monster : ICreature&lt;br /&gt;{&lt;br /&gt;  &lt;span class="kwrd"&gt;private&lt;/span&gt; DefaultCombatSystem combatSystem =&lt;br /&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DefaultCombatSystem();  &lt;span class="rem"&gt;// Bad&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetUpToNoGood()&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;    ICommand command = &lt;span class="kwrd"&gt;new&lt;/span&gt; LunchPlayers(players);&lt;br /&gt;    IResponse response =&lt;br /&gt;              combatSystem.HandleCommand(&lt;span class="kwrd"&gt;this&lt;/span&gt;, command);&lt;br /&gt;    &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;But this comes with a raft of &lt;b&gt;problems&lt;/b&gt;. The least of which is when the combat system changes, the monster will need updating.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;2) A &lt;b&gt;better approach&lt;/b&gt; is to refer to an &lt;b&gt;interface&lt;/b&gt; for combat systems rather than a particular implementation. This will save on the refactoring. The monster can also ask a &lt;b&gt;factory&lt;/b&gt; for the combat system that implements this interface. This adds a dependency on a factory however, which is not ideal.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So instead we &lt;b&gt;inject&lt;/b&gt; the combat system into the monster. This is known as &lt;b&gt;dependency injection&lt;/b&gt; and removes the monster's dependency on a &lt;b&gt;concrete&lt;/b&gt; combat system or factory.&lt;/p&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Monster : ICreature&lt;br /&gt;{&lt;br /&gt;  &lt;span class="kwrd"&gt;private&lt;/span&gt; ICombatSystem combatSystem;  &lt;span class="rem"&gt;// Better &lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span class="rem"&gt;// Constructor injection &lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; Monster(ICombatSystem combatSystem)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.combatSystem = combatSystem;&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;This would be perfect for things a monster does depend on, like its stomach, but the combat system doesn't belong here.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;3) An &lt;b&gt;even better approach&lt;/b&gt; is to expose an &lt;b&gt;event&lt;/b&gt; that the monster fires. This frees the monster from combat system concerns altogether, so it can concentrate on what monsters do best.&lt;/p&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CommandHandler(ICommand command);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Monster : ICreature&lt;br /&gt;{&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; CommandHandler Command;  &lt;span class="rem"&gt;// Best&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetUpToNoGood()&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;    ICommand command = &lt;span class="kwrd"&gt;new&lt;/span&gt; LunchPlayers(players);&lt;br /&gt;    Command(&lt;span class="kwrd"&gt;this&lt;/span&gt;, command);&lt;br /&gt;    &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Wiring up the event,&lt;/p&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DefaultCombatSystem : ICombatSystem&lt;br /&gt;{&lt;br /&gt;  &lt;span class="kwrd"&gt;private&lt;/span&gt; IList&amp;lt;ICreature&amp;gt; creatures;&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddCreature(ICreature creature)&lt;br /&gt;  {&lt;br /&gt;    creatures.Add(creature);&lt;br /&gt;    creature.Command += OnCommand;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnCommand(ICommand command)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="rem"&gt;// Handle the command &lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;This is the &lt;b&gt;observer&lt;/b&gt; design pattern using events.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Control has shifted to the combat system now. It references the monster and will make the required calls to resolve the combat.  This is known as &lt;b&gt;inversion of control (IoC)&lt;/b&gt; or the &lt;b&gt;Hollywood principle&lt;/b&gt; - "Don't call us, we'll call you".&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In hindsight it's easy to see we had things backwards from the start, but the direct approach is all too common. It's a hangover from procedural programming where the programme's flow of control acts directly rather than setting up an object model and then handing over control to one of these objects.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In this way, the combat system and the monster are much easier to maintain, test and debug.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-3614028110210696729?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/3614028110210696729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/06/inversion-of-control-ioc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/3614028110210696729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/3614028110210696729'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/06/inversion-of-control-ioc.html' title='Inversion of Control (IoC)'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-4917704807764604274</id><published>2009-06-26T00:42:00.000-07:00</published><updated>2009-07-18T01:14:52.792-07:00</updated><title type='text'>Disputes Tribunal Ruling</title><content type='html'>&lt;p&gt;I found the ruling from the tribunal.  Here's the guts of it (I don't have a scanner):&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;The Tribunal hereby orders&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sony Computer Entertainment New Zealand Ltd and Electronics Boutique Australia Pty Ltd are jointly and severally liable to pay $375 to Mr Stevens within ten days of the date of this order.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Reasons&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;[snip]&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It was proved that the Mr Stevens' playstation was not of acceptable quality:&lt;/p&gt;&lt;p&gt;&lt;ol&gt;&lt;li&gt;An article from the Consumer magazine (a respected organisation) in July 2006 was reliable evidence (based on surveys, information from manufacturers and retailers and their own experience) that a reasonable life expectancy for appliances was five years for computers and 8+ years for DVD players (both playstation functions).&lt;/li&gt;&lt;li&gt;No appliance had a life expectancy of less than two years and there was no reason to suppose that playstations were less durable than other appliances, in particular when playstations were used for games and received hard treatment from children.&lt;/li&gt;&lt;li&gt;Mr Stevens' playstation, by failing within two years, was therefore not fit for all of its purposes, not free of minor defects and not durable.&lt;/li&gt;&lt;li&gt;It was not an answer that (as stated in the article) the life expectancy of appliances was getting shorter... because this did not account for difference between the stated life expectancy (eg computers, five years) and the failure in Mr Stevens' case (under two years).&lt;/li&gt;&lt;li&gt;It was not an answer that the technological complexity of playstations meant that failure of a small percentage of units was "inevitable" (letter to Mr Stevens) if there was nonetheless a failure of the guarantee of acceptable quality.&lt;/li&gt;&lt;li&gt;It was also not an answer that Mr Stevens' warranty was limited to one year as it was not possible to contract out of the Consumer Guarantees Act in non-business transactions (section 43).&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&lt;p&gt;[snip]&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There were five arguments I raised, but only two were accepted.  I can post them if anyone's interested.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-4917704807764604274?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/4917704807764604274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/06/disputes-tribunal-ruling.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/4917704807764604274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/4917704807764604274'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/06/disputes-tribunal-ruling.html' title='Disputes Tribunal Ruling'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-4632374074507290448</id><published>2009-05-29T16:11:00.000-07:00</published><updated>2010-04-29T01:56:27.092-07:00</updated><title type='text'>PlayStation 3 Durability - The Court's Ruling</title><content type='html'>&lt;p&gt;My PS3 broke down outside of warranty, but by New Zealand law, the Consumer Guarantees Act says that goods should last for a "reasonable" amount of time.  I didn't think 21 months was reasonable for a PS3 and since Sony refused to pay for the repair, I took them to court and won.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;What won it for me is the &lt;a href="http://www.consumer.org.nz/topic.asp?category=Appliances&amp;amp;docid=394&amp;amp;subcategory=Prices%20%26%20reliability&amp;amp;topic=Appliance%20life%20expectancy"&gt;Consumer article&lt;/a&gt;, which said that computers should last for 5 years and DVD players for 8+ years, both PS3 functions.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;They tried to argue that the PS3 wasn't classified as a computer, however there is no reason to suppose that PS3s are any less durable since they are used for games and receive hard treatment from children.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So the Disputes Tribunal ruled that my PS3 was not of acceptable quality and ordered Sony to reimburse me the repair cost.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Anyone is more than welcome to use this case as an example if they have a similar dispute.  The case number is CIV-2009-094-000642.  Take 3 print outs of the Consumer article.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It cost me $30 to have the hearing and all information you need is on the Disputes Tribunal &lt;a href="http://www.justice.govt.nz/tribunals/disputes-tribunal/disputes-tribunal/"&gt;website&lt;/a&gt;.  Note that you will need the name and address of the legal entity you're taking to court, which can be found at the &lt;a href="http://www.companies.govt.nz/cms/banner_template/CNAME"&gt;Companies Office&lt;/a&gt;.  You can either take Sony or the company you purchased the thing from.  I recommend the latter because it's just easier.  The Sony offices are in Australia and they don't have a clue about NZ law.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Note that warranties aren't very important in New Zealand.  People selling extended warranties are basically criminal, because we're already covered.  See &lt;a href="http://www.consumer.org.nz/topic.asp?category=Appliances&amp;amp;docid=1924&amp;amp;subcategory=Prices%20%26%20reliability&amp;amp;topic=Extended%20warranties"&gt;the Consumer article about this&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-4632374074507290448?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/4632374074507290448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/05/playstation-3-durability-courts-ruling.html#comment-form' title='74 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/4632374074507290448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/4632374074507290448'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/05/playstation-3-durability-courts-ruling.html' title='PlayStation 3 Durability - The Court&apos;s Ruling'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>74</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-8121005225244748705</id><published>2009-05-21T03:11:00.001-07:00</published><updated>2009-07-18T01:13:18.926-07:00</updated><title type='text'>PlayStation 3 Durability - My Dispute with Sony</title><content type='html'>&lt;p&gt;I use to be a Sony fan-boy.  Sad but true.  My PS3 was my pride and joy until it broke down 21 months after purchase and Sony refused to fix it.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;New Zealand consumers are protected by the Consumer Guarantees Act, which states that goods must last for a reasonable amount of time. Warranties tend to be a lot less than this, so most of them are a pointless. Some companies, like Noel Leeming, try to sell you extended warranties which is criminal - consumers are already covered.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So I'm in the court room with Sony on Monday.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;What's a "reasonable amount of time"? An excellent &lt;a href="http://www.consumer.org.nz/topic.asp?category=Appliances&amp;amp;docid=394&amp;amp;subcategory=Prices%20%26%20reliability&amp;amp;topic=Appliance%20life%20expectancy"&gt;article from Consumer&lt;/a&gt;, lists reasonable times for many appliance and can be used in hearing such as mine.  Computers should last 5 years according to this.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It's a bit of a hassle really over $375 but I've had less that professional dealing with Sony over this dispute and it's become a matter of vengance. I'm also asking for an apology for a breach of the Fair Trading Act when one member of their staff told me that the terms and conditions of purchase overrides the Consumer Guarantees Act. The staff all had Australian accents, which might explain things a little.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Will post how it goes... fingers crossed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-8121005225244748705?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/8121005225244748705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/05/my-dispute-with-sony.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/8121005225244748705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/8121005225244748705'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/05/my-dispute-with-sony.html' title='PlayStation 3 Durability - My Dispute with Sony'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-21751794082698819</id><published>2009-05-20T18:45:00.000-07:00</published><updated>2009-07-18T01:12:38.584-07:00</updated><title type='text'>Yayoi Kusama</title><content type='html'>&lt;p&gt;I saw Yayoi Kusama's exhibit at Syndey on the weekend (while on honeymoon with my lovely wife). I haven't been so moved in an art gallery before.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The most striking piece was an ordinary living room scene you walk into.  It was dimly lit and all surfaces where a dull grey. Upon each surface where many bright, primary-coloured dots and the room was flooded in blacklight.  Dots everywhere really.  The living room could only be recognised as such using depth perception.  I felt like I was trapped in a magic-eye picture.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There was a hall with mirrored semi-spheres hanging on the walls. A floor groping with tenticles, black and white repetitive doodlings, themselves repeated to fill the room. There was a mirrored room where you saw yourself repeated ad nauseum.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Her theme was repetition and Yayoi was asking me why I'm unique. She didn't ask me in any casual sense though, she first challenged my understanding of identity.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If she were at the exhibit at the time, I would have kissed her.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-21751794082698819?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/21751794082698819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/05/yayoi-kusama.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/21751794082698819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/21751794082698819'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/05/yayoi-kusama.html' title='Yayoi Kusama'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-8271976626727755237</id><published>2009-01-05T00:40:00.000-08:00</published><updated>2009-07-18T01:11:37.512-07:00</updated><title type='text'>Mumbo-Jumbo</title><content type='html'>Take homeopathy. It can be phrased to sounds plausible but it has not been proven to work. All that is meant by "proven" here is that there are positive results which can be reliably reproduced. It's not much to ask really - if something works then it should be demonstrable.&lt;p&gt;Disbelief in homeopathy has been suspended however, along with the orgy of opathys and ologys out there. So I presume their proponents believe more in the ideas they represent than the ideas themselves.&lt;/p&gt;&lt;p&gt;This new-age magic is packaged with recycled ideas like "alternative", "choice" and "nature".  They're sold with free-range language like "holistic", "energy" and "karma".  Belief in magic doesn't survive because there is magic, it survives because there's a demand for it.&lt;/p&gt;&lt;p&gt;Perhaps it comes from a distrust in our scientific and pharmaceutical institutions. Maybe people don't want their health and well being in the hands of statistics. They want hope in the face of overwhelming odds and freedom from reliable prediction.  People want to believe in magic, they want to believe in mumbo-jumbo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/816423294913508661-8271976626727755237?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/8271976626727755237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/01/mumbo-jumbo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/8271976626727755237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/8271976626727755237'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/01/mumbo-jumbo.html' title='Mumbo-Jumbo'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-816423294913508661.post-3756474884294688441</id><published>2009-01-04T00:14:00.000-08:00</published><updated>2009-10-26T13:56:44.237-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>The End of Philosophy</title><content type='html'>&lt;span style="font-weight: bold;"&gt;What is Philosophy?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Young children incessantly  ask, "but why?" to any answer offered by their parent.  This continues until the parent tires and says, "go ask your Father."  Philosophy is the same.  It's the art of inquiry but its art has a unique mode: it is de-creative.  Philosophy breaks down concepts through their understanding until the understanding itself is questioned.  The understanding is that of the inquirer though, which shows the profound hunger of philosophy's "why?" - the inquiry feasts on its subject matter and then turns on the inquirer.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;But it doesn't stop there.  Philosophy continues to question until it arrives at its very own activity, "why the why?", where it questions its own motives.  So philosophy is always "negative towards itself."  Its goal is to remove the want for philosophy.  Philosophy's consummation is its own consumption, a serpent eating its tail.  Its final act is the unearthing of the ultimate foundation or under-standing, the place where all questions are answered.  The Garden of Eden, as it were, where the tree of knowledge is planted.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paradise Lost&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;But there is no such garden.  This idea is a remnant from a time we believed the world was spoken into existence - when we thought God declared, "Let there be light"; and there was light. "The Word" was identified with what is; with being.  Since then, we've assumed the world is made up of sentence-like things called "facts" and the sentences which can be bought into correspondence with these facts are true sentences.  The sentence, "there is beer in the fridge" corresponds to the fact that there is beer in the fridge and, because of this the sentence is true.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Language connects us to the world, and through it, we have access to the truth. It's a light that reveals the world to us. Species that command language are thus touched by the divine and are privileged over other species. We're like God. We can speak and have the power to create. We can &lt;span style="font-style: italic;"&gt;know&lt;/span&gt; the world, ourselves, other people, good and evil.  We have access to the tree of knowledge.  But why should we believe the world is made up of bits of language or language-like structures?  It seems quite ludicrous that my coffee is, in metaphysical fact, the divine word "coffee".  What is clear, is that we've mistaken language, the tool we use to communicate about the world, for the world itself.  We've mistaken the nail for the hammer.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we reject the idea that language corresponds to the world, the idea of this metaphysical truth is left out in the cold. In this picture, truth is no longer discovered by us, but made. Philosophy's ultimate foundation bottoms out, not at language as being, but at our cultural language game.  There is no ultimate foundation for knowledge, our ideas are a product of time and chance.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is no more want for philosophy.  It's at an end and its death bears no fruit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Life without Truth&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Since there is no good reason to think that language transcends the physical or that truth comes from a resounding harmonic between the two, in a capital-T kind of way, the word "truth" is reduced to the status of an occasionally useful term.  Knowledge is reduced to useful belief. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It can be seductive to say this idea is true after the old manner, but it's not true by its own rubric.  This doesn't mean it's false though.  The idea is either useful or it isn't, and to me, it's been very useful.&lt;br /&gt;&lt;/div&gt;&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/816423294913508661-3756474884294688441?l=we-fearless-ones.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://we-fearless-ones.blogspot.com/feeds/3756474884294688441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/01/end-of-philosophy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/3756474884294688441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/816423294913508661/posts/default/3756474884294688441'/><link rel='alternate' type='text/html' href='http://we-fearless-ones.blogspot.com/2009/01/end-of-philosophy.html' title='The End of Philosophy'/><author><name>Jason</name><uri>http://www.blogger.com/profile/10515164443266946243</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
