People@Ephox
People@Ephox brings together both official and unofficial blogs about Ephox. The aim is to provide a central place to learn about the people, products and culture of Ephox.
Real Programmers
Robert Dawson - May 15, 2008 08:55 PM
There is always a bit of a culture in IT (is that an oxymoron?) around macho programmers. Real programmers use VI/EMACs etc. It is always fun to read some of the interesting stories, and urban legends around real programmers, basically all taking variations of the Monty Python "We were poor" sketch
The Story of Mel is one of my favourites, only upstaged by the tooltip on this XKCD Comic on Real programmers.
What's your favourite story (real or made up) of real programmers?
Share ThisDesign Patterns
Dylan Just - May 14, 2008 11:58 PM
I’m reading “Head-first Design Patterns” at the moment, and it rocks. I’m only up to chapter 3, and I’ve already been able to apply it to work.
The book applies patterns only to Java, so, of course Java’s properties influence the decisions and advice. In the first few chapters, they introduce the Strategy, Observer and Decorator patterns, and show how these patterns overcome some of the pitfalls of inheritance.
I had a few realisations about this:
They use the Strategy and Decorator patterns to solve the problems of a set of objects requiring multiple behaviors. Strategy solves this, by modelling the behavior separate to the object. Decorator solves this, by wrapping the main object in a decorator which contains the new behavior.
Now, inheritance solves this by adding behaviors at different levels of a class hierarchy, and passing them on to children. The pitfall of this, is that if the class sets require two disjoint sets of behaviors, well, you can only pass on one set by inheriting. That is, unless you use multiple inheritance, which Java doesn’t have (for very justifiable reasons).
I’m not saying multiple inheritance is a better solution, but, say, in C++ or C#, it is at least an option.
An advantage of composition over inheritance, is that composition can change run-time, whereas inheritance is static… again, that’s true in Java anyway. I don’t know much about the more hardcore OO/dynamic languages like Lisp, Smalltalk, Ruby and Python, but I have a feeling their dynamic natures may allow you to change inheritance at run-time… e.g. perhaps you could reassign “super”.
Dynamic languages can certainly change a lot of things runtime. Take Javascript for instance - you can add/remove/replace methods of a class run-time. Such a fundamental and cool features undoubtedly opens up possibilities of different patterns, and changes the pros and cons of known patterns - as do many language features (I’m thinking thinks like: annotations, generics, services, functional languages, closures, currying).
I’ve always been interested in software design, and also in multi-language programming. Once I’ve eaten this book on how design patterns apply to Java, I’d be interested in reading (or even writing) something that applies design patterns to a wide range of languages.
Another thing I will be keeping in mind: if a language doesn’t have a language feature I’d like to use, perhaps there is a design pattern that I could substitute. e.g. ASP doesn’t have much in the way of inheritance, but, perhaps I could use Strategy or Decorator instead.
On Strategy vs Decorator - they seem like quite similar patterns. A differering behavior is encapsulated and referenced using composition. The difference is in how this composition is structured: with Strategy, the main object is composed of a set of behaviors, whereas with Decorator, the behaviors are composed of a Russian-doll of behaviors with the main object at the centre.

Violent Video Games
Dylan Just - May 14, 2008 07:18 AM
How’s this for a hypothesis:
Violent video games do not make people violent.
Instead, stupid debates about this make people be violently influenced by violent games.
i.e. The link does not exist inherently. It was created by people thinking that it might or might not exist, and debating about it. The subject (this relationship) has been altered by observing it, in a sort of self-fulfilling prophecy.
i.e. The observer effect.
Say, for instance I had never heard about this link. I play GTA, I don’t get violent.
Say, for instance I had heard about this link. I’m playing GTA and I’m thinking: “hrrmmm I wonder if this is making me violent.” Suddenly, I’m considering my own violence and how it is being influenced by the game.
So my mind is now thinking about my own levels of violence and my game influence, while I play GTA. Thus, my level of violence is being affected by the game.
If I’m now thinking of my own violence more, depending on my thought patterns, my mind may make itself more violent. Even if I’m actively trying to make myself not be influenced - that, in itself, may make me more violent, if my mind “plays tricks on me” or gets into repeated thought cycles. Do this: try not to think about a pink elephant. Now that I’ve mentioned a pink elephant, its hard isn’t it? Replace “pink elephant” with “the relationship between violent gameplay and violent behavior”.
Even without obsessive thought patterns like that, the mind is still being influenced by perception of the argument itself , separately to being influenced as described by the argument’s hypothesis.
This sounds far-fetched - I don’t believe a word of it - but, let’s run with it for argument’s sake.
There are other examples of this sort of thing:
- Tell somebody they have a terminal illness and they begin to die.
- The placebo effect.
- Superstitions. They can come true by virtue of people’s beliefs in them. If you believe that stepping on a crack gives you bad luck, your belief in that alters your behavior and thought patterns such that it actually gives you bad luck. Even if you only your perception of your luck has changed, it has still had an effect. (This reminds me of how gods work on Discworld - they are created by belief, rather than initially existing and then being believed in).
Let me expand on the last point: we are talking about the human mind. If something changes our perception, then, sure, that is only a subjective change. However that subjective change is implemented by a physical system, so it has an objective effect. Even if it didn’t, human perceptions influence a human’s objective actions.
In human minds, response is not directly proportional to stimulus. Ask any psychologist: “What makes a person violent?” and they will point you to tons of research in a field that is not yet fully understood… and, in many ways cannot be fully understood, by virtue of its metacongnitive nature. Small things can trigger big reactions in people. The smallest thing can make someone violent… and some people can be placid in the face of ultraviolence. In theory, this argument has merit.
Lets think of it another way: goddamn Jack Thompson makes me wanna hit something :)

Tell us your EditLive! story and boost your WCM success
Ephox Weblog - May 14, 2008 12:03 AM
Has EditLive! improved your web content management experience? We are convinced that your word is stronger than any advertising budget, so we ask you to share your EditLive! success story. In return for your time, we will offer the top two entries EditLive! consulting services tailored specifically for your requirements that will allow you to maximize your WCM performance.
By sending us your entry, all or parts of your testimonial could be used on Ephox’s web site or in our marketing brochures. Only your name and company will be published (no email address or phone number). The two winners will be selected by a panel of Ephox judges on or around June 9, 2008. The entries will be judged on the content of the testimonial as outlined in the guidelines below.
To submit an entry, include the following information in the body of your email to Emily McAuliffe at Emily.mcauliffe@ephox.com by June 6, 2008
Name:
Title:
Company:
Phone:
Using the questions below as a guideline for your comments, please tell us more about your experience with EditLive!:
- How has web content management user adoption improved since implementing EditLive?
- How has your end users’ web content creation experience improved since implementing EditLive?
- How has your web content quality improved since implementing EditLive?
- How has your IT department’s workload improved since implementing EditLive?
- Do you have quantitative results of your success? For example, tell us how much money you have saved, the amount your pages have increased, or how many additional users you have gained since implementing EditLive.
SUBMISSION DEADLINE: June 6, 2008
Memory Settings for Eclipse on OSX
Robert Dawson - May 13, 2008 11:37 PM
For the regular readers of my blog, you may be wondering why I am stepping over to the dark side, and using Eclipse. Not to fear – it is just for an Eclipse plug-in. Using the right tool for the right job is important to always do.
When recently using the SAP Memory Analyzer tool to look at a large (1GByte) hpprof output file, I was running out of Heap space, so was lookin for where to set the -Xmx and -Xms settings on Eclipes. It was somewhat harder to find than desired, and the internet didn’t tell my as quickly as I wanted, so here’s the answer (while the video at http://www.brooksandrus.com/bog_assets/screencasts/eclipsejvmheap/ was cool, a simple text blog entry would have made me happy).
The eclipse.ini file in Eclipse.app/Contents/MacOS is the file that needs to be edited. (not the one that for me was close in location /Applications/eclipse/configuration/ eclipse.ini was bad, /Applications/eclipse/Eclipse.app/Contents/MacOS/ eclipse.ini was good).
After finding the right eclipse.ini, setting the memory is straightfoward. Simpley update the -Xmx and -Xms settings (see: The Sun Tuning java guide for what these do if you don’t know).
Share ThisInternationalized Styles Menu
Ephox LiveWorks! - May 13, 2008 05:00 PM
If you integrated EditLive! prior to the 6.0 release, the style toolbarComboBox definition in your configuration file probably looks like this:
<toolbarComboBox name="Style"> <comboBoxItem name="P" text="Normal"/> <comboBoxItem name="H1" text="Heading 1"/> <comboBoxItem name="H2" text="Heading 2"/> <comboBoxItem name="H3" text="Heading 3"/> <comboBoxItem name="H4" text="Heading 4"/> <comboBoxItem name="H5" text="Heading 5"/> <comboBoxItem name="H6" text="Heading 6"/> <comboBoxItem name="PRE" text="Formatted"/> <comboBoxItem name="ADDRESS" text="Address"/> </toolbarComboBox>
The 6.0 release maintained backwards compatibility with this format, but if you’re still using it then you are missing out on the translations we added. The new format removes the text attribute:
<toolbarComboBox name="Style"> <comboBoxItem name="P"/> <comboBoxItem name="H1"/> <comboBoxItem name="H2"/> <comboBoxItem name="H3"/> <comboBoxItem name="H4"/> <comboBoxItem name="H5"/> <comboBoxItem name="H6"/> </toolbarComboBox>
Once it is removed, you will see that your english-only style names suddenly become translated in all supported languages.
We have included translations for all major block tags:
- P
- DIV (in 6.4)
- H1-6
- PRE
- ADDRESS
- TD
- TH
- TR
- TABLE
- LI
- UL
- OL
We’ve even included some of the less common ones like DT and DL. These translations will apply to styles loaded via CSS as well as from the configuration file.
“Fun” with Prototype and IE7 and Tables
Suneth Mendis - May 13, 2008 07:07 AM
Its a known fact that DOM manipulation on TABLE in IE is a mine field. I thought I could get lucky with prototype when it comes to creating DOM elements on the fly. But apparently not! In particular html TABLES. So here are some of the "gotcha" moments I've had!
-
Every table needs a body
var table = Builder.node("table", [Builder.node("tr", [Builder.node("td")])]);This piece of code will render a nice table on Firefox and Safari. But unfortunately not on IE. You need to create a TBODY explicitly for IE to make sense out of this. So you need something like
var table = Builder.node("table", [Builder.node("tbody", [Builder.node("tr", [Builder.node("td")])])]);for this to work. -
Table with inline style attribute will break your javascript
var table = Builder.node("table", [Builder.node("tbody", [Builder.node("tr", [Builder.node("td" , {style:"background:blue;"})])])]);Again this piece of code will create a table with the single cell and the background is set to blue. Works like a charm in Firefox and Safari. But not IE7! This also applies to styles applied to table rows, columns and table headers. Only way around is to define a className attribute and assign a class name or set styles directly onto the DOM element like
object.style.background="blue";
Another very very annoying thing with prototype is that it does not have any error reporting mechanism. So the issues like these are harder to track down.
The celebrations didn’t quite go as planned
Andrew Herron - May 12, 2008 01:43 PM
After a busy day of merging and releasing, the release build of 6.4 popped out of our build machine around mid afternoon. I went to break out the beer only to discover that the fridge had died at some point during the day and the beer was all warm ![]()

EditLive! 6.4 Is Out
Adrian Sutton - May 12, 2008 10:27 AM
I’ve said this internally to Ephox already but I want to give a big congratulations to the team on getting EditLive! 6.4 out the door. We have a lot of customers who have been waiting quite a long time for the features in that release and only a year or two ago they were thought to be effectively impossible given the Swing Text APIs that EditLive! is built on. It’s a testament to the team that this can be done at all, let alone with such high quality.
Of course, now it’s onward and upward so it’s back to the grindstone for all of you!
EditLive! 6.4.0.697
Ephox Releases - May 12, 2008 09:45 AM
The latest release of EditLive! is always available at
http://www.ephox.com/products/editlive/download.html.
Please Note
- The registerCustomInlineView, registerCustomBlockView, registerCustomEmptyView and registerCustomCollapsedView have been deprecated and replaced with versions that accept a Class instance directly to fix issues with multiple class loaders. Please update your code to use the new versions of these methods.
New Features
- EM sizing for CSS width and height values
- Relative font sizes are now completely supported
- CSS value “inherit” is now supported for all CSS properties
- Background colors and images are now painted behind transparent images.
- Keyboard shortcuts are enabled for all items on the toolbar, even if they are not present in the menu or if there is no menu.
- Dashed borders are applied to DIVs without a border when the ‘Show Gridlines’ action is applied.
- Support for floating Sections (i.e. floating DIVs).
- Section Properties dialog to change attributes of DIV tags. Can be added via the “PropSection” configuration file item
- CreateSection and RemoveSection menu items to create and remove DIV tags based on the selected text
- Pressing enter in a DIV or Table Cell with no paragraphs now wraps a paragraph around the contents
- Paragraphs in DIV tags or Table Cells that are either by themselves or next to a non-paragraph block element are now collapsed to implied paragraphs
- Pressing up or down next to nested DIV tags or Tables will now create temporary paragraphs between the start or end of the nested elements
- Pressing up or down with one block element next to another will now create a temporary paragraph between the two elements
- DIV tags can now be resized using the same as-you-drag preview mode we have on images and tables. Note that this feature is still in the early testing stages - there are no resize handles, and resizing may cause instability.
- On OS X EditLive! now uses the proper Apple dialog for open, save and insert image
- “clear” style is now rendered (pushes a block element below floated images or DIV tags)
- Gridlines around Sections can be disabled by setting the wysiwygEdior attribute “showSectionGridlines” to “false”.
Bug Fixes
- List wrapping around floating images
- CSS values specified in shorthand are no longer expanded in the output HTML
- Background image position is no longer forced to “top” when using background repeat
- Font Sizes specified in pt are now scaled properly across all JREs
- When a floating image was defined at the break in a paragraph line, some of the text of the paragraph occasionally was not displayed
- When two floating images were next to one another, the text would not float around the the end of the second image if it ended before the first
- If a paragraph contained right and left aligned images, then occasionally the right aligned images would not render
- border-style shorthand is now parsed correctly
- CENTER, DL, DD, DIV, BLOCKQUOTE, PRE and FORM tags wrapping around floating images
- border-width shorthand is now parsed correctly
- border-collapse style was not inherited
- Editor crash when using System CSS colors such as “windowtext”. These colors are still not rendered, but will no longer cause crashes.
- The methods in ELJBean to register custom views did not work correctly when multiple class loaders were in use, such as when using the plugin architecture. These methods have been deprecated and replaced with a version that accepts a Class instance directly.
- Multiple CSS selectors were not parsed correctly if there was no space following the comma, eg: h1,h2,h3 {…}
- Show Paragraph Markers was drawing dashed borders on block elements that already had borders
- Loading resources from plugin jars incorrectly searched the parent class loaders first, including sending a HTTP request back to the originating server. The plugin’s jar is now searched for matching resources first.
- When pasting an image into the editor, the generated img tag is now passed to the registered PasteFilter before being inserted.
- DIV tags are now referred to as Sections
- Content posted from editor applet contains style information embedded in the HTML body.
- Using element selection to delete an element applied attributes from the deleted element to the following element
- Optimisations to rendering of repeated background images
- border-color shorthand is now parsed correctly
- getSelectedText() returning incorrect results after selecting backwards across multiple paragraphs
- getSelectedText() returning incorrect results after selecting multiple cells in a table
- Attempting to create a list inside an empty DIV did not work (NullPointerException printed to the console)
- Pressing the up arrow in the first table row was moving to the previous cell rather than out of the table
- Pressing the down arrow in the last table row was moving to the next cell rather than out of the table
- Calling InsertHTMLAtCursor with text selected in the editor incorrectly merged the selected elements before inserting
- getSelectedText() returning incorrect results when using element selection at the end of a div
- Equation Editor now downloads in the background and does not block the editor startup
- setUseMathML() at load time is no longer required to use the Equation Editor
- HTTP debug level no longer logs the contents of files larger than 100kb
- Plugin download dialog now handles the user clicking “download in background” without printing exceptions to the console
- EditLive! local cache location has been moved out of the user home directory on Vista - it now resides in the homedir\AppData\LocalLow folder
- Invalid bookmark characters are no longer allowed by Insert Bookmark or the Insert Hyperlink “Places in Document” tab
- Calling InsertHTMLAtCursor when using element selection inserted the HTML into the element following the selection
- Open and Save dialogs now share the last directory preference with the image dialog
- Pressing tab in the second last cell of the last table in the document incorrectly inserted a new row before moving the cursor to the last cell
- Workarounds for JRE memory leaks on Java 6
- Dialogs now open on the same monitor as EditLive! instead of always appearing on the primary monitor
- Custom Tag definitions in stylesheets imported from within linked stylesheets were not parsed
- Span tags with duplicate ID attributes but different classes were incorrectly rendered with the class of the first span tag
- Errors in Farsi translation
EditLive! 6.3.8.111
Ephox Releases - May 12, 2008 05:14 AM
The latest release of EditLive! is always available at
http://www.ephox.com/products/editlive/download.html.
Bug Fixes
- Find Dialog caused exceptions and incorrect focus behaviour when used in code view
- Potential browser freeze when requesting focus to the applet
- setBody on the applet at runtime did not preserve document styles
- Import Word Document corrupted file:// hyperlinks in documents by copying them to the temp folder before importing. To preserve links, the temp file is now created within the document’s folder if the user has access to do so
- Escape did not close the Accessibility Report dialog
- Warnings incorrectly reported to the Java Console when loading the Accessibility dialog with no accessibilityChecks element in the configuration file
- Javascript error occurs when submitting a HTML form containing EditLive!
- Incorrectly nested lists are no longer fixed in a way that corrupts the numbering of numbered lists
- Express Edit failed to upgrade to full editor when using a ../ relative URL to load expressEdit.js
- Inserting content after a nested DIV incorrectly inserted into the child DIV instead of the parent.
- Errors in Dutch translation
- Errors in Thai translation
- Errors in Arabic translation
- Using inline resize to change the width of an image did not set the height
- Occasional exceptions when saving in code view that caused the submit process to fail
- Express Edit did not disable custom buttons in code view, leading to JavaScript errors when attempting to use them
- Typing long names in the SELECT Properties Dialog caused the layout of the dialog to become squashed
- Whitespace inside SELECT tags triggered a parsing error with the source editor error dialog turned on
- Workaround for JRE 1.5 and 1.6 hanging when typing on a dual core Windows XP machine with “Chinese (Traditional) - Quick” keyboard input
- Workaround for a bug in Java 6 update 10 beta that caused typing with the Chinese IME to not move the caret
- Swedish dictionary was not loaded when using dictionary auto-detection
Finally Set Up At IBM
Adrian Sutton - May 09, 2008 08:50 AM
Since Ephox is an IBM business partner and we pulled the right strings and made friends with the right people, I get access to IBM’s offices (apparently world wide but Bedfont Lakes is closest and best set up). They’ve got quite a nice business partner suite on the first floor looking up at all the real IBM employee’s offices but before today it’s always been a major pain.
Firstly, without a car it takes about 2 hours to get here which is never fun, but today I have a car so that was ok.
Then you need to have your IBM badge to get in the front door which on previous occasions I’ve either not had yet, forgotten or in one case walked in the front door and lost, gone back out cancelled it and got a temporary replacement, walked back in a found my last card on the floor. Today I remembered my badge and at least so far it’s managed to not fall out of it’s little holder so it’s still with me.
Once you’re in the business partner suite you find that it’s very difficult to plug a MacBook power adapter into the power points here if you only have the short plug - you need to have the actual cord which until recently I only had an Australian version of.
Then you find that you need a login for the wireless internet which is easy enough to sort out but until today, somewhat inexplicably, HTTP POST didn’t work (GET worked perfectly, but not any HTTP operation that sent a request body), so I was left using my mobile internet. It seems that while I was back in Australia they’ve managed to fix that so I’m up and running again.
Even better, there’s now a beasty Dell server sitting in my utilities cupboard at home running the IWWCM VMs I need to work with and demo and I’ve actually got the firewall configured right so I can SSH in and set up tunnelling to access it from here.
Who knows, I might actually be settling in over here!
What serious lack of sleep can do to a developer…
Suneth Mendis - May 08, 2008 11:37 PM
EditLive!'s Release with Oracle's Universal Content Management
Ephox Weblog - May 07, 2008 11:59 PM
See the positive remarks on Brian 'Bex' Huff 's Blog regarding EditLive!'s release with Oracle's Universal Content Management.
Preventing Users From Pasting Images
Ephox LiveWorks! - May 06, 2008 05:00 PM
Preventing users form inserting images requires two parts:
- Remove the insert image related items from the configuration file so the insert image dialog is unavailable.
- Prevent users from pasting images into the editor.
The first part is quite simple, just delete the “ImageServer” menu item and toolbar buttons from your configuration file.
The second part however isn’t directly supported by EditLive! Fortunately, we’ve now made a plugin available that automatically strips any images out of pasted content. Like all the plugins on LiveWorks! we don’t offer direct support for the plugin, but the full source code is included and help is generally available on the mailing list. The instructions for using the plugin are on the plugin page - it’s just a simple line of JavaScript.
If you look at the source code for the plugin you’ll find it’s a very simple PasteFilter (see this previous article). The main method simply uses a regular expression to filter out the img tags:
public String filterIn(String source) {
String regex = "<img[^>]*";
if (FILTER_ONLY_LOCAL_IMAGES) {
regex += "src=[\"']file:[^>]*";
}
regex += "/?>";
Pattern pattern = Pattern.compile(regex,
Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(source);
return matcher.replaceAll("");
}
FILTER_ONLY_LOCAL_IMAGES is a final variable declared at the top of the file. It’s set to false in the standard version so that all images are removed, but if you change it to true, only local images will be removed and remote images will be pasted normally. This is a great way to prevent users from pasting in local images but still allow them to use images from the repository or other sites. It also shows how simple it is to adapt the regular expression to be more selective about which images to filter out. With a little knowledge of regular expression and this plugin as a starting point you should be able to achieve whatever image filtering policy you need.
Scala
Doug South - May 04, 2008 01:49 AM
I've been spending a bit of my spare time learning Scala. I like it because:- It compiles to Java bytecode
- It can use any of the Java API's - the years of investment I have in them translates seamlessly to Scala development and I'm productive almost immediately
- Functions are first class citizens of the language allowing for higher order functions leading to a more expressive language
The main drawback at the moment is lack of IDE support. I'm using the scala eclipse plugin, but it is primitive compared to the Java support I'm used to in eclipse.
I still have some hope for America
Andrew Herron - April 29, 2008 10:24 AM
Sometimes I wonder if America’s gone crazy. Luckily, there are still some sane people around and listening to those that are speaking out on podcasts says to me that eventually enough people will pay attention and they will start waking up the general public. The influence of Ron Paul over the internet generation certainly proved to me that it’s starting to happen. In any case, here are a couple of examples.
I nearly blogged about a lengthy rant from Dave Slusher when I heard it, but I slacked off and eventually forgot about it until today. At the time, I wondered why I wasn’t hearing more people speaking their mind about America’s political situation (maybe you hear it more often if you’re actually in America).
This morning I started listening No Agenda’s latest episode, and the way they talk about the stupid things going on in the world in an honest way reminded me of Dave’s rant - showing a clear passion for their country and utter disbelief at what’s happening to it. I find that No Agenda gives me the real interesting news coming out of America, with opinions that actually have half a brain behind them.
Topics I enjoyed in this week’s episode:
- privatised jails leading to luxury jails where celebs pay for comfortable cells
- why are we paying US$120 a barrel for oil while shell sits back and makes crazy amounts of money
- canola is a manufactured oil, anyone talking about canola plants is talking out of their arse
- A juicy rumor that the music business is considering a new model, advertising in music videos
Now I’ve talked about both shows before, but nobody’s ever given me feedback about listening to ‘em and quite frankly, I’m not surprised. Predominately talk shows aren’t everyone’s cup of tea.
The thing about No Agenda in particular is that you need to get past the episode length. Don’t be scared by the fact that each episode is between 60 and 100 minutes; nobody has that much time to sit around listening to a podcast. No Agenda, to me, is like a great background radio show. I put it on and continue with what I’m doing. Anything from walking home to writing a blog post (yes, I’m listening to it while writing this). Occasionally something they say will catch my attention and I refocus for a bit, or rewind if I only pick up on it in the middle of a conversation. The point is you don’t need to listen to the whole thing. There are no ads or music so it’s literally just eavesdropping on a couple of tech geeks chatting (except they actually want you to listen).
This all sounds like a waste of time; but the benefits you gain from catching the pieces that really interest you are very much worth it. Particularly if you’re like me, not an American and often wondering WTF is up with those silly people. Here’s two Americans wondering the same thing, and because they are American they’re often more informed on the topics. This leads to some very interesting opinions and discussion; not limited to Americans either but often news coming out of the UK as well.
Apparently No Agenda is generating quite a large audience, and many of them don’t know why they listen (this was mentioned a week or two ago). I think I’ve figured out why - they take the news of the week and apply proper, down to earth reasoning to it rather than the sugar coated crap that comes out of the mainstream news channels.
It’s addictive because it’s so refreshing for anyone paying attention and actually giving a crap about the state of the world.

The quality of the code you write today...
Doug South - April 29, 2008 02:17 AM
... will affect your ability to write quality code for the new features you need tomorrow.If you haven't been writing quality code, how can you expect to write new code with any degree of quality? I hypothesize that the affect of this isn't linear, but exponential.
Cars and IT enrollments
Brett Henderson - April 22, 2008 12:32 PM
At the final, for 2007, QUT Dean's Industry Working Breakfast last week I found myself discussing the disturbing trend in the decline in IT enrolments with Bobby Barnett, a secondary school IT teacher at John Paul College.
We talked about the fact that kids today1 are so comfortable with technology. They use it voraciously and for so many purposes, so why is it that we haven't seen an increase in IT enrolments. It seems that while they are more than happy to use technology, they aren't fired up with the idea of creating it.
As Bobby put it,
They want to drive the car, but aren't interested in building it.
I find it odd that there is a perception that, while using the technology is fun, designing and building it isn't it.
I love motorcycles, so to me, the passion with which they are designed is evident in the form and function of the bikes. You can't tell me that the designers of the latest Ducati 1098 or the MV Agusta F4 don't have the same passion for riding as they do for design.
Similarly, the developers of the iPhone or Facebook I'm sure were equally passionate about the design and development as they are in the utilisation of the final product.
The real challenge appears to me to be, how do we show potential IT students the challenges and opportunities in the development of technology? How do we fire up their desire to develop new technology and applications to the same level as their passion in consuming them?
Ning raises another $60M
Andrew Roberts - April 21, 2008 04:30 AM
Marc Andreesen and Gina Bianchini's social networking service, Ning, has raised another $60M at a rather astonishing pre-money valuation of $500M.
Ning has about 230,000 social networks which values each social network at over $2,000 each. I personally have 2 networks which I have setup in the past that have a grand sum of 15 users. I really can't see them being worth $20 let alone $2,000. But no doubt the 80/20 rule applies and there are a small minority of highly successful social networks using Ning. And, of course, investors are buying into the vision of 4M social networks and billions of page views by 2010. By that stage Ning will no doubt be hoping to worth more than Facebook.
Fast Company has a good profile on Ning which talks about how they have built the "viral loop" into their product. Any product, including enterprise software, could benefit from thinking through how to apply a viral loop to their feature set.
The funny thing is that Ning's unassuming offices are opposite Facebook's on Emerson Street here in downtown Palo Alto. I guess Mark (Zuckerberg) and Marc (Andreesen) can stare out the window at each other wondering who has the better business model?
The Coffee Interview
Brett Henderson - April 18, 2008 12:02 AM
As part of our interview process for new engineers at Ephox the final stage is the Coffee Interview.
The Coffee Interview involves everyone in the the team, except the manager, going out with the potential hire and having a coffee. While discussions can be technical, it's not a technical interview but rather a chance for everyone involved to get to know each other. At the end of the coffee I get consensus from the team as to whether we should hire the person or not.
What we are trying to do in this interview is determine if the team can work with the person, and the person can work with the team. It's a case of ensuring the hire is a good "fit".
By involving everyone the person will work with, we are essentially building an emotional contract between the team and the new hire. These people are the ones who can exert the most influence over the success of the new hire and as such, the Coffee Interview provides a way to invest them in the success of the person.
Featured at Web 2.0 Conference
Andrew Roberts - February 25, 2008 10:27 PM
An observant eye caught my face in the crowd photo on the front page of the Web 2.0 conference. I am the one with the backpack in the bottom middle of the crowd.
Who knows, may be next year O'Reilly will invite me to be a speaker and I can have a real head shot? :)
Formula 1 Software
Damien Fitzpatrick - December 20, 2007 02:12 AM
Don't you just love analogies? Well I hope you do because if you're about to be on the receiving end of one. I was watching an episode of the British car show Top Gear yesterday with a segment featuring Richard Hammond attempting to drive a Formula 1 car. Now if you're like me, or Richard Hammond as it turns out, you'd be sitting there thinking, "driving a car, even if it is a Formula 1 car, how hard can it be?" It turns out that, the answer is "very!"
This particular situation struck me as having parallels with our development of EditLive! and web based rich text editors in general. At the highest level EditLive! is basically a word processor for the web. It's got most of the features that you might find in Microsoft Word or Open Office with some tweaks to make them more applicable to web documents e.g. generating standards compliant HTML for starters.
At the outset this doesn't sound difficult, after all we've had many of these features in Microsoft Word, Open Office or even the browser (when it comes to rendering) for years. Yet that apparent ease doesn't parallel with Ephox's experience in development. We have been, and still are, developing EditLive! in its present form for 6 years now, since I started at Ephox in fact. However, that's nothing compared with MS Office that's been around for over 20 years! The features that we all take for granted in Microsoft Office are (mostly) well designed and the result of the significant levels of investment that you'd expect from Microsoft. It's when you take a much closer look at the web standards and user behaviour that you start to realize how complex the task of creating a word processor is (cue the Formula 1 analogy).
As the product manager for EditLive! I've experienced this effect for several years now when defining the specifications for EditLive!. Whether it's a specification for track changes, how specific keys work in various situations (e.g. "Enter" or "Tab") or even down to the level of how text renders on the screen each area has a surprising amount of detail to consider and nuances to implement. For instance, in HTML try checking out the difference between PTs, PXs and EMs for fonts and did you know that PXs can be considered a relative measurement?
At Ephox we've put a lot of investment into these little things in the past because we believe the little things are important for authors. The fact that the tab key indents a list in some cases and in others navigates a table or adds a table row - important. The use of the Enter key to insert a paragraph in some cases, a <br> in others and in others still a list item - important. The ability to resize every aspect of a table inline instead of via a dialog - important. I could go on as there are many, many more of these small items that are important to all the web content creators out there. However, the most important thing I think you could expect from a rich text editor is that it, and the team behind it, realize the importance of all these little items.
Creating a word processor is much more difficult than it seems just like driving a Formula 1 car and the most important thing in both cases is attention to detail. In the coming months you'll see that attention to detail coming through yet again in our latest release of EditLive!. We've been paying attention to rendering, to font sizes, to keyboard behaviour and many other areas. I'm confident it will be another fantastic release and if you'd like a sneak peek, just head over to LiveWorks!'s Early Access Release and check the latest in EditLive! 6.4 out for yourself. Improvements to date have focused on CSS rendering for floats and getting sizing correct for different units and there's more to come.
EditLive! 6.Performance
Damien Fitzpatrick - August 16, 2007 11:49 AM
It’s been a while since I’ve written an article about EditLive! so I thought that I’d better put one out there about what the team has been working on recently and what we are currently working on.
Since the introduction of the major new functionality of the 6.0 release we’ve been working on performance. “Performance, but EditLive! is a Java applet!?” I hear you say. That’s right, we’ve been finding some great new ways to get Java to stand up and perform. And performing it is. I now routinely experience EditLive! load times of less than 3 seconds! That’s less than most JavaScript based editors out there (BTW that’s because of the number of HTTP requests they perform).
In the EditLive! 6.Performance releases (that’s 6.1, 6.2 and 6.Next) we’ve incorporated a whole range of caching routines that people can take advantage of, particularly with 6.1 and 6.2. In order to take advantage of these things you will have to make some code changes to your integrations, but they are minor and if you have any questions check out the information on LiveWorks! or get in touch with our ever-helpful support team.
As always, we’re running all these improvements on our internal systems as part of our commitment to continual testing. The performance improvements are outstanding, of course I’m somewhat biased as the EditLive! Product Manager, so please, check out the improvements for yourself.
We’ve also incorporated the new Inline Editing functionality of EditLive! with our EditLive! for ILWCM integration and we’re getting rave reviews from those who’ve rolled it out. In particular we’ve had a major client shift from using IBM’s JavaScript-based editor to EditLive! and they’ve cut their page load times from over 30 seconds to 3.
The engineering team has definitely pulled some rabbits out of their collective hats and they’re not done yet. EditLive! 6.Next will contain more improvements. At this stage I’m not going to spoil the surprise, but I think there will be many out there who appreciate it.
So check out the latest release of EditLive! and experience just how fast Java can be. Also stay tuned for what’s coming up in the next few months, there are some exciting improvements just around the corner.
The power of messaging: Letters from Iwo Jima
Antony Awaida - May 18, 2007 06:39 PM
In a recent article, I talked about the shifting roles of sales and marketing in Enterprise 2.0: marketing is increasingly taking on tasks historically performed by sales. As a result, I see many marketers focused on tactical marketing and they seem to have forgotten one of the cornerstones of effective marketing: messaging. A typical comment I hear: “we will do it later, we need to deliver leads for the sales team now”.
The trouble is that when messaging is not delivered by marketing, it will still be delivered - by the sales team. To use a military analogy: Messaging is the air cover provided by the air force before the marines’ invasion of a beachhead. If the air cover is not provided to soften the beachhead, the marines will have to do it – using hand grenades. Not a pretty sight….
Speaking of messaging and military strategy, I recently watched the movie “Flags of our fathers” which was shot back to back with Oscar winner “letters from Iwo Jima”. “Flags” depicts the trials of the Iwo Jima flag bearers who came back to the US to help the FDR administration with its 7th war bonds fund raising. Both movies are excellent and I highly recommend them – but I am transgressing…
I was particularly inspired by the war bond campaign. It was (and still is) the largest and most successful borrowing from the American public in history at $26B. To put that amount in perspective the total US budget in 1946 was $56B. Some pundits argue that this is one of most successful campaigns ever.
A key factor in the success of the campaign was the powerful messaging – embodied in the famous photo of the Iwo Jima flag-raising. While messaging may not have been a marketing concept in 1946, its central importance was crucial in the execution of the campaign. As I dissected the ingredients that made the war bond campaign a great success, I put together my “Guy Kawasaki‘sh” top rules for campaign messaging:
Rule #1: Start with what the people want. In Feb 1946, Roosevelt picked up a copy of The New York Times. "There it is again!" he thought as he eyed the photo of the flag raising. He was amazed how many times the newspapers were reprinting the AP newsphoto. Then the idea hit him. He called his secretary of the treasury: "Hank, I've got it. I've got the symbol, the theme for the Seventh Bond Tour. It's the flag raising picture. People love it. FDR understood deeply why the photo was so popular with Americans. It represented victory and the end of war. His genius is that he was able to tap into this powerful yearning and connect it with the war fund raising effort.
A company I recently worked with told me that their campaign message was:” we offer the best open source….”. This may be a good mission statement but it is not an effective campaign message. As a general rule, avoid the word “we” in campaign messaging.
Rule #2: Get the executives involved – Roosevelt had a lot on his mind in 1946 with a war being waged in the pacific and the remnants of a war in Europe. Yet he obviously had been thinking about the message of the campaign when he said: ”I’ve got it, I’ve got the symbol”.
If Roosevelt can spare time to get involved in messaging, surely the company’s executives can. Get them involved in the process. It is that important!
Rule #3: Make it a mantra. During the first two months of the seventh bond tour, everyone in America would see the flag bearer’s picture anywhere they went. You couldn't avoid it. It hung in:
1,000,000 Retail Store windows
16,000 Movie Theaters
15,000 Banks
200,000 Factories
30,000 Railroad Stations
5,000 Large Billboards
Furthermore, The message was also aired on thousands of radio commercials. While the medium and location may have changed, the message was the same. Consistency is key to successful messaging!
Too often companies keep changing their messages – often because they believe the messaging is not working, or because the company – not the customers - got tired of it. Messaging needs both volume and time to work.
Rule # 4. KISS or Keep it simple, stupid. (Incidentally, it was another democratic president – Bill Clinton – who used a famously related expression in his successful 1992 campaign: “It’s the economy stupid”). The text used in the war bonds posters was simple: “Now All Together”. No mention of the bonds interest rates. No mention of the amount needed to wage the war. None of that. It was not needed: The photo was the message and it was worth a thousand words!
Here is an example of a simple yet very effective message used by Dell: “Purely you!”. Very short but powerfully conveys what Dell is all about.
Rule #5: Make it emotional. Rosenthal, the photographer who took the picture was asked to explain why his picture touched a national nerve. “What we do in war, the cruelty is almost incomprehensible” he says. “But somehow we need to make sense of it. The right picture can win or lose a war. I took a lot of other pictures that day, but none of them made a difference. Looking at it (the picture), you could believe the sacrifice was not a waste”.
Rule #6. Don’t let details get in the way of a good story. Rosenthal’s photo actually captured the second flag-raising event of the day. A US flag was first raised earlier in the morning. However this flag was too small to be seen easily from the nearby landing beaches. Therefore a larger flag was raised the second time and Rosenthal captured that moment in the photo. Rosenthal was accused of having staged the picture or covering up the first flag raising. Of course, none of those details made a difference in the fund raising effort. The photo captured a great moment in history and the American people did not want to hear any of the controversy.
Translated: don’t let the fine print or the lawyers get in the way of a great marketing message.
Those rules worked back then and resulted in arguably one of the most successful campaigns of all times. They work equally well today. For those readers who are thinking – come on, software marketers have written the book on marketing and have nothing to learn from politicians. I say – hogwash – politicians have written all the books when it comes to marketing. They have been selling the same – repackaged – goods for years. And that, not even the software industry marketers could pull off!
How to make your website "salesperson of the year"
Antony Awaida - February 07, 2007 10:30 PM
In the first part of this article, I discussed how my son’s 5th grade class learned the importance of getting into the customer’s head and how this lesson could have saved a tycoon millions of dollars. In this article, I discuss how this task, traditionally performed by sales, is increasingly the responsibility of marketing and what innovative companies are doing about it.
Back in the 90s, it was the salesperson’s job to get into the customers head. Salespeople – at least the better ones – spent the majority of their time asking questions and understanding their customers’ needs. Only after they figured out those, they would talk about products, features and functions. Back then, most salespeople used the old rule of thumb: “You have two ears and one month” – in other words you should be listening twice as often as you speak to be successful in sales (As I learned later, this rule should be applied not just in sales, but in any conversation, particularly at home, but this is the subject of another article!)
But in enterprise 2.0, software is often sold on the web. Even when software is sold person to person, usually by telesales, conversations are brief and tend to happen at the tail end of the customer’s information gathering process – often too late to influence the customer’s decision. It is not uncommon that customers make an emotional decision early on in the process and then spend a lot of time justifying their early decision. The initial encounter of a customer with a company – usually through the website - is therefore critically important.
I was recently talking to a friend of mine – a VP of marketing at an enterprise software company. He was complaining that the company’s website is essentially a billboard. He later went on to state that the marketing department is the caboose – slowing the company down. Of course, in my view, there is a very strong and direct correlation between the two! A website should not be billboard or a marketing brochure. A website should be a salesperson - Not just a salesperson, it should be the “salesperson of the year”. A website should not only meet and greet most of your prospects, but it should engage them in a consultative sales cycle. Here are some techniques and technologies that innovative companies are using to adjust to this new reality:
1- A key piece of information to start a consultative website conversation is: what led the customer to the company’s website? If it was through a search engine, what keywords did the customer use? If it was affiliate marketing, what was the referring website? A customer will spend, on the average, 8 seconds on a website before returning to his previous link. Unless the landing page covers relevant topics that align strongly with the customer’s search for information, the opportunity to sell to this customer is likely to be missed.
2- There has been much talk about the use of personas in website design (personas are representations of typical users of a website). As experienced salespeople know, the best prospects are those who have a clear and well defined problem and the job of the salesperson is to help them buy. Similarly, marketing folks should interview prospects who have a clear and well defined problem to develop a primary persona for the website. Further, the buying process of those personas should be defined and documented. The website’s conversion processes are then designed to match the persona’s buying process. A common mistake I often see is trying to close the sale while the customer is in an information gathering process on the website.
3- A customer will often spend quite a bit of time on a website before he makes the dreaded call to the sales department (dreaded by the customer that is – a salesperson I worked with would often ask his customer: “what is so bad in your business that you are willing to talk to a salesman”). Rather than waste precious time asking customers situational questions, the salesperson should be armed with this information - gathered while the customer was on the website: what keywords did the customer use to find the website? What pages did he visit? What papers did he download? And what emails did he click on? New technologies such as Eloqua and Salesgenius make this possible today.
4- Metrics, Metrics, Metrics. It is the old adage: “You can not manage what you can not measure”. This is perhaps the most important but least understood part. As a website incorporates a set of processes that engage and convert visitors, it is critical to continuously measure and improve those. Too often marketers assume that a new “cool” improvement to a website will result in an improvement in conversions. More often than not, they are surprised with the outcome. A change to a campaign may result in tactical improvements (e.g. more visitors) but a deterioration in medium and long term goals (e.g. trials and sales). It is important to instrument, measure, benchmark all processes of the marketing/sales funnel.
In Enterprise 2.0 the sales team may not have the opportunity to get into the customer’s head the old fashioned way. But through the use of new techniques and technologies, innovative companies are able to engage the customer in a consultative sales process that starts with the website. By doing so they are able to boost their sales and lower their cost of sales. Yet another reason to turn your website into “salesperson of the year”.

