Respect, politeness…and loads of grip and grunt

The topic of the, seemingly, detiorating levels of respect, politeness and consideration came up several times today.  A few of us went for a walk around the Business Park over lunch and it probably came up after I recountered an event that happened on the way into work today… I needed petrol today and left the M42 northbound at J4 to go to the Tesco petrol station just off the motorway.  I went over the first few sets of traffic lights and had to wait at a red light at the very last set, just before the bend and roundabout leading to the petrol station.  As I was in the (correct) right-hand lane of two I noticed a black car coming up behind me; look like it was going to wait behind me, and then changed his/her (probably 'his') mind and pulled alongside me.  Hmmm…only one reason for that – to sneak a quick start at the lights and try to get in front of me (for whatever selfish reason).  As some god-awful noise eminated from the stereo of the car next to me I couldn't be bothered to look over to see what it was and just waited for the lights, knowing damn well that if they thought they could push in in front of me then they had another thing coming. The lights changed, a little squeal from the tires of the car next to me confirmed their intention and that was the end of their little plan.   Over the lights, into the sharp left bend, hairpin back on yourself at the mini-roundabout and down to the petrol station.  I think they were about 20m behind me as I pulled onto the forecourt.  I hate people who think they can push in front, in any way – in cars, in queues, in general, and if you want to barge in front at some lights then don't try against an 192Bhp small car that loves corners with limited slip differential and dynamic stability control. Disclaimer: I don't generally drive that rapidly, I let people in when they are waiting to pull out, I'm considerate to other road users – just don't try and barge selfishly in front of me!

Frustrating week

It's been a frustrating week so far but thankfully it is nearly over….just one more day.   I've been up to my neck in IE7 performance issues, debugging JavaScript events en masse and generally trying to juggle too many balls in my head with numerous distractions going on around me. There are a million and one things that need doing, and another load that we'd like to do but with the very few people we have it feels, to me anyway, that we're struggling to keep our heads above the water.  My morale is not suffering too much yet – the work is interesting – I just wish I had more time to do some background research on things rather than try and just crank through development stories day after day with no respite. To cap it all off it was planning day today.   The day that always seems to deteriorate as the hours go by with frustrations mounting and comments getting increasingly accusatory.  A thank-you would be nice sometimes  – we're all stressed – we're all doing our best – we all want the best for the project and we're all in it together, so let's all just remember that.  If any day can knock the motivation out of you, it's planning day. Tomorrow is another day.   Tonight it's football on TV, installing a Gentoo VM on the laptop, writing this mini-rant and trying to rest.   Tomorrow it'll be back to the IE7 profiling where I just need to put my headphones on, block out distractions and concentrate so that the mental ball-juggling is a tad easier.

Recruitment agents and LinkedIn

I'm getting a bit tired of lazy recruitment agents and their tactics to try and have an easy ride.   Normally it's just endless email spam about totally irrelevant roles in totally ittelevant locations for a pathetic amount of money.   Most get totally ignored but the exceptionally irrelevant ones get a reply with something along the lines of “What part of my C.V. did you actually think made me relevant for this position?”. Then there are the phone calls…   “Are you looking for work?”   “No, not right now…”   “Do you know anyone who is looking for work?”   “Mind your own business and do the hard work finding them yourselves“. A recent tactic seems to be trying to connect to me on LinkedIn – just so that they can see what other contacts I have and then approach them.   Hmmm….  Nice try but I'm not adding you in, sorry. Unfortunately they are a necessary evil in this line of work.   Over the years I have come across a few good ones – those who know me well, know what I am really looking for, have placed me before and always seem to come up with perfect match roles.  These are the ones to keep in touch with, the ones who take the time to find out what you really want and know when to ring you when something comes up.   Those who cold-call are no better than tele-sales people, using a scatter-gun approach to find someone suitable and annoying the other 99% in the process – they just give the recruiters a bad name. So, to those recruiters who know me well and have always delivered the goods, “thanks”, and keep up the good work.  For those who can't be bothered, I wish you well as it reflects badly on your company and I very much doubt you'll ever place me anywhere. Just to clear things up – for the record, I'm not looking for anything right now – understood?

W3C Case Study: A Linked Open Data Resource List Management Tool for Undergraduate Students

For the last few months at work I've been lucky enough to put my RIA hat back on again after a period of absence doing traditional J2EE  and PHP apps with a strong accessibility bent. Working on these kind of apps is something I have enjoyed immensely since first doing a 'rich client' webapp back in 2003, before the name AJAX was coined and when we were flying by the seat of our pants with cross-browser hell and few libraries out there to help that we are all so used to using these days.  It has highs and lows; a real buzz when it works nicely and sometimes the frustration of getting it to work 'just right' (or sometimes even 'at all' !) Anyway, fast forward to 2008 and working on a successor to the old Talis List product.  There are good cross-browser JavaScript libraries out there, such as prototype, jQuery et al, and nice extension libraries such as, but it's still important to maintain an understanding of how it all works behind the scenes. Most of the application is traditional PHP/XHTML/CSS with some progressive enhancement JavaScript thrown in for good measure, but on one area we decided to go down a different route and try out a more WYSIWYG approach with RDFa marked up XHTML. One thing I hadn't used until recently was RDFa.  We've used it on one of the main admin pages in our new product and it's made what was initially quite a complex problem much simpler to implement.  Reference to this can be found on Chris' recent W3C Case Study – "A Linked Open Data Resource List Management Tool for Undergraduate Students", and discussion on it has already started over on Ivan Herman's blog. Currently using Jeni Tennison's RDFQuery library to parse an RDF model out of an XHTML+RDFa page we can mix this with our own code and end up with something that allows complex WYSIWYG editing on a reading list.  We use RDFQuery to parse an initial model out of the page with JavaScript and then the user can start modifying the page in a WYSIWYG style.   They can drag new sections onto the list, drag items from their library of bookmarked resources onto the list and re-order sections and items on the list.  All this is done in the browser with just a few AJAX calls behind the scenes to pull in data for newly added items where required.   At the end of the process, when the Save button is pressed, we can submit the 'before' and 'after' models to our back-end logic which builds a Changeset from before and after models and persists this to a data store on the Talis Platform. Building a Changeset from the two RDF models makes quite a complex problem relatively straightforward.  The complexity now just being in the WYSIWYG interface and the dynamic updating of the RDFa in the page as new items are added or re-arranged. All in all it's been a fascinating exercise over the last few months and it's all coming together nicely.  The read-only views (with RDFa markup) are already live at Plymouth University but editing is only available to someone logged in and with edit priviledges on a list – so no public demo at present. The product has recently got a name, it'll be Talis Aspire.

Subversion 1.5 on Gentoo

A couple of weeks ago I needed to look something up regarding Subversion and headed off to grab the latest copy of “Version Control with Subversion” online.  Whilst looking through it I noticed that Subversion 1.5 had been released without me noticing and that there were a couple of interesting new features.  The main one for me was support for tracking merges up from trunk to a branch.   This is always something I have had mixed success with, normally trying to avoid multiple merge ups from trunk or even trying to avoid merging up from trunk at all because of the inevitable issues when merging the branch back down into trunk. Subversion 1.5 allegedly helps with this so I put it on my list of things to do to investigate. The first part of that was done last night when I set up a new Subversion 1.5 repository on my home Gentoo Linux server.  After initially thinking about setting up a general repository for all users and accessing it through Apache/DAV I soon ditched that option due to lack of time and an annoying HTTP 500 error from the repository when trying to authenticate.  In the end, to just get me up and running, I set up a new repository in my own user home directory and accessed it remotely using the SVN+SSH protocol – job done… So the repository is all now set up, I can access it remotely from my MacBook and I'm ready to go with trying out the new Subversion 1.5 merge tracking feature.   More on this soon….

Windows 7 – just let me download it !

After noticing an announcement on availability of the Windows 7 public beta the other day, I sat at home last night and waited for 8pm GMT to come along to try and get my hands on one of the 2.5 million keys.  Needless to say public demand overloaded the servers and MS decided to pull the release until extra hardware had been thrown at the problem.  Today I noticed another announcement that the 2.5 million copy restriction had been lifted and that it would be generally downloadable for 2 weeks from today. So I opened Firefox, did my registration, got a product key and clicked on the 'Download' link…nothing happened….   Tried it all over again and still nothing happened.  I ended up viewing the source of the page, noticting it was using JavaScript to kick something off, hijacked the URL and opened it in my browser.  Finally I got the download working (through MS's 'download mamager' – yuck!).   At a 2.3-ish Gb download it took ages, and ages, and then with 27 mins left it decided to hang.   Arse!   MS's 'download mangler' didn't resume (what a surprise!) and said the file on the remote server had changed file size.  So either MS has put a different version online at some point in the middle of my download or it just really didn't like the fact I was running Firefox on a Mac… 🙂    On eventually finding a FAQ I noticed that the download was only alleged to work in IE7 and IE7 beta – marvellous… I think I'll boot into my Windows XP VM in VMWare Fusion tomorrow at work and kick off a download in IE7.   If MS really want to make us think they are being more open then it certainly doesn't feel like it!

BT iPlate- bargain gadget for improving your broadband speed

No, it's not another Apple product.  It's a rather simple, yet brilliant, device for those of us suffering poor broadband speeds with noisy lines, a 3-day camel journey away from the 'local' exchange. I bought the iPlate from BroadbandBuyer and it turned up today.  More top service from the excellent BroadbandBuyer site.  It's a 5 minute job at max to install and it's immediately boosted my broadband connection from something that used to be 1-1.2Meg to just over 3Meg.   What a bargain for a tenner! Time will tell what actual throughput I get but I am optimistic that it'll be a significant boost to what I am used to. If you have a poor ADSL broadband connection it's well worth a go – for £10.00 what have you got to lose?!

Draytek vs. Belkin – no contest!

Over the Christmas break I decided it was time to replace my aging ADSL broadband modem/router.  I've been using a Draytek Vigor 2600We for quite a few years now and it has given me solid, reliable service.   I hardly ever have to reboot it, months apart, and normally only when I've flooded the wireless connection somehow as it's only 802.11b.  My MacBook Pro supports 802.11n-draft and other devices in the house support 802.11g so it was time to think about a faster wireless connection. I ended up, foolishly, walking into PC World and buying (completely on a whim, without looking at any reviews) a Belkin FSD8633.  The one I have may just be a lemon and they may well not all be that bad but, what a pile of crap!  It drops the wireless connection with alarming regularity.  Drops the ADSL connection a couple of times a day.   It never works first thing in the morning and needs a power-cycle to get it working again and generally gives me no sense of confidence or quality at all.   That's after a week of usage and last night I unplugged it and put my Vigor back online in sheer frustration. The Belkin will be going back to PC World on Saturday – that'll teach me for making an impluse purchase like that with no thought when inside I knew I should steer clear of the likes of Belkin, Netgear and Linksys. I'll still probably replace this aging Vigor 2600We but need to do a bit more research first.   Current thinking is that it'll be a Draytek again – maybe the Vigor 2820n

New year; fresh installs and stuff

Well a new year is here and with it I have some nice fresh dev tools to use.  PDT 2.0 was released on 29th December 2008 and is something I've been looking forward to as a keen PDT user for a while.  PDT 2.0 is much better with dynamic languages now that it's using the DLTK.  The intelligence and code completion on PHP/HTML/Javascript projects is a real leap forward although it can appear a little sluggish re-building the workspace. After switching to PDt 2.0 I also noticed that MacPortts 1.7 had been released.  I've been on MacPorts 1.6 for a while and there's been an on-going issue trying to install a couple of ports; logrotate for one.  It also sometimes had problems doing a PHP5/Apache2 install when you didn't want MySQL in the mix.   Thankfully MacPorts 1.7 fixes this and I decided to completely refresh my PHP5/Apache2 install on MacPorts from scratch.   I've now got a lovely clean PHP/Apache setup with XDebug, PHPYaz & Memcache.   Don't things always feel much better when you've installed them again from scratch?! To top it all off I swapped out the PC I have been running as  a Gentoo Linux server for the last few years.   My parents upgraded their PC after the hard drive died and I inherited a slightly newer, quieter machine to use as a server.   Gentoo has been my distro of since 2003 after previously dabbing with Slackware, Mandrake and RedHat.   I alwasys go through the minimal install to get exactly the setup I want – no universal install CD's here please!  The result is a lean, fast and rock-solid Linux server tailored perfectly to the hardware it's installed on. The final addition to the list is a new router to replace my aging Draytek Vigor 2600We – that didn't work out so well though.   I just knew deep down that I shouldn't have gone to PC World and chosen one.  I just knew that PC World would only sell your typical Belkin, Netgear or Linksys shite but I went and bought one anyway – a Belkin F5D8633-4, 802.11n-draft wireless ADSL modem/router with 4 port switch.  It's going back to PC World this weekend and I'm now back on my trusty Draytek until I decide to invest in a better replacement, probably another Draytek.  More about that in my next post.

Scriptaculous 'Draggable' in scrolling container ignores Position.includeScrollOffsets=true ?

UPDATEThis only happens when “ghosting” is set to true on the draggable – unfortunately, I need ghosting to be enabled on what I am doing… I've been chasing a problem round for about a day now and am convinced there is a problem in the latest version of (v 1.82) – I've created a test page to demonstrate it. The situation is when you have Draggable(s) inside a scrolling container element.  The scrolling element is of fixed size, it has the CSS 'overflow' properly set to either 'scroll' or 'auto' and there are elements inside it marked as being draggable – for example.
new Draggable(myDraggableElement, {ghosting:true, revert:true, scroll:'main'});
'main' is the ID of the scrolling container element around the Draggable(s). As soon as you scroll down in the scrolling container and start to drag a draggable, the draggable is off-set from the mouse pointer by an ever-increasing distance, depending on how far down you've scrolled the scroll bar. Now then, this all works fine when using a Sortable instread of a Draggable but you have to remember to use…
Position.includeScrollOffsets = true;
…before creating the Sortable. So, my question is, why does this not work for a Draggable when it works fine in the same instance for a Sortable? On looking through the code in it appears tha the Draggable code does not indeed honour the Position.includeScrollOffsets booleam – why?  Is this an oversight on their part? I've tried asking in the #prototype IRC channel – no luck.  I've posted to the Prototype & Google Group and had no replies at all (why don't people reply to difficult questions and forums are only full of n00b questions?!).   On doing a good Google search the closest I can find is this bug report on Rails Trac :-

Draggable does not include scroll offset when dragging in a scrollable container
When setting the scroll property in a draggable, it does not set Position.includeScrollOffsets to true. So, although the draggable is drawn correctly and scrolling occurs as expected, droppables within the scrolling container are not activated correctly.
This bug report sounds exactly like the bug I'm seeing.  It was opened 2 years ago, updated 1 year ago and still not resolved…WTF ?    There are two patches posted though but neither of these seem to solve the problem for me. Back to digging around in the code I guess and try to work out how it's intended to work.  I'm still investigating but will update more as and when I find anything…