Idealised Models

Leave job possible reality:

  • 1 hour running every day like Murakami.
  • 1 hour foreign language every day.
  • Start that business.
  • Cook every day.
  • Pick up kids after school.
  • All house jobs completed.
  • House painted.
  • Novel published.

Alternate reality:

  • Slobbing.
  • Weight gain.
  • Depression.
  • Paranoia.
  • Suicide.

Alternate reality:

  • Another job comes along.

Content

You see the day and I see the line that refracts from your eye to mine through the glowing darkness. We share an ambition but mine is clearly more relevant. Stand back and let me see what you’ve done there.

No, I don’t understand what you mean with these interactions. The idea here is we’re trying to create things which have reference to the past, a story, a key point, but they also draw in new elements. Take for example a Tarantino film – loving in its legacy and yet tightly bound within key constraints which keep us engaged. He weaves anachronisms and stylistic metaphors into his routines. But these are no mere accidents or peccadilloes. This is his style? Do you see how that would work for you in your day to day? You take a step back and the distance between kerb and street is not so far – you step into the world of the car and the tram and you wonder what will happen outside these boundaries. Perhaps you are warned off by a policeman, a ticket inspector, a passing bakerist. What would those people have done if you hadn’t come into their lives? What interaction are you trying to convey when you get up in the morning? Is that the dress you would have picked out if you were on holiday, been dumped, had a financial windfall? What are the extremes and what are the median points?

Is there actually time left to prove ourselves anymore? Can we put that much thought into the series of events that make up a life? Think damn you. Your reputation rides on this and your reputation in this enigmatic market is only as good as your last inconsequential performance.

In Ocean

Now you can roll on to your back. You can view the sky as it’s meant to be viewed – as a proper reflection of your place on this Earth. When you see the clouds and the gulls and the high planes and satellites passing you steadily as you float and dip and crane your neck to keep them in view and use your limbs to balance your body as it floats steady on the surface. Nights pass and the world closes around you but soon enough the sun comes around again and seeing the sky glowing and the waters calm the theatre of your imagination is once again engaged.

Your rested state allows you to pursue your fancies. You mind is free from those islands of worry, from the perception of fear. Your thoughts turn to earlier freedoms and those friends of yours who have made this journey before. Long ago, you were chief amongst them, bold and unafraid. You showed no fear of the rough seas, the fortified encampments, the terror of the battle, the emptiness of defeat. And then steadily you solidified your path – you steeled your emotions – you focussed your attentions and your battles became strategic rather than visceral and raw. You left your youth behind still standing with long hair and a cigarette and you doubled your efforts and doubled them again taking final recourse to proper exploration and pride and effort in your travails. You created detailed maps of movements, troop plans, supply lines. You moved with generals and commanders and yet you marvelled at their single mindedness. You see them as pure application without flair and yet you underestimated their tenacity. Your template was a flawed one to follow and now you drift as if without idea. Ready for landfall but afraid of the implications.

Yet you float ever onward and feel the mighty swell of water beneath you. Dark depths and uncharted wrecks, monsters that once made you stutter in terror now give you strength not to fear or to lay becalmed or to postpone those ideas that once you never entertained.

Exit

There is a great loathing upon this land. The marks that define your eyebrows are buried beneath the sand but I can see your wrinkled forehead adopting a pose of stoic indifference. A waiting for your fate. A wait for your deliverance perhaps from the words that bind you. Waiting in time for the moments to elapse. These are your words and your fate and you have burnt them into yourself. You buried your body here. You allow it to flow around you as the tides and the winds came and went. The hard grasses float upon the shifting layers but your weight holds you steady and those mites, once insignificant, have piled their weight around.

I saw you come and I saw you settle as I have seen others mightier come and go. Vast reaches of this shoreline are marked with their history and yet all softens and levels in time.

I have been here watching you and I too have grown weary of this land. My ears are dull, my sight is feeble. My feet once buried now are free and soon the tide comes to lift me away. I cannot stop it and have no will. I have no fear of the sea behind me – it will come to pluck and carry my body across the threshold of the breakers and into the deep green. From there I will see you dwindle and decay as ocean tips and spins me end over end.

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.