Today is my last day on the payroll of the University of Warwick.
I'm available for hire as a consultant. If anyone wants to contact me about that (or anything else), you can reach me by email at jon then the at symbol then parkplatz.net.
Today is my last day on the payroll of the University of Warwick.
I'm available for hire as a consultant. If anyone wants to contact me about that (or anything else), you can reach me by email at jon then the at symbol then parkplatz.net.
(More old mail - John Dale sent me this in September 2000 - but it's timeless)
Dear Mr. Architect:
Please design and build me a house. I am not quite sure of what I need,
so you should use your discretion. My house should have somewhere
between two and forty-five bedrooms. Just make sure the plans are such
that the bedrooms can be easily added or deleted. When you bring the
blueprints to me, I will make the final decision of what I want. Also,
bring me the cost breakdown for each configuration so that I can
arbitrarily pick one.
Keep in mind that the house I ultimately choose must cost less than the
one I am currently living in. Make sure, however, that you correct all
the deficiencies that exist in my current house (the floor of my kitchen
vibrates when I walk across it, and the walls don't have nearly enough
insulation in them).
As you design, also keep in mind that I want to keep yearly maintenance
costs as low as possible. This should mean the incorporation of
extra-cost features like aluminum, vinyl, or composite siding. (If you
choose not to specify aluminum, be prepared to explain your decision in
Please take care that modern design practices and the latest materials
are used in construction of the house, as I want it to be a showplace
for the most up-to-date ideas and methods. Be alerted, however, that the
kitchen should be designed to accommodate, among other things, my 1952
To insure that you are building the correct house for our entire family,
make certain that you contact each of our children, and also our
in-laws. My mother-in-law will have very strong feelings about how the
house should be designed, since she visits us at least once a year. Make
sure that you weigh all of these options carefully and come to the right
decision. I, however, retain the right to overrule any choices that you
Please don't bother me with small details right now. Your job is to
develop the overall plans for the house: get the big picture. At this
time, for example, it is not appropriate to be choosing the color of the
carpet. However, keep in mind that my wife likes blue.
Also, do not worry at this time about acquiring the resources to build
the house itself. Your first priority is to develop detailed plans and
specifications. Once I approve these plans, however, I would expect the
house to be under roof within 48 hours.
While you are designing this house specifically for me, keep in mind
that sooner or later I will have to sell it to someone else. It
therefore should have appeal to a wide variety of potential buyers.
Please make sure before you finalize the plans that there is a consensus
of the population in my area that they like the features this house has.
I advise you to run up and look at my neighbor's house he constructed
last year. We like it a great deal. It has many features that we would
also like in our new home, particularly the 75-foot swimming pool. With
careful engineering, I believe that you can design this into our new
house without impacting the final cost.
Please prepare a complete set of blueprints. It is not necessary at this
time to do the real design, since they will be used only for
construction bids. Be advised, however, that you will be held
accountable for any increase of construction costs as a result of later
You must be thrilled to be working on as an interesting project as this!
To be able to use the latest techniques and materials and to be given
such freedom in your designs is something that can't happen very often.
Contact me as soon as possible with your complete ideas and plans.
PS: My wife has just told me that she disagrees with many of the
instructions I've given you in this letter. As architect, it is your
responsibility to resolve these differences. I have tried in the past
and have been unable to accomplish this. If you can't handle this
responsibility, I will have to find another architect.
PPS: Perhaps what I need is not a house at all, but a travel trailer.
Please advise me as soon as possible if this is the case.
Writing about an entry you don't have permission to view
Steve picked up some quotes about the "blogging debate" and I was struck by a theme that people having this debate seem to think they're talking about something new.
…the typical hierarchies of the ivory tower break down in the blogosphere so that even graduate students can be public intellectuals of a kind.
Plus ša change. I was a graduate student before JANET ran over IP (that came along in 1991 or so), but I was already being a 'public intellectual' (if you put it that way). We had Usenet. I posted to it about stuff I was doing and thinking about, and got (overwhelmingly) useful comments. So did many other staff and students, mainly scientists (being the ones who already used computers and the network). Blogging is nothing new. What's new is Google.
Research into how social software is being used is very raw, very new.
While I'm not up on the research, this sounds like tosh. Social software has been around for decades. It's been a particular interest of mine since I started using bulletin boards in 1986, and for all that time there have been groups thinking about and discussing its use, so it's hard to believe nobody has been doing the research.
This interest of mine is how I came to be managing the email and Usenet services at Warwick in the early years that I was here, and later came to invent WarwickForums. BlogBuilder is the first social software system at Warwick that I haven't been involved with (I would have liked to have been). It's just a new and better (easier) way for students and staff (and yes, even graduate students!) to do what some of us have been doing since the 80s.
Writing about an entry you don't have permission to view
My email response to the plan to make car park 13 no longer free. Call it an open letter.
Hi, I'm writing in response to your request for feedback on the 'Green Travel Plan'.
Your plan includes making car park 13 pay-on-foot, which I guess would be a reduction of about 90% of the free parking on Westwood campus. You assert that CP13 being free causes problems, but given that it remains almost empty in the undergraduate vacations, I would suggest that it is allowing students to use it for free which causes problems.
Many staff at Westwood require somewhere to park (just as we require somewhere to buy our lunch). I approve of the green travel plan encouraging the use of buses and bicycles but I live in North Warwickshire, so neither of these is a realistic option for me. Can I suggest that, better than heavy-handed blanket measures such as these, a sensible Green Travel Plan would take circumstances into account. Most students live within a few miles of campus so why not eliminate free parking for them, while issuing free parking permits to staff? Or you could consider issuing free permits to staff who live in postcodes not adjacent to the University – this would be fair without being a huge administrative burden.
I'm personally not prepared to pay for car parking; and given that public street parking is plentiful very close to Westwood campus, I know I'm not the only one of my colleagues here who would prefer reliable free parking and a short walk over the hassle of driving around main campus looking for a possible parking space followed by anything up to 20 minutes' walk to and from work.
Thank you for giving staff the opportunity to give feedback before a decision is made (in contrast with the decisions on Westwood restaurant)!
Went to a seminar on EJB3 persistence, courtesy of the BEA UG (not sure how I got onto their email list!). The speaker was Patrick Linskey, co-author of "Bitter EJB".
The EJB3 standard is getting closer to being finalised – they hope to have it done by March or so in order to have the TCK and everything ready for next year's Java One in May.
The EJB3 persistence spec:
Persistent objects in EJB3 are managed by an EntityManager and replace entity beans altogether. The concept of local/remote interfaces is gone; you always need a local EntityManager which is reached via a factory, just like JDO. Also like JDO, EMs can be used outside of a JEE container which is a boon for unit testing. Another similarity is that EMs can use JTA or explicitly coded transactions.
Compulsory superclasses/interfaces are also out of the window (wow – you can do actual OOP with these classes!) but sadly, they are required to have an explicit identity/version fields. (Patrick told me at the pub afterwards that JDO vendors who make EJB3 persistence modules are likely to relieve their users of this burden by continuing to use enhancement.)
There are attach/detach semantics not unlike JDO2, although detach is implicit at the end of every transaction. I suppose this goes some way to easing the fact that the sophisticated lifecycle of JDO objects, with the invaluable hollow state, has been left out. Fetch groups are also missing.
EJBQL is similar in features to JDO2, and therefore way in advance of EJB2 (quote "EJBQL 2 was half-baked; we've tried to fully bake it"). For example it has named queries. However its syntax is SQL-like, like earlier EJBQL, rather than Java-like like JDO. This is pretty reasonable given the wide understanding of SQL, even though, like in JDO there is nothing in EJB3 persistence to say you must use JDBC underneath; it can be used on top of object DBs, flat XML files or anything else (JDO is apparently used for cellphone/PDA apps). Native SQL is not supported (a Very Good Thing IMO) and neither is getting a JDBC connection from the EM.
EJB3 persistence isn't as bad as I thought it might be, but isn't as good as JDO, and nothing in the talk suggested why Java needs two persistence standards (Patrick didn't address the politics of it at all). But if the likes of Oracle wanted to get people building their proprietary dialect of SQL into Java code, they've clearly failed, which makes the whole thing seem a bit pointless. Nevertheless, EJB3 persistence is the standard which will have the widest industry backing (despite the lack of any good reason) and so will inevitably be important in the future.
A university spokesman [...] claimed that the attack has no bearing on the security of the University server. Unitemps does not use the University's secure server and so "any lessons to be learned would not apply to the rest of the network."
In other words… "it couldn't happen here"! You have to wonder why we'd go to the bother of learning any lessons at all.
It's now officially academic year 2005/6. OMR rolled over without any problem, happily.
The new Checklists application was supposed to go live today, but it depends on ADS, and that's had some delays – the server that died with the newest backup a week old, the Oracle 10g problem that took a week to sort out, and miscellaneous data quality problems that I'd allowed a couple of weeks to solve but it's taken even longer than that. It's no big deal – we can go on using the prototype Checklist and go live with the new one when it's good and ready, hopefully before the start of term.
It's a pity in a way though, because it would have been the only new piece of software to be produced by the MLE programme this year (admittedly a very, very small piece). As it is, in the 04/05 academic year, the MLE programme (of which I'm Technical Lead) delivered no new products at all, we just supported and enhanced the existing ones and planned, designed and developed ones that will go live in 05/06.
There's been a "what advantages does JSF have over Struts" thread on the MyFaces list in the last couple of days so I thought I'd put together a summary.
The last point was only touched on briefly somewhere, but for me it's one of the key points. My view (since JSF 1.0 came out) is that the JSF framework is cleaner and does more of the dirty work for you, but the lack of coupling means more of your application to be written as POJOs – the same advantage as technologies like JDO and Spring.
James Gosling's keynote
More a collection of demos than a keynote. Included some Netbeans stuff, the Boeing drone piloted by real-time Java and the Bay Area sea sensor net. John Gage also demoed a GUI that moved apps (threads, stack and all) from a PC to a mac, and miniature ARM devices with wireless and motion sensors that let him "pour" an app from one to the other.
Built somewhat on the demos and Sun's motto since inception that "the network is the computer". Computing devices are getting everywhere, and the limitations on Moore's law will see a trend to multicore devices. The future is in collaborative applications that can move among devices, the huge computing power probably being employed for VR and biocomputing.
Writing secure web apps
Added very little to yesterday's session other than plenty of examples.
Beyond blogging: feed syndication with Java
A good overview of the protocols and Java tools from the architects of Roller, ROME and FeedParser. Why Atom is so much better than RSS and the atom protocol so much better than the blog-publishing XMLRPC protocols.
Extreme reuse in JSF
A good comparison of the advantages and disadvantages of JSP2 .tag files, tiles, webwork and Oracle ADF for re-using visual components with JSF.
The next impedance mismatch: POJOs to XML
ORM is now pretty well understood but OXM is younger. Some problems are shared but XML mapping has some problems of its own, especially around many-many mappings and where objects must be populated from a pre-existing schema. Need an OXM persistence manager to cope with situations like when the namespace is changed – don't want to redo the OXM from scratch.
End-to-end UI objects
Third talk I've been to this week suggesting that building UIs from objects (cf Spring) is the best way (since it's OOP) and looking for a Java solution. This talk from an embedded-UI guy where J2EE is too heavyweight anyway. Suggests composing UIs from object components corresponding to DOM objects, and storing session context in one thread per session (which sounds elegant; do any web containers do it this way?). Good for modelling page flows, good MVC, tiny footprint, bad for bookmarking, separating grahical design and changing rendering.
Nine ways to hack a web application
A useful round-up, and I now understand cross-site scripting in more depth than I did. I was in the overflow room and the sound sucked, but not as much as the non-digital camera pointed at the projection screen displaying the slides and code examples! The system we set up for the LWMS in 2000 is far superior.
Shale: the next Struts?
McLanahan and Geary made no attempt to answer this question (it might just as easily find a place in the next JSF), but stuck to providing examples of how Shale improves on JSF and Struts. Most interesting features: Spring-like web flows (called dialogs), Tapestry-like views which are very easily reusable (and which make it trivial to chain actions together, unlike in Struts), support for AJAX by including special handling for XmlHttpRequests (called remoting), integration with commons validation.
Real world experience in app scaling using JDO
International Truck already had a high-performance back office system based on Versant OODBMS ("to minimise our involvement with DBAs") when they realised the need to roll out a cut-down version to very low-spec service laptops. They implemented their own in-memory JDO database to avoid licensing issues and to be able to re-use all their back office code without change.
Spring and JSF: synergy or superfluous?
Much similarity, especially in the area of dependency injection (differences: Spring can do constructor injection, JSF can do EL injection). Rod Johnson emphasised the AOP nature of Spring, which surprised me as I've always thought its proxy based approach rather weak. The conclusion (no surprises): synergy, use JSF for its rich component set and wealth of tools, and Spring for a nice clean DAO layer.
Web framework smackdown
A fun session with representatives defending most of the main web frameworks (though not Struts), and lots of time for audience questions (quite a few of them from Struts developers wanting something better). Interesting to hear of Tapestry and Wicket next to each other, since Tapestry aims to minimise Java code and Wicket aims to minimise everything else. JSF was somewhat the odd one out for being a specification rather than an implementation.
Bottlenecks in MVC frameworks
There aren't any, was the conclusion of this comparitive test between several frameworks and a non-MVC (JSP-based) implementation. Interesting for their methodology and tips for using JMeter.
Jewels in the developer toolbox
Convinced me that I should spend more time looking for tools because there are some great ideas out there. Funniest tool: the paper napkin look-and-feel for Swing, intended for use in unfinished apps to give the tester/boss appropriate expectations.
Scott McNealy's keynote
Sun have just bought SeeBeyond, and by coincidence JBI was the most popular session yesterday (our ID badges have RFID so they can measure this). But Scott spent most of his talk (which overran, as it always does) showing examples of Java being used for social change and exhorting us, the developer community, to work for this – writing open source apps for health, education etc. He forsees a time when there will be JCP-like bodies for such things. Interesting.
Amazon web services
Most users (80%) use the REST WS interface not the SOAP one. You can get access to basically everything in Amazon, and Alexa and DMOZ stuff too. There's a whole community of developers and integrators based on AWS now.
POJO web development with Wicket
Wicket is (yet another) web framework with an unusual take: it's highly componentised, and the components are POJOs. This results in a programming style much like Swing. The binding from the web layer to the model is certainly much cleaner than anything else I've seen, with no XML layer and minimal intrusion in the HTML. Looks like fun, but it's hard to imagine the range of ready-made components ever catching up with JSF.
Rich clients with JSF
How to write AJAX components for JSF. It turns out to be very simple, plugging in direct-to-DOM renderkits instead of the HTML ones, and using a very standard JS library on the client to go fetch updates, solving the problem of having to write your own JS for every component (which is probably what all the people rushing out AJAX components for JSF at the moment are doing). Neat.
Java platform clustering
An overview of past and present approaches to providing clustering services at the JVM level. A new API based on JSR-121 is proposed, using the concepts of isolates and aggregates to provide support for clustering in a controllable and non-intrusive way.
Workflow, BPM and Java
This presentation from Tom Baeyens of JBoss hardly mentioned workflow and BPM, but instead presented their new framework on which workflow/BPM applications can be built, which they call Graph Oriented Programming. Amusingly this is virtually identical to the dataflow graphs I proposed in my PhD thesis, with the interesting addition of a hierarchical token system to allow persistence of graph states. Of course at the time it never occurred to me that my ideas could be applied to business modelling.
Service Data Objects SDO 2.0
SDOs are an abstraction above datasource-specific protocols like JDO, JNDI etc, useful for integration scenarios where objects need to be passed around between services where different protocols are in use. The original stanard included stuff like change logging, 2.0 is just a richer set of operations and helpers.
Six ways to meet OutOfMemoryError
Lots of useful details about debugging garbage collection – I now understand what the PermGenSpace error that we've been seeing occasionally since moving to Java 5 means!
A bit of a light year for announcements. IBM have licensed Java for another 11 years and will support all their products on all the Solaris platforms. That's really IBM's announcement than being a Java one ISTM. Jonathan Schwartz did illustrate Sun's business model with respect to Java clearly (for once) though: "go where the volume is". With 3 billion Java-enabled devices sold last year they seem to be succeeding. (And all blu-ray DVD players will be Java driven too.) He also announced the next thing to be open-sourced, Sun's next generation enterprise app container. Should be very interesting, but not due until later this year. And promised more open sourcing to come: "there's one price that works for everyone: free".
Graham Hamilton revealed more of what's to come in the next two versions of Java. (Lots more usability, mostly through annotations, and tool support.) Sun have finally realised that version names like "J2SE 5.0" are inherently confusing (is it 2 or 5?) so the next version of J2EE will be called Java EE 5 and the next version of the standard edition Java SE 6.
Mark Hapner revealed that first versions of Java EE 5 should be out next year. Main focuses: POJOs (hallelujah), dependency/resource injection using annotations, JDO-like persistence mechanism, lots more support for web services.
There was also a session on Service Oriented Architectures (SOA), but it wasn't technical, just waffle. The vibe outside afterwards was that other people thought so too.
Java Business Integration
The new JBI spec, just released, is an architecture for enterprise service bus type systems based on WSDL 2.0 to abstract away messaging details. Looks useful for integration projects. Convinced me that there may actually be something useful in SOA. There's a lot of froth around it at the moment (even though it's not a new term – been known to computing science since at least the 70s). But I begin to see what it may be useful for and JBI has a nice API to do it.
EJB3 has changed a lot since last year, having undergone a massive reduction in the number of annotations it uses – down to 2, essentially the container will be made to do most of the work. Deployment descriptors will not be eliminated after all, but will be completely optional. An upgrade path from EJB2.1 has been defined and looks convincing. The persistence engine will be pluggable (I see the hand of the 6 JDO vendors on the expert group in this) and will support JDO2-style attach/detach.
Experiences with the 1.5 language features
Some useful snippets. I think I now understand what covariant return types are for. Why the conditional operator is dangerous with generics and why wildcards are essential for API designers.
Some good new stuff coming in Netbeans, much of it focussed around existing strengths such as GUI design (the new GUI building engine looks excellent), cross-device development (setting breakpoints in a mobile phone is cool) and out-of-the-box usability. Netbeans does seem to be kind of the most agile IDE; they're already talking about integration with Looking Glass, the 3D desktop.
In general, the priorities with Netbeans coincide with those for Java generally, around ease of use (supporting higher level constructs and working with a variety of platforms) and dynamic languages. Early leak: the Dolphin release of the JVM (2008) may include byte code to support dynamic languages, which will be the first byte code in there that isn't used by Java itself.
The fireside chat featured a real fireplace, though it wasn't lit (no surprise, since it was on stage in one of the conference halls and the flue only went up to the top of the stage set). It's purely an audience Q&A session with the top people who shape the JVM, platforms and APIs. No overall theme, therefore, but interesting to hear the kinds of questions asked. Much interest in support for phone/PDA devices. Worst regret in 10 years of development of Java: AWT. Deprecated APIs will never be removed from the platform. JDO will not be deprecated (though since all the big JDO vendors are involved in EJB3, it may not develop much further after the EJB3 compatibility revision). Annotations will be developed further, but otherwise no major new language features planned for the next two releases – witness how long it took to standardise generics (over 5 years). Mantra of Sun Java developers is like the Hippocratic Oath: "do no harm".
The Academic Data Store, a new database which I'm bringing into being, is starting to take shape. We've nearly finished designing it and next week we install the software that will drive it, and start sucking in data from many sources.
It's hard to be interested in databases, especially when they don't hold much data of their own, and a large part of why we're building the ADS is to make all the connections between datbases and other databases easier to manage – a purely administrative benefit. But the user-facing things ADS will make possible are increasingly looking quite interesting:
tasks + data = checklist
We're introducing the concept of a task, which is essentially just some text which describes some data. Together with the data from a variety of different databases (ID card issuing, academic enrolment status, the sports centre, maybe the library), this will make us able to provide a checklist of all the administrative things new students need to do and actually display which ones have been done. With the new web signon system in service, it will be easier than ever to hop from one web system to another to complete the tasks.
lectures + module registrations = personal timetable
With module lecture data from the timetabling office and student module registrations from OMR, we'll be able to produce personalised timetables for students which just show the lectures they need to go to, something which hasn't hitherto been possible.
modules + arbitrary groups + events = seminar groups
With data from OMR defining what students are taking a module, and the ability to define arbitrary sub-groups (and 'supergroups', a group plus hangers-on) of those students, it will be easy for staff to define groups of students for seminar groups. Once defined, these can be used in mass mailing, for controlling access to SiteBuilder pages etc. Generalising the concept of a lecture into an event with a start and end time, times for seminar group meetings can be defined and automatically mass-mailed out to the participants.
events + tasks = deadlines
Using the task concept and event concept together, you can define a task to be presented to students with a start and end time. The timing could be applied so that a SiteBuilder page becomes accessible only for a defined period, perhaps with another event publishing the solutions page immediately afterwards, and a reminder event happening a certain amount of time before the end of the first event, triggering a mass mail reminder that the deadline is approaching. Students who miss the first 5 minutes of the lecture will have no excuse now.
It's all getting awfully joined-up. And this is just an initial bunch of ideas, that we hope to have built on top of ADS by xmas or so. Further ideas for joined-upness are welcomed.
The updated exam timetable software went live last Friday, the same day as the summer exam timetable was finalised (exactly on time according to plan). After some "real data" testing on Monday, we finally made personalised students' exam timetables available on Tuesday.
The student-facing system is essentially unchanged – the PDFs are generated on request from the database. Under the covers there was some improvement to the code for better maintainability. But most of the new development went into a new system for departments to nominate their invigilators via web forms instead of the old paper forms. We start piloting this tomorrow.
What surprised us was the huge demand for the personal timetables, much higher than last year. In spite of the complete exam list being published on a noticeboard last Friday, and in spite of us opening the system quietly at the very end of the working day on Tuesday, by 8am on Wednesday the system was overloaded and I had to restart it with more memory. The load was significantly higher than last year's peak.
Aside from the IT systems perspective, students seem to have been clamouring for exam timetables this year – I don't know why this should be different from any other year. A particularly immature student union officer decided it would be clever to organise a campaign of students emailing the exam office to demand publication. Several hundred students did so, although some of them apparently emailed to say they disagreed with the union's position and were quite happy with the current system.
There are two reasons why such a tactic could never work. Firstly, and very obviously, the task of reading hundreds of emails can only slow down the work done by an office, not speed it up. But secondly and more importantly, the exam office is an example of a central service department which depends heavily on academic departments. The main reason why producing an exam timetable is hard is that departments will not provide accurate information in a timely manner. They prevaricate, delay, provide wrong information and change their minds. The task of co-ordinating what exams need to happen is one of chasing up departments and meeting, in some cases, much less than full co-operation. It must be a frustrating job.
Module registration is subject to much the same kind of process: although modules for next academic year are supposed to have been finalised at this point, some modules are missing, some are still 'provisional' because departments failed to submit them to the approving committee in time, and one department has even completely opted out of the pre-registration phase for Online Module Registration because they intend to make so many changes to their courses (which should have been finalised by now) between now and October that it would be pointless.
It's a shame that students often perceive these issues as problems of the IT systems or the Academic Office. We can't do our jobs properly unless academic departments provide us with the information we need. Some departments are good at it, and some bad. It seems to me the University, on behalf of the students, ought to be a bit firmer with departments about what their information management responsibilities are. It's not a very sexy subject, and not one which academics are likely to be very interested in, but it's vital to being a smoothly run university.
I was interested to read about the new generation of the web sign-on service that Kieran's been working on. I had come across SAML a few months ago while looking into something else and made a mental note that it looked like a good, well-focussed standard.
What's also interesting is the fact that the new software has taken months of development effort, whereas I hacked together the first version in hours (admittedly re-using some code I'd previously written for something else). This seems typical of the way e-lab's work has changed in its 3 years' existence: in the early days we needed to get stuff up and running quickly, at least in prototype form, whereas now we're putting in the effort to 'do things properly', at least in areas we've identified as being worth the effort, for reasons of scalability and maintainability. My new project, the Academic Data Store, is another example. We have databases that do the various jobs, but the way they all connect to each other is messy, hard to extend and problematic to maintain, so we're going to pour resources into a proper meta-database that will fix that.
As someone who's always been interested in big, complex systems I like this trend. 20 years ago I was fascinated by operating systems, now there are worlds of fascination just within J2EE. I've never been very interested in small projects. Partly that's because I'm process-oriented rather than goal-oriented; I enjoy finishing projects, but it's the getting there that really interests and motivates me. Actually the designing and planning of projects is my favourite part; the blank slate is where there's the most scope for creativity.
It's the tenth anniversary of my first ever linux install today. For the first few years I was just running it on my home PC but for the last 5 or more as my main work desktop as well. And it was already a fully-fledged unix with X windows (which macs now have), pre-emptive multitasking and multiprocessor support (which MS now have) 10 years ago, so don't let anyone tell you there's anything recent about linux as a desktop OS.
I know the date because it's my birthday, and that year I took the day off to take delivery of my first IBM-compatible PC, factory-fresh with no OS installed. This year I'm at work so anyone passing by my cubicle, please do help yourself to the cookies. There's ginger and chocolate, or double chocolate. Chocolate is compulsory you see.