<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Web Directions &#187; Blog</title> <atom:link href="http://www.webdirections.org/category/blog/feed/" rel="self" type="application/rss+xml" /><link>http://www.webdirections.org</link> <description>Just another WordPress weblog</description> <lastBuildDate>Tue, 15 May 2012 01:27:35 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.2.1</generator> <item><title>webStorage: Persistent client side data storage</title><link>http://www.webdirections.org/blog/webstorage-persistent-client-side-data-storage/</link> <comments>http://www.webdirections.org/blog/webstorage-persistent-client-side-data-storage/#comments</comments> <pubDate>Thu, 29 Mar 2012 23:06:08 +0000</pubDate> <dc:creator>John</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[developer]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=4045</guid> <description><![CDATA[Until recently, the only ways to maintain a user’s data between visits to your site have been to store it on the server, or use cookies in the browser. Both present significant security challenges and quite a good deal of effort for us as developers. Cookies are designed for communication between the browser and a [...]]]></description> <content:encoded><![CDATA[<p>Until recently, the only ways to maintain a user’s data between visits to your site have been to store it on the server, or use cookies in the browser. Both present significant security challenges and quite a good deal of effort for us as developers.</p><p>Cookies are designed for communication between the browser and a server that persists between sessions. They’re typically used for identifying a user on return visits and storing details about that user. Cookies are sent between the browser and server in plain text, unencrypted, each time the user opens a page. So, unless an application encrypts cookie contents, these can be quite trivially be read particularly on public wifi networks, when used over standard HTTP (though less easily over encrypted HTTPS).</p><p>Storing all client data on the server creates usability issues as well, as users need to log in each time they use that site. And of course the heavy lifting of ensuring data is secure during transmission, and on the server is left to you as the developer. And it’s rather tricky to build apps which work when the user is offline if the user’s data is all stored on the server.</p><p>As web applications become increasingly sophisticated, developers need ways to keep data around in the browser (particularly if we want our applications to work when the user is offline).</p><p>Two closely related but slightly different W3C technologies exist to help keep track of information solely in the browser. They enable far more structured data than cookies, are much easier for us to use as developers, and the information stored can only be transmitted to a server explicitly by the application.</p><p><code>sessionStorage</code> stores data during a session and is removed once a session is finished. <code>localStorage</code> is almost identical, but the data stored persists indefinitely, until removed by the application. Let’s start with <code>sessionStorage</code>, keeping in mind that we use <code>localStorage</code> almost identically.</p><h4>sessionStorage</h4><h5>What is a session?</h5><p>The key feature of sessionStorage is that data only persists for a <em>session</em>. But just what is a session? HTML5 has the concept of a “<strong>top-level browsing context</strong>”. This is, in essence, a window or tab. A session lasts for that top-level browsing context while it is open, <strong>and</strong> while that top-level browsing context is pointed at the same domain (or strictly speaking, the same <strong>origin</strong>).</p><p>During the session, a user could visit other pages of the domain, or other sites entirely, then return to the original domain. Any data saved in <code>sessionStorage</code> during that session will remain available, but only to pages in the original domain, until the tab or window is closed.</p><p>If the user opens a link to your site in another tab or window, then there is no access to this <code>sessionStorage</code>, since this new tab or window is a new session.<br /> It’s worth noting that <code>sessionStorage</code> is also shared with pages inside subframes in the same domain as the top level document in the window.</p><p>So, if we</p><ul><li>visit <code>http://webdirections.org</code> in a tab and save data to <code>sessionStorage</code></li><li>then follow a link to <code>http://westciv.com</code> in this same tab</li><li>and then return to <code>http://webdirections.org</code> in the same tab</li><li>we return to the same session for <code>http://webdirections.org</code></li><li>the data in the original <code>sessionStorage</code> is still available</li></ul><p>If however we</p><ul><li>visit <code>http://webdirections.org</code> in a tab and save data to <code>sessionStorage</code></li><li>then follow a link to <code>http://webdirections.org</code> in a new tab</li><li>the data in the original <code>sessionStorage</code> is not available to this new tab (but is in the original tab)</li></ul><p>The one exception to this is when a browser crashes, and is restarted. Typically, browsers will in this case reopen all the windows that were open when the browser crashed. The specification allows in this situation for sessionStorage to persist for reopened windows from before the crash (WebKit, Mozilla and Opera browsers support this, IE8 does not, though IE9 and up do).</p><p>Which may sound like a great boon for the user, but, as an application developer, you may wish to consider whether you in fact want to persist session data after a crash. A user may consider that when their browser crashes using a service like web mail or online banking at an internet café or other shared computer that their login details have been purged, but if these were stored in <code>sessionStorage</code> then the next user to launch the browser will resume the session that were current when the user crashed. Ruh-roh.</p><h4>What good is sessionStorage?</h4><p>So, what good is sessionStorage? Well, one very useful application would be to maintain sensitive information during a transaction, signup, sign in and so on, which will be purged as soon as the user closes a window or tab. It can be used to create a multi-page form or application, where the information in each page can persist, and then be sent to the server all at once when the transaction is complete. It also moves some of the heavy lifting for protecting sensitive data away from application developers to the browser developer.</p><h4>Using <code>sessionStorage</code></h4><p><code>sessionStorage</code> is a property of the <code>window</code> object in the DOM. Because it is as yet not universally supported, we’ll want to check that this property exists before we use it:</p><pre class="code javascript">
if (window.sessionStorage) {
  //we use sessionStorage
}

else {
  //we do something else, perhaps use cookies, or another fallback
}</pre><p>Right, so now we have our sessionStorage object, how do we use it?</p><h5>Key-Value Pairs</h5><p><code>sessionStorage</code> stores “key-value pairs”. Each pair is a piece of information (the <strong>value</strong>), identified by a unique identifier (the <strong>key</strong>). Both the key and the value are strings (more on the implications of this in a moment).</p><p>We use the <code>setItem</code> method of the <code>sessionStorage</code> object to store data like so:</p><pre class="code javascript">//get the value of the input with id="name"
var name = document.querySelector('#name').value;

//store this value with the key "name"
window.sessionStorage.setItem('name', name);
</pre><p>Now we’ve stored the value of the <code>input</code> “name” in an item of the <code>sessionStorage</code> object called ‘name’. It will remain there until this window or tab is closed and it will then automatically be purged by the browser when the user closes the window or tab.</p><h5>reading from <code>sessionStorage</code></h5><p> There’s not much point in storing these details if we can’t get them back at some point. We do this by using the function <code>getItem</code> of the <code>sessionStorage</code> object, using a single parameter, the key we used to set the item.</p><p>So, to get the value of the name, we’d use:</p><pre class="code javascript" >var name = window.sessionStorage.getItem('name');</pre><h5>Non-existent items</h5><p>Now, what happens if for some reason there’s no item in <code>sessionStorage</code> with the key we are trying to access? In place of a string value, it returns <code>null</code>, <strong>not</strong> the empty string. So, it’s worthwhile testing whether the result returned is not <code>null</code> before using it</p><pre class="code javascript">
var email = window.sessionStorage.getItem('email');
if(email!==null){
  document.querySelector('#email').innerHTML = email;
}</pre><h4>Saving Data Between Sessions</h4><p>When information is less sensitive, it may make sense to store it between sessions. Particularly as web sites become more application-like, and can increasingly work offline, saving preferences or the state of a document can make for much better usability.</p><p>My <a href="http://westciv.com/tools/">HTML5 and CSS developer tools</a> do just this, using <code>localStorage</code>. That way, when someone returns to the tools, the last gradient or layout or transformation they built is waiting for them.</p><p>Best of all, using <code>localStorage</code>, for persistence between sessions, is almost identical to using <code>sessionStorage</code>.</p><h5>window.localStorage</h5><p> Instead of the <code>sessionStorage</code> object of the <code>window</code>, we use the <code>localStorage</code> object. All the methods of localStorage are the same as sessionStorage.</p><ul><li>we set items with <code>setItem</code></li><li>we get items with <code>getItem</code></li></ul><p>Because items on the <code>localStorage</code> will persist forever, we may want to delete them. We can do this with <code>localStorage.removeItem(key)</code>, using the key for the item we want to remove.</p><p>If we want to delete the entire <code>localStorage</code>, we can use <code>localStorage.clear()</code>. But, be warned, anything your app has saved to <code>localStorage</code> for this user is gone for good.</p><p><code>sessionStorage</code> in fact also has these methods, though we’re less likely to need them, as all of a sessionStorage is discarded by the browser when a session finishes.</p><h3>Gotchas, Tips and Tricks</h3><h4><code>sessionStorage</code> and <code>localStorage</code> store all data as strings</h4><p>As mentioned earlier, the values stored in local and session storage are strings, which has a number of implications for developers.</p><p>In particular, when we store boolean values, integers, floating point numbers, dates, objects and other non-string values, we need to convert to and from a string when writing to and reading from storage.</p><p>There’s also a more subtle side effect of storing values as strings. JavaScript strings are UTF-16 encoded, which means each character is 2 bytes (in UTF-8 characters are one byte). This effectively halves the available storage space.</p><h4>Private Browsing</h4><p> Many browsers now have private (or ‘incognito’) browsing modes, where no history or other details are stored between sessions. In this situation, what happens with sessionStorage and localStorage varies widely by browser.</p><ul><li>Safari returns <code>null</code> for any item set using <code>localStorage.setItem</code> either before or during the private browsing session. In essence, neither <code>sessionStorage</code> nor <code>localStorage</code> are available in private browsing mode.</li><li>Chrome and Opera return items set previous to private (“incognito”) browsing commencing, but once private browsing commences, treat <code>localStorage</code> like <code>sessionStorage</code> (only items set on the <code>localStorage</code> by that session will be returned) but like <code>localStorage</code> for other private windows and tabs</li><li>Firefox, like Chrome will not retrieve items set on <code>localStorage</code> prior to a private session starting, but in private browsing treats <code>localStorage</code> like <code>sessionStorage</code> for non-private windows and tabs, but like <code>localStorage</code> for other private windows and tabs</li></ul><h4>Getters and Setters</h4><p>In addition to using <code>getItem</code> and <code>setItem</code> we can use a key directly to get and set an item in sessionStorage and localStorage, like so (where the key is “keyName”):</p><pre>var itemValue = window.localStorage.keyName;</pre><h4>localStorage and sessionStorage Limits</h4><p>The webStorage specification recommends browsers implement a 5MB limit on the amount of data <code>localStorage</code> or <code>sessionStorage</code> can save <strong>for a given domain</strong>. If you try to exceed the limit that various browsers have in place (for some browsers users can change this allowance) <code>setItem</code> throws an error. There’s no way of asking localStorage for the amount of space remaining, so it’s best to set item values with a try and catch for any error:</p><pre>try {
	window.localStorage.setItem(key, value);
}
catch (exception) {
	//test if this is a QUOTA_EXCEEDED_ERR	

}</pre><p>If the available space for this localStorage is exceeded, the exception object will have the <code>name</code> <code>"QUOTA_EXCEEDED_ERR"</code> and a <code>code</code> of <code>22</code>.</p><p>As mentioned, in JavaScript strings are UTF-16 encoded, which means they are 2-byte. So, when saving the string “John”, we are actually using 8 bytes, not 4. Which means instead of 5MB of storage space per storage area, we effectively have 2.5MB.</p><p>If the storage needs of your application are likely to exceed 5MB, then web databases are likely to be a better solution. However, the situation with web databases is complicated, with two different standards, one, webSQL widely supported but deprecated, and the other IndexedDB, currently supported only in Firefox, Chrome and IE10.</p><h4>Storage Events</h4><p>We can add an event listener to the <code>window</code> for <code>storage</code> events so that when a storage object has been <strong>changed</strong> (there’s a reason for the emphasis) then we can be notified and respond to those changes.</p><pre>window.addEventListener('storage', storageChanged, false);</pre><p>Here, when localStorage is changed (by setting a new item, deleting an item or changing an existing item) our function <code>storageChanged(event)</code> will be called. The event passed as a parameter to this function has a property <code>storageArea</code>, which is the window’s localStorage object.</p><p>There are two things to be aware of with storage events.</p><ul><li>The event only fires if the storage is changed (not if it is simply accessed and not if we set an item to the same value that it currently has!)</li><li>In the specification, the event is not received in the window or tab where the change occurred, only in other open windows and tabs that have access to this localStorage. Some browsers have implemented storage events in such a way that the event is also received by the window or tab which causes the change, but don’t rely on this.</li></ul><h4>webStorage Performance</h4><p>Of late, a number of high profile, widely read articles critical of localStorage have been published, centring on its asserted performance shortcomings. The key criticism relates to the fact that webStorage is synchronous. This means a script using sessionStorage or localStorage waits while <code>getItem</code>, <code>setItem</code> and other storage methods are invoked. In theory, this can impact both the browser’s response to user input and execution of JavaScript in a page. In practice, I’d argue that this is not likely to be a significant problem for most cases.</p><p>I recently conducted some <a href="http://www.webdirections.org/blog/localstorage-perhaps-not-so-harmful/">testing</a> across a number of devices and browsers which demonstrates that even for poorly implemented code that does a very significant number of getItem and setItem operations, the performance of webStorage is unlikely to have significant impact.</p><h4>Origin restrictions</h4><p>We said earlier that that sessionStorage and localStorage are restricted to windows or tabs in the same domain, but in fact, the restriction is tighter than simply the top-level domain (such as webdirections.org)</p><p>To have access to each other’s webStorage, tabs or windows must have the same top-level domain (for example webdirections.org), subdomains (for example test.webdirections.org), and protocol (https://webdirections.org has a different localStorage from http://webdirections.org).</p><p>At first glance this might seem overly restrictive but imagine john.geocities.com having access to the localStorage of fred.geocities.org?</p><h3>Browser Support and Backwards Compatibility</h3><p>localStorage and sessionStorage are <a href="http://caniuse.com/#search=sessionstorage">widely supported</a>, from IE8 upwards and in all modern browsers, including mobile devices.</p><p>There are also <a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills">several polyfills</a> that allow for webStorage in browsers which don’t support it natively.</p><h3>The Wrap</h3><p>webStorage solves a long standing challenge for web developers — reliably and more securely storing data between sessions entirely on the client side. While there are assertions that performance limitations make localStorage “harmful”, in the real world, services like Google and Bing are using localStorage and performance experts like Steve Souders and <a href="http://www.nczonline.net/blog/2012/03/07/in-defense-of-localstorage/">Nicholas Zakas</a> defend and advocate their use. That’s not to say webStorage is perfect or ideal in all situations. The synchronous nature of the API and 5MB limit per origin do mean that in certain circumstances an alternative may be required. webStorage is however eminently usable for a great many client side data storage needs.</p><h3>Further Reading</h3><ul><li><a href="http://html5doctor.com/storing-data-the-simple-html5-way-and-a-few-tricks-you-might-not-have-known/">The ever reliable HTML5 Doctors on webStorage</a></li><li>Opera Developer Network, another always useful place to visit, <a href="http://dev.opera.com/articles/view/web-storage/">on webStorage</a></li><li>All about local storage, from Mark Pilgrim’s excellent “<a href="http://diveintohtml5.info/storage.html">Dive into HTML5</a>″</li><li>Remy Sharp on the <a href="http://remysharp.com/2011/04/19/broken-offline-support/">state of support for offline events</a>, and some workarounds</li><li>A couple of articles from the Mozilla Hacks blog on web databases, <a href="http://hacks.mozilla.org/2010/06/beyond-html5-database-apis-and-the-road-to-indexeddb/">the Road to IndexedDB</a> and an <a href="http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/">introduction to IndexedDB</a></li><li>MSDN’s <a href="http://msdn.microsoft.com/en-us/library/hh673548(v=vs.85).aspx">introduction to IndexedDB</a> (supported in IE10)</li><li>An <a href="http://msdn.microsoft.com/en-us/library/cc197062%28VS.85%29.aspx">introduction to webStorage</a>, also from MSDN</li></ul> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/webstorage-persistent-client-side-data-storage/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Web Directions South 2012 — got an idea for a session?</title><link>http://www.webdirections.org/blog/web-directions-south-2012-got-an-idea-for-a-session/</link> <comments>http://www.webdirections.org/blog/web-directions-south-2012-got-an-idea-for-a-session/#comments</comments> <pubDate>Mon, 12 Mar 2012 02:02:36 +0000</pubDate> <dc:creator>Maxine</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=4050</guid> <description><![CDATA[It’s that time of the year again when John and I start writing ideas and names on post it notes, shuffling them around, and coming up with the program that will be Web Directions South, this October 18 and 19. The only thing that scares us is that 2011 was just so good, we really [...]]]></description> <content:encoded><![CDATA[<p>It’s that time of the year again when John and I start writing ideas and names on post it notes, shuffling them around, and coming up with the program that will be Web Directions South, this October 18 and 19. The only thing that scares us is that 2011 was just so good, we really hope we can better it :)</p><p>Every year we scour the globe looking for people who are saying, and more importantly doing, really interesting work, the kind of work that is making the web a better and more fascinating place for all of us.</p><p>But we also cast our net locally: we want to get you up on that stage as well!</p><p>So, do you reckon you’ve got something that might be of interest to the Web Directions audience?</p><h3>Our program</h3><p>To give you some idea of how the program works, the conference has 3 tracks:</p><p>- Design: user experience, design strategy, design process, design case studies, CSS3, interaction design, interface design, content strategy, usability, ethnography.</p><p>- Development: JavaScript and HTML5, though feel free to pique our curiosity with ideas that fall outside these two very broad headings :)</p><p>- Big Picture: interesting or unique perspectives at the edges of the web. What are the possibilities that are open to us as people who work on the web? What ideas are just over the horizon? Ideas that get the audience excited about working in this awesome field at this incredible time.</p><p>Don’t feel too troubled with trying to slot your idea into one of these if that doesn’t come easily to you: this is a challenge we are used to!</p><p>Most of our sessions have traditionally been 45–50 minutes long. This year we are also exploring the idea of having shorter sessions — 15ish minutes — in the dev track. This is the perfect amount of time to show off a neat JS library, or demo some other problem solving wizardry you have mastered. So if you’ve got an idea that you don’t think is quite up for a 50 minute session, but would work in this shorter format, please do send it in!</p><h3>Where do I apply?</h3><p>Do you think you’ve got what it takes? We definitely want to hear from you some time in the next couple of days then. It doesn’t have to be a fully formed session proposal or anything like that, so don’t labour it, give us as much detail as you can, and just get it in! To keep all these ideas in one place, please help me out by <a href="http://bit.ly/zPg18D">entering it via this form</a>.</p><p>Very much looking forward to hearing from you.</p> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/web-directions-south-2012-got-an-idea-for-a-session/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>localStorage, perhaps not so harmful</title><link>http://www.webdirections.org/blog/localstorage-perhaps-not-so-harmful/</link> <comments>http://www.webdirections.org/blog/localstorage-perhaps-not-so-harmful/#comments</comments> <pubDate>Thu, 08 Mar 2012 04:42:12 +0000</pubDate> <dc:creator>John</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=4017</guid> <description><![CDATA[Recently, Christian Heilmann and Taras Glek, both at Mozilla, posted articles critical of localStorage. The arguments in each of these really didn’t gel with my experience, and both felt unduly alarmist (“considered harmful” as argued elsewhere really should be retired as a post heading). So, I wanted to run the ruler over the arguments, and [...]]]></description> <content:encoded><![CDATA[<p>Recently, <a href="http://hacks.mozilla.org/2012/03/there-is-no-simple-solution-for-local-storage/">Christian Heilmann</a> and <a href="https://blog.mozilla.com/tglek/2012/02/22/psa-dom-local-storage-considered-harmful/">Taras Glek</a>, both at Mozilla, posted articles critical of localStorage. The arguments in each of these really didn’t gel with my experience, and both felt unduly alarmist (“considered harmful” as argued elsewhere really should be retired as a post heading). So, I wanted to run the ruler over the arguments, and see whether they had validity.</p><p>Christian’s and Tara’s positions are very similar, so I’ll address them via Christian’s post. <a href="http://hacks.mozilla.org/2012/03/there-is-no-simple-solution-for-local-storage/">The essence of Christian’s criticism</a> is</p><blockquote><p>we have to stop advocating localStorage as a great opportunity for storing data as it performs badly</p></blockquote><p>Strong words indeed. Is there evidence to back this up?</p><p>Christian then outlines these concerns in more detail</p><blockquote><p>localStorage is synchronous in nature, meaning when it loads it can block the main document from rendering</p></blockquote><p>Now, this is certainly true, and in theory, we could block the main UI in most browsers (Opera threads the main browser UI separately from scripts), as well as blocking the remainder of a script which uses localStorage while it waits on a read or write. But, in practice, is this a big deal? I’m a bit of a fan of evidence and testing, rather than theory alone, so I set out to test this. You can <a href="http://westciv.com/tests/localStorageStress.html">follow along at home if you like</a></p><h3>Reading, writing and arithmetic</h3><p>Here’s what I did. The test page allows you to specify what you want to save (as everything is saved to localStorage as a string, you just input a string value), and how many times you want to save it. Then, I just save the string that number of times to localStorage in a tight loop, measuring how long it takes, and report that back. Keep in mind this is very quick and dirty, and can fall over without any warning if you over fill your localStorage.</p><p>The test is really simple, but we should get a sense of how big a performance hit localStorage is. Here are results for writing 18bytes 10,000 times inside a tight loop (results are meant to be indicative), then reading them back out again</p><table><tr><th>Browser</th><th>Write 10K</th><th>Read 10K</th></tr><tr><th>IE10</th><td>1250ms</td><td>24ms</td></tr><tr><th>Chrome (19)</th><td>2097ms</td><td>1578ms</td></tr><tr><th>Safari 5</th><td>58ms</td><td>3ms</td></tr><tr><th>Firefox 8</th><td>232ms</td><td>130ms</td></tr><tr><th>Opera 11.6</th><td>764ms</td><td>597ms</td></tr><tr><th>iPhone 4G iOS 5.0</th><td>115ms</td><td>82ms</td></tr><tr><th>iPad 1 iOS 5.0</th><td>102ms</td><td>69ms</td></tr></table><p>At worst, we have a 2s wait (in, of all browsers Chrome 19, a developer preview). In many browsers the wait is less than a tenth of a second. Remember this is for reading or writing 10,000 times to localStorage.</p><p>What about for larger amounts of data? Here’s the results for reading and writing 128 bytes</p><table><tr><th>Browser</th><th>Write 10K</th><th>Read 10K</th></tr><th>Chrome (19)</th><td>2081ms</td><td>1514ms</td></tr><tr><th>Safari 5</th><td>57ms</td><td>3ms</td></tr><tr><th>Firefox 8</th><td>250ms</td><td>136ms</td></tr><tr><th>Opera 11.6</th><td>664ms</td><td>614ms</td></tr><tr><th>iPhone 4G iOS 5.0</th><td>221ms</td><td>112ms</td></tr><tr><th>iPad 1 iOS 5.0</th><td>161ms</td><td>69ms</td></tr></table><p>So, in essence, we’re really not seeing the performance impacted even when we increase the amount of data stored by a factor of 6 or so.</p><p>Given that writing 10,000 times to localStorage in a tight loop is I’d argue an edge case (and probably not advisable), on the face of it, the assertion that localStorage, being synchronous, and for that very reason has performance issues is largely misplaced in fact.</p><p>Christian continues</p><blockquote><p>localStorage does file I/O meaning it writes to your hard drive, which <strong>can</strong> take long depending on what your system does (indexing, virus scanning…)</p><p>On a developer machine these issues can look deceptively minor as the operating system cached these requests – for an end user on the web they <strong>could</strong> mean a few seconds of waiting during which the web site stalls depending on what your system does (indexing, virus scanning…)</p></blockquote><p>emphasis mine</p><p>Again in theory this looks worrisome, but I think in practice browser developers will use some sort of in memory caching and then asynchronously write to disk (actually based on my tests below I suspect that’s what they are doing)</p><blockquote><p>In order to appear snappy, web browsers load the data into memory on the first request – which could mean a lot of memory use if lots of tabs do it</p></blockquote><p>They may do, but this is an implementation detail for browser developers, and regardless of whatever mechanism they implement for persistent client side data (IndexedDB, webSQL…) in order to appear snappy, some sort of memory caching will be required.</p><blockquote><p>localStorage is persistent. If you don’t use a service or never visit a web site again, the data is still loaded when you start the browser</p></blockquote><p>Again this is an implementation detail for browser developers, and I doubt browsers <strong>have to</strong> load the localStorage DBs for all pages ever stored when they launch. I can imagine all kinds of caching strategies to balance responsiveness with memory use, application developers (speaking as one for many years) do this sort of thing all the time.</p><p>But above all, in practice, are we actually seeing any of this taking place in the wild? Can Christian point to sites that are suffering because of these theoretical limitations in localStorage?</p><p>Christian then makes something of a curious leap when he argues</p><blockquote><p>In essence this means that a lot of articles saying you can use localStorage for better performance are just wrong</p></blockquote><p>So, when the likes of Steve Souders, and teams of very smart people at places like Google and Bing research and <a href="http://www.stevesouders.com/blog/2011/09/26/app-cache-localstorage-survey/">develop techniques using localStorage for client side resource caching</a>, they are “just wrong” because in theory localStorage has performance issues. To be direct, I find this position baffling. Especially when not a single datapoint is quoted (the tests cases I developed here took in the order of an hour, so it’s not overly taxing to do).</p><p>None of this is to say localStorage is perfect. Its limitations as to storage size, the fact that everything stored is simply a string, and that JavaScript strings are UTF-16, thereby halving the effective storage space are all real issues. Is the synchronous nature of localStorage an issue? Synchronous APIs are easier for developers to use (no need for callback functions), and so the idea of a simple client side storage mechanism, webStorage, coupled with a more sophisticated, high performance database standard (currently mired in standardization issues, far from localStorage’s fault) makes excellent architectural sense IMO.</p><p>But frankly, Christian and Tara do developers no benefit asserting localStorage is “harmful”, or that “there is no simple solution for local storage”. localStorage is very widely supported (IE8 up), very straightforward to use, has excellent performance for most use cases, and has been implemented in a large number of real world projects, including by Bing and Google. Sure, if you’re writing an app that does 10K simultaneous writes to a database, you’ll have the chops to get around a 2s write time in the worst case, but you will doubtless have all kinds of other performance and memory use challenges. So by all means help developers understand the potential shortcomings of a given technology, outline the gotchas, and workarounds, and propose improvements. But do so based on evidence, and also with the acknowledgement that localStorage is here to stay, and that any alternative also faces many similar, as well as their own additional challenges, and in the case of client side storage is perhaps years away from the same level of support as webStorage. The perfect, as is often stated, is the enemy of the good, or adequate. Let’s by all means make the adequate good, and the good excellent, but let’s not wait around forever for the perfect. We’ll be waiting a while.</p><p>Edited to correct Taras’ name</p> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/localstorage-perhaps-not-so-harmful/feed/</wfw:commentRss> <slash:comments>17</slash:comments> </item> <item><title>In honour of International Women’s Day</title><link>http://www.webdirections.org/blog/in-honour-of-international-womens-day/</link> <comments>http://www.webdirections.org/blog/in-honour-of-international-womens-day/#comments</comments> <pubDate>Thu, 08 Mar 2012 03:45:10 +0000</pubDate> <dc:creator>Maxine</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=4016</guid> <description><![CDATA[The 8th of March is International Women’s Day. In honour of the occasion I decided to create a listing of all the presentations by people who happen to be women that we’ve had at Web Directions conferences over the years. Many hours later I had come up with the list below. I invite you to [...]]]></description> <content:encoded><![CDATA[<p>The 8th of March is International Women’s Day. In honour of the occasion I decided to create a listing of all the presentations by people who happen to be women that we’ve had at Web Directions conferences over the years.</p><p>Many hours later I had come up with the list below.</p><p>I invite you to sit back, take a little stroll down memory lane, and remember all the important things we’ve learned from these amazing women.</p><p><a href="http://www.rachelandrew.co.uk/" title="this is rachelandrew.co.uk">Rachel Andrew</a> spoke about <a href="http://www.webdirections.org/resources/rachel-andrew-core-css3/" title="Rachel Andrew &#8211; Core CSS3 | Web Directions">Core CSS3</a>.</p><p><a href="http://www.poppycopy.co.uk/" title="Relly Annett-Baker – Freelance copy writer &amp; content strategist">Relly Annett-Baker</a> told us about <a href="http://www.webdirections.org/resources/relly-annett-baker-all-the-small-things-2/" title="Relly Annett-Baker &#8211; All The Small Things | Web Directions">content strategy for web apps</a> as well as <a href="http://www.webdirections.org/resources/relly-annett-baker-content-strategy-for-apps/" title="Relly Annett-Baker &#8211; Content Strategy for Apps | Web Directions">microcopy</a>.</p><p><a href="http://a.nge.la/" title="Angela Beesley Starling">Angela Beesley</a> — spoke on <a href="http://www.webdirections.org/resources/angela-beesley/" title="Angela Beesley &#8211; Wikis and community collaboration | Web Directions">wikis and community collaboration</a>.</p><p><a href="http://sushiandrobots.com/" title="Ciao!  |  Sushi &#38; Robots">Jina Bolton</a> told us how to <a href="http://www.webdirections.org/resources/jina-bolton-creating-sexy-stylesheets/" title="Jina Bolton &#8211; Creating sexy stylesheets | Web Directions">create sexy style sheets</a>.</p><p><a href="http://www.powerhousemuseum.com/imageservices/" title="Powerhouse Museum &#8211; Photo of the Day">Paula Bray</a> on <a href="http://south10.webdirections.org/program/big-picture#connected-digital-initiatives-and-strategy" title="Big-Picture | Web Directions South 2010">connected digital initiatives and strategy</a>.</p><p><a href="http://sp1ral.com/" title="Wendy Chisholm">Wendy Chisholm</a> told us all about <a href="http://www.webdirections.org/resources/wendy-chisholm-charles-pritchard-universal-access-now-for-apps-as-well/" title="Wendy Chisholm &amp; Charles Pritchard &#8211; Universal Access: now for apps as well | Web Directions">universal access for apps</a>.</p><p><a href="http://www.estherderby.com/" title="Insights You Can Use">Esther Derby</a> showed what happens when <a href="http://www.webdirections.org/resources/esther-derby-agile-meets-ui/" title="Esther Derby &#8211; Agile meets UI | Web Directions">agile meets UI</a>.</p><p><a href="http://blog.hannahdonovan.com/" title="Hannah Donovan">Hannah Donovan</a> told <a href="http://www.webdirections.org/resources/hannah-donovan-telling-stories-through-design/" title="Hannah Donovan &#8211; Telling stories through design | Web Directions">stories through design</a>, <a href="http://www.webdirections.org/resources/hannah-donovan-designing-without-the-browser/" title="Hannah Donovan &#8211; Designing without the browser | Web Directions">designed without the browser</a> and then reprised <a href="http://www.webdirections.org/resources/hannah-donovan-designing-without-the-browser-2/" title="Hannah Donovan &#8211; Designing without the browser | Web Directions">designing without the browser</a>.</p><p><a href="http://natbat.net/" title="Natalie Downe">Natalie Downe</a> told us <a href="http://www.webdirections.org/resources/natalie-downe-simon-willison-lanyrd-from-side-project-to-startup/" title="Natalie Downe &amp; Simon Willison &#8211; Lanyrd: From side project to startup | Web Directions">the Lanyrd story</a>.</p><p><a href="http://studioresourceinc.com/" title="Studio Resource, Inc. [studioresourcesinc.com]">Kimberly Elam</a> showed us essential <a href="http://www.webdirections.org/resources/wdn08-kimberley-elam/" title="Kimberly Elam &#8211; Five Essential Composition Tools for Web Typography | Web Directions">composition tools for web typography</a>.</p><p><a href="http://www.ruthellison.com/" title="Ruth Ellison on user experience design, usability and accessibility &#8212; RuthEllison.com">Ruth Ellison</a> showed us how to <a href="http://www.webdirections.org/resources/ruth-ellison-integrating-accessibility-into-design/" title="Ruth Ellison &#8211; Integrating accessibility into design | Web Directions">integrate accessibility into design</a>.</p><p><a href="http://www.purselipsquarejaw.org/" title="Anne Galloway | Connecting material, spatial and cultural practices">Anne Galloway</a> took us to a <a href="http://www.webdirections.org/resources/anne-galloway-a-21st-century-bestiary/" title="Anne Galloway &#8211; A 21st Century Bestiary | Web Directions">21st century bestiary</a>.</p><p><a href="https://twitter.com/#!/cherylgledhill">Cheryl Gledhill</a> showed us how to move our <a href="http://www.webdirections.org/resources/cheryl-lead-ben-buchanan/" title="Cheryl Lead and Ben Buchanan &#8211; Moving your organisation to web standards | Web Directions">organisations to web standards</a> and also took us <a href="http://www.webdirections.org/resources/cheryl-gledhill-scott-gledhill-beyond-seo/" title="Cheryl Gledhill &amp; Scott Gledhill &#8211; Beyond SEO | Web Directions">beyond SEO</a>.</p><p><a href="http://www.gotomedia.com/" title="gotomedia | creating people-friendly experiences for web, mobile and applications.">Kelly Goto</a> taught us about <a href="http://www.webdirections.org/resources/kelly-goto-2/" title="Kelly Goto &#8211; The Iterative App | Web Directions">the iterative app</a>, and how to <a href="http://www.webdirections.org/resources/kelly-goto-designing-for-lifestyle/" title="Kelly Goto &#8211; Designing for Lifestyle | Web Directions">design for lifestyle</a>, and then showed us <a href="http://www.webdirections.org/resources/kelly-goto-workflow/" title="Kelly Goto &#8211; Keynote: WorkFLOW | Web Directions">workFLOW</a>.</p><p><a href="http://scenarioseven.com.au/" title="Scenario Seven">Lisa Herrod</a> showed us that <a href="http://www.webdirections.org/resources/lisa-herrod/" title="Lisa Herrod &#8211; Usability: more than skin deep | Web Directions">usability is more than skin deep</a>, that <a href="http://www.webdirections.org/resources/lisa-herrod2/" title="Lisa Herrod &#8211; User testing for the rest of us | Web Directions">usability is for the rest of us</a>, and then how to <a href="http://www.webdirections.org/resources/lisa-herrod-accessibility-for-web-teams-recategorising-wcag-2-using-a-role-based-approach/" title="Lisa Herrod &#8211; Accessibility for web teams: Recategorising WCAG 2 using a role-based approach | Web Directions">recategorise WCAG 2 using a role-based approach</a>.</p><p><a href="http://www.rachelhinman.com/" title="Rachel Hinman: Home">Rachel Hinman</a> talked us through some <a href="http://www.webdirections.org/resources/rachel-hinman-mobile-prototyping-essentials/" title="Rachel Hinman &#8211; Mobile Prototyping Essentials | Web Directions">mobile prototyping essentials</a>.</p><p><a href="http://www.molly.com/" title="@mollydotcom | Open All Night">Molly Holzschlag</a> showed us some <a href="http://www.webdirections.org/resources/molly-e-holzschlag-wsivancouver-crimes-against-web-standards/" title="Molly E. Holzschlag &#8211; WSI:Vancouver &#8211; Crimes Against Web Standards | Web Directions">crimes against web standards</a>.</p><p><a href="http://tarahunt.com/" title="Tara Hunt | startup ceo. author. speaker.">Tara Hunt</a> — told us all about <a href="http://www.webdirections.org/resources/wdn08-tara-hunt/" title="Tara Hunt &#8211; Government 2.0: Architecting for collaboration | Web Directions">Government 2.0</a>.</p><p><a href="http://www.suzeingram.com.au/" title="Suze Ingram">Suze Ingram</a> asked us if we would <a href="http://www.webdirections.org/resources/suze-ingram-would-you-like-service-design-with-that/" title="Suze Ingram &#8211; Would you like service design with that? | Web Directions">like service design with that</a>?</p><p><a href="http://makeawesomeness.com/" title="Make Awesomeness">Leslie Jensen-Inman</a> introduced us to the <a href="http://south09.webdirections.org/program/w3ctrack#the-open-web-education-alliance" title="&lt;span class=&quot;caps&quot;&gt;W3C&lt;/span&gt; Track | Web Directions South">Open Web Education Alliance</a>.</p><p><a href="http://lynnedjohnson.com/" title="Lynne d Johnson">Lynne D Johnson</a> showed us how <a href="http://www.webdirections.org/resources/lynne-d-johnson-opening-keynote-new-media-new-business/" title="Lynne d Johnson &#8211; Opening keynote: New media &#8211; new business | Web Directions">new media means new business</a>.</p><p><a href="http://www.peakusability.com.au/" title="Home - Peak Usability">Tania Lang</a> taught us how to use <a href="http://www.webdirections.org/resources/tania-lang-using-ajax-to-enhance-ux/" title="Tania Lang &#8211; Using AJAX to enhance UX | Web Directions">AJAX to enhance user experience</a>.</p><p><a href="http://nimbupani.com/" title="Divya Manian">Divya Manian</a> got <a href="http://www.webdirections.org/resources/divya-manian-creative-css3/" title="Divya Manian &#8211; Creative CSS3 | Web Directions">creative with CSS3</a> and also showed us how to be <a href="http://www.webdirections.org/resources/divya-manian-active-web-development/" title="Divya Manian &#8211; Active web development | Web Directions">active web developers</a>.</p><p><a href="http://www.hilarymason.com/" title="hilarymason.com">Hilary Mason</a> introduced us to <a href="http://www.webdirections.org/resources/closing-keynote-hilary-mason-machine-learning-for-web-data/" title="Closing keynote: Hilary Mason &#8211; Machine Learning for Web Data | Web Directions">machine learning for web data</a>.</p><p><a href="http://juliemelton.com/" title="linoleum jet - The online home of Juliette Melton">Juliette Melton</a> has taught us how to do <a href="http://www.webdirections.org/resources/juliette-melton-mobile-user-experience-research/" title="Juliette Melton &#8211; Mobile User Experience Research | Web Directions">mobile UX research</a> and how to conduct <a href="http://www.webdirections.org/resources/juliette-melton-remote-research-running-effective-remote-studies/" title="Juliette Melton &#8211; Remote research: Running effective remote studies  | Web Directions">effective remote studies</a>.</p><p><a href="http://zomigi.com/" title="zomigi.com">Zoe Mickley Gillenwater</a> showed us to create <a href="http://www.webdirections.org/resources/zoe-mickley-gillenwater-effective-and-efficient-design-with-css3/" title="Zoe Mickley Gillenwater &#8211; Effective and efficient design with CSS3 | Web Directions">effective and efficient designs with CSS3</a>.</p><p><a href="http://broccolini.net/" title="Diana Mounter is broccolini">Diana Mounter</a> talked us through deciding between <a href="http://www.webdirections.org/resources/diana-mounter-custom-v-cms-dont-take-sides/" title="Diana Mounter &#8211; Custom V CMS &#8211; don&#8217;t take sides | Web Directions">custom and CMS</a>.</p><p><a href="http://jackieinnyc.posterous.com/" title="Jackie in NYC - Documenting the highs and lows of moving from Sydney to New York">Jackie Moyes</a> showed us how to <a href="http://www.webdirections.org/resources/jackie-moyes/" title="Jackie Moyes &#8211; Converting research findings into business speak | Web Directions">convert research findings into business speak</a>.</p><p><a href="http://abitofgeorge.com/" title="About George Oates">George Oates</a> showed us how web apps need <a href="http://www.webdirections.org/resources/george-oates-and-paul-hammond-web-apps-developer-to-designer/" title="George Oates and Paul Hammond &#8211; Web Apps: Developer to Designer | Web Directions">developers and designers to work together</a> and also told us all about <a href="http://www.webdirections.org/resources/george-oates/" title="George Oates &#8211; Human traffic | Web Directions">human traffic</a>.</p><p><a href="http://laurelpapworth.com/" title="Laurel Papworth">Laurel Papworth</a> has shown us the <a href="http://www.webdirections.org/resources/laurel-papworth-2/" title="Laurel Papworth &#8211; The business of online communities | Web Directions">business of online communities</a>, the <a href="http://www.webdirections.org/resources/laurel-papworth-the-business-of-being-social/" title="Laurel Papworth &#8211; The business of being social | Web Directions">business of being social</a> and taught us all about <a href="http://www.webdirections.org/resources/laurel-papworth/" title="Laurel Papworth &#8211; Social networks and mobiles | Web Directions">social networks and mobiles</a>.</p><p><a href="http://blog.gingertech.net/" title="ginger&#039;s thoughts">Silvia Pfeiffer</a> showed us how to <a href="http://www.webdirections.org/resources/silvia-pfeiffer-taking-html5-a-step-further/" title="Silvia Pfeiffer &#8211; Taking HTML5 &lt;video&gt; a step further | Web Directions">take HTML5 video a step further</a>.</p><p><a href="http://veerle.duoh.com/" title="Veerle's blog 3.0 - Webdesign - XHTML CSS | Graphic Design">Veerle Pieters</a> showed us how to <a href="http://www.webdirections.org/resources/veerle-pieters-dave-shea-finding-creativity-in-the-design-process/" title="Veerle Pieters &amp; Dave Shea &#8211; Finding Creativity in the Design Process | Web Directions">find creativity in the design process</a>.</p><p><a href="http://www.deborahschultz.com/" title="Deborah Schultz">Deborah Schultz</a> told us that <a href="http://www.webdirections.org/resources/deborah-schultz-its-the-people-stupid/" title="Deborah Schultz &#8211; It&#8217;s the people, stupid | Web Directions">it’s the people stupid</a>.</p><p><a href="http://www.tealeshapcott.com/" title="Teale Shapcott">Teale Shapcott</a> told us all about <a href="http://south08.webdirections.org/?page_id=7#post-56" title="Program detail | Web Directions South">usability in agile environments</a>.</p><p><a href="http://webfoot.com/" title="">Kaitlin Sherwood</a> showed us the <a href="http://www.webdirections.org/resources/kaitlin-sherwood-steffen-meschkat-the-business-and-technology-of-mashups/" title="Kaitlin Sherwood &amp; Steffen Meschkat &#8211; The Business and Technology of Mashups | Web Directions">business and technology of mashups</a>.</p><p><a href="http://rashmisinha.com/" title="Rashmi&#8217;s blog | Thoughts about people, technology and running a company">Rashmi Sinha</a> talked us through the <a href="http://www.webdirections.org/resources/rashmi-sinha/" title="Rashmi Sinha &#8211; The perils of popularity | Web Directions">perils of popularity</a>.</p><p><a href="http://kay.smoljak.com/" title="Kay lives here - working with the web">Kay Smoljak</a> showed us how to <a href="http://www.webdirections.org/resources/kay-smoljak-starting-and-running-a-successful-web-development-business/" title="Kay Smoljak &#8211; Starting and running a successful web development business | Web Directions">start and run a successful web business</a>.</p><p><a href="http://maadmob.com.au/" title="Maadmob website:">Donna Spencer</a> has given us an <a href="http://www.webdirections.org/resources/donna-maurer/" title="Donna Maurer &#8211; IA: a &#8220;how to&#8221; | Web Directions">IA how-to</a>, showed us how to <a href="http://www.webdirections.org/resources/donna-spencer/" title="Donna Spencer &#8211; Getting content right | Web Directions">get content right</a>, how to <a href="http://www.webdirections.org/resources/donna-spencer-keeping-your-content-alive-from-cradle-to-grave/" title="Donna Spencer &#8211; Keeping your content alive from cradle to grave | Web Directions">keep it alive from cradle to grave</a> and taught us about <a href="http://www.webdirections.org/resources/donna-spencer-information-seeking-behaviours/" title="Donna Spencer &#8211; Information seeking behaviours | Web Directions">information seeking behaviours</a>.</p><p><a href="http://www.stubbornella.org/">Nicole Sullivan</a> showed us her <a href="http://www.webdirections.org/resources/nicole-sullivan-css-power-tools/" title="Nicole Sullivan &#8211; CSS Power Tools | Web Directions">CSS power tools</a>.</p><p><a href="http://www.w3conversions.com/" title="W3Conversions .:. Web Standards Coding, Accessibility and Customized Corporate Training .:. money saving, search engine friendly, web development">Stephanie Sullivan-Rewis</a> taught us all about <a href="http://www.webdirections.org/resources/stephanie-sullivan-rewis-css3-the-webs-swiss-army-knife/" title="Stephanie (Sullivan) Rewis &#8211; CSS3 &#8211; the Web&#8217;s Swiss Army Knife | Web Directions">CSS3, the web’s Swiss Army Knife</a>.</p><p><a href="http://www.ict.csiro.au/staff/kerry.taylor/" title="Kerry Taylor">Kerry Taylor</a> told us about <a href="http://www.webdirections.org/resources/kerry-taylor-semantics-sensors/" title="Kerry Taylor &#8211; Semantics &amp; sensors  | Web Directions">semantics and sensors</a>.</p><p><a href="http://abs.gov.au/" title="Australian Bureau of Statistics">Jenny Telford</a> showed us how the Australian Bureau of Statistics is <a href="http://www.webdirections.org/resources/jenny-telford/" title="Jenny Telford &#8211; Opening up government data | Web Directions">opening up government data</a>.</p><p><a href="http://ginatrapani.org/" title="Gina Trapani - The Official Web Site">Gina Trapani</a> showed us <a href="http://www.webdirections.org/resources/wdn08-gina-trapani/" title="Gina Trapani &#8211; Better Gmail: How Google Opened Gmail’s Web Interface to Any Developer Who Cares (And Why You Should) | Web Directions">how Google opened up Gmail’s web interface to any developer</a>.</p><p><a href="http://lea.verou.me/" title="Lea Verou | Life at the bleeding edge (of web standards)">Lea Verou</a> showed us how to <a href="http://www.webdirections.org/resources/lea-verou-mastering-css3-gradients/" title="Lea Verou &#8211; Mastering CSS3 gradients | Web Directions">master CSS gradients</a>.</p><p><a href="http://www.copious.co.uk/" title="Beautiful Inclusive Websites | Usability &amp; Accessibility come as standard | Copious">Sandi Wassmer</a> taught us that <a href="http://www.webdirections.org/resources/sandi-wassmer-inclusive-design-is-for-everyone/" title="Sandi Wassmer &#8211; Inclusive design is for everyone | Web Directions">inclusive design is for everyone</a>.</p><p><a href="http://www.gianwild.com/" title="Gian Wild | Practical accessibility">Gian Wild</a> showed us how she managed <a href="http://www.webdirections.org/resources/gian-sampson-wild/" title="Gian Sampson-Wild &#8211; Managing accessibility compliance for the Commonwealth Games | Web Directions">accessibility compliance for the Melbourne Commonwealth Games</a>, introduced us to <a href="http://www.webdirections.org/resources/wcag2-gian-wild/" title="WCAG2 &#8211; Gian Wild | Web Directions">WCAG 2</a> and then showed us its <a href="http://www.webdirections.org/resources/gian-wild-wcag2-accessibility-the-hidden-nuggets/" title="Gian Wild &#8211; WCAG2 accessibility: the hidden nuggets | Web Directions">hidden nuggets</a>.</p><p><a href="http://mob-labs.com/" title="MOB : We make complex things easy">Alex Young</a> taught us how <a href="http://www.webdirections.org/resources/manson-young/" title="Rob Manson and Alex Young &#8211; E is for everywhere | Web Directions">E is for everywhere</a> and then showed us <a href="http://www.webdirections.org/resources/alex-young-multi-device-multi-role/" title="Alex Young &#8211; Multi-device, Multi-role | Web Directions">multi-device, multi-role</a>.</p><p><a href="http://www.indiyoung.com/" title="y o u n g . i d e a s">Indi Young</a> told us all about <a href="http://www.webdirections.org/resources/indi-young-innovation-with-mental-models/" title="Indi Young &#8211; Innovation With Mental Models  | Web Directions">innovation with mental models</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/in-honour-of-international-womens-day/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Introducing Web Directions Code, Melbourne in May</title><link>http://www.webdirections.org/blog/introducing-web-directions-code-melbourne-in-may/</link> <comments>http://www.webdirections.org/blog/introducing-web-directions-code-melbourne-in-may/#comments</comments> <pubDate>Wed, 07 Mar 2012 04:24:54 +0000</pubDate> <dc:creator>John</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=4010</guid> <description><![CDATA[If you just read our blog here, you might think it’s been a little quiet since Web Dirctions South last year. But we have in fact just finished a 4 city roadshow with workshops by Andy Clarke and me (John Allsopp) as well as our second round of What do you know, this time visiting [...]]]></description> <content:encoded><![CDATA[<p>If you just read our blog here, you might think it’s been a little quiet since Web Dirctions South last year. But we have in fact just finished a <a href="http://roadshow12.webdirections.org/">4 city roadshow</a> with workshops by Andy Clarke and me (John Allsopp) as well as our second round of <a href="http://whatdoyouknow.webdirections.org/">What do you know</a>, this time visiting Sydney, Melbourne, Brisbane and Perth.</p><p>We’ve always loved the coding side of the web here at Web Directions, and our conferences have always had a strong developer track. But with so much going on and so much on the horizon, we’ve decided that in 2012 developers need their very own event as well. So we’re very excited to announce a brand new show, <a href="http://code12melb.webdirections.org/">Web Directions Code</a>, this year in Melbourne on May 23 and 24.</p><p>Read on for more details, but take note, <strong>there will of course be Web Directions South in Sydney in October</strong>, as there has been since 2006!</p><h3>Why Web Directions Code?</h3><p>As the web becomes increasingly application like, and the capabilities of HTML5 and other web technologies become ever more sophisticated, we thought it was time to put together an event that focusses entirely on code. Web Directions Code features a fantastic international and local lineup, including</p><ul><li>Paul Irish (HTML5 Rocks, ModernizR, HTML5 Boilerplate and much more)</li><li>Divya Manian (HTML5 Please, CSS3 Please, HTML5 Boilerplate)</li><li>Rob Hawkes (Game developer and Mozilla technical lead on gaming)</li><li>Dave Johnson (originator of the phoneGap project)</li></ul><p>Basically, if it’s well supported in browsers and devices, and empowers you to do awesome stuff, then we’ll be covering it</p><p>Day one is dedicated to HTML5 as an application platform, with sessions on Browser Device APIs, HTML5 Audio and Video, touch events for mobile and tablet devices, offline web apps, HTML5 messaging, the History API, HTML5 technologies for game and interactive application development and more.</p><p>Day two is Australia’s first in-depth, JavaScript focussed day, with sessions on Node.js, debugging, performance, client-side templating languages like Mustache, Dust.js, Handlebars.js, Underscore.js, event libraries and more.</p><p>If you build things with web technologies, then Web Directions Code is for you: see you there! Just don’t forget to register with that discount code before April 15. It’s just $799 before then. And if you’ve been before to a web directions event, it’s even cheaper. If you didn’t receive an email with your discount code, <a href="http://www.webdirections.org/contact/">drop us a line now</a>!</p> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/introducing-web-directions-code-melbourne-in-may/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Standards, innovation, Flash, ownership and all that</title><link>http://www.webdirections.org/blog/standards-innovation-flash-ownership-and-all-that/</link> <comments>http://www.webdirections.org/blog/standards-innovation-flash-ownership-and-all-that/#comments</comments> <pubDate>Wed, 09 Nov 2011 21:22:28 +0000</pubDate> <dc:creator>John</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=3906</guid> <description><![CDATA[It’s often argued (well, asserted might be a better way of putting it) that standards are an anathema to innovation, or at the very least a significant impediment to it. At its most extreme, this is used as an argument for disbanding the W3C, and even for core web technologies to become “a single source [...]]]></description> <content:encoded><![CDATA[<p>It’s often argued (well, asserted might be a better way of putting it) that standards are an anathema to innovation, or at the very least a <a href="w3c">significant impediment to it</a>.</p><p>At its most extreme, this is used as an argument for disbanding the W3C, and even for core web technologies to become “<a href="http://joehewitt.com/2011/09/22/web-technologies-need-an-owner">a single source repository [with] a good owner to drive it</a>.”</p><p>Occasionally history throws up curiously timely experiments. Right now we are seeing a very interesting one (and one with far reaching consequences) play out.</p><p>Since the middle to late 18th Century, with the <a href="http://en.wikipedia.org/wiki/Enclosure">enclosure of the commons</a>, and the rise of industrial capitalism, the belief that ownership and property rights is what has largely driven advancements in our civilisation has become almost all pervasive. It lies at the heart of the, until relatively recently alien, concept of intellectual property (increasingly seen as a bane not boon for innovation).</p><p>So, what does this have to do with the clear demise of Flash on mobile? Flash has an owner. One that had, and continues to have large revenues, teams of very smart people, deep pockets.</p><p>Despite all this, Flash failed to adapt to changing technological circumstances, and withered on the vine.</p><p>In parallel, core web technologies have slowly, inexorably grown more sophisticated, organically, iteratively, cooperatively adding capabilities that, for the most part developers clearly want and need.</p><p>Let’s take an example I used in a <a href="http://www.webdirections.org/resources/john-allsopp-the-dao-of-web-design-revisited/">recent presentation</a>. The DOM, while powerful, has long been a pain for developers to really get to grips with. Recognizing this, various libraries, and most famously jQuery, came up with more developer friendly ways of accessing it. jQuery’s use of CSS selector concepts proved immediately popular, and in short order, the W3C began work on the <a href="http://www.w3.org/TR/selectors-api/">Selectors API</a>, while browsers also within a relatively short time frame began implementing this API.</p><p>An ownership model is different. The owner of a platform or technology makes strategic decisions, and long term bets on what will be successful. Those bets may of course pay off tremendously (as in the case of iOS). But they may not, and very often do not, as in the case of Flash.</p><p>Standards bodies are not imune to the ownership model of development. XHTML2 is a decade long demonstration of that.</p><p>Technologies with the ownership model seem less capable of adapting to change, and are very dependent on initial conditions.  The cooperative, collaborative standards based approach (characterised best by the <a href="http://www.ietf.org/tao.html">IETF’s founding principle of “rough consensus and working code”</a>) often seems to build technologies that weather the storms of technological, social and political change far better.</p><p>It’s ironic, that the apparently “capitalist” “ownership” model is really much more like the central planned economic model of former socialist countries, while the W3 model more closely approximates how the societies of economically liberal countries work.</p><p>Neither model is going away soon. Each will have its successes and its failures. But I think it is time to put to bed the far too pervasive meme that standards are in some way an impediment to innovation. After all, take a look at the web. Built on standards (TCP/IP, http, HTML, CSS, EMCMAScript, the DOM), it’s doing ok. Better than OK I’d suggest.</p> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/standards-innovation-flash-ownership-and-all-that/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>The Next 6 Billion</title><link>http://www.webdirections.org/blog/the-next-6-billion/</link> <comments>http://www.webdirections.org/blog/the-next-6-billion/#comments</comments> <pubDate>Thu, 20 Oct 2011 02:28:07 +0000</pubDate> <dc:creator>John</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=3734</guid> <description><![CDATA[Some time this month, for the first time, there will be 7 Billion people alive on earth. In around 14 years, the United Nations predicts our population will reach 8 Billion. These are numbers the human mind has not evolved to intuitively understand. According to most estimates just over 2 billion currently use the internet [...]]]></description> <content:encoded><![CDATA[<p>Some time this month, for the first time, there will be 7 Billion people alive on earth. In around 14 years, the United Nations predicts our population will reach 8 Billion. These are numbers the human mind has not evolved to intuitively understand.</p><p>According to <a href="http://www.internetworldstats.com/stats.htm">most estimates</a> just over 2 billion currently use the internet regularly (in ten years this has grown from around 360 million).</p><p>The growth in the web’s use, even in purely numerical terms is almost incomprehensibly dramatic. From .4% of the world’s population in 1995, to 5.9% in 2000, 13.9% in 2005, to today’s 30.4%.</p><p>When you add in the global and cultural reach of the web — currently 11% of the population of Africa, 24% of Asia, 31% of the middle east, as well as around 40% of Europe and Oceania, and nearly 80% of North America — then it’s clear we are seeing a global phenomenon the scale and breadth of which is unlike anything see in human history.</p><p>Which is in fact <a href="http://www.w3.org/People/Berners-Lee/UU.html">no accident</a>.</p><blockquote><p> The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect</p></blockquote><p>Lately, there has been a lot of concern expressed, by intelligent, experienced people I have a lot of respect for, about the future of the web, about its very viability.</p><p>I’ve engaged folks like Joe Hewitt in <a href="http://joehewitt.com/2011/09/22/web-technologies-need-an-owner">strenuous</a>, but I believe healthy and important <a href="http://www.webdirections.org/blog/the-web-is-a-different-problem/">debate</a> about these issues.</p><p>As I considered in my recent Web Directions presentation, <a href="http://south11.webdirections.org/program/big-picture#the-dao-of-web-design-revisited">A Dao of Web Design Revisited</a> (article, slides and audio recording coming soon), I feel that many of these concerns strangely, uncannily, echo those which prompted my original <a href="http://www.alistapart.com/articles/dao/">Dao of Web Design</a> article back in 2000.</p><p>A <a href="https://twitter.com/leaverou/status/126296891876052992">recent tweet</a> by <a href="http://aralbalkan.com/">Aral Balkan</a> (once again, a passionate, intelligent contributor to the web, who has spoken at our events, and hopefully will do again), retweeted by <a href="http://leaverou.me/">Lea Verou</a> (another generous contributor to the web, and again, one of our past, and I hope future speakers) really captured for me the essence of the issue</p><blockquote><p> #oneversion #manifesto My websites will only support the latest versions of browsers. It’s the browser makers’ duty to get users to upgrade.</p></blockquote><p><a href="https://twitter.com/leaverou/status/126296891876052992">Aral Balkan, Twitter, October 20 2011</a></p><p>So, what does this tweet, and predictions of world population have to do with one another?</p><p>I love the shiny stuff of the web — the <a href="http://www.webdirections.org/blog/css3-radial-gradients/">gradients</a> and <a href="http://www.webdirections.org/blog/let-the-web-move-you-css3-animations-and-transitions/">animations</a>, the <a href="http://www.webdirections.org/blog/2d-transforms-in-css3/">transforms</a>. As someone who has developed for the web for nearly 18 years, the ever increasing sophistication of the DOM, of JavaScript, the increase in the speed of JS engines, of rendering, the arrival of mobile platforms, and micro-mobile platforms for the web excite me as a user and a developer. But, they aren’t what gets me up in the morning. They aren’t what fires me up like no other platform before (I built my first Mac apps in 1986, and have had commercially available Mac OS apps continuously since 1994, and Windows apps since  1996).</p><p>What really, at the not so tender age of 45, keeps me as passionate and excited about building stuff as I was when about 16 and got my first <a href="http://www.classic-computers.org.nz/system-80/">TRS80 clone</a> is the potential for the web to transform our world for the better. And overarching all this is the question, the challenge, how do we get the next 2 billion online, and ultimately, the next 6 billion people online?</p><p>This might not float your boat. And that’s fine. You might consider it an ideological position. And that’s your prerogative. But I know I’m not alone in believing that the potential, the promise, and in the face of overwhelming planet-wide challenges — anthropogenic climate change, global pandemics to name just two which our generation, and particularly my children’s generation will have to increasingly confront — the necessity of bringing our planet together, and enabling all of us to collaborate, share, communicate, without the friction of borders, is something only the web can hope to achieve.</p><p>Universality is a founding principle of the web. <strong>It</strong> is the manifesto the web has been built on, and I believe one of the key drivers of the almost unimaginable success of the web over these last two decades. We ignore that at the web’s peril.</p><p>The web alone, not iOS, or Android, or Windows Phone, or any other platform can possibly connect the next 6 billion. Yes, some, many of those 6 billion will be accessing the web via iOS, some via Android devices, some Windows Phone.</p><p>But, this next six billion is children in rural India, Africa, China where access to power, and networks, may be intermittent. It’s someone in Sumatra at a decade old Wintel box. It’s people who speak hundreds of different languages, with dozens of different writing systems. It’s people who are the first in their family to be able to read and write. It’s the 20% of people worldwide who can’t read or write. Yet.</p><p>So, to say “My websites will only support the latest versions of browsers”, you are in a sense saying, “I’m going to make the fact that developing for the web is harder than it would be if I concern myself with browsers other than the latest is not my problem, and not even the browser makers problem, it’s the problem of the next 6 billion. It’s not my problem, it’s the problem of the child in rural India, Africa, China.”</p><p>The truth is, the challenge of universality <strong>is</strong> daunting. It <strong>is</strong> hard work. But to me at least, paying this forward is the quid pro quo of the enormous privilege I’ve been granted to work on the web, which has given me fascinating well paid work, connections with thousands of intelligent, passionate, generous people around the world, and the opportunity to participate, in however insignificant a way, in something genuinely extraordinary, something unique. I can pay this forward by including rather than excluding people. By, in my own small way, helping ensure that the next 6 billion will be able to share in the privilege that I, you and the first 2 billion share in.</p><p>Which is not to say we shouldn’t continue to develop the capabilities of web technologies. It is not to say we shouldn’t continually explore what these technologies enable us to do.</p><p>But to me at least, we owe it to the web to do this in a way that is generous to the web in the way the web has been generous to us.</p><p>To reformulate the now famous question Steve Jobs asked of John Sculley:</p><p>Do you want to make shiny products for the privileged for the rest of your life, or do you want to come with me and change the world?</p> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/the-next-6-billion/feed/</wfw:commentRss> <slash:comments>40</slash:comments> </item> <item><title>Web Directions South 2011</title><link>http://www.webdirections.org/blog/web-directions-south-2011/</link> <comments>http://www.webdirections.org/blog/web-directions-south-2011/#comments</comments> <pubDate>Mon, 17 Oct 2011 03:16:40 +0000</pubDate> <dc:creator>John</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=3710</guid> <description><![CDATA[When you work on something for an extended period of time but which itself lasts itself only a brief moment, such as Maxine and I do with Web Directions, there’s an intensity to the event itself, and the strange mixture of relief (and exhaustion) coupled with nostalgia when it has come and gone. Luckily, through [...]]]></description> <content:encoded><![CDATA[<p>When you work on something for an extended period of time but which itself lasts itself only a brief moment, such as <a href="http://twitter.com/maxine">Maxine</a> and I do with Web Directions, there’s an intensity to the event itself, and the strange mixture of relief (and exhaustion) coupled with nostalgia when it has come and gone.</p><p>Luckily, through <a href="http://www.flickr.com/search/?q=wds11">photos</a>, <a href="https://twitter.com/#!/search/wds11">tweets</a>, <a href="http://weblog.200ok.com.au/2011/10/wds11-big-stonking-post.html">blog</a> and Facebook posts and even the odd <a href="http://topsy.com/vimeo.com/25355309">video</a>, increasingly an event like Web Directions is <a href="http://www.webdirections.org/resources/">captured in more than just our memory</a>.</p><p><img src="http://farm7.static.flickr.com/6152/6242763364_df1f5178fd.jpg" alt="Web Directions South crowd, engaged and enthused."></p><p>Web Directions South, held last week, was the sixth annual Web Directions event we’ve run in Sydney, and though likely we feel this every year, it was in our estimation, and indeed of so many we spoke to, and based on many tweets we’ve read the best we’ve done by far.</p><p>The atmosphere was incredibly positive, (reflected in everything from the twitter stream, to the crowds who refused to go home, staying long into the night at the closing night party).</p><p>A new generation of partner companies, almost all from Australia and New Zealand, and most of which did not exist when Web Directions started back in 2006 companies shouted great parties, competitions, and most importantly showcased the sophistication and breadth (as well as spirit of fun) of the Australian web industry.</p><p>Similarly, while many of the speakers, local and international, may have been unknown to our audience, they excelled–educating, inspiring and entertaining. From opening keynote to closing, never have we seen such uniformly positive responses to a program.</p><p>Every presentation we had the privilege to see, as well as all those we didn’t but which we heard amazing things about, was world class.</p><p>Whether you were there, or missed out, as the podcasts and slides from presentations come online, we’ll tweet about them (so if you don’t already, <a href="http://twitter.com/webdirections">you really should follow us on Twitter</a>. Meanwhile, you can catch up on <a href="http://www.webdirections.org/resources/">hundreds of past presentations</a> from our conferences around the world from the last several years.</p><p>And, as a special treat, coming soon is a slickly produced video version of <a href="http://south11.webdirections.org/program/keynotes#the-robot-readable-world">James Bridle’s amazing closing keynote</a>, thanks to <a href="http://www.huntingwithpixels.com.au/hwp/welcome">Hunting with Pixels</a>.</p><p>In the meantime, Ben Buchanan has already made available his traditional <a href="http://weblog.200ok.com.au/2011/10/wds11-big-stonking-post.html">big stonking post™</a> with detailed live notes, links, and photos from a dozen presentations. So, if you missed it, and can bare to see what you missed out on, it’s a great place to start.</p><h4>Thanks!</h4><ul><li>A huge thanks to our wonderful sponsors, partners and exhibitors</li><li>To our <a href="http://south11.webdirections.org/program/speakers">incredibly generous speakers</a></li><li>To <a href="http://www.webdirections.org/resources/">Cameron Adams</a> for the opening sequence, setting a new standard for creativity with Web Technologies</li><li>To the <a href="http://sydney.edu.au/architecture/design_lab/">Design Computing program at the University of Sydney</a> for their incredible exhibition of interactive technology</li><li>To the <a href="http://www.w3c.org.au/">W3C Australia Office</a> for once again hosting the W3C South Track</li><li>And not least to the fantastic, positive, open minded, engaged audience.</li></ul> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/web-directions-south-2011/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>The challenge of WYSIWYG development for the web</title><link>http://www.webdirections.org/blog/the-challenge-of-wysiwyg-development-for-the-web/</link> <comments>http://www.webdirections.org/blog/the-challenge-of-wysiwyg-development-for-the-web/#comments</comments> <pubDate>Tue, 27 Sep 2011 04:04:56 +0000</pubDate> <dc:creator>John</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=3696</guid> <description><![CDATA[This is the first in what I hope will be a number of articles I’m writing to clarify my thinking in the lead up to my Dao of Web Design Revisited presentation at this years Web Directions South. In the middle 1990s, by an accident of fate and coincidence far too tedious to go into [...]]]></description> <content:encoded><![CDATA[<p><em>This is the first in what I hope will be a number of articles I’m writing to clarify my thinking in the lead up to my <a href="http://south11.webdirections.org/program/bigpicture#the-dao-of-web-design-revisited">Dao of Web Design Revisited</a> presentation at this years <a href="http://south11.webdirections.org/">Web Directions South</a>.</em></p><p>In the middle 1990s, by an accident of fate and coincidence far too tedious to go into here, I found myself teaching some of the earliest web related courses at <a href="https://www.tafensw.edu.au/">TAFENSW</a>. A lot of my focus was in getting students to think conceptually about document structure, linking, interactive tables of contents and so on. Very little was about HTML. Indeed, so convinced was I that WYSIWYG editing was just around the corner, I felt it a waste of their time learning markup (this was pre CSS, but that’s another story). We used Claris HomePage, a surprisingly useful application, to develop web sites as part of these courses.</p><p>Pretty much everyone at the time felt that actually working at the markup level for the web would go the way of assembly programming.</p><p>There were reasonable precedents to this belief. Desktop publishing in the middle 1980s (really only around 10 years before this time) had revolutionized traditionally markup based print page layout (and more or less given the world the term WYSIWYG).</p><p>And, around <strong>that</strong> same time (the middle and latter half of the 1980s), I was studying Computer Science at University, where for our final year major project, we were the first cohort to no longer use COBOL (I kid you not). Rather we used a 4GL named Omnis (4GLs or <strong>Fourth Generation Languages</strong> were supposed to abstract away all the messy stuff when developing complex applications). The consensus was (and this was a classic CS program with lots of C, and algorithms and stuff) that the traditional approach to programming was going the way of assembly language.</p><p>4GLs live on in systems like 4D, but you would have shocked us all back then if you said that we’d still be using 3GLs without even garbage collection today.</p><p>So, why did WYSIWYG revolutionize print design, but not application development?</p><p>Similarly, despite the success of, above all DreamWeaver, and to a lesser extent other WYSIWYG web development tools, we’re still very much working at the codeface (I don’t think I know any professional web developers who use a WYSIWYG tool these days, though many, myself included, once did).</p><p>But why is that? Will it always be the case? Or will one day someone crack the code (literally and metaphorically) and deliver a WYSIWYG tool that liberates us from the “grind” of coding.</p><p>But first, let’s consider why WYSIWYG was so successful in the world of print. I’d suggest a big part of that success was that is possible to map every aspect of a printed page onto the screen (or better, into the internal model of the software). You can even map colors onto a grayscale screen, which many desktop publishing systems were in the mid 1980s, color screens were seriously expensive. So, there was little if any need for metaphor or abstraction. This part of the page right here, will be pantone color whatever. And this little bit over here, will be white. And so on.</p><p>The problem space of printed page layout was sufficiently constrained that everything the designer might want to do, they could do with DTP software. I’d argue that a constrained “possibility space” is a key requirement for WYSIWYG systems to really work.</p><p>So, what about the web? <a href="http://en.wikipedia.org/wiki/Douglas_Engelbart">Douglas Engelbart</a>, one of the giants of modern computing, coined the term “WYSIAYG” (what you see is <strong>all</strong> you get), which I think captures the challenge faced in developing web development tools, and software tools more generally. With desktop publishing, all you get is all you need. As we saw, the space of possible outcomes can be mapped into a set of tools.</p><p>But with the web (even leaving aside JavaScript and the DOM), the possibility space is I’d argue, too open ended to map well onto any WYSIWYG software. So the designer of development tools needs to decide what the <strong>all</strong> is. Unlike print design, where the problem was constrained by the medium, with the web, software designers constrain the problem space.</p><p>So, if <strong>you</strong> were developing a “WYSIWYG” web development tool, how would you enable your users to make the first paragraph after a heading of level 2, in the introductory section of a document bold? You could allow users to add a class (though you may or may not use that term) to that particular page object (or do you call them elements?). Or, you could provide an interface that is familiar from word processors, where the user selects text, and a bold tool, and behind the scenes the software adds a strong element (to code the user will never see). Or you might add inline style of bold to that paragraph.</p><p>And this is about as simple a scenario as it gets. No interaction. Just styled text based on document structure.</p><p>Now, what if a document is divided into chapters. And what if the designer wants the first line in the first paragraph in each chapter to be capitalized? Or every other row in a table to have a given background color?</p><p>The best possible approach to these particular challenges at the markup and CSS level is likely to use structural selectors (e.g. nth-child). But how to intuit from the users’ actions their intent, and map that intent onto the capabilities of CSS?</p><p>And we <strong>still</strong> haven’t even introduced any interactivity to the challenge yet.</p><p>This isn’t simply a theoretical issue for me. I’ve been developing the CSS Editor <a href="http://westciv.com/style_master/">Style Master</a> for well over a decade. One of the design principles for it has been to never hide the underlying CSS concepts behind metaphors and abstractions. Rather, the goal is to make understanding, and using, these powerful features of CSS easier, more productive, and more enjoyable. This same design principle informs my work on various CSS3 tools, for example my <a href="http://westciv.com/tools/gradientsnustyle/index.html">gradient</a> and <a href="http://westciv.com/tools/animations/">animation</a> tools. While other tools (and this is not a criticism, simply an observation), create metaphors (for example, provide a Photoshop-like interface for creating gradients), I emphasise a direct correspondence between the objects you manipulate, and the underlying CSS concepts.</p><p>But, to return to the question, is WYSIWYG possible for the web? I actually think that it is, but not in general. But in situations where a specific problem is sufficiently constrained, I think we can provide WYSIWYG tools. Which means the approach Adobe is taking with <a href="http://muse.adobe.com/">MUSE</a>, will run up against the same challenges that all general purpose WYSIWYG web development tools have. That’s not to say it might not be very useful, but will be so within the constraints of its capabilities, of the problem space its designers have chosen to map.</p><p>Where I do think WYSIWYG can be, and already often is very successful is in constrained problem spaces. Blog posting is a particular example. An area I’m focussing on right now is presentations, which I believe is sufficiently constrained to make a WYWIWYG approach meaningful (but even here, I think being able to bust out an editor for markup, CSS or JS is important).<br /> Ironically, you could create a WYSIWYG print design tool with web technologies, for precisely the same reason you can do it with other languages and development platforms.</p><p>In essence, the set of problems the web presents developers and designers is open ended in a way that no other system is. Viewport sizes can range from <a href="http://developer.sonyericsson.com/wportal/devworld/article/liveviewannouncement?cc=gb&#038;lc=en">128 x 128 pixels</a> (or less) to 3840 x 2160, and no doubt beyond. Pixel density, color depth, available fonts, all of these will vary dramatically. Then there’s varying levels of support for CSS, HTML, DOM, SVG. There’s varying network speeds, drastic performance differences. Different input methods (mouse, keyboard, touch, Kinect, …) And none of these are going away. They are getting “worse” (which ironically means better — because more diversity among these characteristics means more people are using the web in more ways, which is good). The fact it causes challenges for designers and developers is essentially irrelevant. That’s our problem.</p><p>The search for an over-arching WYSIWYG solution to the challenge of developing for the web reflects our ongoing misconception of what the web is. It’s a medium unlike those which it is in some ways conceptually built on — be that paper, TV or desktop platforms like Windows. It’s understandable that we want it to be more like these. We know them well, we’re comfortable with their concepts and techniques. We’ve invested hugely in technology and expertise to design and develop for them. The web continues to make us uncomfortable. As it should. It is something new, and exciting, and challenging, and unfinished. What we see is never going to be all web get. That’s the challenge, and beauty, of the web.</p> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/the-challenge-of-wysiwyg-development-for-the-web/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>The web is a different problem</title><link>http://www.webdirections.org/blog/the-web-is-a-different-problem/</link> <comments>http://www.webdirections.org/blog/the-web-is-a-different-problem/#comments</comments> <pubDate>Wed, 21 Sep 2011 05:30:50 +0000</pubDate> <dc:creator>John</dc:creator> <category><![CDATA[Blog]]></category><guid isPermaLink="false">http://www.webdirections.org/?p=3689</guid> <description><![CDATA[One of the most persistent criticisms of web technologies is that they evolve slowly, indeed, too slowly. Often the argument is raised that the process of standards is antithetical to “innovation” (for innovation read “making cool stuff up”). To contrast with this glacial change, we’re typically pointed toward the wonders of platforms like iOS and [...]]]></description> <content:encoded><![CDATA[<p>One of the most persistent criticisms of web technologies is that they evolve slowly, indeed, too slowly. Often the argument is raised that the process of standards is antithetical to “innovation” (for innovation read “making cool stuff up”).<p>To contrast with this glacial change, we’re typically pointed toward the wonders of platforms like iOS and Android, where change takes place at breakneck speed. Or we’re pointed toward any number of open source projects, for example SASS, to demonstrate that we can evolve web standards faster outside the W3C (afterall, CSS hasn’t kept place with SASS/LESS… therefor the W3C is clearly useless)</p><blockquote><p><a href="https://twitter.com/kneath/status/116293399845416961">Pretty sure that already happened. SCSS, Coffeescript, etc. The W3C doesn’t have influence anymore AFAIK</a></p></blockquote><p>And occasionally, this erupts in an orgy of revolutionary fervour, where we need to man the barricades, and</p><blockquote><p><a href="https://twitter.com/joehewitt/status/116292923288592384 ">dissolve the W3C</a>, and run the web like an open source project. No more specs, just commits. Does Linux need a standards body?</p></blockquote><p>I guess Joe hasn’t taken a look at the WHATWG’s “HTML“lately. An unversioned. constantly, continuously evolving potage, wherein creeps all kinds of at the every least questionable “innovations”, whose trajectory is unburdened by such trifling challenges as the need for intellectual property policies, or getting anyone to actually implement their stuff.</p><p>But let’s step back a pace. Is there really actually such a problem here? And if so, exactly what <strong>is</strong> that problem? And, are the proposals, to the extent they do exist, likely to help, or make matters worse?</p><p>Firstly, it <strong>is</strong> fair to say, that for the best part of the first decade of this century, we saw considerable stagnation in the development of web standards. The W3C went down the rabbit hole of XHTML2, and CSS 2 almost entirely stagnated (I’l have more to say on that in a second). During that time, innovation came almost entirely from developers discovering techniques which worked with existing browser capabilities, and through JavaScript libraries.</p><p>The last three or four years have however seen an explosion of innovation at the browser level. This has included:</p><ul><li>Huge improvements in the performance of JavaScript engines</li><li>Fantastic new CSS features, that have within a couple of years landed in all modern browsers</li><li>Sophisticated new APIs across a broad range of functionality, again now widespread across most if not all modern browsers (Selectors API, Geolocation, offline, localStorage, 2D and 3D canvas to name just a few)</li></ul><p>Before we throw the baby out with the bathwater, we should ask, is there a problem at all? Are we really seeing innovation — from standards proposal to widespread browser adoption in <a href="https://twitter.com/joehewitt/status/116294702000644096">the order of 10 years</a>?</p><p>Let’s take a look at an actual example. Dave Hyatt announced CSS Gradients in WebKit nightlies April 14th 2008. More or less simultaneously, Apple formally proposed these as part of CSS3. Gradients have been supported in Firefox since 3.6 (released Jan 2010), Opera since 11.1 (final release mid 2011), Internet Explorer 10 (developer releases early 2011). So, from first released and proposed as a standard to very widespread adoption in around 3 years.</p><p>We’ve seen similar timeframes for other CSS features, as well as “HTML5” features like the Selectors API, appcache, geolocation, localStorage.</p><p>So, to put it bluntly, I think the problem is overstated. We seem to have arrived at an approach that both enables the exploration and implementation of novel features in browsers, which are <strong>also</strong> widely adopted across browsers. It’s that second part that is most important, and I’ll return to it in a moment.</p><p>But I also want to quickly address why I think we seem to have thrown off the stagnation of previous years. I’d argue it comes down to stepping back from the monolithic approach of earlier W3C recommendations (CSS 1 and 2, XHTML2, SVG), toward a much more modular approach, as exemplified by CSS3, but as also seen with geolocation and the selectors API. A corollary to this is, I’d argue, that HTML5 is too monolithic and needs to be fragmented (which in some ways is happening).</p><p>But back to the real issue. The web is a different problem. It makes little if any sense to compare innovation of the web ecosystem with that of iOS, Android or other platforms. The web faces challenges far far greater (and has goals far more important). A platform such as iOS can abandon legacy applications, content and hardware, (along with their users) with little compunction. It can (and does) make developers and content creators wishing to participate jump through any number of hoops. It has a single dictatorial decision maker, beholden to no one, and nothing other than itself. And it generates extraordinary revenues, which can be reinvested into the ongoing development of the platform.</p><p>The web is different. It values interoperablity, backwards compatibility. It’s goal is to bring access to the same information to billions across the world, on all manner of devices.<br /> Its custodians are, in my opinion, scandalously under-resourced, given just how much wealth the web has created for so many, perhaps above all Google and Apple.</p><p>Without the web, Google would not exist, and Apple’s core engine of growth, iOS devices would essentially not either.</p><p>So, rather than generally criticising the W3C, or going so far as calling for its dissolution, we should focus on how well in many ways it has done an almost impossible task — getting companies which are fierce commercial rivals to sit down, work together and agree on core technologies they will each, and all, implement, even while at the same time, these same competitors are involved in significant legal conflicts with one another.</p><p>Can the W3C be improved? Certainly. But before suggesting solutions, let’s identify, and demonstrate with evidence, genuine problems. Then, when devising solutions, it pays to ask what evidence there is that those solutions will not only solve the problems identified, but also ensure the ongoing cooperation that has given rise to the web.</p> ]]></content:encoded> <wfw:commentRss>http://www.webdirections.org/blog/the-web-is-a-different-problem/feed/</wfw:commentRss> <slash:comments>18</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 2/48 queries in 0.018 seconds using disk: basic
Object Caching 712/804 objects using disk: basic

Served from: www.webdirections.org @ 2012-05-16 21:01:39 -->
