Archive for 2008

StackOverflow, Bloodstock and The Clone Wars (Catching Up)

Monday, August 18th, 2008

I’ve got two or three things lined up and half written on technical subjects to finish up before they appear here (mostly surrounding good API design and how to achieve it, and myths about Exceptions in the .NET framework) but I’ve been exceptionally busy lately.

I’ve been enjoying the semi-private beta of Stackoverflow, Jeff Atwood and Joel Spolsky’s project to provide a “developer self help” community akin to Experts Exchange (just “without the suck”).  It’s pretty solid and appears to be playing out like a kind of Xbox live for programmers, at least in the beta, while people try to quickly answer things to get reputation and badges (think achievements).  I don’t know if the enthusiasm will hold out post release, but people do like shiny virtual awards, and people always have questions.

Attended the Bloodstock Open Air music festival at Catton Hall in Derby over this weekend.  Horrible horrible drive (whoever figured that not lighting roads where you’re expected to drive at 70mph was a good idea probably should be taken out the back and shot) but we stayed in a Hotel in the nearby Burton Upon Trent rather than camped.  The music was very much above par (if you like metal / extreme metal) across the three days.  In all honesty, I went to see Opeth headline the Friday and Soilwork play third slot on the Saturday but there was generally a lot of good material to fill the time.

Over the three days we managed to watch (earliest to latest):

Friday Saturday Sunday
Tyr Swallow The Sun Crowning Glory
Akercocke The Defiled Alestorm
Destruction Moonsorrow Grand Magus
Primal Fear Soilwork Mob Rules
Soulfly Iced Earth Kataklysm
Helloween Dimmu Borgir As I Lay Dying
Opeth Overkill
At The Gates

A few of those are partial (as much Dimmu Borgir as I could handle until I got bored, only about half of Destruction, Mob Rules and Overkill).  We caught the first track Napalm Death played before I remembered that they’re a little special (and not in the good way), and I made a point of leaving before Nightwish on Sunday night (it was raining, and Nightwish make me feel ill!).

Highlights were Opeth headlining (shortened set, Fredrik Åkesson seems to fit in better on lead guitar than he did on the pre-Watershed tour), Soulfly playing a lot of Sepultura, Tyr and Alestorm for utter hilarity (battle metal and pirate metal respectively), Soilwork being as tight as ever, Swallow the Sun being very atmospheric and At The Gates being metal as hell.

Overall at the end of the weekend I was feeling somewhat burnt out watching live music.  Which means going to Leeds next weekend will be a bit of effort…  I suspect we’ll just go to watch the big headliners (Metallica, Slipknot, rage against the machine and Queens of the Stoneage) perhaps skipping the Sunday entirely as it’ll be a case of driving to and from Manchester each evening.

image

I also went to check out the Star Wars: The Clone Wars animated feature length this evening.  As a huge extended universe Star Wars fan I pretty much feel indifferent about it.

It looked nice, was fluid, the voice acting was decent enough, the battle sequences were pretty cool, the light saber fights were decent looking if soullessly put together. 

Unfortunately they wrote an average main story (instead of one of a million better clone wars related tales they could have filmed) added a very annoying seemingly cross dressing English talking Hutt, and then went through the dialogue of the script adding pet names for minor characters to make the dialogue feel a little awkward and kiddie.

It wasn’t bad, I did enjoy it.  I’ve always left Star Wars cinema experiences (usually on opening night, they somehow slipped this under the radar) feeling elated, and this time I came out feeling pretty indifferent.  It was reasonable, a great kids film I guess, but whereas they previously made Star Wars kid suitable, this time it feels like they didn’t quite make the directly kid orientated release adult friendly enough and somehow made a few Star Wars characters say things they shouldn’t ever have had to say (Jedi calling a Hutt lave “Stinky” is just plain wrong).  I guess I just hope they make the animated series a little more adult friendly.

Hopefully I’ll get a few technical posts finished up in the next few days.  In the meantime, checkout Stackoverflow.com, see the Clone Wars if you can silence your inner adult and go listen to some Swallow The Sun.

Vintage Game Club: Grim Fandango

Monday, July 14th, 2008

image

I’ve just picked up on the fact that The Brainy Gamer blog is doing a gaming club (a-la ye old book clubs / reading circles) and the focus for the next session is Grim Fandango.

http://www.brainygamer.com/the_brainy_gamer/2008/07/vintage-game–1.html?cid=122321778#comment-122321778

If you have time to participate, I’d really recommend it.  Not because I have any idea how it’ll go (I obviously hope it goes well), but more because Grim Fandango is possibly the greatest adventure game ever written.  Easily in my top 10 games of all time (if I were fearless enough to make a list) and a game that holds storytelling and good game play in the utmost regard.

If you’ve played it, play again, if you haven’t, play it for the first time.  It’s a classic, and scarily it’s probably turning ten this year.  If I recall, the original tag-line was “An epic tale of crime and corruption in the land of the dead” and that holds.  An art-deco masterpiece of good storytelling, humour, and your first (and probably only chance) to play a travel agent for the department of the dead.

Buy it here:

http://www.play.com/Games/PC/4-/2555356/Grim-Fandango/Product.html?source=5003&kwmid=4481214&kmcid=1664184991&match_type=

http://www.amazon.com/gp/offer-listing/B00004WGW1/ref=dp_olp_2

Demo here:

http://www.fileplanet.com/32113/30000/fileinfo/Grim-Fandango

Read the Escapist feature on it here:

http://www.escapistmagazine.com/articles/view/issues/issue_139/2994-Walk-Don-t-Run

Embrace, Extend, Extinguish: Integration with Uncooperative Systems

Saturday, July 12th, 2008

Cornered By Technology

It’s not uncommon in enterprise software development to be tasked with integrating with a third party platform that just won’t play nicely however hard you try. These scenarios often creep up on you at the most unexpected time, be it as a requirement, or a partnership with an uncooperative or unskilled vendor or technical partner. Even worse, it can often become clear that the relationship between your platform and a third party platform is effectively untenable after you’ve invested significant development effort to get “most of the way” there.

The Need for Application and Data Separation

The really bad news is that this isn’t an uncommon scenario, and there are countless businesses operating whilst being held to ransom by systems that they paid for. Unfortunately, these systems cannot be abandoned, normally because the system holds some crucial operational data that the company would cease to function without. Antiquated CRM solutions, Billing platforms and databases are a few of the most common places these issues arise. The fact that you’ve been effectively backed into a corner by a technology partner isn’t the root of the problem however.

These scenarios normally spawn from a historic or bad choice in application design either on your own part or on the part of the offending partner as a side effect of intertwining corporate data and applications into a tightly coupled relationship. You shouldn’t offer the keys to your business to any single piece of software, especially a piece of software operated by a third party, and it’s of the highest importance that you have a clear exit strategy if you choose to enter such an abusive relationship.

Anyone that works with real software on a day to day basis well knows that a full separation of software and the data on which it operates isn’t entirely practical. In reality, you are going to end up with applications controlling certain portions of your data in proprietary formats, but with due diligence and a mind for separation of concerns when choosing available solutions, business crippling crisis should be easy to avoid.

When choosing platforms and service partners, don’t skim over the details of data storage, try and ensure any application that you’re trusting with your business data is storing it in a way that you can migrate that data elsewhere if you so desire.

All People Perform To the Best of Their Abilities When Available Time and Constraints Are Accounted For

It’s very easy to become adversarial when faced with a business crippling technology partner or application and it’s of the upmost importance that you keep your ego and temper in check when dealing with an especially uncooperative partner. This sounds like an obvious piece of advice when dealing with people but it’s just as appropriate a guideline when dealing with software.

Don’t do or say anything you’ll regret, don’t antagonise your opposition (and if you’re unlucky, an uncooperative service partner will certainly become an opponent), and certainly don’t make any knee-jerk decisions regarding your own codebase. It’s important to remember that whilst the system you’re attempting to integrate with may well appear intentionally antagonising or impossible. It’s likely that the functionality of the system was not achievable in any other way, and you genuinely are working with the best product that is available. Concentrate on productive measures, not the conflict and stress of a business threatening problem.

It’s Not You, It’s Me

It should be quite evident that there’s only one solution to this particular problem; technical divorce.
The goals of a project to end an abusive software relationship are reasonably clear cut and simple:

  1. Don’t negatively impact business operation without good reason.
  2. Achieve data and application logic separation.
  3. Escape with minimal impact on other integrated systems.
  4. Take preventative measures; don’t get hurt again.

Your number one goal is to not disrupt day to day business during this period of technical therapy. You need to continue working with your technology partner on a daily basis in order to operate and it’s important that you don’t anger your partners or hinder the operation of the soon to be replaced system with disruptive development. Following good software development practices in general should ensure you avoid technical issues of these kinds.

Your second goal is to separate your mission critical data from the dying system. Data ownership is a huge task and not something that can be summed up in a few paragraphs. You may need business analysts to investigate who owns the data in your business and where it should reside. As a good guideline, it’s worth considering that as a business you should own all of your business data with specific applications fed on the data they require to operate. Results should be imported back into a master database or data-store. It’s not a silver bullet or a solution for everyone, but if you approach the problem of data ownership from this perspective then you’re at least thinking along the right track where your applications are secondary to your data needs. An order tracking system should only be concerned with order items and names, a billing system should only be concerned with financial data and billing, try and ensure you don’t get lost in a spaghetti mess of duplicated data.

Your third and most difficult goal is to make this process transparent to the end user by reducing the impact of the change on your other systems. I’ll spoil the fun now by telling you that this is probably impossible and that the user will see a difference. The key is ensuring that difference is only ever iterative improvement to existing business processes and never prohibitive to productive work.

The fourth goal is preventative and hard to define. Seeing as you’re going though this painful technical divorce, ensure that the amount of thought and work that goes in to this project is sufficient to prevent this scenario reoccurring. Employ good business analysts to help you design the project, investigate data ownership and data warehousing, invest in technologies that adhere to open standards and allow for data portability. Build your replacement system in such a way that when you want to replace it with the next wave of technology, that your own developers won’t face the challenges you’re facing now.

Designing a Solution

In order to escape from this heavily relied upon piece of software we’d do well to learn a few tricks from the people who have participated in Software Modernisation over the years.

The Wikipedia entry for software modernisation (http://en.wikipedia.org/wiki/Software_modernization) reads;

“Software Modernization is the process of understanding and evolving existing software assets.

There is a vast amount of highly functional, operational software, representing enormous commercial value deployed in organizations around the globe. To be precise, existing systems are defined as any production-enabled software, regardless of the platform it runs on, language it’s written in, or length of time it has been in production.

These entrenched software systems often resist evolution because their strategic value and ability to adapt has diminished through factors not exclusively related to its functionality. Common examples of such factors are a system’s inability to be understood or maintained cost-effectively, inability to interoperate or dependence on undesired technologies or architectures”

The goals of software modernisation are functionally similar to the goals of replacing an uncooperative system, albeit with a different motivation for the system replacement. This “modernisation” is happening due to the need to maintain defective but business critical operations in the short term rather than retaining currently good functionality in the long term.

Software modernisation is a whole topic in and of itself, but at its core there are two common methods of modernising software; black box modernisation and white box modernisation. These terms retain their standard computer science meanings.

Both modernisation practices require the encapsulation of the legacy system in modern code, creating a fresh set of APIs in a modern language, which in turn calls an API or function of the legacy system.

Black box modernisation involves calling only the publicly facing APIs of the legacy system where as white box modernisation involves a degree of knowledge of the underlying platform and its operations. It’s exceptionally common for extensive reverse engineering of a platform to take place in white box modernisation whilst black box modernisation is more or less a thin wrapping layer.

We’re going to take the idea of system encapsulation from software modernisation and treat our uncooperative system as though it were a legacy system and develop an API to encapsulate the systems functionality.

Function Not Form

During the “aggressive replacement” of the uncooperative system, modern development methodologies will get you a long way. You should keep a keen focus on loose coupling of the interface you create to describe the business needs and the underlying wrapping code of the system beneath it.

When designing your replacement API, you should endeavour to describe the business needs rather than mapping new API calls to the uncooperative system in a one to one fashion. You should take great care to describe function rather than form, decoupling the core business needs from the implementation underneath.

Good API design isn’t something you wake up with the innate ability to do, and thoroughly describing the business requirements of the uncooperative system in your new API will likely take several iterations. This isn’t a problem however, as it’s recommend that you iterate through a process of this scope rather than attempt some big bang replacement of the uncooperative system to avoid great risk and inconvenience to the business.

Your API should creep in to existence, method by method. Existing applications should be updated to use the new API methods as their developed to allow for an iterative migration to the new wrapping code.

Embrace, extend, extinguish

Once you’ve designed the API you wish to use to replace your uncooperative system, you actually have to produce code that maps between the two.

This is no small task and will probably be the majority of the work required by the project. This code is very implementation specific. You may be able to just codify your new APIs in to a few API calls of the uncooperative system itself, conversely you may have to deconstruct the behaviour of the system and replicate it in entirely fresh code. Either way, it’s exceptionally important that at this stage you keep your implementation separate from your API and service layer.

Thus far we’ve embraced and accepted our uncooperative system, we’ve extended a hand towards it in the form of a neatly designed API, and the final step of your project will revolve around replacing the system entirely.

Once your API is fully featured, and all the dependant systems in your business are referencing it for any communication they need to perform you can begin seeking a replacement system.

Choose wisely, at this point you’ll likely be more than aware of the pains involved in another costly migration! Take your time, there’s no hurry, developing your own solution is even an option.

Once you’ve chosen the replacement, you need to write some code again, this time to translate calls from your new API across to your replacement system. Because you did remember to keep your API decoupled from the implementation, right?

At this point you’ve succeeded in using an iterative approach to software design to fully replace a system that may have previously seemed inseparable from the business. The ROI of a project of this nature is hard to quantify, but I thoroughly believe that if you feel that you need to embark on a project of this nature, its completion will surely strengthen one of the most brittle parts of your operational business.

Congratulations! You made it out alive.

Footnote: Avoid the same thing happening to you

This is honestly a plea to anyone that’s ever going to write a system they expect other developers to communicate with. Practice designing APIs. Write them well. Document them well. Keep them up to date. Support them. Define concise operations. Be good. If everyone is “good” then hopefully fewer people will have to suffer difficult integration exercises.

The Vote Of No Confidence In The Entity Framework

Wednesday, June 25th, 2008

It appears as though the Microsoft M.V.P’s that were called upon to advise on the technicalities of the forthcoming Entity Framework hit a little bit of a roadblock.

When I say “a little bit”, it seems as though Microsoft just point blank disregarded their warnings and recommendations in regard to creating OR mappers. It’s probably the first time I’ve seen this kind of scenario end with the technical advisors posting a warning and a general vote of no confidence.

I’d be lying if I didn’t say I felt a little disappointed that after making steps in the right direction and asking domain specialists for advice, that Microsoft entirely disregarded the advice of the specialists they consulted resulting into what seems like an unusable shipping product.

I’ve not attempted to use the entity framework in and form, but the technical criticisms in the vote of no confidence are quite explicit, and as a developer who makes extensive use of OR/M, if those criticisms are accurate (which is very likely) I’d certainly treat the entity framework with the same unfortunate disregard.

At least nHibernate isn’t broken!

The Dangers Of Pushing The "Cloud" To Market

Saturday, June 21st, 2008

The word cloud has been thrown around for years to describe the internet, but there’s a growing trend at the moment to launch services that seem to embody actual “cloud / grid computing”.  This movement to some extent is just the logical extension of the rich web applications that have gained popularity as part of the “web 2.0″ epidemic of increasing bandwidth and remote server horsepower.

The two obviously notable solutions in this area are Microsoft’s Live Mesh, which was announced and put into a public beta / technical preview a few months ago (Ray Ozzie’s second attempt to solve the problem of distributed device synchronisation after the canned “.NET My Services”) and Apples Mobile Me.  I’m normally a somewhat critical Microsoft supporter (not an apologist), I’ll put that on the table now, however I suspect that Apples service is likely to get more traction due to iPhone 2.0 support and it’s forthcoming lower price point (at the very least in the UK, possibly elsewhere).

Both of these services effectively offer the same thing, centralised data storage and device synchronisation, Apple offer what they call the “me.com suite of web applications” and Microsoft offer the “Live Desktop” as the online interface to this storage pool, both offer mobile clients, both offer desktop clients for both computing platforms.  They’re effectively the same service, it’s Exchange Home Edition with Outlook Web Access enabled, for want of a better example.  It’s Microsoft and Apple desperately trying to get between the desktop and Google Apps.

But that’s really what I have a problem with.  The great benefit of grid computing is the utilisation of large amounts of CPU resource to accomplish large tasks very quickly, not data warehousing your users personal data.  It’s seemingly something that both of these “cloud computing” solutions have entirely missed and in reality, they’ve supplied Active Sync and Exchange for the home user combined with the three million iDrive, YourDrive, MyDrive, HisDrive services that became popular before the Web 2.0 bubble in about 2001-2002 and effectively managed to shut themselves down after being used solely for piracy.

I don’t actually believe that the world internet infrastructure is ready for these types of services yet because of the data ownership implications and I feel that these services have been designed almost inside out in nature.  Data synchronisation is nice, I’m sure everyone would agree with that, but by forcing these solutions to market before we’re in an ecosystem where users can host their own file-identity-synchronisation services out of the home in a process as simple as signing up to something like Mobile Me or Live Mesh, we’re setting a precedent.  That precedent says that it’s ok to surrender your personal data to a giant third party data store in the sky, and honestly this is not ok

This is a choice the vendors are making, and in my single honest opinion, an exceptionally bad one.  Apple could just as easy focus their energy into making a Mac Mini derived small home device that provides the same functionality as Mobile Me, that plugs in to a home router.  I don’t mind them offering a Mobile Me like service for people that don’t want to be responsible for the keys to their home, but I sure as hell have a problem with both them and Microsoft forcing people to give up their homes in the name of data synchronisation.

This is another case of a good idea that people will enjoy, poorly implemented and pushed out to market, when the effort should be in enabling a permanently connected high speed internet for the masses, and the engineering of devices that allow the user to control their own resources.  I know I sure as hell don’t want to loose all of my data because of some sloppy code and an exploit or two.  I’m sure companies of the size of the big players in this market can secure data, but walking around with a target on your back is never a good idea.  Cloud computing should be about applications and not data, do not be told otherwise.  They bring the technology and knowledge and you bring your data to that party, not the other way around.

As a footnote, I think both implementations look pretty slick and offer good functionality, albeit nothing above and beyond synchronising to a mobile device with a HDSD card in it (my current solution involves a large memory card, a HTC Touch and ActiveSync to effectively reproduce this functionality).  Online identity, sharing and data stores are the future, lets just not let people lock us in to a poor aggressive implementation.  Vote with your wallet people.

Now Playing: Between The Buried And Me – The Decade Of Statues

C# Developers Toolbelt

Sunday, June 8th, 2008

There’s a very good argument for saying that the thing that makes or breaks a new programming language is actually the tools the work with and around it, rather than language features themselves.  If you ask the average programmer to guess the percentage of language features of their language of preference that they used on a daily basis, or even ever, I suspect many of them would respond somewhere in the 25-30% range. 

Programming languages these days are big.  By that I mean, programming frameworks these days are big.  Most people tend to not just use the language natively, but the selection of a preferred platform tends to be based on the features of the dominant framework available for that language.  As a simple statement this is neither here nor there, but it illustrates the point that the development environment, for a large proportion of its users, makes a language.  I’d argue that Visual Studio made Visual Basic popular, and that without it, it would probably haven’t stood a chance against Turbo Pascal and Delphi, even with all the clout of Microsoft.  So we rely on tools, and in honour of tools, here are a list of tools I find invaluable whilst developing in .NET.

JetBrains ReSharper

This is the king of all visual studio plug-ins.  Imagine it as a kind of, interactive FX cop while you work.  It offers background compilation, refactorings, stream lines existing visual studio functionality and basically makes you code better.  It teaches you things you didn’t know about the language and helps you improve your code quality proactively rather than retrospectively.  The biggest programming crutch known to man, and a descendant of the IntelliJ IDE for Java.  JetBrains have trials available and if you drop my name in you can get an improved trial period and a bit of a discount on purchases.  If I could take just one tool home, it’d be this.

Lutz Roeder’s Reflector

Ever thought that there was a bug in someone else’s compiled assembly?  Fancy a crawl around the internals of the .NET framework?  This is the tool for you.  Reflector translates the IL of a compiled assembly back in to C# and lets you poke around inside.  It’s very much read only, but if you ever think there’s a bug in something you’re not supposed to touch, you can prove it and code around it with the help of this excellent tool.

System Internals / Microsoft Debug View

I’ve written about the usefulness of this little application in the past.  Debug View lets you view the Windows Debug output stream in real time.  That’d be anything written using System.Diagnostics.Debug.WriteLine or the more traditional C / C++ equivalents.  Allows you to monitor an application built in a debug state in real time.  Perfect for debugging Windows services or other troublesome applications that you need to monitor whilst running during development.

Visual Studio Remote Debugger

If you have Visual Studio you actually already have this (the link above is to setup information).  It’s hidden away in C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger (replace the visual studio version as applicable) and it allows you to attach an instance of Visual Studio to an application running on another machine.  Again invaluable if you’re writing distributed services and deploying to test servers, this application allows you to run your service or application on another machine, then connect to it using the visual studio debugger and break and step through your code as though it were on your local machine.  Great for when you deploy something to an integration test server, it fails, and you just can’t work out why without digging through the code in real time.

MbUnit and Rhino Mocks

Two for one, an xUnit derived unit testing framework, and Ayende’s mocking framework.  Unit test with confidence and unit test often.

ANTS Profiler

ANTS profiles your .NET applications at a level I’ve not seen in any competing products, giving you a line by line, method my method breakdown of execution time and code bottlenecks along with all the stats you could ever want to generate on a piece of code.  You really can use this to find horrible hidden performance issues in your code and fix them.

Honourable Mentions

Notepad++

Everyone has their own favourite notepad replacement utility.  This is mine.  I used Context for years but this is just better in every way..

Pro C# and the .NET 3.5 Platform

The only “giant programming bible” I’ve ever been able to read like a book.  Grab an E-book so it’s searchable and you’ll probably get more information than you could Google for.

These are just my personal preferences, and applications that I use on a daily basis.  Give a few of them a try and you’ll see your productivity increase and hopefully, your code improve.

Selecting a mostly portable notebook

Thursday, June 5th, 2008

I commute to and from London very frequently and the trains, whilst high tech and reasonably pleasant, can lead to very long journeys (especially in times of maintenance).  Because of this frequent travelling I’m practically forced to carry a laptop around with me for the sake of my sanity.  I tend to enjoy watching DVDs, playing late 90s and early 2000s PC games, and spiking and prototyping software ideas to pass the time on these train rides (which can stretch up to 4 1/2 hours some Sunday evenings).

Now, my laptop is a Dell Inspiron 5160, picked up in 2004 when the phrase “desktop replacement” in a laptop made my mind think of good things.  It has a desktop Pentium 4 processor (with hyper threading, for all the good that did) clocked at 2.8Ghz, 1.25Gb RAM running XP Pro and a 15.4″ screen (to give a sense of scale).

At the time, those were very respectable (desktop replacing!) specs.  The downside is that it weighs as much as the desktop it pretends to replace.  9.7lbs to be precise, which if I recall is something like 5Kg give or take.  Add to that the power of a chunky laptop power supply and most weekends I feel as though I’m carrying a small child from the north to the south of London.  Not fun.

I came to the conclusion (prompted by back ache) that I should probably look into replacing my monolith with something designed to, dare say, be portable.  Anyone that watches PC hardware will be aware of the waves that the current range of sub-notebooks have been making in the IT press so I figured I’d take a closer look.

The options seemed to be the much publicised Asus EeePC, the forthcoming HP Mininote and the HTC Shift (and other similar large smart-devices) as far as ultra portables went.  These devices are really, really cool.  Eight to nine inch displays, 700Mhz to 1.2Ghz VIA processors and chipsets and weighing just over 1Kg.  They really are tiny little devices and perfect in the cheep connected device market, but unfortunately the ability to run Visual Studio and to watch DVDs that I’ve just bought (ripping isn’t really relevant as I tend to buy things at train stations) were deal breakers.  I toyed with the idea of buying an external DVDRW drive to keep alongside a tiny sub-notebook, but at that point the rice would be approaching about £400-£450 and it was starting to feel like I’d really be ending up at the wrong end of the price-performance curve.

I’d definitely recommend anyone that just needs a really portable Internet / office device to check out reviews of the HP Mininote, it should be out this month and I was very very tempted by it, it’ looks fantastic and seems exceptionally powerful for it’s form factor.

I abandoned the idea of picking up a sub-notebook and decided to take a look into the very small regular notebooks on the market.  I’d had a very positive experience with he 11″ T-Series Sony Vaios‘ in the past  Their build quality is second to none, specs are brilliant and they weigh just 1.25Kg.  Unfortunately you also pay £1500+ for the privilege of a tiny notebook of comparable spec to a £400 15″ notebook.  If you’ve got the budget then I’d recommend one in a second, but they’re a far cry from the £200 EeePCs.  I figured I could stretch up to 12″ and still manage to pick up a very light, fully featured laptop and to be honest was quite surprised at the lack of products on the market.  I suspect this could partly be due to the recently (as in yesterday) announced new reference designs for sub notebooks , or perhaps companies are waiting on the Intel Atom CPU announced late last month, but either way the range of notebooks on the market at that size and weight point is remarkably sparse.

That said, there are some options.  Acer have a 12″ offering in the shape of the Aspire 2929.  an Intel Core Duo based machine with 1-2Gb RAM, Vista and about 100-200Gb of disk space, depending, it seems, on who you buy it from.  It’s part of their clamshell range apparently co-designed with Ferrari.  I’m guessing that’s their excuse for the laptop looking like utter shit, but on paper, the specs read ok, for about £500-600, vendor dependant.

I was still unsure, so I’d decided to go to PC World to see if I could just get a feel for the notebooks available,  It’s pretty hard to get a handle on the weight and size of something from raw specifications and websites so I figured it’d be time well spent.  I walked in the door, and on the second display stand as I entered the store was a tiny 12″ notebook branded “Advent”, which the smart or unlucky amongst us recognise as one of PC Worlds own brand product lines.  Looked good though, visually.  The build quality is no Vaio, but the price tag isn’t either, at only £450.  Core 2 Due 1.83Ghz, 2Gb RAM, 160Gb Hdd.  On paper, the specs were actually excellent for the price point.  Figured I’d ask for a full spec and pulled out my phone to start googling.

Interestingly there were very few mentions of the machine online.  Meaning it’s either very very new, or that the people that buy PC World own brand laptops don’t have too much to say about them online, none the less the spec sheet was quite revealing.  It appears that this laptop, almost £200 cheaper than the Acer Aspire 2929, and light years better looking, is practically the same machine underneath.  It uses exactly the same Intel chipsets, exactly the same onboard graphics, has exactly the same set of features (3 Usb and a Firewire port, onboard card reader, identical audio chipsets) and is to all intents and purposes just a nicer looking and cheaper version of the 2929.  Oh, and it weighs only 1.8Kg

I still don’t trust PC World hardware, so I went home to do a bit of extensive googling and slept on it, returned the next day and picked up one of the notebooks with Vista Premium.  That was two days ago.  I’ve spent the following few evenings tuning up Vista and installing software, and in all honesty, the machine really seems to fly, and at this point I’d go as far as recommending it.

I guess the moral of the story is that you never know what you might find lying about PC World.  But moreover, if you’re looking for a nice portable notebook on a reasonable budget without sacrificing power, PC World appear to have them in stock in the form of the Avent 4401, filling a curious hole in the market that other manufacturers appear to not want to compete in.

As a quick tip, due to PC World being… somewhat strange, if you’re interested in buying one of these machines, purchace it online and select “Collect @ Store” and you’ll save about £50 on the store price of the notebook.

Do with this information what you will.

Beyond Good and Evil 2

Wednesday, May 28th, 2008

It appears that Ubisoft just announced Beyond Good and Evil 2 with an in engine trailer at their UbiDays press event.  This is fantastic, fantastic news.

If you didn’t play the original (XBOX/PS2/PC) you missed out on a well written compelling action adventure that always ends up on those lists of “under appreciated classics”.  Thankfully it seems enough people did appreciate it.

You can probably pick up the original for pennies these days, and I *think* it’s one of the few titles on the Xbox Originals download service on the 360.  No excuses.  (If it isn’t, just get Fahrenheit instead!).

There’s a trailer over here, lovingly stolen from the ever excellent kotaku.

Web 3.0 Data Silos and Identity Portals – Overthrowing social networks

Tuesday, May 20th, 2008

Since I wrote my previous entry on data ownership and web 3.0 I’ve put a significant amount of thought in to how to crawl out of this restrictive data warehousing hole.  As a result of this I’ve started planning a project tentatively called MyIdentityPortal which I hope will succeed in providing an out of the box (initially .NET) implementation of a personal data silo for the web.

A few months ago I started looking in to contributing to the .NET OpenId project, I downloaded an old release, did a bunch of work around it, then realised I’d GITted the wrong version, updated and saw something remarkably accomplished; at this point I felt that really the project didn’t need my assistance, but instead I was interested in producing something derived from it – a central profile and data controlling application.  This is effectively what I intend MyIdentityPortal to be.

The implementation should be fundamentally simple.  I’d like to implement an attractive web application that’s installable at the very least on a Win 2003 webserver (hopefully with a PHP or Ruby port down the road) which helps define the interactions of social networking as protocols.  Effectively, what I want to build is a sort of reverse proxy for RSS feeds.

The portal should provide four key services:

  • Providing your OpenId
  • Providing an RSS/Atom feed of data
  • Providing an XML-RPC endpoint (not web-services, soap seems a little overweight for the task) which expose microformatted data dependant upon the query parameters
  • Acting as a reverse proxy for RSS/Atom/XML-RPC data to allow the delegation of responsibility

Traditionally, modern websites tend to allow you to export data or access data externally using RSS feeds and I want to try and stick to this existing paradigm for the portal.  I want to try and turn this flow of data around, allowing you to set up a portal which you elect as your trusted “master” data source and your OpenId provider.

Using this portal (your own personal data silo), you set up various types of feeds (blog posts, micro-blogging ala twitter, iCal events, friends feeds/interpersonal connections, profile information, photo feeds, etc, etc) in a user customisable manner and supply these feed URLs to third party applications (facebook, myspace, etc) as the master source of data for each distinct data type they require.

These applications then take your data and add value to it in the form of their networking services.

The other thing the portal should allow you to do is to delegate responsibility, effectively proxy and transform an RSS feed or XML-RPC call.  Say, for example, that you really love the way that your WordPress blogging platform works, you love the interface, you love the presentation and you love the host.  Why change that?  The portal should allow you to define an external resource (RSS/Atom/XML-RPC) as the owner of that data, then transparently proxy it to a third party when the request that information from the portal.

The benefit of this type of data silo is fantastic and offers tangible benefits right now: 

  • You have the ability to withhold or withdraw feed data.
  • You have the ability to disconnect or shut down your feeds in one location.
  • You can always define the master source of data transparently, be it through a portal plug in that produces that content or a delegate that proxies it.
  • You can control access rights to your data based on OpenIds and requesting domains.
  • It absolutely enforces interoperability between third party sites- they all syndicate the same feeds and data, no more missing out on parties because you don’t have a facebook profile to receive the invite on.

In addition to this as you elect your own provider (in this case by installing the FOSS application) you can effectively associate yourself with the portal.  One of my predictions on the evolution of the web hinges on micro-payments being used for small content purchases alongside subscriptions, and this kind of portal could be instrumental in painless payments by joining it with a payment system or subscription management services which, again, is under your control, and contains your subscriptions that external websites could authenticate and validate with.

I really want to get to a position where I have a wonderful interface that keeps track of my online presence, the data feeds and requests that I expose as “related to me” and perhaps even a shared storage area, that contacts, both personal and professional, could use to access the information about me which I permit.

In the first implementation, I’d like to aim for things that are useful now.  An OpenId provider, aimed at the single user, which encompasses RSS and Atom feed delegation and transformation along with a nice interface to administer this delegation.  I’d like to be able to log in to the provider with the open id it hosts, and set up some Feed endpoints which relay, as the first example, the feed from my blog.  I’d later like to expand this to expose some simple query / response pairs using XML-RPC for accessing a photo gallery (some basic commands like list all, search and retrieve) or perhaps calendar events using with any luck an existing standard (I hear iCal is reasonable though I have no experience with it).  Perhaps after that, expand to some more trivial functionality, perhaps a “recent play list” feed which mirrors the functionality of Last.FM to round of a few example use cases and just see where the product and implementation evolves from there.

It’ll be both free and open source.

I’ve already started cooking the first implementation on train rides, thankfully technically it shouldn’t be too complex, hinging off existing technology and using standard protocols.  I’m working on the feed delegation first, in case anyone’s curious.  I’ve got my good friend Chris Bird on board to thrash ideas out and hopefully work alongside when we have time.  If you’re interested in helping with the project don’t hesitate to get in touch (you can find contact information here).

Adoption will be a horrible sticking point.  None of the networking sites will appreciate losing control of your data, but really, that’s not the sort of control they should have had in the first place.  W
ith any luck, there’ll be enough pressure to adopt an open standard that forces interoperability that they’ll have to change or die.

Now Playing: Textures – Silhouettes – 02 – The Sun’s Architect

Stop Holding My Data Hostage – Data Ownership and Web 3.0

Tuesday, May 6th, 2008

If I were to write down a list of things I really really don’t like about the “web 2.0″ ecosystem it’d be exhaustive and consist of all of the current fads, go-to websites like facebook, twitter, flickr et al, and would really be summarised by the phrase “low signal to noise ratio”.  However, I think the concepts behind all of the mentioned sites and the fictional huge list are compelling, fantastic ideas, just implemented in a horribly disparate way.

I went to see Richard Stallman talk on the ethics of the free software movement (not the open source movement, he spent a long time explaining the difference, and rightly so) last Thursday.  It was a very interesting talk, Stallman has a reputation of being quite the… extreme evangelist, and he definitely has earned that reputation.  I don’t agree with some of his viewpoints for several unrelated reasons, but I respect his integrity and his pure black and white belief in The Four Freedoms of Free Software.  It’s with a similar initially terrified mind that I really believe that the current trend towards extreme social interaction (micro-blogging, regular blogging, friends lists, updates and feeds) should be free and open.

I was looking in to twitter tonight, a concept I’ve dismissed as a low information high noise communication medium, but I’m always willing to be convinced.  As part of this I was looking into the competing services offered by a few other companies and I’m really quite worried at how exclusive these services are from each other, despite operating in practically the same field (the main two I was looking at were twitter and pownce, for sake of reference).  This lack of interoperability is the stuff Microsoft get lynched for and the “FOSS” world cries foul over, yet these same people who happily campaigned for open protocols for Instant Messaging five years ago will silently sign up to these locked-in services without thinking twice.  It’s quite telling that with these micro blogging services, there are several third party applications to post a message to all of them at once.

It seems to be a recurring theme, that whenever I see a nice “web 2.0″ website, the first thing I do is think “that’s really cool, how can I re-implement that, so I control the data, and can inter-operate with their website”.  That’s the first thing I thought about twitter, that’s the first thing I though about Livejournal as and when I slowly started wanting to migrate away from using it to keep in contact with people, and it was the first thing I though of when I saw the mother of all mash-ups that is Facebook.

The funny thing is, the platform for this, in the most primitive of senses, already exists.  Most of these websites export to RSS or Atom feeds, and nearly all of them syndicate in some way, they just never seem to offer the option to syndicate in a way that makes other services messages flow fluidly with their own.

What I really hope and dream for, is that the “web 2.0 feature set” becomes a set of protocols, the most simple implementation could even be an RSS feed or webservice combined with microformats.  I don’t Facebook to store a list of all the people that are my friends, or myspace for that matter, I want facebook or myspace to ask me for a feed or service URL which will present it with a list of my friends.  They can then write all the functionality in the world that deals with those friends, who sign up in the same way.  People would visit the site for the value the site added, not because it was holding their data hostage.  I don’t want a third party website to store upcoming events for me, I want to provide my calendar in feed format to them.  I don’t want my friends to send me to a “facebook event”, I want them to invite me to an “Event” that I can view using facebook.  Or whatever grows to take its place.

In the same way I believe that it’s really important that people control their own identities in the “digital future”, I really believe that it’s your own responsibility to make sure YOUR data is in good hands.  I don’t want some American corporate to have some laptops stolen with my data on them, because that data shouldn’t be there in the first place.

The first and foremost barrier to these data control issues is the service providers themselves and their financial bottom lines, they’d need to adapt to add value instead of retaining you for your data, the second barrier however is the ability to control your own data.  Most people are not technical, most people won’t have the first clue about who “owns” their data, let alone how to set up a data server, which supplies feeds and maintains profiles.  Informing the user is obviously the first step, but after that it’s down to providing for the user.

I really hope and believe (and will probably start spiking out some prototypes in the not so distant future) that there will be some significant development effort put in to a simple “host your own identity” platform.  In the same way that phpBB became synonymous with internet message boards post Usenet, some kind of “Open Identity Platform” would be a godsend.  A central place to maintain all your lists, post your updates, keep your calendar, your contacts, your email.  And most importantly, it’s YOUR central place.  Be that on your server, or a service provider that you trust and have explicitly given the permission, authority and potentially funds to control your Open Identity. 

I think there’s even a chance that the control of your online identity will become a physical thing in the coming decade, as IPv6 rolls out and more and more countries get high bandwidth in the home, I think we’ll see people hosting their own websites and identities in physical devices in the home that inter-operate with desktop applications and other household appliances.  Just like “home networking” as a concept was crazy fifteen years ago (I remember setting up a ring network in the early-mid 90s as an early teenager and feeling very very advanced) and home wireless was laughable at the turn of the century, we now have cheep Belkin wireless home network access points and anyone can VPN.  Maybe in ten years we’ll have home identity providers with a built in webserver to maintain your identity.  Plug and play.  When your grandma can do it, the consumer has officially “won”.

It’s a long road, and the major networking providers will need to start supporting the concept of feeding in the data externally as though it were part of their system, but the interoperability of the internet is effectively at stake if this doesn’t happen over the coming decade.  I’d hate to see the interactivity of this phase of the internets dubious “development” be lost to red tape and a lack of foresight.  A lot of the current ecosystem is a fad and will die, but the concepts of global communication are strong ones and deserve to mature.

I want to use global single sign on, I want to keep an online photo gallery, I want to micro blog, I want to instant message, I want to have a global calendar, I want to tell you who my friends are.  Network providers; I’ll provide you with the content, you provide me the added value.

Now Playing: nine inch nails – head down