The Novice’s Guide to Replacing a Bathroom–Part 1

IMG_0573Yes, bank holiday weekend. Time for Easter reflections, visiting family, putting your feet up.

Also a great opportunity to get some DIY done. And with the wife and son away for the weekend, I decided to start one of several pending projects: replacing the main bathroom.

 

A bit of background

Our house was built in 1988, and both the main bathroom and the en-suite had not been touched since. From the beautiful stripy toothpaste style tiles to the faded pink sanitary ware, they were relics of a by-gone era of interior design, albeit functional relics.  When we moved in we had the en-suite re-fitted (I only did the flooring and painting), so the other bathroom has continued to age over the last 12 months.

My background in DIY is fairly limited – I can paint, lay laminate flooring, and generally solve most basic household problems. However I’ve never done any plumbing, tiling or bathroom work.

The (Rough) Plan

So the rough plan was to:

  • Replace the bath, hand basin and toilet
  • Replace the light fittings
  • Keep the existing electric shower
  • Re-paint and re-tile

We only decided to get on with this early in the week, so we got a move on with choosing colours, flooring and tiling.  We’ve had the toilet and hand basin in the garage since we moved in.

Sequence of Events

So I started off by removing the light fittings (after turning off the circuits of course) and the radiator.  Removing a radiator is easy – but don’t make my mistake which was answering the door, chatting for 10 minutes, and then hearing the pitter-patter of water dripping through the kitchen because I hadn’t fully tightened up the water pipe valves.

Next I removed the electric shower – again this was easy, but I had to take note of how it all went together.  And of course turn off the water before hand (and drain the system).

Removing my Shower

Then I attacked the tiles with a bolster chisel and club hammer – most of them came off fairly easily (although it’s still hard work).

So far so good.

Then came the plumbing.

I cut the pipes to the sink taps with a pipe slice, unscrewed the supporting bolts and disconnected the waste pipe. Out came the basin and pedestal. Easy.

I popped two pipe caps over the supply pipes and moved on.

Off came the side of the bath and more pipes to disconnect.  In the following two hours I used up my quota of expletives as I wrestled with getting a spanner (which had to be the largest one I had) into an impossibly small hole behind the bath with an overflow pipe in the way.

One blistered hand later, I got the bath out (gingerly moving it and hopping it over the waste pipe).

At 10pm last night I was feeling very pleased with myself – all pipes capped, two units removed, most of the tiles off. I had even turned the water back on to check the pipe work was OK and no leaks.

Then pop, and splash, and more dripping.

One of the pipe caps had come off.

A cycle that I’ve been through many times: switch off the water, drain, mop up, catch the drips in the kitchen and fixing isolation valves.  Switch the water back on, wait and check for leaks.

Today the toilet came out (surprisingly easily) leaving more pipes to sort out. 

New building regulations state that isolation valves should be fitted to all water pipes in new bathrooms.  These valves mean that you can switch off the water supply to an appliance without having to turn off the mains water supply.

I’ve spent hours today testing, tightening and re-testing these valves (and some deal of mopping up).

My conclusion: wires are nice as they bend and you can disconnect them. Pipes do not bend and cannot be turned off.  Electricity can only spark – water drips everywhere.

Electrics = good

Plumbing = bad

Top Tips

My top tips from two days’ of bathroom work:

  • Check your pipe sizes before buying anything – don’t rely on B&Q advice (like I did).  This probably means removing the side of your bath to have a look (my hot water was 22mm rather than 15mm).
  • Cut pipes as carefully as possibly to avoid deforming them and cutting them square
  • Remove the door – space becomes limited very quickly
  • Give yourself plenty of time!

References

A couple of sites that have been very useful:

How to find a bathroom suite – DIY Doctor

Remove and Replace a Toilet – DIY How To

More?

Now that I’ve removed the old bathroom, I’ve got to fit the new one, decorate and finish off…

Advertisements

The Novice’s Guide to Replacing a Bathroom–Part 1

IMG_0573Yes, bank holiday weekend. Time for Easter reflections, visiting family, putting your feet up.

Also a great opportunity to get some DIY done. And with the wife and son away for the weekend, I decided to start one of several pending projects: replacing the main bathroom.

 

A bit of background

Our house was built in 1988, and both the main bathroom and the en-suite had not been touched since. From the beautiful stripy toothpaste style tiles to the faded pink sanitary ware, they were relics of a by-gone era of interior design, albeit functional relics.  When we moved in we had the en-suite re-fitted (I only did the flooring and painting), so the other bathroom has continued to age over the last 12 months.

My background in DIY is fairly limited – I can paint, lay laminate flooring, and generally solve most basic household problems. However I’ve never done any plumbing, tiling or bathroom work.

The (Rough) Plan

So the rough plan was to:

  • Replace the bath, hand basin and toilet
  • Replace the light fittings
  • Keep the existing electric shower
  • Re-paint and re-tile

We only decided to get on with this early in the week, so we got a move on with choosing colours, flooring and tiling.  We’ve had the toilet and hand basin in the garage since we moved in.

Sequence of Events

So I started off by removing the light fittings (after turning off the circuits of course) and the radiator.  Removing a radiator is easy – but don’t make my mistake which was answering the door, chatting for 10 minutes, and then hearing the pitter-patter of water dripping through the kitchen because I hadn’t fully tightened up the water pipe valves.

Next I removed the electric shower – again this was easy, but I had to take note of how it all went together.  And of course turn off the water before hand (and drain the system).

Removing my Shower

Then I attacked the tiles with a bolster chisel and club hammer – most of them came off fairly easily (although it’s still hard work).

So far so good.

Then came the plumbing.

I cut the pipes to the sink taps with a pipe slice, unscrewed the supporting bolts and disconnected the waste pipe. Out came the basin and pedestal. Easy.

I popped two pipe caps over the supply pipes and moved on.

Off came the side of the bath and more pipes to disconnect.  In the following two hours I used up my quota of expletives as I wrestled with getting a spanner (which had to be the largest one I had) into an impossibly small hole behind the bath with an overflow pipe in the way.

One blistered hand later, I got the bath out (gingerly moving it and hopping it over the waste pipe).

At 10pm last night I was feeling very pleased with myself – all pipes capped, two units removed, most of the tiles off. I had even turned the water back on to check the pipe work was OK and no leaks.

Then pop, and splash, and more dripping.

One of the pipe caps had come off.

A cycle that I’ve been through many times: switch off the water, drain, mop up, catch the drips in the kitchen and fixing isolation valves.  Switch the water back on, wait and check for leaks.

Today the toilet came out (surprisingly easily) leaving more pipes to sort out. 

New building regulations state that isolation valves should be fitted to all water pipes in new bathrooms.  These valves mean that you can switch off the water supply to an appliance without having to turn off the mains water supply.

I’ve spent hours today testing, tightening and re-testing these valves (and some deal of mopping up).

My conclusion: wires are nice as they bend and you can disconnect them. Pipes do not bend and cannot be turned off.  Electricity can only spark – water drips everywhere.

Electrics = good

Plumbing = bad

Top Tips

My top tips from two days’ of bathroom work:

  • Check your pipe sizes before buying anything – don’t rely on B&Q advice (like I did).  This probably means removing the side of your bath to have a look (my hot water was 22mm rather than 15mm).
  • Cut pipes as carefully as possibly to avoid deforming them and cutting them square
  • Remove the door – space becomes limited very quickly
  • Give yourself plenty of time!

References

A couple of sites that have been very useful:

How to find a bathroom suite – DIY Doctor

Remove and Replace a Toilet – DIY How To

More?

Now that I’ve removed the old bathroom, I’ve got to fit the new one, decorate and finish off…

Synchronising Highrise, Basecamp and Google Shared Contacts–Part 1

NOTE: You can read part 2 here or just simply get the code.

I recently worked on a project where we needed to synchronise contact data between Highrise CRM (the source), Basecamp (for project management) and Google Shared Contacts (for email).  This is a common issue for small businesses – how to keep disparate systems in sync.  There are already some proprietary systems out there which help with this but they didn’t fulfil the needs of this client so we opted for a custom tool.

I’ll write up the steps I took to get all of this working in a series of posts, but the overall architecture is thus:

image

Feasibility

At the time of writing I determined the feasibility of synchronising all of these three systems by looking in detail at the APIs provided.  I’ve summarised my findings here:

Google Shared Contacts

It’s worth pointing out that we needed to load up NOT Google’s personal contacts, but the domain shared contacts.  This is a repository of contacts that Google provides on its Google Apps product, and works like a Global Address List, providing a single store of contact data to all domain users.  However, for some puzzling reason Google does not provide any user interface to manage this database.  Instead you must use the Google Shared Contacts API.

IMPORTANT POINT: I got very confused as to which versions of Google Apps supports the Google Shared Contacts API. Even though the documentation pages state that it is only supported by Apps for Business (Premium) and Education, the confusing point is that YOU CAN EXECUTE THE API CALLS SUCCESSFULLY and the data IS PERSISTED.

What I later discovered was that although all of the API calls work, the data is not exposed in Google Apps.  This is very frustrating and I wish Google would make this clearer in their documentation.

Also don’t get confused between the Google Contacts Data API and the Google Shared Contacts API.

Highrise & Basecamp

Both of these products are made by 37Signals, and if you’ve ever read their books, you’ll know that they are keen proponents of open systems.  They have well documented APIs which are very easy to get up and working with.

However, when you start to use them, you discover that some key elements are missing. The APIs they have provided allow you to get all information out, but when it comes to creating data, the calls just aren’t there. Despite numerous forum posts, 37Signals have not yet given good reasons for the lack of these API calls.

To get around this, I wrote a cheeky HTTP GET, Parse and Re-POST class which effectively walks through the front-end of the site programmatically, as if it were a standard user. Whilst this has been very stable so far, if either of the products publish changes to their UI then this code may need modification.

Coding Approach

I wrote all of the code in PHP 5, so all the samples here will be in PHP, but you could easily apply the concepts to different programming languages.

I built singelton classes for each of the products, and then a controlling class to tie them up all to achieve the synchronisation. I used PHP curl() to do the web requests, and for the Google API stuff I used Zend’s GData classes to speed up the development.

Synchronisation Approach

In order to synchronise these systems I took the following approach:

  • Get all Highrise Contacts
  • Add to Basecamp, storing the IDs of the two data objects in a synchronisation file
  • Add to Google Contacts, storing the ID of the Highrise Contact in the Notes field

Next Steps

In the next post I’ll start introducing the code I wrote to hook up to the Basecamp and Highrise APIs.

Synchronising Highrise, Basecamp and Google Shared Contacts–Part 1

NOTE: You can read part 2 here or just simply get the code.

I recently worked on a project where we needed to synchronise contact data between Highrise CRM (the source), Basecamp (for project management) and Google Shared Contacts (for email).  This is a common issue for small businesses – how to keep disparate systems in sync.  There are already some proprietary systems out there which help with this but they didn’t fulfil the needs of this client so we opted for a custom tool.

I’ll write up the steps I took to get all of this working in a series of posts, but the overall architecture is thus:

image

Feasibility

At the time of writing I determined the feasibility of synchronising all of these three systems by looking in detail at the APIs provided.  I’ve summarised my findings here:

Google Shared Contacts

It’s worth pointing out that we needed to load up NOT Google’s personal contacts, but the domain shared contacts.  This is a repository of contacts that Google provides on its Google Apps product, and works like a Global Address List, providing a single store of contact data to all domain users.  However, for some puzzling reason Google does not provide any user interface to manage this database.  Instead you must use the Google Shared Contacts API.

IMPORTANT POINT: I got very confused as to which versions of Google Apps supports the Google Shared Contacts API. Even though the documentation pages state that it is only supported by Apps for Business (Premium) and Education, the confusing point is that YOU CAN EXECUTE THE API CALLS SUCCESSFULLY and the data IS PERSISTED.

What I later discovered was that although all of the API calls work, the data is not exposed in Google Apps.  This is very frustrating and I wish Google would make this clearer in their documentation.

Also don’t get confused between the Google Contacts Data API and the Google Shared Contacts API.

Highrise & Basecamp

Both of these products are made by 37Signals, and if you’ve ever read their books, you’ll know that they are keen proponents of open systems.  They have well documented APIs which are very easy to get up and working with.

However, when you start to use them, you discover that some key elements are missing. The APIs they have provided allow you to get all information out, but when it comes to creating data, the calls just aren’t there. Despite numerous forum posts, 37Signals have not yet given good reasons for the lack of these API calls.

To get around this, I wrote a cheeky HTTP GET, Parse and Re-POST class which effectively walks through the front-end of the site programmatically, as if it were a standard user. Whilst this has been very stable so far, if either of the products publish changes to their UI then this code may need modification.

Coding Approach

I wrote all of the code in PHP 5, so all the samples here will be in PHP, but you could easily apply the concepts to different programming languages.

I built singelton classes for each of the products, and then a controlling class to tie them up all to achieve the synchronisation. I used PHP curl() to do the web requests, and for the Google API stuff I used Zend’s GData classes to speed up the development.

Synchronisation Approach

In order to synchronise these systems I took the following approach:

  • Get all Highrise Contacts
  • Add to Basecamp, storing the IDs of the two data objects in a synchronisation file
  • Add to Google Contacts, storing the ID of the Highrise Contact in the Notes field

Next Steps

In the next post I’ll start introducing the code I wrote to hook up to the Basecamp and Highrise APIs.

Fact Facts – Stats and views on the world’s largest social networking site

As Facebook celebrates 500 million users (yes, that’s half a billion), I’ve been thinking about the impact of this 5 year old website, which is now so much more than just a website. It’s founder Mark Zuckerberg, just 26 years old (a year younger than I), has relentlessly steered his company through numerous twists and turns with more often than not a deft hand for creating a globally successful product.

In Time magazine’s Person of the Year 2010 article (naming Mr Zuckerberg as the accolade’s holder), a few startling facts stand out which help in painting the picture of the sheer scale and reach of Facebook. Currently 700,000 people every day are signing up to Facebook. Each month an additional 1 billion items of content are added. Facebook has been translated (and is used) in over 75 languages, and if it were a country, it would be the third largest in the world.

Zuckerberg has turned down numerous offers for the company, reaching $1 billion not so many years ago. He is clearly not motivated by the pull of wealth. No, he seems solely focused on building an ever more successful product that encourages its users to be ever more open with their thoughts, preferences and lives.

What impact is/will Facebook have on our society? On Facebook everyone that you are connected to is labeled with the singular mark of friend, although we all have different depths of friendship, and some Facebook friendships are little more than outdated notions of acquaintance. Does Facebook encourage me to be more open? Perhaps not, but maybe it does provide me with a more convenient way to push my thoughts out there, letting others decide which of those they wish to consume. It is certainly a more liberal approach to friendship.

Browsing through endless photo streams and keeping an eye out for other users’ activity can be an addictive pass-time, it can certainly feed boredom. Despite its liberal tendencies, it does not well facilitate intelligent discussion, more simply a juvenile expose of the latest thought that drops into one’s head. Considered opinion and researched thought do not find an easy home on Facebook, and so as a measure of our maturity and our society’s ability to build philosophical views, it is grossly devoid of such wrangling, instead valuing every thought and emotion as equal.

For those who can discern the difference this is of little problem; we know when there is a time for presenting our minute old feelings and we know where to go for meaningful discussion and debate. But for the generation growing up with Facebook, will they know any differentiation? Will personal trivia become the staple diet of our relational connections?

Having now finished reading “The Facebook Effect“, it is clear that Mark Zuckerberg’s deep conviction is to encourage openness, and contrary to Google’s approach of pulling information, Facebook allows individuals to push the information that they wish to share, and decide who they wish to share it with. The later of these emphases is held lightly by Zuckerberg, with the long-run hope that people will become less concerned with whom they are sharing with, and make such left wing contributions for the good of the world.

As Facebook sets its sights on 1 billion users, we will need to question even further our identity, and just what we are projecting through electronic forms, and of that projection, what are we willing to stand for in the flesh.

2010 in review

The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here’s a high level summary of its overall blog health:

Healthy blog!

The Blog-Health-o-Meter™ reads This blog is doing awesome!.

Crunchy numbers

Featured image

The Leaning Tower of Pisa has 296 steps to reach the top. This blog was viewed about 1,100 times in 2010. If those were steps, it would have climbed the Leaning Tower of Pisa 4 times

In 2010, there were 5 new posts, growing the total archive of this blog to 33 posts. There were 17 pictures uploaded, taking up a total of 739kb. That’s about a picture per month.

The busiest day of the year was October 10th with 30 views. The most popular post that day was 5 reflections after 12 days of being a Dad.

Where did they come from?

The top referring sites in 2010 were huggill.com, facebook.com, bigextracash.com, wiki.netbeans.org, and tryje.info.

Some visitors came searching, mostly for wordpress business contact, kernel_data_inpage_error, moving business contact manager database, sam huggill, and bcm 2007.

Attractions in 2010

These are the posts and pages that got the most views in 2010.

1

5 reflections after 12 days of being a Dad October 2010

2

Moving Business Contact Manager to the network March 2009
4 comments

3

New House, New Baby and a Geek’s Home Office October 2010
2 comments

4

The Future of Desktops and Web Development November 2010

5

About December 2007
2 comments

The Future of Desktops and Web Development

[tweetmeme source=”shuggill” only_single=false]

For the past twenty years the IT industry has been dominated by one company, Microsoft, and for good reason. They developed awesome software which helped to bring computing to the masses, and with the birth of the internet they impressed upon us all the Microsoft way of thinking: we are the experts so we build the entire system (OS, Desktop Packages, Server Tools, Networking) and you, the user, drink it all in. A whole industry of expert support grew up around it and many users became IT experts over time as they toyed with their new hardware and the latest releases of Windows.

On the flip-side was the Linux way of thinking, which is far less integrated and less centrally controlled. We provide a base platform (the Kernel) and on top of that uber-geeks contribute single function utility applications that make everything work. The end user (or system builder) can then choose and customise every item to suit their needs.

Bill Gates’ vision for the 90s was to see a PC in every home. Now that we are well into that vision, what will be the compelling vision of the teens and twenties ahead of us?

Being a web developer requires that I have a number of specialist tools for the job: an IDE to write and debug code in, some basic graphics packages, browsers to test in, some form of source control and database management. Also being a professional I need an email client, contact management/CRM, calendars, project management tools, document editing tools, invoicing tools and financial management tools.

I’ve long been a Microsoft convert. My first programming language was Visual Basic, and I’ve cut my professional teeth writing ASP and ASP.NET web applications. However I also have extensive experience with PHP, Linux and MySQL. To run all of my professional life I currently have:

A desktop PC and a laptop both running:

Windows 7 (OS)
MS Office 2010 (Documents)
Visual Sutdio 2010 (.NET IDE)
SQL Server 2008 R2 Express (Database & DB Management)
Mercurial (Source Control)
Paint.NET (Graphics)
– Google Chrome, Firefox, Safari, Opera, IE 9, IETester (covers IE6, 7 & 8 for testing), iPhone Emulator
Netbeans (PHP/Ruby IDE)
IIS (.NET and PHP webserver)
MySQL (Database)
phpMyAdmin (Database Management)
– I use Google Apps for email and calendars
– I use Basecamp for project management
– I use Highrise for CRM

That’s a lot of software to maintain, keep up-to-date with and sync between my two main workstations. And if I’m not at either of those machines, I’m limited to email and calendaring on my iPhone. Whilst I can work in most places using the laptop, it’s a fairly specialist set up.
I would guess that the same is true for most web developers out there.

The advances in technology (and in many other areas) are possible because new layers of abstraction are added. For application developers new operating systems and CPUs give more options and capacity to do greater things – they increasingly:

– know less about the underlying technology
– assume that it is there and “just works”

With the advent of cloud computing the notion of “it just works” and “it’s in the cloud” are ever more enhanced. Sites can use services like OAuth to provide authentication from some of the major service providers (read: Google/Facebook). Disk space, CPU, servers are all becoming commodity items and web developers are increasingly in the position of not caring about the underlying hardware. In fact, it’s more than a case of not caring – it’s becoming essential not to care, as you need the time to focus on building great applications in this competitive marketplace.

Development frameworks are also making it much easier to get on and build applications. ASP.NET, PHP and Ruby (to name a few) all have well matured and generally very good frameworks available which speed up development no end.

When you start working with these frameworks you start to not care about what’s inside, or how the function “buildInputBox” was written – the fact is you start to rely on the simple fact that it is there and it works. You trust that whoever wrote the underlying framework, designed that CPU or built that cloud hosting platform knew what they were doing and optimised it for you. With all the time saved from not having to compile Linux kernels, write monkey code (e.g. buildInputBox) and design a redundant hosting platform, application developers can invest much more into creating great online experiences.

To this end I have started questioning two things: what will the future of desktops look like, and how we will build the next generation of applications?

Let me attempt to share some thoughts on these.

My vision is not orientated around a company, or the Open Source / Closed Source argument. I don’t expect everything to be free, and in fact serious business cannot be sustained through the free models – there has to be a revenue stream (and I’d rather it wasn’t all advertising based). Also, business critical operations require an incentivised commitment to service, and what better incentive than money?

I think the day of the desktop OS as a rich environment is dead. Why do I need to run 20 different applications, keep them all updated with patches and new releases and go through the awful pain of a system rebuild every 6 months? Most of my work is now connected to other systems in some way, all via the Internet. If I unplugged my network cable and tried to work I would probably last about a day before I needed to connect up either for testing, collaboration or just to get some help.

My future PC will be a highly powered web browser. I will connect to everything in the cloud, and the browser will be my cross-platform standardised access point to it all. This means that I can literally work from anywhere. No one will expect to be working without an Internet connection. More and more environments are meeting consumer demands by providing Wi-Fi access points so that we are always connected.

From my web browser I will be able to do everything listed above. It will become a new layer of abstraction. I will assume the PC “just works”. I will be able to access everything from different types of device – my tablet, my smart-phone, my laptop, a computer interface built into a table in a cafe.

This poses some interesting opportunities for companies of different sizes. The big boys will fight it out to run the infrastructure needed for all of this – i.e. the servers, connectivity and base services (like authentication) that all new applications will rely upon.

I have no doubt that the likes of Google and Facebook will be positioning themselves to become baked in as a layer of abstraction – their challenge will be reminding people that the infrastructure is crucial and needs to be paid for.

For small application developers however this is an exciting time. There will be much less to be distracted with – maintaining computer systems, patching software and limiting where you can work. It’s all infrastructure that should just work.

Everything in the Cloud

The new world is outsourced and cloud based. Although this means perhaps more disparate systems (e.g. how do you share contact information between Basecamp and Highrise?) these challenges will be overcome by new standards and another layer of abstraction – all of your contact information will live somewhere and just “be available”. Code will be written and tested in the cloud, since it’s going to be deployed there anyway. Designing will move beyond the confines of Photoshop into sketching and then building out into simple web prototypes.

The next generation of applications will start to make full use of the over-powered desktop PCs that are sitting in everyone’s homes and offices with bags of unused capacity. Web applications will be able to reach out of the browser and touch the hardware devices that the user has. Facial and audio recognition will be possible as authentication methods and drawing devices will make roughing up ideas quick and easy. Browsers will provide simple interfaces to these items, no more arcane Active-X controls or specialist plugins.

Web Browsers

On the subject of browsers, they are all starting to converge. The long cry from web developers to adopt standards is starting to be heard, with the major web browsers supporting most of the W3 standards. Instead of differentiating on their level of compliance (which is now frowned upon if they don’t), browsers will have to distinguish themselves on speed and user facing features. However these will most likely fade as the features will all need to be web integrated to provide a seamless user experience across machines.

K.I.S.S.

The future is about making things simpler. I want to have less in my brain about technology. I want it to work, so that I can have time to come up with great ideas, solve difficult problems and rapidly build stuff. I don’t want to write another buildInputBox function. I don’t want to recompile Linux to get the latest PHP version working. I don’t want to take my 1U servers down to the datacentre and be my own hosting company. I want hosting and provisioning to be seamless – when I need more resources I just click. I want to be able to work anywhere in the world, and to log on to a PC and have my entire desktop in front of me, even if it means (for the moment) five different web applications firing up.

Yes I want choice, but just as I want electricity to my home, provided the price is right, I don’t care how it gets here or how it is produced*.

* Within reason! I do care about green energy, what I mean is I don’t care about transformers and the national grid and power lines and heat loss because the current is too high.

Instead I want to choose to build an app that does this or that and get on and build it as quickly as possible. We don’t yet know what new things we will be able to create when we have these new layers of abstraction in place, but I’m sure it will be cool and fun and add value in new ways.

Technology, Literature and the Rest