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?

Before

After

 

 

 

 

 

 

 

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:

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

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

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.

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.

Delivering the One-Man Project

In a recent email conversation I touched on the ability, or more often inability, of a one-man software project to deliver regular controlled packets of code.  Or to put it another way the the ability for many one-man software projects to deliver very little or nothing at all despite setting out with the best intentions and a following wind.  At the heart of the problem lies the following rather messy aphorism:

You don’t get concencus in a one-person software project.

Concencus by definition is a group activity.  A one-person project or software product can have concencus but this is only arrived at by interaction with others, usually your users, and if you don’t have a delivered product or a project then you don’t have users.  Concencus is vital to give you the confidence to deliver what you’ve been developing.

So the question turns to how can we form a concencus on project decisions when there is no code to attract users?  What we’re seeing increasingly is the use of crowd funding to drive software development.  Crowd funding is proving to be very useful for software developers and not just from a financial point of view.  More importantly crowd funding can help drive direction, delivery and scope and also help test the choppy waters of marketing by trying out ideas on an interested and motivated audience.  This works better for established companies or old-timers than it does from unproven individuals with new ideas simply because old-timers already have a track record and an audience.  So let’s back up a bit further.

A Kickstarter project commits you to a direction – a product usually – and an intention.  You scope is inherently limited by the promises you make, the videos you release, the decisions you’ve already made when you’re coming up with your Kickstart concept.  It’s all about selling a promise.

A one-person (software) project is usually driven to scratch a particular itch, and its scope may not necessarily include getting to a point where you can sell something.  You might want to make an open-source framework, you might want to come up with a vaccine, who knows?  What you do know if that you as a one-person team have limited time to accomplish this and you want to make incremental progress.

How can you deliver progress?  Well, I’m going to tell you what I do.  I do it by giving myself more than one thing to do in my spare time.  Instead of deciding to deliver one project, I will deliver three or four or five projects simultaneously.  Each will have its own technology associated with it that is slightly different, each will offer something slightly different that allows me to enjoy working on it for a different reason.  It’s me after all that I’m pleasing here.  I’m also out to help others and provide something they might like and find useful but I’m doing this, for me.

The premise may sound slightly insane – why should you make your life more complicated when you want to focus all your spare time on doing one project really well?  In the next few weeks I’ll take you through how I do this and what techniques I use to keep myself interested and focussed.  Above all I want to show you that you don’t need to despair when you look at the calendar and realise that the code is still not out.