SEO and your mission statement

Build something, start a business, make a website, loads of people buy your stuff.  It’s simple isn’t it?

Or perhaps you start a business, you make a website to advertise your business but it either fails to ignite or bumbles along while your scramble for sales to better get your business out there.

So you rebuild your website and this time you think about what makes people want to shop with you.  You discover SEO and you realise that the advice that you’re being told is what you needed to hear when you were thinking about starting your business in the first place.

This is where I’m at now after having read this article from Yoast.  It’s a fantastic article as is just about everything Joost de Valk has to say on SEO and understanding your business in order to sell your business.

For me I feel like I’ve come full circle now and I’m honing in on what I want to say and what I want to do.  My business is split into on the one hand app consultancy and product design and on the other helping small businesses grow through technology.   SEO is can be about keyword research, carefully chosen cornerstone content and guest blogging but for me it’s more about understanding your motivation.  This is something I understand and I’ve talked about before.

Understand yourself, know thyself, and sell.

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?

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:WINDOMAINWINUSER,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.

P1040329

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.

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.