Hi-rise Bunks

Bunk beds with desks underneath.  Who’d’ve thunk it?  Looks like I’ve got something to aspire to but then I don’t think I’m ready for breaking out the hard woods quite yet.  Does this guy come with the bunk?

My hi-rise bunk will be hand made but will be an unambitious (and cost effective) soft wood affair with perhaps a desk underneath and some book shelves to turn my eldest’s currently pretty cramped room into somewhere he can play and work and hang out with his friends.  Time to turn a little kids room into a bit more of a big kid’s room and make a bit more space – there is plenty there really but not if you factor in a bed and storage and overflowing books and toys so I’m going to try to use the height of this room to our advantage.


Next Project


As Finished as a Toilet

A long time ago now at the start of winter I started the upgrade of the upstairs toilet.  At the time I said that there might be some parallels to draw between toilet conversion and software engineering and I was at least right with this in one respect – that they can both take a lot longer than you initially planned.  Time is definitely the one thing I’ve not kept a close track on – weekends come and go and before you know it it’s the spring.

However, we’re there now.  Yesterday I glued the last of the tiles on and I will grout and another lick of paint and we’re done.  So what is the net result?










So it might look pretty similar to the casual eye but there are some important points to note in terms of comfort as well as finish:

1. The floor is now warm.  I got a one metre square Magnum mat installed along with a digital thermostat.  The mat is set in self levelling compound and then tiled over with hard wearing PVC tiles.

2. New sink, new toilet.  Sink from Praxis, toilet is a Villeroy and Boch Omnia mounted on a Geberit Duofix corner frame.  The toilet frame is very easy to fit and great quality – I highly recommend it.

3. New walls with 20mm of styrofoam insulation – note how the window is now ‘set in’ to the wall.  Tiles by Mosa courtesy of Harry from Super Tegel.

The result is clean and light (although the walls will change colour before it’s finished) and most importantly warm.  Also with the raised toilet and the easy maintenance floor the cleaning of the toilet should be that much easier.  The next trick will be the downstairs toilet in a similar style!

Next I need to continue to apply the same dogmatic approach to completion and attention to detail to my software.

Apex Validations for Tabular Reports (4.1 or any version)

There is a lot of misdirection out there in Googleland about Apex validations and how they are much nicer since version 4.1 yadda yadda.  For Tabular Reports ignore this advice.  After half a day of searching my conclusion is when dealing with validations for Tabular Reports you should stick with the old way of iterating through all rows in your report.

After being redirected a couple of times to the examples I finally looked them up.

So to skip to the meat of the advice – for tabular reports you still need to identify your report column and validate the whole report using the old fashioned way.  So step by step this means creating a validation:

1. Page Processing -> Validations -> Create

and then:

2. Page Level Validation -> PL/SQL -> PL/SQL Expression

and then create  body similar to this:

   l_error   VARCHAR2 (4000);
   FOR i IN 1 .. apex_application.g_f03.COUNT
      IF     LENGTH(NVL (apex_application.g_f03 (i), ”)) > 4
         l_error :=
            || ‘</br>’
            || ‘Row ‘
            || i
            || ‘:  This value ‘
            || apex_application.g_f03 (i)
            || ‘  can only be of length four’;
      END IF;

   RETURN LTRIM (l_error, ‘</br>’);

Ensure that enboldened column number above points to the column you want to validate and obviously modify your logic accordingly.  This solution plays nicely with MRU in Apex 4.1 and as I say, after a few wasted hours, I’ll be using this page again in the near future I think!

Continuous Delivery: Integrating TFS on Linux

We’ve got a thing going on at work about providing Continuous Delivery and in that vein we’re integrating our TFS implementation with a backend nightly build driven through our Linux infrastructure.  Unlike a lot of software projects, we don’t actually produce much software – we’re more about data warehouses, ETL and business rules than we are Java/C++ builds – so it’s mainly Oracle, Informatica, Aptitude and scripts that are going to be running through our build and test suite.

First step in this journey is however to integrate nightly builds of our latest TFS snapshots.  To do this we aim to pull down the code and package automatically on Linux – this being our target rollout platform.  Now Microsoft do indeed provide a tool for this – the Team Explorer Everywhere pack – and it’s a relatively simple manner to get this installed and configured.  Annoyingly though it doesn’t appear to support Linux in a very friendly way in the command line ‘tf’ tool.  There appears to be a lack of environment variable support, most of the examples are Windows oriented and the terminology is a little bit sparse.  This post is an effort to document the salient points.

I have done the following to get the TEE tf client working on RHEL 5.8:

1. Install the TEE client under my own local home directory

2. Configure java (re-using the one bundled with Oracle 11.2 seems fine) into command line with JAVA_HOME and PATH set.

3. Test connectivity to TFS with the following command:

tf dir $/toplevel -server:http://tfs.yourcompanycom:8080/tfs/yourdept -login:WINDOMAIN\WINUSER,WINPASSWORD

4. Once you have the above working you can create your workspace according to the details in this post.  Essentially this means, making a workspace thus:

tf workspace -new -collection:http://tfs.yourcompany.com:8080/tfs/yourdept -permission:Private

5. And then linking that workspace to a local folder on Linux (it must exist already and would advice linking to the top level in the first instance):

tf workfold -map “$/” “/home/bownr/tfs_working_folder” -workspace:workspacename

5. You can then link further subdirectories as you need and perform a get as required in them (using -force if you want to force an overwrite in your local copy):

$ tf get . -force

Once you get to this point you may think you’re done.  I did.  However there might be some next steps for those sites with any kind of normal security policy.  TEE seems wants to use plain text authentication for passwords (and also liberally sprinkles the passwords and auth details in log files).  So you may want to read this read to get some ideas on Kerberos authentication or other ways to fly.

Making Progress

It’s hard to believe that it’s almost two months since I started my toilet project.  Yes I know.   However things are still moving in the right direction albeit a little slowly.  Most of the delay has been introduced – not because of a lack of time to do things but because of a lack of decision on some of the essentials and of course things take a lot longer than you imagine they will.  Flooring and tiling have to be chosen and ordered and it’s best to install both of these before hanging the toilet itself.  One can tile around the toilet afterwards but the effect won’t be as clean and I’ve no intention to cut corners on this job.

At least now the old toilet is out and the new frame is in.  Here is a work in progress from a few weeks ago.

Toilet frame

The Geberit corner frame is really simple to fit – four bolts hold it to the walls and floor.  The waste pipe is easily cut and snapped into place but one thing I overlooked was how the plasterboard would then attach to the frames.  Probably I was missing the Geberit rail system for this however as things turned out I had enough purchase with the existing insulation joists to make a solid enough fit for these thick panels.  As you can see though they are now on, the sink is in place, the walls are insulated and plasterboarded completely.


Underfloor heating has been considered, discarded and considered again but it seems overkill so we’re erring on the side of an electric radiator for the room.  Once the floor is insulated (with the plywood subfloor you can see below) and the vinyl tiles we’ve selected glued down it should certainly be warm enough underfoot.

The next step will be to get some professionals in to plaster and tile the room.  The finish is important and I don’t want to mess up the finishing touches.  I have tiled before, and I am tempted to do it (and still may yet be) but like I say, the finish is important.

Then once we have a radiator I also have to fix up or replace the window in the room and also replace the glass above and in the door, then we can paint and we’re done.  Hopefully by the spring time..

I promised something to follow up on my post about one-man projects.  And I have a lot of thoughts on this stemming from both software and toilets, however, this post is going to have to wait a little longer.

Happy New Year to all those handy, software people out there.

Loo-sing It

I’ve created a little spreadsheet costing up the various bits I’ve assembled so far for the toilet replacement.  It’s pretty much on budget so far but that will soon get blown by the tiling and flooring as of course they didn’t come in as prime considerations at the time I started planning.  Initial thoughts went like this:

 Hey.  Let’s change the toilet!

  • Ok, first we need to rip out the old one and replace it with a snazzy new one on a frame!
  • Yeah, and a new sink!
  • Yeah, and new walls!
  • Cool, let’s get all that stuff and make a start!

The stuff duly arrives plus I spend two weekends trawling DIY shops and I’ve done the prep work and then I eventually realise that as this is a wall mounted toilet you need to work out what the final floor height will be for that to make any sense.  I will also need to tile the frame of the toilet before I can actually mount the thing.  So despite the fact I’ve got most of the stuff now I actually still need tiles and floor right now if I’m to mount it correctly and keep downtime to a minimum.

Small rooms mean lots of thinking.  Plumbing supplies no matter how ‘easy fit’ still require planning and have proprietary hieroglyphs and youtubes instead of written instructions.  I bought a flexible water hose to connect the cistern because that was the only one I could find with the right fitting in the shop.  I wasn’t totally sure I wanted to install a flexible hose where I couldn’t see it and finally I find a step-by-step guide to doing this kind of thing that says No, Don’t Use A Flexible Hose – Use Copper Pipe You Moron.  I then realise I should’ve just ordered the default compression joint it recommended alongside with the toilet as that would have saved this hassle.  Then I start panicking that I’ve got the wrong thickness plasterboard for tiling over and that my walls will now come out too far and basically it’s all a complete disaster.

However, it’s not a disaster.  Not yet.  I’m essentially no further on than I was two weeks ago but I’ve managed to half fit the sink and I at least have a roomful of bits.  I’m still running a simulation on the second part of this build – assembling parts, playing through scenarios.  It’s certainly 90% planning when you’re doing this for the first time.  It’s mentally exhausting but I’m learning a lot.  I’m also very glad I didn’t take the old toilet out just yet..

Golden Gameplay

I love this thread on Slashdot which pretty much sums up my thoughts on games and gaming in general.  The thread is inspired by this article which takes a view on the current state of the nation in gaming.  We all know what a huge business gaming has become in all aspects: in browser, on mobile, on console, on computer, on handheld.  The argument has always been that the more money comes into the business the more that gameplay and game longevity suffers.  This argument has been around as long as video games have.

My take is that big games companies are lazy, risk averse and profit-driven and that independents are so confused by the panoply of platforms they can target that they become paralysed by anxiety.  Additionally the third-party tools that aim to ease the confusion are the only true winners at the moment.  Either you need to be a focussed independent or a major label looking to try something new.

Now, this doesn’t always work.  Remember Mirror’s Edge?  And check out The Unfinished Swan.  Great looking games with great feel don’t always succeed at the box office.  Innovativation hardly ever assures success, gameplay is golden, and gold as we know is impossible to synthesise.  To make a great game today you must combine graphics, environment, interaction – find a balance – sprinkle on that fairy dust.