boogdesign posts
25/11/07
DDD 6
Review: DDD6 at Microsoft UK Campus, Building 3, Thames Valley Park, Reading, Berkshire. RG6 1WG. 08:45 to 17:00
I'm more of a web developer than a 'Microsoft developer', but I use a lot of the MS stuff at work and I really enjoyed WebDD last February so I thought I'd give the more .Net focussed parent event a try.
Why IronRuby? (Presentation) Dave Verwer - I'd been to a couple of Dave's talks at the WebDD event and enjoyed them tremendously, so I went in to this one with high expectations. The talk started with some of the benefits of Ruby - a dynamic language with elegant syntax designed for simplicity and productivity, before going on to discuss how IronRuby and the DLR are implemented in .Net. The DLR is basically a layer for dynamic languages on top of the standard CLR, it is an abstraction of the what was developed in the course of getting IronPython up and running. At this point Dave admitted that IronRuby wasn't yet ready for use, so the rest of his talk would be about (C based) Ruby 1.8 - which IronRuby is targeting for compatibility. This was a bit of a disappointment for me, because really I was after a more practical demonstration of IronRuby than another presentation on Ruby - but it's possible I was in the minority given the audience. Check out the IronRuby website if you want to learn more.
Entity Framework (Presentation) James Winters - I had no idea what this was before the talk, but the title sounded more interesting than the others available in this slot, and it saved me leaving the room when I knew I wanted to see the talks either side. In the event, I was glad I stayed. To give a simple sound bite - Entity Framework is like an ORM on steroids, which will allow transparent mapping to non-relational stores, such as LDAP, as well as the more usual SQL stuff. The plan is for all MS server products to move to Entity Framework for their data access, though at the time of the talk the only backend available was SQL Server and all the examples were basic ORM stuff. The logical model of Entity Framework is made up of three levels:
- O-SPACE - the object model, eg. LINQ
- C-SPACE - the conceptual model, eg. Entity Client
- S-SPACE - the store - eg. ADO.Net.SqlProvider
All levels are scoped by an entity container, which defines a namespace and an object model, and the goal of the MS Visual Studio team is to be able to generate the lower levels using visual tools.
Entity Framework supports multiple querying methods:
- ESQL - very similar to HQL in Hibernate
- Object Query - a generic object interface with caching and lazy loading, which can either be read only or mergeable
- Use Entities directly
- LINQ
There are some limitiation, there is no locking by default and, while it's going to be possible to map stored procedures the visual tools aren't going to support it for some time so you have to write up the XML manually. Generally, though it has a slight whiff of the architecture astronaut, it looks like an interesting addition to the .Net toolbox (Slides available here).
Why do I need an Inversion of Control Container? (Presentation) Mike Hadlow - I'd heard of Inversion of Control (IoC), but hadn't really understood what it was for. The presenter, Mike, had been in a similar position until he started studying it seriously, and now he was here to share his epiphany. The main problems IoC is trying to address is that the relationship between component size and complexity is not linear - double the size of your components and you quadruple the complexity - but breaking components into smaller pieces tends to lead to increased dependencies. Inversion of control reduces the complexity of large components and manages the dependencies between them. The principals of inversion of control (paraphrased from Robert Martin) are:
- High level modules should not depend on low level modules
- Abstractions should not depend on details
- Details should not depend on abstractions
- Difficult to unit test
- Tightly couple components
- Violates the single responsibility principal
- Violates the open/closed principal
Inversion of control helps with all these by allowing constructor injection and property injection. If these can be injected into components at runtime, rather than hard-wired into the components, then it becomes possible to modify the behaviour of components without having to modify the components thus satisfying the open/closed principal and reducing the coupling (property injection) and also to easily mock objects for unit testing (constructor injection). Mike then moved on to some detailed demonstrations using the Windsor component from the Castle project, before concluding that IoC is really just the thorough application of design patterns and other OOP best practices. Therefore you should only start considering inversion of control once you're already familiar with these and have already implemented things like unit testing (Slides available here).
Dynamic Languages on .NET (Presentation) Michael Foord - My first session of the afternoon and by this point I was flagging a bit after having to get up early and make the trip out to Reading. Michael is one of the authors of Resolver, a spreadsheet based application environment, aimed at the financial markets and written in IronPython. The app is approximately 30000 lines of code, thus refuting the myth that it's impossible to write large applications in a dynamic language, and it's spreadsheet model is implemented in a Python hash table, making it very easy to extend Resolver with new types and operators. After a discussion of what constitutes a 'dynamic language' and the overall benefits of Python and IronPython in particular, Michael moved on to some practical examples based on his IronPython Web IDE (Slides available here)
Testing Your Applications With MbUnit Gallio (Presentation) Ben Hall - unit testing is a popular topic on programmer blogs these days, and this was reflected in a fairly full room for one of the 'minor' talks (ie. we weren't in one of the big rooms). Ben covered some best practices of automating unit testing on .Net with MbUnit and Gallio, starting at the database layer (use transactions and rollbacks or COM+ transactions), the business object layer (mocking and inversion of control) and the user interface (don't try and automate it!). An interesting if slightly hurried talk which I was unfortunately too tired to pay full attention too (Slides available here)
Overall a good day, I definitely learned more than one new thing per talk and the Microsoft conference room facility is a good venue for these sorts of things, so out of 5, and I'll almost certainly try and get to the next one.
16/11/07
IE6 & 7 Up/Down Keypress Issues with Ajax.Autocompleter in Scriptaculous 1.8.0
I started a new project at work today, adding some ajaxy interactivity to a slightly long in the tooth web application. In a previous iteration I'd plugged prototype.js 1.5.1 into this app, now I wanted snazzy effects and autocomplete fields. Figuring it was a good time to move up to the latest version of scriptaculous, I downloaded the recently released 1.8.0 version (which includes prototype 1.6.0).
I had to do some hacking around in my 'legacy' javascript to get things working in Firefox (that's how long in the tooth this application is), and then I added my Ajax.Autocompleters, got my afterUpdateElement callbacks working and was starting to feel generally quite chuffed with myself at how well it was all going. Then I thought I'd give it a quick check in IE...
In IE7 the up and down arrows didn't scroll up and down the autocomplete list, which made the whole thing kind of useless. A quick check in IE6 confirmed the same issue there, so I immediately resorted to Google. Unfortunately the answer wasn't immediately apparent in the search results and it was only when I started searching the Ruby on Rails Trac directly I finally homed in on the answer. Hoping that I can help future searchers home in on this more quickly, here's the defect: "some keypress events don't work in IE6/7"; and here's the fix.
17/10/07
Categories: Blogging and Internet Culture, Management and Communication
IT’S A MASHUP: The End of Business as Usual
Review: Andy Mulholland - The End of Business as Usual at BCS, 5 Southampton Street, London WC2 October 15th, 18:15 to 20:15
I went to this BCS North London branch event because they usually have an 'enterprisey' slant and this one was supposed to be about Web 2.0 and mashups, which is not something I regularly associated with enterprise IT. Andy Mulholland was a very good speaker, it seems like we got the same presentation he regularly gives to boards of directors, the slides are available from the link in the previous paragraph. From now on I'm going to assume you've looked at them and list some of the things Andy discussed while he was showing the slides that stuck in my mind (ie. for an overview of the whole talk, read the slides).
The key trend affecting enterprise IT in the drive to web 2.0 is that users and consumers are now driving technology adoption, they get used to things at home and start to ask themselves why they can't use similar tools at work. As the proportion of tech-literate vs tech-illiterate clients and workers shifts in each industry, we pass an 'inflection point' past which businesses have to change to remain competitive. There are some businesses where this has already happened: travel; retail; music. The traditional business view of IT products is characterised by: "If I purchase this, I can work more cheaply." The user led change of priority is from the perspective: "If I purchase this, I can work more effectively."
There are some common traits of businesses which 'get it' which can easily be contrased with more traditional business practices:
New: Amazon leads with the most popular items responding to external demand
Old: Barnes and Noble leads with its internally defined offersRight: eBay allows external demand to create new markets and indexes
Wrong: CommerceOne failed as it defined the markets that it would make availableAware: Google business model continuously improves, people explore for the new
Adaptive: Traditional Software business model depends on set upgrade offers periodicallyInnovative & Money Making: Second Life participants create over 7 million lines of code a week to improve environment. As of December 2006 456 people earn over $500; 29 over $5000; 2 over $25000 Every month from participating in Second Life. About 500,000 Chinese work in “gold farms” creating superior players and selling them.
Web 1.0 was characterised by content, web 2.0 is characterised by contacts or community, this reflects a general shift for the knowledge worker: 20 years ago 80% of the knowledge they needed to do their job was in their heads, now only 20% is in their heads and the rest depends on them exploiting the vast information resources available, which is too vast for them to do by themselves.
Finally Andy discussed how to build a business case for mashups (and web 2.0):
- Not all valuable business interactions involve a transaction
- Front office to back office integration depends on open standards
- We are fixated on productization. Move the value proposition from the box to the knowledge.
- Wrong question: "If I had Google Apps, what would I save over MS Office?"
- Right question: "What can I do with Google Apps that I can't do with MS Office?"
Overall this was an excellent talk, out of 5, which may not be obvious from my potted summary. If you have a chance to see Andy Mulholland speaking in person I recommend you take it.
16/10/07
Categories: Web Design, Front End Web Development, Server Side Web Development
My First Website for Mobiles
At work we decided to purchase a few .mobi domains, not because we have any particularly compelling mobile content, but to boost the web presence of our mobile product and, mostly, to make sure no-one else snapped up the domain names we wanted. However this did give me the opportunity to build my first website explicitly for mobile devices.
I'd checked our main website on ready.mobi, because I have written a mobile stylesheet for it, but it got a pretty crappy score mostly because of the sheer size of the content. So my main goals for this first site were to:
- Produce a website which validated
- Get a 'Good' score on the ready.mobi evaluator
My first task was some background reading, I had a look through the DotMobi Mobile Web Developer's Guide and Luca Passani's Global Authoring Practices for the Mobile Web. Following that, I grabbed a page off the main website and broke the content up into three XHTML-MP pages. This was easy enough to do after reading the guides, not much different from creating regular XHTML pages. The only bit I wasn't too familiar with was sorting out the navigation and access keys. It was easy on the home page (actual links changed for brevity):
<ol>
<li><a href="page1.php" accesskey="1">One</a></li>
<li><a href="page2.php" accesskey="2">Two</a></li>
<li><a href="page3.php" accesskey="3">Three</a></li>
<li><a href="page4.php" accesskey="4">Four</a></li>
</ol>
But on the other pages I wanted to avoid having a link to the current page, but keep a consistent numbering scheme, from 'page3.php':
<ol>
<li><a href="page1.php" accesskey="1">One</a></li>
<li><a href="page2.php" accesskey="2">Two</a></li>
<li value="4"><a href="page4.php" accesskey="4">Four</a></li>
</ol>
So that was the actual content sorted out, most of the issues I was seeing in the ready.mobi validator were to do with server side configuration. Some mobile browsers require a application/vnd.wap.xhtml+xml MIME type, which Apache isn't going to do by default, but is easy enough to configure. However, I wanted the website to display on my boss's desktop browser too and IE will have some difficulties with that, so I decided to use PHP to do some lightweight browser detection:
<?php
header("Cache-Control: no-transform, max-age=86400");
header("Vary: User-Agent, Accept");
if (strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) {
header("Content-type: application/vnd.wap.xhtml+xml");
} elseif (strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/xhtml+xml')>0) {
header("Content-type: application/xhtml+xml");
} else {
header("Content-type: text/html");
}
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
This works by looking to see what MIME types the browser says it can accept, then giving it the best one it can handle. Note that I'm also advising transcoding proxies not to transform this content.
The final setup step was to set appropriate cache headers on all the static content. This is easy to do in .htaccess:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 day"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType text/html "access plus 1 week"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
ExpiresActive Off
</FilesMatch>
</IfModule>
Note that I'm ignoring PHP files in this directive, as I'm already handling the headers in the PHP files.
One final note, as I discovered a few times while working on this, you need make sure your error pages also handle all the MIME type stuff and are valid XHTML-MP, otherwise the experience could be confusing for mobile users. This applies to 404 pages (I just made it a PHP page) and your formmail.php script (if you're using one).
And there you have it, my first real, live, mobile website!
04/10/07
The only book you'll ever need
It's been a while since I posted anything, I actually have two half written posts sitting in draft status which I'll get around to eventually, but this morning I'm inspired to write ![]()
I followed a link from raganwald's post to The Little MLer on Amazon, the thing that caught my eye was one of the reviews:
This is a nice and at times fun introduction to ML that gives the reader a hint as to the true power and complexity of functional programming, but buyers should be aware THIS WILL NOT BE THE ONLY ML BOOK YOU WILL NEED.
What I think is surprising is that anyone could be reviewing a book on Amazon and be thinking that on there, somewhere, is a book that will tell them all they ever need to know about anything even moderately complex (ie. any subject worth writing a book about).
The same author was critical of the book because the style "kills its utility as a reference". Why would you expect a tutorial book to be a good reference? Why would you expect a reference book to be a good tutorial? Is this sort of attitude the reason why the programming books market is flooded by unnecessarily thick books which are both below average tutorials and below average references? From chapter one of Thinking in Java:
In a good object-oriented design, each object does one thing well, but doesn’t try to do too much.
Perhaps I shouldn't be surprised though. Every day on the blogosphere I see comments which seem to support the belief that just because it's possible to solve almost every programming problem in Java or C# or Python, that Java or C# or Python are appropriate for solving every programming problem; that just because Ruby on Rails presents a nice paradigm for web development, that all web development should be done in Ruby on Rails (substitute cool web framework of your choice); and people who happily use frameworks for their chosen language which require thousands of lines of XML (or worse) configuration files berate web development in general for being too hard because it requires learning more than one language (or technology, or whatever other category you like to put declarative markup into).
30/08/07
Prototype.js Ajax.Request: Beware of carriage returns in response text
Another in the long running saga "Dumb things Rob did with Javascript." I ran across a strange error in some fairly simple Ajax code the other day. Here's the code:
function () {new Ajax.Request(urlTxtSrch+'&txtTEXTSRCH=' + encodeURIComponent( $('txtTEXTSRCH').value),
{onComplete:function(request){try{eval(request.responseText)}
catch(ex) {$('textSearchResults').innerHTML = '<p>Error getting results: ' + ex.message + '</p>'}},
evalScripts:true,
asynchronous:true}); return false;}
Using prototype, I'm taking the value out of a text box and returning some javascript code which writes a list of search results into a div. Not the best way to do it, but it was basically a one off situation so there wasn't much benefit to making it more generic and figuring out how to do without the nasty eval. The search results were limited to twenty items with three bits of info each, the final one of which was the first 200 characters of a 4000 character varchar field we have in our database.
The error I kept getting was malformed string. It didn't happen all the time, in fact not very often at all, so it took me a while to work out that it was particular result items which were causing the problem rather than simply the size of the results. The problem, as many will no doubt already be aware, is that string literals in javascript cannot extend across multiple lines. In fact, I too was aware of this, and my server side code was already replacing vbCrLf (yes, it's VB running on Windows) with <br> so I was a little confused as to why it was happening.
Some people have probably already spotted the dumb assumption I was making. Since I was already truncating the 4000 character field to 200 characters there were some situations where the 200th character was the carriage return part of a carriage return plus line feed combo (the required line ending on Windows). Javascript is quite happy to accept a carriage return by itself as the end of a line where Windows is not.
31/07/07
What is a 'Front End Web Developer'?
Inspired by ppk's Dutch 'Front End Web Developers Guild', there was quite a lot of discussion a few weeks ago about what a Front End Web Developer actually is. This post is mostly an email I sent to the WSG mailing list with links to other useful messages on the thread, because I feel that this issue deserves a wider readership.
Karl Lurman voiced the opinion that, at some point in the future, 'front end web developers' won't need to understand Javascript and other web technologies, they will be able to depend on frameworks and libraries - the platform or IDE will take care of producing valid, accessible markup.
In response I pointed out that, apart from it all being magically accessible and standards compliant, this more or less described how ASP.Net works now. It's great because it lets desktop developers with no front end web skills produce apps quickly, but it's horrible because it lets desktop developers with no front end web skills produce apps quickly. I saw an advert in a developer magazine this week about a custom control for .Net in which there was a (perhaps fictional) quote from a developer - "Control X is great because it means I can stop worrying about the UI and concentrate on the business logic." The fact that ASP.Net developers apparently find this sentiment of abdicating responsibility for the UI beguiling is what worries me about the whole 'user interfaces designed by IDEs' concept.
Of course, the hypothetical 'front end web developer' needs to be distinguished from web and/or graphic designers. Paul Novitski criticised designers who think one Photoshop mockup is the full extent of their job (and in fact think that, after they've done that, all the hard work is done...):
Just as a good print designer needs to understand papers, inks, and printing technologies, a web graphic designer needs to know the stuff that the page is made of in order to make competent decisions.
Finally Richard Williams discussed how many companies view front end web development as a place for young developers to learn the ropes before being allowed to do 'proper' development. I've often seen the attitude among people that consider themselves 'real' developers (ie. back end types) that front end stuff is easy and a task for junior developers, and those same people are happy to have their framework spit out crappy markup because it's 'only the UI'. But crappy code at the front end is IMO just as bad as crappy code at the back end, and perhaps more focus on 'front end web development' as a speciality in it's own right, in the form of ppk's guild or similar certifications, would help correct some of these issues.
04/07/07
GPX2 Linux handheld gaming device
I used to use a second hand Zaurus for listening to MP3s and a second hand PocketPC for reading eBooks while commuting to and from work each day. Sadly they both deteriorated to the point where battery life was barely enough to cover the journey one way, let alone there and back. I switched back to dead tree book consumption and have learned to live with the general background noise of tube travel.
Recently I started thinking it was about time I got myself a new digital audio player and started looking into options. I was thinking I'd make do with one of the cheap solid state ones in the 2-4Gb range, but I wanted the player to support OGG encoded files to save me having to re-encode half my collection. These simple requirements limited my options on eBuyer somewhat, and I started investigating more expensive devices. That's when I came across the GP2X - a linux based, hand held game console with built in media player and eBook reader.
Now, if you were going to design a gadget specifically to push all my buttons then you'd probably end up with a GP2X - it plays MP3s and OGGs, has dual processors, runs Linux, plays games and reads eBooks, and ships with the SDK for free. You can even plug it directly into a TV and watch movies. And all for only £124.99 - though probably closer to two hundred quid once a few optional extras have been added in. I want one!
16/06/07
GDD07UK: Building a Mobile Website
Review: Building an Interoperable Mobile Website at GDD07UK, The Brewery in London, 52 Chiswell Street, London 16:45 to 17:30
My final talk of the day was title on the signup page 'Developing for the mobile', which led me to believe it would be a discussion of web applications for mobile devices, but the title of the talk on the day was as above, and focussed mostly on web content rather than application type interactivity. Despite not fully meeting my expectations, this was perhaps the talk where I learned the most new stuff.
Gummi started with a discussion of why mobile website development has been so much more difficult than standard web development. Mainly this comes down to standards - although 'desktop' web developers complain about inconsistencies between popular browsers, this is nothing compared to the great variety of mobile browsers and devices and also the different standards that have been implemented. He recommended that these days it was best to concentrate on cHTML for the Japanese market and XHTML for the rest of the world.
Mr Hafsteinsson's golden rule for mobile websites - KISS. Generally that cunning feature you've thought of which would be 'neat' rather than useful to users is a feature you don't need on your mobile site. There were then a sequence of slides with more specific tips:
- Use well formed markup - use the correct XML preamble and DOCTYPE declaration, validate your markup and specify character encoding. While it is feasible for a desktop browser to do a lot of processing to correct your markup mishaps, most mobile devices don't have enough spare processing power to deal effectively with invalid input
- Send Google a Mobile Sitemap - on the mobile web people don't (generally) type in URLs, because typing options are usually fairly restricted and/or awkward on mobile devices, there is a much greater reliance on search engines so you need to do everything in your power to help the search engines out
- Understand best practice - two sites specifically mentioned were the W3C's Mobile Best Practices and the dotMobi portal
- Test in emulators - it's not feasible for you to obtain every mobile device on the planet, so testing in emulators is a good shortcut. Some of the specific emulators mentioned were the NTT DoCoMo i-mode HTML Simulator, the wmlbrowser extension for Firefox, the OpenWave emulator and the NetFront emulator (which has a Linux version) and, of course, Opera which can emulate the phone browser in the desktop version.
- But don't just test in emulators - sites should be usable on entry level phones and provide an effective experience on mid-range devices. Be aware that these devices have far more limited physical features than your desktop development machine, things that work fine in the emulator on your desktop with 2Gb of RAM and a broadband connection might not work well, or at all, on a GSM phone with 64K of RAM. Again, don't overload your websites with features that overload more basic phones.
That was the bulk of the talk (actually relatively short), but there was a long question and answer session which covered the use of XHTML Mobile profile (and not Basic, as shown on the slide at the beginning) on .mobi websites and quite a lot of discussion on the merits and pitfalls of user agent sniffing (using, for instance, the WURFL device database). Gummi's advice was not to blindly adopt a sniffing approach, use standards for the most part and use sniffing to get round incompatibilities where appropriate for your users - generally think about your users rather than about the devices. Hopefully increasing use of standards in mobile websites will lead to better support of standards in mobile devices. The questions went on with some discussion of the Google mobile search and content transcoding (where Google automatically converts a website to mobile compatible format when you click on the link rather than sending the page directly), how this would become less necessary as more sites provided mobile versions of their content, and also a meta tag you could put in your head element to direct Google to the mobile version of a particular page (though I can find no mention of this elsewhere on the web, so if anyone locates it please leave a comment).
Overall an excellent talk despite being short, a bit high level and lacking code examples (which I know I've criticised other talks for, but in this case the high level information was very useful to me). Also the question and answer session covered a lot of extra ground, so out of 5. If you are planning to get involved in the development of mobile websites I would recommend spending 45 minutes viewing this talk.
13/06/07
GDD07UK: Building better AJAX apps
Review: Building better AJAX apps at GDD07UK, The Brewery in London, 52 Chiswell Street, London 15:45 to 16:30
Since I'm now a few weeks behind on my reviews (the date of this post is when I started writing it...), probably everyone who cares about Google Gears has heard about it by now, so I'll keep this short. Chris talked about the design goals for Gears, for both end users and developers. For end users it boiled down to providing a seamless experience between periods of online and offline activity. For developers the goal was to build incrementally on existing skills and techniques - leveraging all those newly learned Ajax skills rather than replacing them, "preserve existing knowledge and momentum" was the exact phrase. Google themselves plan to support all the major desktop browsers with extensions and plugins, but the implementation is an open standard (an open source) so if you feel the need to have it implemented on your platform of choice you can go ahead and do it yourself.
On to the technical details, Gears has three major components:
- Local Server - basically a local proxy, your application files go into a ManagedResourceStore, which has a manifest, so all your app files can be versioned together, and ResourceStore for any other random web resources your user may access
- Database - an SQLite database with a javascript API
- WorkerPool - a method for supporting javascript concurrency through Erlang-style lightweight processes, no shared memory and communication through message passing
If it was just the LocalServer by itself, this would still have been a useful extension - that's all that's really needed to make your web app work offline, but the Database and WorkerPool components enable a whole different approach to web application development. WorkerPool makes it much easier to write applications which do client side data intensive processing, and Database allows you to build applications which sync back to a central server periodically (similar to how .Net CF + SQL Server Compact applications are intended to work now). Expect to see some startups with innovative products based on Gears in the next few months.
Several code examples and clear explanations, an excellent talk as befits what is obviously a key technology for Google - out of 5.
12/06/07
Safari for Windows - A Review
Product Review: Safari 3.0 Beta for Windows
- Fast Javascript - javascript heavy web pages (for example, GMail) worked really quickly and were very responsive
- Fast rendering with
position:fixedandiframes- this seems to be a combination that really slows down Firefox (and remember, anything which has a GoogleAd unit on it has oniframe, I ended up re-redesigning this website as a result), just scrolling up and down the page becomes an effort, but in Safari everything remains smooth 
It's pretty - there's no getting around it, not just the overall look of the browser, but the little icons in alert windows and the semi-transparent configuration popups are all very nice
Excellent default view of RSS feeds - even better than IE's, and loads better than Firefox- Snapback - this is nifty, can be used as a short term bookmark thing but, by default, will 'snap you back' to the first page you visited on a site, or your search results if you were visiting a site from Google

Bug reporting tool - looks nice and easy to use, allows you to attach a screenshot and the page source by ticking checkboxes- Resize text field - a great idea, but I could only get it to resize
textareaelements rather than any text input. It also had an interesting effect on the post page of this blog 
Activity window - shows the file size of every page element, very neat, though of course with Firefox it's a simple matter of getting an extension to do this

Can't make all links open in tabs - links which open a new window, open a new window, in Firefox everything opens in a tab. There is a 'merge windows' option, but I'd rather it just opened the links into a tab in the first place
Can't 'choose where to save every file' - I have a whole hierarchy on my hard drive for saving files into, so that I can find them later, but Safari makes me first save the file and then manually move it where I want it to go- Single or double click doesn't select whole address - on Windows clicking on the address bar selects the whole text (on Linux, double click does the same), in both Firefox and IE, and then you can immediately start typing knowing you'll replace it, Safari only selects to the nearest full stop either side, so you have to click and drag to select the whole address
- Auto-complete sometimes interferes with typing address in - this happened to me a couple of times, I assume it's really a bug, but Safari would become so obsessed with providing me with autocomplete options in the address bar that it wouldn't let me type a new URL in (first noticed after I'd visited the Washington Post website, couldn't type a second 'w' into the address bar sometimes)
- Can't resize window by border - although it's nice that the chrome doesn't waste any screen real estate, I'm used to being able to resize my app windows from any border

Can't detach bookmark manager, and ctrl+click doesn't work - in fact I couldn't get any tab to detach, maybe I was doing it wrong, but according to the help file ctrl+clicking the bookmarks icon was supposed to open it in a tab instead of over the top of whatever you have open, it didn't- No extensions -
this is the killer for me as far as everyday browsing is concerned, I've gotten used to the seven or eight extensions I use regularly in Firefox and it seems unlikely they would all be replicated in Safari, though it seems there's some activity in the Safari extensions area, and also the possibility of doing your own development with Apple and WebKit components
10/06/07
Categories: Web Develop, Server Side Web Development
GDD07UK: Google Data APIs (Part 1)
Review: Google Data APIs at GDD07UK, The Brewery in London, 52 Chiswell Street, London 14:45 to 15:30
The GData APIs are a uniform interface into almost all the Google applications (Blogger, Mail, Calendar, Spreadsheets etc.). They're all based on an extended version of Atom Publishing Protocol, a REST style interface (though there is some difference of opinion on whether or not it's a best practice implementation of APP (see also some discussions on Reddit and this followup). In general this is an exciting development and I could imagine a number of practical applications for my day job, and having a unified API across all the Google Apps should make it easy to build applications which integrate with all of it.
Unfortunately, I didn't really enjoy this talk much at the time, mainly I felt there weren't enough code examples. Watching the video of the talk again now I see far more example code than I remember which indicates that I wasn't really taking it in. Most of the example code was in XML files, most of which were pretty hard to read from where I was sitting, or logs of HTTP interactions for high level descriptions of how it would work, but none of the code shown was associated with the demos in the second half of the talk. I think my expectation going into the talk was more along the lines of "here's some lines of Java code which insert an event in the calendar." Perhaps that was a little unrealistic, given the number of languages Google supply libraries for, not wanting to either show examples in several different languages or stick to one and risk alienating people, but it coloured my impressions. Though the fact that the talk was also the shortest one of the day indicates that perhaps there was room for some analysis of the code associated with the examples. Generally, unlike the previous talk, I didn't feel like I came away with enough information from this talk to dive right in and start trying stuff, so out of 5. On the plus side, because this talk ended early I was able to catch the end of the KML / Google Earth talk.
09/06/07
GDD07UK: New features in the Maps API
Review: New features in the Maps API at GDD07UK, The Brewery in London, 52 Chiswell Street, London 13:45 to 14:30
- API for directions - a simple javascript function, called with a
divto return the results into, and the option to add a traffic overlay - Adsense for Maps - to allow developers 'to monetize their applications', not yet released but 'coming soon'
- Mapplets - as mentioned in my first post, except this time there were several different examples and some code to look at
Andrew then went on to talk about KML and GeoRSS, specifically taking your geographic data out of your javascript, where it is locked away and hidden from the world, and putting it in KML and GeoRSS files which can be indexed by Google. The talk concluded with some more demos of Mapplets and using the API, using the preview version of Google Maps, followed by a question and answer session. There were some useful answers, my favourite tip - type the url of your KML file into the search box on Google Maps to have your content rendered on it.
Overall a very interesting session, especially considering my relative lack of knowledge, the large number of simple examples with sample code helped me follow along very well, so out of 5.
07/06/07
Google Developer Day 2007 UK - Morning Sessions
OK, so I know I said I'd post at the weekend, and instead it's been a week, but I'm sure I'll catch up eventually... In this post I'll cover the morning - basically the keynote and lunch, and yes, before you ask, in my opinion anything up until the end of lunch is 'morning'
As usual this is (or should be) marked up in hReview format, no fancy include patterns this time though.
Review: General Session and Local Keynote at GDD07UK, The Brewery in London, 52 Chiswell Street, London 12:00 to 13:00
- What's good for web developers is good for Google
- Open Source and CC are good for web development
- We use Third Party, trustable, licenses that are above reproach so that developers know that they can trust that which we are providing
- And it allows Google to iterate APIs faster
- And open source makes standards possible
Apart from the rather hackneyed attempt to get 'trust' into the middle point twice, this was a very interesting position. Google is good at the web, so anything which makes the web more useful, and by implication increases web usage, is good for Google. Although this attitude does have a bit of underlying arrogance, it's hard to see many other companies making a similar claim (eg. swap 'Google' for 'Microsoft' and 'web' for 'desktop platform', or perhaps even 'IBM' and 'IT Consultancy'). Chris then went on to explain how all this applied to Google Gears (or, as we were told it was originally called, 'Scour' - as in "scouring the web with ajax" - yes, think cleaning products
) - there was no intention for Google to implement for every browser on every platform but, because it was all open source, they fully expect people to implement it themselves if their own favourite browser isn't supported.
Next we heard from Ed Parsons, a self described 'manic geographer'. He talked about how deeply embedded geographical information was in the world's data and how Google Maps API would help us developers exploit that. He made the claim that 80% of the world's information is either explicitly or implicitly geographical, though the evidence for this was somewhat apocryphal. He also showed the 'long tail' of potential geographical information and talked about how Google saw their role as providing tools to allow people to fill in that long tail with useful (crawlable and indexable) geographic information. He then gave us a potted tour of these tools - Google Earth and Maps, Mapplets, StreetView and Sketchup plus KML. This was followed by a question and answer session, not all of which were strictly development questions - licenses and privacy featured strongly, but Chris and Ed dealt well will all of them and were quite happy for anyone with concerns to contact them directly after the event.
Not a lot of technical content in this session, but enough to keep me interested all the same - out of 5.
Review: Lunch at GDD07UK, The Brewery in London, 52 Chiswell Street, London 13:00 to 13:45
With all that out of the way, this weekend I'll get round to doing reviews of the talks which had some actual technical content.
06/06/07
In-the-Brain of Erik Doernenburg: Why Agile Teams Fail
Review: Why Agile Teams Fail at Skills Matter, Sekforde Street, London 18:30 to 20:30
Erik started with a discussion of what motivates people towards agile practices. He quoted a recent study (I'm not sure, but I think he meant this one from the IEEE) which arrived at the conclusion that 15% of 'waterfall' projects 'succeeded', whereas 40% of 'agile' projects 'succeeded' (gratuitous quotes because he wasn't sure what the words were actually defined as in the context of the study). It's nice that agile practices can result in such a big improvement in success rates, but Erik didn't think this was the main reason why they were embraced, he thought the motivation came more from self interest as a result of the threat of outsourcing. If coding is a commodity, then it can be outsourced, and it makes sense to outsource to the cheapest supplier. But if software development is a process which relies on regular face to face meetings between developers and customers (ie. agile) then that's much more difficult to outsource.
After this short introduction, he had ten slides for his top ten (in no particular order!) reasons why agile teams fail. It's fair to say that a lot of the reasons, like agile practices themselves, reinforce one another:
#10 Believing in Myths
There are a lot of myths which have built up around agile methodologies - pairing costs twice as much; no documentation is required; agile practices are 'cowboy coding'; Scrum is agile. Erik went into each item one by one and dismissed them, for example reducing the amount of documentation is not the same as having no documentation - just produce the documents which will actually get read, there is more to just pair programming than just one person doing nothing and if you're following a recipe out of a book then you're not really doing agile. His main point was that believing in the myth is likely to cause the myth to become reality.
#9 Using Controversial Terminology
Common agile buzzwords are actually quite frightening to managers - say 'extreme development' and they hear 'risk'. T
