Still life

ColdFusion forgets to use UTF-8 files after logs rotated

For a long time, it's been recommended to set up Linux's logrotate system to manage the size of cfserver.log, which can easily grow to be a very large size on production systems, and ColdFusion seems unable to manage itself, unlike the other logs.

I recently discovered however, that a restart of ColdFusion via logrotate was changing the way files were written and read.

By default, everything ColdFusion does on modern operating systems is in UTF-8, so you can read and write files using CFFILE without needed to worry about the charset parameter.

You can easily check that this is the case by testing for the default file encodings in the underlying Java JVM

<cfobject type="java" action="create" class="java.lang.System" name="s">
file.encoding: #s.getProperty("file.encoding")#<br>
<cfobject type="java" action="create" class=""
<cfset reader.init(>
<cfoutput>stream reader's encoding:

If this outputs "UTF-8" (or UTF8) for both properties then everything is working as it should.

However, I found out that after an automatic log rotation, this would output the very odd "ANSI_X3.4-1968" for the file encoding and ASCII for the stream.

Why is this an issue ? Well, now reading and writing files with UTF-8 ("foreign") characters in them will silently mangle the contents - leading to question marks, weird black boxes or other signs of corruption.

I stumbled across a few pointers, but basically if you compare /proc/(ColdFusion process id)/environ before and after an automatic restart, you'll see that logrotate has thrown away the environment settings that Java uses to figure out if your operating system was made in the 21st century or not. Yyes, I know, it should really look for an excuse to downgrade to ASCII, not the other way around !

Anyway, the outcome is therefore that Java (and hence ColdFusion) fall back to using ASCII for file operations unless they see a LANG environment variable mentioning UTF-8.

So, the upshot is to use something like this in /etc/logrotate.d/coldfusion instead, adding an explicit export of the LANG variable as well as using runuser. You may need to use 'su' on some UNIX variants, in which case please leave a comment here with the version you used.

/opt/coldfusion9/logs/cfserver.log {
  rotate 5
         /sbin/runuser -s /bin/bash root -c "export LANG=en_GB.UTF-8 ; /etc/init.d/coldfusion_9 restart"


Maybe one day Adobe will ship with something like the above, or just manage the log files correctly.

Still life

CFDrinks in Manchester UK

Grant Shepert from Blue River (who are behind the awesome ColdFusion powered Mura CMS) is going to be in Manchester (UK !) as part of a little sight seeing now they've opened a UK office.

If you'd like to meet some fellow ColdFusion developers, or just see what all the fuss is about, come along to the Banyan on Tuesday the 16th August.

I'll certainly have some sort of ColdFusion or Adobe branded t-shirt on or you can tweet me as @thefalken.

Still life

How I Get Started in ColdFusion

Steve Bryant has decided that today is a good day for people to explain how they got started with ColdFusion, because it turns out people get started in all sorts of ways.

For me, I was at my first job out of Uni, way back in the 2000's. I was using Perl to build a reporting application that tied together details of consulting jobs from an Oracle database with scanned timesheets so that our customers could understand what was going on.

This was all well and good, but we wanted to offer other things, like being able to find consultants with particular skills, have timesheets recorded in real time online, and a bunch of other things.

We looked at several platforms to build our business on, some of which, like ColdFusion, are still alive and kicking, like Zend Studio and even some native Perl frameworks. We looked at ASP too, but that'd cost a fortune for a specific development tool and Windows servers.

We had a great chat with an Allaire (yes, Allaire, not even Macromedia, never mind those new upstart owners at Adobe !) rep in a hotel down the road, and the ease of getting a query out on to a page was so much better than anything else (and mostly still is) we got a licence very soon after. We nearly deployed Spectra !

And the rest, as they say, is history. I've worked for multi nationals and for myself, and although I've built things in Java (on Weblogic) as well as noodeled about with Perl, Python and the rest, I always end up missing ColdFusion, and now I can even use a free (beer and speech) ColdFusion implementation too !

Still life

Adobe leaves Linux AIR users hanging with surprise cancellation

Today Adobe announced AIR 2.7 is out, but also that they will no longer be supporting AIR on Linux.

Given that it's also official that Adobe will not be supporting hardware acceleration in Flash Player on Linux any time soon this concerns me - and it should concern you too.

Flash Aside

But, as a brief aside, with Flash it's apparently the video card drivers fault, though Adobe don’t say if that’s just the closed-binary vendor drivers or the open replacements, or for what driver/card combinations. And, frankly, the only 3D application that kills my main steam Intel Xorg driver is Wine, for which I can easily blame Windows, so it’s all a bit bizarre that Adobe can’t get something fixed.
If there was a blocker bug in a Windows graphics driver, do you think they’d say ’you know what, we have a deadline, lets release any way and sort it out later’ ? Sigh.
I know unexpected bugs occur late in the development process, but what really excited me was that Flash was going to be a proper unified cross platform 3D environment, unlike other add ons like Shockwave that only run on two O/S. Oh well. Sigh.

AIR as Platform

AIR was going to be the single cross platform desktop runtime, running everywhere much like Flash does.

But now it feels like Adobe would prefer to focus on mobile and are happy to drop Linux, despite promises that it was a first class citizen when first (modern) Flash and then AIR were delivered to Windows, Mac and Linux all at the same time on an integrated release schedule.

And now, with zero advance notice, AIR will be everywhere except Linux :-/ And the lack of a public roadmap from Adobe has burnt me again :-/

Where are details for the ’partners’ who could make ’complete implementations of AIR for Linux-based platforms' to keep AIR on Linux ? I for one would be interested to know how much work that would involve. Could the community provide that for instance, or do you need to be some sort of assembler-level guru programmer ?
I even applied to the Open Screen Project with a view to at least gauging the size of the task, but after a week Adobe hasn't bothered to get in contact.

The lack of a clear roadmap for 'what now' for AIR on Linux, including a named OSP partner such as Canonical or RedHat makes me think they don't have one. And if Adobe wont stand behind their own software, why should anyone else ?

Incidentally, does this mean Adobe is now only writing the AIR core, then only two integration tiers (MacOS and Windows) ? So every new platform (Android, Linux, RIM,LG,...) will need to provide it’s own engineering resource ?

The Free/Open source community are already having a field day over this. All the hard work me, others, and Adobe have done building good will in this area (open .swf format spec,, open language, open compiler, cross platform, cross device, ...) will probably now drop away like a stone.

The Future and You

As I said at the start, I now fear for the Flash Player, genuinely, on Linux. Will it be left to bit-rot, as it was in the past (before version 9) and is now the future for AIR ? If the trust we placed in Adobe over AIR was misplaced, how can we be reassured over Player, especially as it’s no longer an equal citizen anyway ?
As far as I know Adobe haven’t even said they’ve raised upstream bugs for the video driver crashes in Player, for instance. Intel’s are on and one I’ve logged there about WINE was just picked up, but I don’t see an person there. They should be all over etc. but are no where in sight.

Should we worry about the roadmap for other Adobe products now, like Photoshop Express on Android ? What about BrowserLab ?

Can I really commit to using these knowing that at any time, with minimal notice, it can be withdrawn or made inaccessible (by requiring features Adobe wont put in to Flash on Linux, for instance) ? And web services from Adobe ? Looks risky there too...
I'm certainly unlikely to suggest something to work that I can't also play with at home.

Oh, and it’ll be fun over here in the UK when the BBC iPlayer stops working on Linux... there was a big enough fuss when they went to Flash...

Now we know that platforms like those from RIM do not depend on Adobe to develop the Flash Runtime for their platform, we also know it's official Adobe policy to let platform-specific implementations of AIR (and Flash, I suspect ?) rot if Adobe have to pay for development themselves.
So if (say) RIM decided they didn’t want to invest in AIR any more, Adobe really would hang all the AIR developers (we are Adobe customers, not RIM or Google customers) on that platform out to dry, just as is happening on Linux now ?

What about if Google decides it wants to go all out HTML5 and stops developing AIR/Flash for Android ?

This is now worse, isn’t it ?


I can not shake the feeling that there must have been a better way forward. Maybe there isn't. I'm sure it's very very complicated, and not as simple as Adobe just waking up one day and deciding to drop Linux support off the deep end.

But I would have liked Adobe to stand behind their platforms. I accept it looks like Adobe are going through a transition right now from Adobe doing all the work to farming out to partners for each platform. But I would have hoped that if Adobe don't have a partner found for an existing platform they'd not drop it on the floor.

I mean, are Microsoft helping Adobe build for their platform (who would rather you used Silverlight or HTML5) ? Or Apple (who hate you) ? So why drop Linux like a hot potato ?

Still life

FlashCamp Birmingham #fcbuk

Mike Jones, Adobe
Mike is an evangelists for games at Adobe. A shift of focus I think Adobe is still making. Mike shows there are a massive number of devices, and you can target these all with HTML5 but Flash has a unique opportunity to innovate on all of these platforms. Mike has a nice time line graph to back this up over the last 15 years.
Mike demoed some neat stuff like native mouse cursors. And talked about the 10.3 beta. Mike's demos are all branded with 'version 11 incubator' though and someone asks where he got that. Seems the information about that release didn't get that far.
Mike then talked about how Flash can innovate faster than browsers because browser's have to watch other stuff and do that too.
This drives adoption and in turn you can inspire your users. But now this also leads to standardisation i.e. HTML5 video tag. Mike then shows a clip of Ben Forta on 'technology street' mediating between HTML and Flash puppets, as well as a Wallaby .fla-to-HTML5 demo.
Mike also showed something called Edge which was new to me; basically Flash Catalyst for HTML5.
Mike then got back to the version 11 he had and talked about how the purpose of incubator is all about early feedback. It'll be released later this year, and we should expect rapid adoption i.e. auto upgrade just like with v10.

Mobile design takeaway
James Whittaker, Tweetdeck
James started out saying he was trying to be agnostic about platform and technology and he managed to stick to it.
James's point was that people don't understand why their asking for a mobile application or web site very often, they've just heard it on the news.
Applications are not the same as 'apps' (as in 'App Store'). Apps have a single primary function, offer a tailored experience, are task focused, and have super-clear navigation. The days of a Symbian-style menu hierarchy to get lost in is behind us.
Then he talked about things to think about when designing for mobile. This includes connectivity, orientation and your user personas. He even touches on sketching, and is the second person to big up uistencils in a month (last time was Rob Rawlins at Scotch on the Rocks 2011 Day One #sotr2011).
Then he mentioned cross device issues like a variety of sizes, resolutions, and touch target sizes.
The comfort zone he talked about is interesting. It's the bottom left/right corner depending on if your left/right handed that you can reach naturally. This is why the main button is in the middle bottom on tablets. And so it should be in your app :-)
Then there was a great piece on something a really agree with - ditch the settings- you don't need them. Its your app that is wrong if it requires them.
In summary: don't build for early adopters and build for the 80 percent.

My mother stole my joystick
Mike Jones, Adobe
Back for a longer talk about Adobe and gaming, Mike started by saying his mother isn't a 'hard core' gamer. But now she is on the internet, she does play games. Space invaders was hard core when the game out. But now it is 'casual'.
Mike used that as an example where gaming has and is evolving (on Flash of course.).
We demo was a game called Fortune Online. It looks like an 8-bit bitmap isometric game, not Flash. This is because it is, it's one big bitmap and uses old school blitting to it from sets of sprite maps.
But needed to do that to get good performance... Until Molehill with it's 3D acceleration. !
Mike gave a good developer level intro to the hows and whys of hardware acceleration. And then showed us Zombie Tycoon. Pity it isn't that accelerated on my linux box (yet ?).
Then there was a bit of a talk about frameworks on top of Molehill and shows the MAX Racer (video, not live).
There are a few tools like Copper Cube and Prefab that support the work flow. Unity 3D will handily have a Molehill exporter.
Mike also says the Molehill low level 3D API is also useful for 2D, and talks about M2D built by Ely Greenfield for blitting etc. It has a  DisplayList style of programming so it very familiar, comes with a physics engine and works with Box2D. And then he showed how you can build Angry birds in 50 lines of ActionScript :-)

Bugs gotta fix them all
Niqui Merret
Niqui had an amusing start as she trys to convince us bugs are interesting, and talks about debugging steps.  Basically identiry, clarify, fix and understand the fix implications.
There was an interesting categorisation of bugs along a sliding scale of complexity - compile time vs run time vs unexpected behaviours vs crash.
It was interesting to hear about tools like DConsole which runs in your app, so works even on mobile.
Niqui also says 'Pen and Paper v1.0' works well too, apparently, but I  didn't hear a compelling example of why keeping a 'notebook' is better than a wiki or creating a new issue in your issue tracker.
It was surprisingly good to hear my art being talked about from above, like a long distant view.
As a note on ego and personalities, Niqui says to choose battles (i.e. over white space) and explains how bad it is to see 5 different code styles in a class. But reformatting makes diff's hard to read. So you could use FDT or a Builder plugin to format code to an agreed guide line.
I also need to subscribe to as it's great geeky humour.

Wowza Media Server
Steve Carpenter
Steve showed us this product that's like Flash Media Server but runs on Java. And also does other stuff like supporting Sliverlight streams, quicktime for iOS devices and 3gp for mobile. It also runs on more cores with the cheapest licence.
It's used by some big names, and has some compelling prices. Like only $65 a month, or on Amazon EC2 you pay for usage, this saves around $1000 for a perpetual license. If you just needed to stream a single event, for instance...
WMS works with the Open Source Media Framework (Flex-based player) from Adobe. It does seek, fast play and allows record and stream at same time.
The real power is in remote shared objects where any client gets a synchronised copy of a servers object.
As WMS is also a Java platform you can replace the need to use ColdFusion and FMS separately, and build anything from chat room to game.
FMS doesn't support debugging apparently but Wowza does.
Steve showed in some detail how to use these RSO to support a chat room by having a list of people in an RSO. Clients can send an 'istyping' event and all the others see that suer typing. An RSO contains many slots, and the Java code mostly just decodes and copies arguments into a slot.
WMS auto sends sync. events when the data is saved into a slot.
It's much more efficient than HTTP. You can push enough x,y pairs to make a shared whiteboard very very real-time. And not much code !

Seo, mobile and cms for flash
Neil Nand
Neil explained that Flash is great at engaging and evolving, but hard to manage content - there is no Drupal for Flex.
Until now that is ! Neil's program writes html, mobile html and Flex. The Flex layouts can be customized.
Each page is saved as an XML blob to the database (make you wonder why bothering to use a database....).
He uses Anthony Head's browserdetect.php to redirect users to the mobile or other content automatically, optionally with a nice JQuery prompt). If you ask for just you get Flash unless you are on mobile.
PHP generates the HTML/mobile content, but I think just provides services for Flex to use.
There's no need to upload differing sizes of images, as a nice touch it automatically does it.
Kinda a hard talk to follow though- it wasn't layed out with a technical overview of what all the bits did and briefly how, then a drill down into each, which 'I built my own CMS' really needs. And it's not available for download (yet ?).

Sanyu Kiruluta, Blackberry
This eagerly anticipated talk starts with a big slide saying how big they are; 20,000 apps downloaded 3 million times a day.
I remember QNX from their bootable floopy disk that contained a whole O/S, modem stack and web brwoser back in the dot com days, and here it is again. QNX always used Flash for apps, so writing AIR apps yourself is a really natural fit.
It's powerful enough for real media too, with HDMI out, a one gig CPU etc.
As well as AIR and Flash, it also runs (the surprisingly open source !) WebWorks environment that you can use to convert a HTML/CSS/JavaScript to a native app. These are designed for always on connected apps. There are some extra JavaScript APIs to the native apps, to put yourself into the background etc.

Then Seb Lee-Delisle gives a great fun talk, without slides just the #fcbuk twitter feed. It's a reprise of 'What the Flux' about the rise of Flash, the rise of HTML5, and was followed by the famous Flashy Fortunes game show, which everyone had great fun at.

Then is was off to the bar round the corner, where I got to fondle a Playbook for real and let of a bit of steam at Blackberry about how hard their sign up process was.

Still life

Scotch on the Rocks 2011 Day Two #sotr2011

Mark Drew and Gert Franz of Railo
It's up to you to be proud of CFML, don't apologise for it ! Tweet it, blog it ! You cant convert .Net, PHP users, only tempt them.
But likewise, we should try other stuff and tell everyone the 10% you like about Scala or whatever. You might end up with them in ColdFusion (or Railo !). Incentivise your colleagues, especially the 9 to 5'ers.
Price and performance is not an issue any more for ColdFusion, been around for ages but updated every single year.
Gert also talked about some of the cool stuff in Railo.

JQuery Mobile
Ray Camden
Ray started of by saying JQuery mobile may but 'alpha 3', but it's stable and as a beta soon; it's "Built on JQuery, not fairy and magic dust". It already works on Nook, Playbook, Android, IPad etc. As with JQuery is degrades well, and is theme-able. Adobe sponsor it, as Spry is basically dead - the team at Adobe that did that are now working with JQuery.
The docs are terrible at this point, basically just a JQuery Mobile gallery, not so useful for 'how do I do?' but this is being addressed.

Ray showed, basically, a huge number of working examples you can get from his blog, but in summary the page structure is that after including the JavaScript and CSS files, there's then a bunch of DIV tags that use the 'data-role' attribute to get special stuff applied. This includes being marked as header footer or content. If you leave these out you get an empty page :-)

The main theme (and most awesome part for me) was there was no writing any JavaScript. You make multiple pages (complete with transitions) just by adding an 'id' to more DIVs. If you do link to a another page, it auto adds back button, bookmark-able urls and so on.

'A href' uses AJAX by default. So targets must be real JQuery pages (so include at least one data-role page DIV etc.).

data-role = listview of links, makes into accordion, can auto-add arrow at right. Nest LI items for drill downs!
All sorts of CSS classes to add annotations for things like gear icons, thumbnails, count numbers and many more to buttons. All looks ace by default.
You can make lists real-time searchable by just setting data-filter=true. Awesome.

Normal input buttons etc. get auto skin'ed, so there are nice ways to group them to make tool bars etc. Or flag A-href to look like button (data-role=button), add icons, align icons. Buttons span the whole page by default, option to turn that off too.

Forms again are AJAX by default, but all input fields are enhanced so textarea looses its scrollbar and gains expand as you type. Also has a few extra field types like sliders and a nice date picker. Still no JavaScript code needed ! There's also an iOS style toggle using nothing more than a CSS class on a select element.

For layout there are several types of grids rather than using table tags.

You can listen for orientation change, and change the layout. About 2 lines of JavaScript code for that.

Out of the box there are 5 themes, just colour changes really. Simply set data-theme to change.

There are events for swipe etc.

As a last piece of awesome, Google has a driving directions JavaScript API. Using this and geolocation (via JQuery Mobile) you can build driving directions (from where I am to the place) in no time.

Why it's taken till now for me to hear of this wonderment I have no idea, but I was so impressed I spent some time in the afternoon hacking at it !

Home for 5
Andy Allan
Developers main problem that makes them loose productivity is distraction. But also IDE clutter and talks at the water cooler.
More hours does not mean more productivity. So how to get the most out of the hours you do have ?
Most people in the room have heard of Mylyn, but only a few are using, interestingly.
Tasktop lets Mylyn track web pages, email and a bunch of other stuff. It also adds some time reporting, time sheet stuff.
Tasktop will add scheduled tickets to a (shared) Google calender. Time estimates and spent may reflect back to issue tracker depending on connector, something I'll have to look at for our own Trac install.
You can click a TODO comment to turn into a task in the issue tracker. I should probably stop writing TODO and start writing sub-tasks, because everyone forgets about TODOs.

We also discovered the 'feeling lazy' button that auto-assigns you a low priority ticket; it's under 'activate...' in the Mylyn task picker.

Hack time
At this point I may technically have been in AJAX Long polling and LiveCycle talks, but I was really learning JQuery mobile ready to try putting it through PhoneGap to make a mobile application next week at work :-) A full mobile website including a ColdFusion backend in less than an afternoon. This stuff is very cool...

We all need to book March 8 and 9th next year off.
There was also some madness with choosing a winner for a few prizes from randomly thrown conference passes. Some of which are never going to be found in the roof. I'm glad to say the awesome Sally Jenkinson won free tickets and accommodation !

Still life

Scotch on the Rocks 2011 Day One #sotr2011

Keynote (Adobe)
Terry Ryan
Terry started off by saying that 5 years ago, we built websites with 2 simple tiers. Now have a web application, and tablet, and mobile, and each in many versions.
He showed a  speeded up video of building a mobile client for ColdFusion server, 38 minutes compressed into 3. As well as just being plain quick, most time was spent on UI and the data model. This is good, technology should be in the background of the experience. Across devices, the UI time would grow and anything else shrink. We have to be on other platforms now, look how easy Adobe make it was the take away :-)
He then talked about the new home for ColdFusion at Adobe, and how it has reduced red tape. He intro'ed the new ColdFusion server and Builder engineers from India. I chatted to them both later on in the bar, and they're great people, happy to listen but also suggest why your brilliant idea wont work for them. Looking forward to hearing more from them.

Next up was some of the European-based stuff Terry has done recently, including localised ColdFusion community blogs and the  ColdFusionBox Android news aggregating application. There's also an EMEA ColdFusion application catalogue.

Then Ryan shows some new ColdFusion Builder version 2 stuff that CFEclipse or Eclipse has had for a while now, but is bundled in now. There are also a few nice additions like a customisable code beautifier (hi, FDT !) and some handy keyboard shortcuts. These are thinks like 'Quickfix' using ctrl-1, to create an undefined CFC or function when instantiated looks useful, actually.

Adam Lehmen then took over, as his last Scotch on the Rocks as ColdFusion product manager.
ColdFusion Builder 2 is released on beta today !
Finally Adobe have got a proper ColdFusion bug tracker, and is also live today. It will be the common issue tracker platform for all Adobe products, and it's written in ColdFusion with the Mach 2 framework ! No more Jira, no more horrible Flex mess.

Adam then gave a bit of ColdFusion historical perspective. Did you know Microsoft tried to buy ColdFusion from Allaire but Allaire said no, and now the latest .Net Razor looks like ColdFusion did 15 years ago :-)
Starting with ColdFusion 9, Adobe are thinking 3 versions out to future, so ColdFusion 10 will build on the stuff introduced in version 9, and offer some cool new stuff itself.

So, on to the meat of ColdFusion 10 aka Link. This is all being made public for the first time at Scotch on the Rocks, which is awesome for Andy and the guys !
The idea is to make sure ColdFusion is seen as a modern platform, mature not legacy. And also provide an easy path to HTML5 and mobile applications. In this setting, do long-established features like Flash Forms really make sense. Does anyone use them (no hands !).
AJAX is a different model to just sending HTML out and waiting for the client to ask for a whole new page.
Out Verity - there's now full CFSEARCH support for Solr. This means there's no document limit, it scales much better (to N clustered search servers), and supports many free extensions.
Out JRUN - once the applause died down Adam said this is a move to Apache Tomcat. All Adobe server products will now run on Tomcat. Adobe will have their own supported Tomcat version, and contribute bug fixes, you won't have to get any more dirty than with JRUN, so not at all for 90% of people. Only people with complicated clusters should see any issue. Oh, and this will make ColdFusion even faster.
In Apache Axis 2 rather than 1. This makes ColdFusion a much better citizen producing and consuming web services, especially for .Net (as it's got WS-Security etc).  But this changes the WSDL signatures, so all you existing clients have to change their code. But Adobe will weave their magic to make compatible.
In REST support, for publishing or using RESTful web APIs. Interesting to see how easy that's made ( createObject('rest',...) ?) !
In Exchange 2010 support
In better scheduled tasks. You can now specify ranges (like 8am-10pm), conditions (like less then 80% CPU usage), triggers, chains, priorities, groups, and make them application specific rather than server specific.
New CFJOB tag, works with an execution queue. An easier alternative to cfthread, and able to work with those queues from from code. Database, RAM and other options for the backing store. I asked later about being able to publish/subscribe to standard JMS message queues, Amazon SQS or remote ColdFusion servers, but they weren't telling me anything yet :-)
Better Java object support. Adam joked this is killing one Mark Mandel project (JavaLoader) at a time, so ColdSpring had better looked out :-) CreateObject('java','',pathsArray) or set with the option to monitor this and auto-reload changed .jar files during development.
Closures in cfscript. This is 'meh' for me. I think code written like this is a mess. Shrug.
Plus updates to ColdFusion 9 stuff like ORM and Flex Remoting (even better lazy loading).

Requirements and estimating
Peter Bell
Peter is always a great speaker with a good crowd, and this as no exception.
Most people are on teams with 5 to 10 team members, selling services they build with an even split of 2 to 5 and 10 to 20 apps.
Most have heard of user stories but not using. Interesting that.
Even if can find a business expert, they can't articulate desires.
Intent driven design has four stages: business intent, audiences, objectives and user stories / tasks (handy non-technical alternative name there !).
No value to product inventory like cars sat in factory half built. So ship the minimal viable features.
The famous "As an X I want to Y so that Z" moment :-) If you cant figure out the 'why' of an action, maybe shouldn't be an action at all.
Stories are negotiable, a starting point for conversation and design- tracer bullets, not missiles.
Long stories should be split down by sub task for data (save form data), validate entry, paths (what happens if...), and edge cases (400 req from same IP).
Cross-cutting stuff like logging can be isolated to it's own story (via AOP on the server) saves 'and log' in every story.
Reflex estimates are bad. But remember to ask if time, price or both are fixed, and does accuracy matter i.e. is this a betting the business type issue, where cost is less of a factor.

Ideal days of effort for a task is an estimate, not a commitment. But management need concrete numbers. So multiply the estimate by a load factor (factoring for interruptions).

Using 'story points' as stand-in for ideal days avoids "you've had two days to do this one day task, even though I interrupted you 4 times, why isn't it done". Only whole completed stories count, we know if something is done, much harder to say how close to done something is - 98% ? 99% ?. After a few sprints/time-boxes/whatever, you'll be able to say that in the last developer month your team did 46 story points, so you will aim to do that many next month.

Zero point stories aren't - they all add up so bundle some together into a 1 pointer.

Tempted to use 10, 20,... rather than 1, 2... points but this is confusing because can't be that accurate.

Over time can maybe move to just S, M, L t-shirt factors. Eventually you get good at writing stories, so just count them, because their all M.

Planning Poker can be used to average guesses. If wildly different guesses, find out why, because someone knows something they've not got across yet.
Magic/affinity estimating sounds even more fun- just throw tasks in sizing buckets buckets then look at them over coffee. Find the tasks that bounce from S to L and then planing poker them !

On managing risk, Peter says there are only really four types of features. Rocket science (cant estimate, it's new to the world), lab (need to handle 4k reqs/sec, so try it and if can't optimised code, and iterate. Could take forever.), new to you (but someone has written a class/blog post for me, easy to estimate, just take the extreme estimate and double it), twist (easy, done before, just add 20%).

On setting expectations, Peter says it's important to say at the outset that "We do not commit to solving your problem", we will "just deliver something that meets the spec.". If the customer doesn't know if that is enough, why not? What 'obvious' thing is missing from the spec.?

As some closing points, the difference between and estimate and a commitment is it's 50% certain to do vs. will do no matter what.
If you can aim to make 40% of the features optional, to allow for schedule slip, this gives a lot of wriggle room to still meet the spec. (or deliver *something* by dead line).
One awesome thing it's be great to have budget to do is for where the technology is highest risk, so you do it with two simultaneous equal teams, so twice the chance of doing it !

Matt Gifford
This was sitting room only to a packed audience, and at the outset Matt said 'it is convoluted and hard' but that didn't thin the crowd at all :-)
Nobody reads privacy policies. Our data is out of our control. But companies want it, to sell on or do analytics. Some legit, some not.
You are responsible for protecting users online life, which increasingly spills over into real life too.
Email address as user name, might be  real handy for users but should you really store that personal data ? You are your email address !
OAuth is a better way.
OAuth tokens are like tickets for barrier gates, you exchange money (self) for ticket (token), so you can represent users without giving away details.
Twitter, Google, Yahoo, Facebook Graph etc. all use OAuth.
But what about the OpenID project ? It's similar but shares a single identity with many sites, where as OAuth shares data without identity.
Matt amusing describes this as the OAuth dance:

 * Request token, a temporary value for a user
 * redirect user to the provider to approve
 * consumer can then ask provider to trade request token up for access token and secret.
 * save access token and secret and use as stand in for user's name and password.

You can reuse the final access token/secret as many times as you likes, but user can revoke your applications access at any time, so still in control.

The docs for OAuth are bad. Different providers are all slightly different just to make it more annoying. has a test server impl., handy to test clients against or use as basis of own server.

Flex 4.5 mobile
Terry Ryan
Adobe mean Flash Player 10.1 or better, Air 2.5 or better, when they talk about Flash on mobile. Air has a device specific api. Write in Air and compile to native iOS, Android, WebOS etc.
Mobile challenges are related to a small device, no complex UI like data grid, memory usage, and needing own design patterns.
Flex 4.5 has mobile optimised components (a larger skin, more efficient code). List removes its scroll bar for instance as well as adding swipe-to-scroll that makes no sense on desktop with a mouse.
ViewNavigator is the new base component. Can push/pop other view stacks, stores data for views but destroys/recreates the components to reduce RAM usage. You can push to the same view but with new data to paginate.
TabNavigator is similar, but only room for 3 tabs. Tabs are persistent though.
ActionBar is a global header strip but of course you can redefine for each view if req.
Top tip: don't have circular table references in the database, assuming ColdFusion doesn't just explore it's very inefficient, so check code generated by things like Apptacular..

Terry then built a simple mobile app using the application and data wizards in Flash Builder 4.
Really easy to test a ColdFusion CFC, drop method onto the list on the stage, and have it all wired up. I must play with this more !
The 'Run' dialogue asks to run in emulator or send to device.

When push/pop view, you can specify the effect to use so going back slides the other way.
Design view has a handy drop down for mobile device types.

Unlike PhoneGap, you can also can run 'on device' from the run configurations menu. Terry plugged his Android phone in and it just worked. WebOS for Blackberry is 'soon', iOS 'less soon' but on the way.

Pick up girls with css3
Chris Mills
Not much to say apart from the accidental porn-popup, which I just caught after spending a while talking to the Fusion Reactor guys in hall.
Display:table-cell is handy, and removes the need for abusing table tags, but I'd not seen it before.
There are also :valid and :invalid form pseudo selectors.

The pen is mightier than the keyboard
Rob Rawlins
An awesomely funny, energetic talk with nice tangential slides.
If you remember Andy's preso. from Manchester, this was the same style on the subject of not letting technology lead design. For example the Pruis vs VW Golf in efficiency.
As geeks, we overuse technology, remember the marque HTML tag. How to stop this happening ?
Do you know your users ? It's important to get to know them. You wouldn't use technology without understanding it.
Visual communication is engrained, we retain more than written or heard. We draw from a small age, so very powerful.
Your first idea will be wrong, so jot down everything and get feedback on all of it.
People are also more reserved the more effort that they think went into a mockup. So get feedback early.
Sketches are not a deliverable. The end goal of the drawing process is what you learn while drawing.
Getting over the blank page issue, of where to start: Don't add the logo, navigation at the start- those are experiences that come later. Storyboarding bare essentials is the key to success, like scenes like in movie.
Ban 'lorem ipsum' it doesn't help the user know if getting what they need. But copy writer might write less, then have to pad with noise to fit design. This is wrong way around !

Still life

Installing Flash CS5 will break your Flash debugging in FireFox and Flash/Flex Builder

Sometimes I am amazed that two parts of a single company can't work together.

Today was a classic example - I needed to install Adobe's Flash CS5 authoring tool, and already had a debug Flash player installed in FireFox. I also use Flash Builder for debugging Flex in the standalone player.

Installing CS5 broke both these things ! Why CS5 felt the need to mess, without asking or apparently thinking, I have no idea.

The fixes were fairly easy, but shouldn't have been needed.

  1. Reinstall the Flash Player in FireFox
    I use Flash Switcher so this was easy enough, as I also wanted to try out the 10.2 beta 1 release from yesterday.
    I assume CS5 just stomped all over my updated version, and installed something full of security holes. BAD SOFTWARE !
  2. Change the default application for .swf
    Open a folder with a .swf file in, right click it and choose 'open with..., choose program'. You should already have an entry like 'Adobe Flash Player 10.1 r53' so select that from the list and tick 'always use'. If you want to be really sure, browse to the location under the Flex Builder install root \player\win\10.1\FlashPlayerDebugger.exe and use that.
    CS5 had changed this to a non-debug player, a fairly stupid step for a development environment like CS5.

And that's most of my morning wasted, and me but in a right bad mood. Cheers Adobe :-(