<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Christian Heilmann</title>
	
	<link>http://christianheilmann.com</link>
	<description>For a better web with more professional jobs - can talk, will travel</description>
	<lastBuildDate>Thu, 17 May 2012 18:16:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/chrisheilmann" /><feedburner:info uri="chrisheilmann" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>brvty++ ?</title>
		<link>http://christianheilmann.com/2012/05/17/brvty/</link>
		<comments>http://christianheilmann.com/2012/05/17/brvty/#comments</comments>
		<pubDate>Thu, 17 May 2012 18:16:27 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://christianheilmann.com/?p=2746</guid>
		<description><![CDATA[Discussion. Responsive images. Picture too much? Srcset weird syntax? Brevity argument. Typing hard. People lazy. Let&#8217;s go shopping? In other, more human, words: in the wake of the current discussion about responsive images and solutions using a picture element or the srcset attribute I came across an argument that always annoys me. And I fear [...]]]></description>
			<content:encoded><![CDATA[	<p>Discussion. Responsive images. Picture too much? Srcset weird syntax? Brevity argument. Typing hard. People lazy. Let&#8217;s go shopping?</p>

	<p>In other, more human, words: in the wake of the <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-May/035855.html">current discussion about responsive images</a> and solutions using a <a href="http://www.w3.org/community/respimg/2012/02/23/picture-for-existing-browsers/">picture</a> element or the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-srcset">srcset</a> attribute I came across an argument that always annoys me. And I fear that the more we use that argument the more we alienate ourselves from what the web is and how it became what it is now.</p>

	<p>It is the <strong>argument for brevity in code above everything</strong>, especially markup. Shorter is better as it means people can type more and faster and there is less opportunity for doing things wrong. I call shenanigans on this.</p>

	<p><h2><span class="caps">XHTML</span>&#8217;s failure was not the amount of code</h2></p>

	<p>The argument is based on the assumption that <span class="caps">XHTML</span> failed because it was far too much to type and too much work. <span class="caps">HTML5</span> is considered superior as we only type what we need and we can even omit a lot of &#8220;optional&#8221; code as browsers are superb and will fix our omissions for us. We write much less and it still works. We call this pragmatism. Except it isn&#8217;t. It is laziness and the arrogant assumption that we write code for browsers to execute instead of people to read.</p>

	<p><strong><span class="caps">XHTML</span> did not fail because of the amount of things you had to write</strong>. It failed because of the <strong>redundant</strong> things you had to write, its over-complexity and that it wasn&#8217;t supported the way it was meant to in the most used browser at the time.</p>

	<p>And even that wasn&#8217;t the issue as nobody wrote all these overly complex constructs by hand &#8211; we have editors, templates and snippets for that. Code autocompletion is quite common. We were happy adding truckloads of Object/Embed code for movies until video came around and we never typed any of that by hand. We had tools for that.</p>

	<p><h2>Be productively lazy</h2></p>

	<p>Good developers are lazy in the sense that they don&#8217;t want to repeat themselves. Instead of doing the same boring and tedious task over and over again by hand we write a script to do it for us. This is what programming is for: allow humans to do better things than the repetitive tasks computers were made for.</p>

	<p>If you write a lot of code and it never gets used that is frustrating. Very much so. It is also pointless work. However, the mistakes of <span class="caps">XHTML</span> should not push us into the other extreme of writing code for computers instead of writing code that executes <strong>and</strong> is easy to understand for people who want to learn or people who will have to maintain what we wrote.</p>

	<p><h2>Markup is different to other code</h2></p>

	<p><strong>I love markup</strong>. I love the idea of &#8211; get this &#8211; <mark>marking up</mark> a document. Adding those funky bracket things around text and URLs is not about shifting bytes, accessing a chipset or setting an interrupt. They are there to give meaning to the texts and to the URLs they contain.</p>

	<p>Think of them as highlighting texts with a marker and writing lots of explanations in the margins explaining the meaning of the highlighted texts. Think of them as the little booklet you get with Shakespeare&#8217;s Julius Caesar explaining to you what political, social or historical tidbits the author talks about that you would never get as you don&#8217;t live in that time.</p>

	<p><strong>Good markup brings meaning to text</strong>. Don&#8217;t take that away from the web for the sake of brevity and technical use cases that are possibly very short-lived.</p>

	<p>The web we all work in right now isn&#8217;t the result of writing very clever and beautiful code nor is it the result of squeezing the last byte out of our documents to make them work perfect in a certain environment. Most of the atomic micro-optimisations and performance testing and tweaking we do can be undone by a single, badly coached and still well-meaning maintainer.</p>

	<p><h2>The web is easy to get into &#8211; let&#8217;s start with a clean slate</h2></p>

	<p><strong>The web we have right now is the result of it being the most accessible media out there</strong>. You wouldn&#8217;t know how to put your photo and a big heading with your name in the newspaper or TV. But you can learn in a few minutes flat how to write a:</p>

	<p>
<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE html&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;html</span> <span style="color: #000066;">lang</span>=<span style="color: #ff0000;">&quot;en&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">charset</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Chris' page<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Chris rules!<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;img</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;http://example.com/chris.jpg&quot;</span> <span style="color: #000066;">alt</span>=<span style="color: #ff0000;">&quot;Photo of Chris&quot;</span> </span>
<span style="color: #009900;">     <span style="color: #000066;">title</span>=<span style="color: #ff0000;">&quot;that's me, that is&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>
</p>



	<p>Why the doctype, the head, the charset definition and the body? Surely the browser will do that for us?</p>

	<p>Because the code above should be the result of someone caring about the web telling you that:</p>

	<p><ul><li>The doctype ensures predictability in displaying your page</li><li>Defining the language means search engines have it easier to index the page and blind users don&#8217;t suffer hearing text pronounced in a different language</li><li>The <span class="caps">UTF</span>-8 means that if you need international characters they will show up instead of rectangles or question marks and</li><li>The head and body makes a clear distinction where your visible content and the instructions for the browser go.</li></ul></p>

	<p>All of this can be violated with intelligent and amazing tricks and still be valid <span class="caps">HTML5</span> and cool. I am quite sure that a few people twitched at the last point and disagreed as you can style title to be visible and scripts can go in the body and there are use cases for inline styles and so on.</p>

	<p>The point though is that none of the above hurts a web developer to write and all of it has a purpose. A structure like that makes it easier for people to learn the basics of what we do. It makes our work predictable, clean, maintainable and &#8211; at least to me &#8211; professional workmanship instead of crazy and cool geek stuff. We get tied up in the latter and one-up each other showing just what is possible and we forget that people are watching and don&#8217;t spend the time to learn the basics. Case in point? The excellent learning resource Codecademy lately added a <a href="http://www.codecademy.com/courses/html-one-o-one/"><span class="caps">HTML 101</span> course</a>, omitting the doctype and alternative text for images in the first steps. We start to see teaching as &#8220;showing the quickest way&#8221; rather than &#8220;showing the cleanest way that explains and yields results&#8221;.</p>

	<p>We value instant gratification over working for achieving a goal. And the gratification you feel when you achieve something you had to work for lasts longer and feels better than the fast variant. This includes making mistakes and learning from them. Giving people an environment that is incredibly forgiving as the first barrier to entry doesn&#8217;t help people grow or reach the goal on their own terms.</p>

	<p><h2>Fostering a new generation of webmakers</h2></p>

	<p>At Mozilla we have a very interesting thing going: we set a goal for ourselves to <a href="https://wiki.mozilla.org/Webmakers">foster a community of web makers</a>. We do workshops with journalists on how to use the web as a platform for news and entertainment. We show <a href="http://popcornjs.org/demos">Popcorn</a> as a way to produce news items that can be maintained without re-shooting. We talk to children and find playful ways to get them into making the web rather than ploughing through apps buying them, playing them for a day or so and discarding them to buy the next one. For this, <a href="http://www.toolness.com/wp/2012/04/learning-and-grammatical-forgiveness/">we use markup and a live editor in the browser</a>. Check out <a href="http://openmatt.org/2012/04/26/web-arcade/">the web arcade</a> to see what I mean.</p>

	<p>The next generation of people coming into our market should not be virtual couch potatoes who want everything to work magically and discard it when it breaks or gets slow. Tinkering with the web is what got us where we are. Playing with the open technologies and learning from what others did made us the developers we are now. The next generation should be allowed to feel the same excitement about making that we feel now.</p>

	<p><h2>Be brief, but stay comprehensible</h2></p>

	<p>Writing not much to achieve something isn&#8217;t cool. Writing the least amount possible, getting your message across and making it easy for others to build on what you did is. It means you are free to do other, better, and &#8211; for you &#8211; much more interesting things.</p>

	<p><h2>Let&#8217;s focus on tools instead of muddling the basics</h2></p>

	<p>If you really want people to write less and achieve more, help improve and build tools for creating in a way that shortens the distance between creation and seeing the result. There is a lot of exciting work being done in this field and we need something for those who don&#8217;t want to write code. As people in the know we scoff at the Dreamweavers out there, but it is also our fault when bad code ends up on the web as we were too arrogant to help those who simply want to get their content onto the web.</p>
 
<p><a href="http://feedads.g.doubleclick.net/~a/vR3FM3ldiluaX2MrZfneVMXhGPE/0/da"><img src="http://feedads.g.doubleclick.net/~a/vR3FM3ldiluaX2MrZfneVMXhGPE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/vR3FM3ldiluaX2MrZfneVMXhGPE/1/da"><img src="http://feedads.g.doubleclick.net/~a/vR3FM3ldiluaX2MrZfneVMXhGPE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/chrisheilmann/~4/UOfg7gkG7Ww" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://christianheilmann.com/2012/05/17/brvty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To hell with browser wars panels</title>
		<link>http://christianheilmann.com/2012/05/11/to-hell-with-browser-wars-panels/</link>
		<comments>http://christianheilmann.com/2012/05/11/to-hell-with-browser-wars-panels/#comments</comments>
		<pubDate>Fri, 11 May 2012 15:23:47 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://christianheilmann.com/?p=2737</guid>
		<description><![CDATA[Summary: Browser War panels have become predictable and non-informative. Instead they are there to entertain the audience but cause much more drama than good. I go to a lot of conferences. I organised events, a conference and a few unconferences and I spoke at a lot of them. Lately I also stepped back a bit [...]]]></description>
			<content:encoded><![CDATA[	<p><strong>Summary: Browser War panels have become predictable and non-informative. Instead they are there to entertain the audience but cause much more drama than good.</strong></p>

	<p><img src="http://christianheilmann.com/wp-content/uploads/2012/05/sotb-1.jpg" alt="State of the Browser 2 panel"></p>

	<p>I go to a lot of conferences. I organised events, a conference and a few unconferences and I spoke at a lot of them. Lately I also stepped back a bit to coach people to speak instead of me going everywhere.</p>

	<p>I think conferences should do a few things: educate, entertain, allow people to network and make speakers and experts available to attendees.</p>

	<p><strong>You don&#8217;t need to go to conferences to learn things</strong> &#8211; all the information is on the internet and signing up to a few good feeds, groups and lists will get you all the info you want.</p>

	<p><strong>What conferences do is bring the human factor</strong> into it. A good speaker can make a topic come to life and show you an angle you had not thought about and inspire you to play with it. A good workshop gives you guidance how to use a technology and gives you a way in without being overwhelmed by a big scary topic. A conference gives you time out from the day to day delivery and allows you to do things that are not yet on the radar of your company but might be soon.</p>

	<p>And then there are &#8220;browser war panels&#8221;. The original premise of the browser war panels was that an audience could hear the latest and coolest about different browsers and ask questions. The first ones were held at Yahoo and had lead engineers from the different browsers to show how the different products work as that was dark magic back then.</p>

	<p><span class="caps">HTML5</span> defines how a browser should deal with the content it gets &#8211; we have a lot more predictability already in the standard. A lot of great information on this topic is out on the web and the accelerated speed of delivery of browsers makes the appearance of platform engineers not happening much. There is no need to repeat the standards, instead the discussions are much more about what makes which browser stand out and in a lot of cases this means what the company wants to promote &#8211; not what developers want to use now and get stuck as it doesn&#8217;t work.</p>

	<p>Browser panels these days get people from companies who are either product evangelists of the browsers or general tech evangelists, advocates, or &#8211; in the worst case &#8211; sales people. This could be good, they can point out features that are in the browsers people don&#8217;t know about and they can show some of the plans for the future of the browser. It can also be awful. As browsers are interesting to the media out of a sudden you see a lot of patterns being followed. Instead of giving information about the browsers, dealing with concerns of developers and implementers or showing changes panelists begin to fall into predefined roles and repeat the messages of the companies they represent.</p>

	<p>It becomes predictable to see which company representative will value speed over everything else, which one will praise a great experience in the browser as part of a bigger OS experience, which one will talk about following standards and complain about sites blocking out browsers and which one will point out that the browser is the choice of the user and should keep them in control by being open about everything whilst following standards.</p>

	<p>The bigger focus on browsers we have these days makes a panel much less of an educational part of the conference (many a time you will get &#8220;I have to go back to the engineering team for this&#8221;) but pushes it into the entertainment part of a conference. It is a veiled sales pitch.</p>

	<p>Everybody loves a good drama. You could go as far as saying that we have a whole tech journalism market that lives on drama. It is fun to see people disagree on topics and make good arguments about one side or another.</p>

	<p>A quite open, unscripted and unplanned format like a panel makes for great drama. It is easy to take potshots at each other and score browny points with the audience with pointing out flaws of the other browsers in a glib fashion. It also gives browny points with the audience to make sweeping statements or deliver soundbites.</p>

	<p>Soundbites, being witty and fast are becoming the most important part. If you look at the Twitter stream of a browser panel you will hardly ever find a &#8220;oh feature $x will ship in browser $y &#8211; so cool&#8221; but you will get more &#8220;$x of browser $y just called $z out on the $a issue&#8221;.</p>

	<p>Soundbites are also loved by the press. And as drama brings headlines many a time you will find a sarcastic remark or glib retort show up as &#8220;Company representative $x said $y about the competition&#8221;. A quick shot to get a giggle out of the audience can cause the communications team of a company to get a lot of unnecessary work. Is that worth it?</p>

	<p>I&#8217;ve even been on panels where the organisers deliberately asked panelists to find topics to disagree on or seen panel moderators throw out one loaded question after another to entice people to disagree and get the drama going. We call this trolling or baiting, and not a way for conference participants to learn about what is going on in the browser world.</p>

	<p>It is not hard to find what is going on in the browser world when you look at the open source engines. You hear much less about the closed ones and to me a panel that has no participant of Apple on it is not a &#8220;browser wars&#8221; panel as it lacks a massive player who should answer quite a few questions web developers have.</p>

	<p>There are exceptions. I thoroughly enjoyed being on the panel at State of the Browser 2 in London and I think as there were no egos and no artificial drama we managed to answer quite a few questions from the audience. But on the whole, these are few and far between and many a &#8220;Browser Wars&#8221; panel is entertainment and cheap laughs or &#8220;wow, did he just say that&#8221; moments.</p>

	<p>This, in the long run, is not fair to the audience who paid good money (and should get real comedians or entertainers if entertainment is the goal), it is not fair to the platform engineers (as they are misrepresented instead of allowing people to peek under the hood with them) and it does not get us anywhere in the real &#8220;browser wars&#8221;.</p>

	<p>As developers you should not be tempted to build for one browser only and you should not have to build different versions for different browsers. Keeping it all about drama and who shouts the loudest and comes across as most witty doesn&#8217;t make that happen. It is a waste of time.</p>

 
<p><a href="http://feedads.g.doubleclick.net/~a/u7Wd90bXG8Ji0aop8_OIA_zBogc/0/da"><img src="http://feedads.g.doubleclick.net/~a/u7Wd90bXG8Ji0aop8_OIA_zBogc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/u7Wd90bXG8Ji0aop8_OIA_zBogc/1/da"><img src="http://feedads.g.doubleclick.net/~a/u7Wd90bXG8Ji0aop8_OIA_zBogc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/chrisheilmann/~4/YKAev8swb-M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://christianheilmann.com/2012/05/11/to-hell-with-browser-wars-panels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Demoing and displaying JavaScript at the same time using CSS</title>
		<link>http://christianheilmann.com/2012/05/08/demoing-and-displaying-javascript-at-the-same-time-using-css/</link>
		<comments>http://christianheilmann.com/2012/05/08/demoing-and-displaying-javascript-at-the-same-time-using-css/#comments</comments>
		<pubDate>Tue, 08 May 2012 11:53:16 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://christianheilmann.com/?p=2729</guid>
		<description><![CDATA[When writing documentation or doing examples you constantly run into the same issue: how do you display and demo the code at the same time? You don&#8217;t want to have a code display and live code as they will get out of sync (on the other hand I always found that when copying code into [...]]]></description>
			<content:encoded><![CDATA[	<p>When writing documentation or doing examples you constantly run into the same issue: how do you display and demo the code at the same time? You don&#8217;t want to have a code display and live code as they will get out of sync (on the other hand I always found that when copying code into a document I also cleaned it up and optimised it).</p>

	<p>The easiest way for this are all the &#8220;new&#8221; services like <a href="http://jsfiddle.net">JSFiddle</a>, <a href="http://jsbin.com">JSBin</a>, <a href="http://dabblet.com/">Dabblet</a>, <a href="http://tinker.io">Tinker.io</a> and others (there seems to be a new one every month now) and you can even embed them into other documents, but it means you need an iframe and load content from another service (which might go down or get forgotten in the future).</p>

	<p>The other way of course is to use Ajax/JavaScript to load the code into the page. Back in 2008, I wrote the <a href="http://icant.co.uk/sandbox/ajax-code-display/">Ajax Code Display</a> script for that (and subsequently I never used it much).</p>

	<p>I was wondering how you can simply demo and show inline JavaScript in a document without needing any extra libraries. The simplest way seemed to read out the innerHTML of the <span class="caps">SCRIPT</span> element and write it out into a <span class="caps">PRE</span> using textContent (innerHTML would render <span class="caps">HTML</span> or greater signs in the script, which isn&#8217;t the idea).</p>

	<p>However, you can do a simple demo and display of the same script much easier these days using <span class="caps">CSS</span>. Check out <a href="http://thewebrocks.com/demos/smashing-events/preventdefault.html">this demo page</a> for an upcoming Smashingmag article:</p>

	<p><a href="http://thewebrocks.com/demos/smashing-events/preventdefault.html"><img src="http://christianheilmann.com/wp-content/uploads/2012/05/codedisplay.png" alt="code displayed with CSS"></a></p>

	<p>If you do a view-source you find no other script in use, yet it displays in the page. What is this sourcery<sup>*</sup>? Simple, and it was <a href="http://twitter.com/mathias">Mathias Bynens</a> who got me onto it: just display script elements as block and add some generated content to show the &#8220;Source&#8221; text:</p>

	<p>
<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">script <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> pre<span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#333</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#fff</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> monaco<span style="color: #00AA00;">,</span> courier<span style="color: #00AA00;">,</span> <span style="color: #993333;">monospace</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
script<span style="color: #00AA00;">:</span><span style="color: #3333ff;">:before</span><span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">content</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'Source:'</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#0f0</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>
</p>



	<p>Mathias has <a href="http://mathiasbynens.be/notes/css-hidden-elements">much more detailed explanations on why that works</a> but I for one am once again amazed just how much easier things are these days with the awesome browsers that we have.</p>

	<p><sup>*</sup> Sourcery = magical code that does (seemingly) unexpected things.</p>
 
<p><a href="http://feedads.g.doubleclick.net/~a/3BArZ2Glh7-UHx4TDPkMDpB4CzQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/3BArZ2Glh7-UHx4TDPkMDpB4CzQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/3BArZ2Glh7-UHx4TDPkMDpB4CzQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/3BArZ2Glh7-UHx4TDPkMDpB4CzQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/chrisheilmann/~4/hgl_5AQWPqg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://christianheilmann.com/2012/05/08/demoing-and-displaying-javascript-at-the-same-time-using-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So you want me to talk?</title>
		<link>http://christianheilmann.com/2012/04/25/so-you-want-me-to-talk/</link>
		<comments>http://christianheilmann.com/2012/04/25/so-you-want-me-to-talk/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 14:02:26 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[booking]]></category>
		<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://christianheilmann.com/?p=2491</guid>
		<description><![CDATA[I love public speaking &#8211; so much that I spent most of the last year on the road (39 conferences in 27 countries to be exact). This year, I thought I cut back a bit on that (so far I very much failed in that, but hey). Instead, together with my awesome colleague Shezmeen Prasad [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://www.flickr.com/photos/kaptainkobold/192752222/" title="&quot;Do You Expect Me To Talk?&quot; by Kaptain Kobold, on Flickr"><img src="http://farm1.staticflickr.com/68/192752222_9ed9827086.jpg" width="500" height="428" alt="&quot;Do You Expect Me To Talk?&quot;"></a></p>

	<p>I love public speaking &#8211; so much that I spent most of the last year on the road (39 conferences in 27 countries to be exact). This year, I thought I cut back a bit on that (so far I very much failed in that, but hey). Instead, together with my awesome colleague Shezmeen Prasad I am concentrating more on <a href="http://hacks.mozilla.org/2012/04/launching-evangelism-reps-getting-the-army-of-awesome-ready-to-take-the-stage/">making other people in the Mozilla community speak</a>. This means I want local people to step up and speak at conferences rather than flying around the globe for talks. This doesn&#8217;t mean that I won&#8217;t be speaking, it just means I want to be a bit more selective and I want to hand over opportunities to amazing people from the Mozilla community who would be easier for you to get to your conferences and get a chance to shine at the same time.</p>

	<p>I am also a very busy man (yes, my Twitter stream might make you think otherwise, but I am not kidding) and I am getting roughly 200-300 emails a day and about an offer to speak each day. This is not boasting, I am happy that people want me to speak, and I don&#8217;t want to disappoint anyone.</p>

	<p>This is why we set up a council of people in Mozilla who deal with all the speaking request the people from Developer Engagement get. <strong>All conference communication should go through that council</strong> so that we can avoid double bookings and frustrations on your and our side.</p>

	<p>You can see where we will be speaking at the <a href="https://developer.mozilla.org/en-US/events">Where&#8217;s Mozilla</a> site and in order to tell me about a great opportunity, here is what you do:</p>

	<p><strong>Send an email to <a href="mailto:dev-events@mozilla.com">dev-events@mozilla.com</a></strong> which will go to the council. Please include (if possible):</p>

	<p><ul><li>The dates and location of your conference</li><li>The nature of your conference (who do you target, how many people you expect, how many talks will be there)</li><li>The nature of the talk (keynote, workshop, panel&#8230;)</li><li>If there are any travel arrangements or not</li></ul></p>

	<p>I have a few simple rules about my talks:</p>

	<p><ul><li>The slides will be public and I can&#8217;t provide them upfront (as I write a new talk every time)</li><li>I want a recording and coverage of the talk to be released after the conference</li><li>I want to have a prime-time slot or keynote (bored of half-empty rooms)</li><li>I talk about web development in a holistic sense, I am not the &#8220;Firefox guy&#8221; to go on a panel to fight with other browser makers &#8211; this is boring and destructive to the cause</li></ul></p>

	<p>Sorry about that, but I put a lot of work into my talks and I want to make it worth while for everybody.</p>
 
<p><a href="http://feedads.g.doubleclick.net/~a/52jcbDNkmwHToTBNSIyq5eve-DU/0/da"><img src="http://feedads.g.doubleclick.net/~a/52jcbDNkmwHToTBNSIyq5eve-DU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/52jcbDNkmwHToTBNSIyq5eve-DU/1/da"><img src="http://feedads.g.doubleclick.net/~a/52jcbDNkmwHToTBNSIyq5eve-DU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/chrisheilmann/~4/fvPOVHGTKI8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://christianheilmann.com/2012/04/25/so-you-want-me-to-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is browser and tech innovation assuming an audience rather than talking to one?</title>
		<link>http://christianheilmann.com/2012/04/24/is-browser-and-tech-innovation-assuming-an-audience-rather-than-talking-to-one/</link>
		<comments>http://christianheilmann.com/2012/04/24/is-browser-and-tech-innovation-assuming-an-audience-rather-than-talking-to-one/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 20:49:53 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://christianheilmann.com/?p=2714</guid>
		<description><![CDATA[Web development is not what it used to be. It has undergone so many transformations and changes that it is pretty confusing to keep up with what is going on. My main problem right now is that as someone working for a player that provides the world with a browser and is involved in defining [...]]]></description>
			<content:encoded><![CDATA[	<p>Web development is not what it used to be. It has undergone so many transformations and changes that it is pretty confusing to keep up with what is going on. My main problem right now is that as someone working for a player that provides the world with a browser and is involved in defining the future technologies of the open stack I wonder who our audience is.</p>

	<p><h2>There is no one &#8220;web developer&#8221;</h2></p>

	<p>I am a web developer. I build web products and I love how simple it is to create meaning with semantic <span class="caps">HTML</span>, interactivity with JS and make things beautiful and more intuitive with <span class="caps">CSS</span>. I come to this from a developer angle, as I am a terrible designer. This makes me an endangered species.</p>

	<p>In the last few years web development has gotten a lot more players. Moving JS to the server side and the advent of <a href="https://developer.mozilla.org/en/WebSockets">Websockets</a>, <a href="http://nodejs.org/">Node.js</a> and technologies like <a href="http://www.phonegap.com/">Phonegap</a> and <a href="https://github.com/kripken/emscripten/wiki">Emscripten</a>, and yes, even <a href="https://developers.google.com/web-toolkit/"><span class="caps">GWT</span></a> allow a lot more people who never bothered with the web to build web apps. And this is damn good as different knowledge can lead to better and more scalable solutions. It also means we can deliver faster to a market that is hungry for more and more products. And it also forces us to re-think some of our ways.</p>

	<p>I&#8217;ve talked to people who are amazing in <span class="caps">HTML</span>/CSS/JS and feel the need to learn at least one server-side language or at least get into patterns to understand what their colleagues in the web development team are talking about. It seems the shift from web sites to apps means that we need to shift much more to traditional app development than we are ready to admit yet.</p>

	<p><h2>Staying in our comfort zones</h2></p>

	<p>However, I don&#8217;t see much mingling going on. The design-y conferences of this world talk about &#8220;mobile first&#8221; and how responsiveness will always beat strict native apps and the tech-y conferences get very excited about replacing old-school web development with <span class="caps">MVC</span> frameworks in JavaScript and how to use JS to replace other server-side architectures. We&#8217;re stuck in a world of demo sites and showcases and &#8220;hello world&#8221; examples that can &#8220;scale to thousands of users per second&#8221; but never get the chance to.</p>

	<p>I know, there are a few outstanding examples that are not like that and I generalise, but look around and you will see that I have a point. We get excited about the possibilities and revel in academic exercises rather than getting real issues fixed and showing how to deliver real solutions. This goes as far as discussing for days whether to <a href="http://jsdrama.com/">use semicolons in JS or not</a>.</p>

	<p><h2>Who is the audience?</h2></p>

	<p>But let&#8217;s go back to browsers and standards. I really am at a loss as to who we are talking to when it comes to those. Personally I see a lot of that in the feedback I get. Say I just gave a talk about <span class="caps">HTML5</span> and what it does for us. <a href="https://developer.mozilla.org/En/HTML/Element/Audio">Audio</a>, <a href="https://developer.mozilla.org/en/Using_HTML5_audio_and_video">Video</a>, <a href="https://developer.mozilla.org/en/Sections_and_Outlines_of_an_HTML5_document">richer semantics</a>, <a href="https://developer.mozilla.org/en/HTML/Canvas">JavaScript APIs that allow us to draw</a> and <a href="https://developer.mozilla.org/en/DOM/Storage">store data locally</a>, all that. I normally end with something like <a href="https://wiki.mozilla.org/GamepadAPI">GamePad <span class="caps">API</span></a>, <a href="https://developer.mozilla.org/en/API/Pointer_Lock_API">Pointer lock</a> or <a href="http://webrtc.org/">WebRTC</a> to show what else is brewing. The feedback I get is incredibly polarised:</p>

	<p><ul><li>Yeah, yeah, cool but why don&#8217;t you support the new experimental feature $x that browser $y has in the latest Nightly?</li><li>That&#8217;s cool but I don&#8217;t like using your browser (my favourite, as it has nothing to do with the talk :) )</li><li>This is all fine but none of my clients will ever need that</li><li>Great, but I can not use this as all my clients use browser $shouldhavedied and will never upgrade</li></ul></p>

	<p>Now the luddite fraction of this has a point &#8211; a lot of what we show when we talk about &#8220;the bleeding edge&#8221; can only be used (for now) in Nightly releases of browsers or need certain flags to be turned on. In some cases you even needed a special build of a certain browser (like the <a href="http://people.mozilla.com/~tmielczarek/mouselock+gamepad/">GamePad <span class="caps">API</span> in Firefox</a> or Adobe&#8217;s first <a href="http://blogs.adobe.com/webplatform/2012/03/16/css-regions-one-year-in/"><span class="caps">CSS</span> regions proposal</a>). This means we do expect a lot of investment from our audience for something that might change or be discarded in the near future.</p>

	<p>The &#8220;ZOMG <span class="caps">YOU ARE SOOO BEHIND</span>&#8221; fraction has a point, too &#8211; if they put their money where their mouth is and really use these new technologies in products rather than just getting excited about getting something new and shiny every week. Otherwise this is just borderline trolling and doesn&#8217;t help anybody.</p>

	<p><h2>Getting the bleeding edge into the mainstream</h2></p>

	<p>The question then is how could we ever get the new technologies we talk about used and implemented? There is no doubt that we need them to make the web the high fidelity app platform we got promised when some company arrogantly proclaimed Flash to be dead. But who will be the people to use them? In a lot of cases this only happens inside the companies that drive these technologies or by partners these companies pay to build showcases to prove that things could be amazing if we just started using new tech.</p>

	<p>To me, this is not scalable and sad. We should be innovating for the people who build things now and not for a future that needs to come. This is less sexy and means a lot more work but it means we build with our audience rather than trying to lure them to change.</p>

	<p>If you keep your eyes open then you see that actually a lot of what we consider amazing work is a very small percentage of the market. Tech press loves to hype them up and companies love to (pretend to) use bleeding edge technology to attract tech talent to work for them, but the larger part of the market wants one thing: <strong>getting the job done</strong>.</p>

	<p><h2>The majority of developers use libraries and frameworks</h2></p>

	<p>In the case of the web development this means one thing: <strong>libraries and polyfills</strong>. Yes, the things we considered a necessary evil to be able to build things fast and still support outdated browsers are now the thing people use to build web products. These are also the things they tell others to use &#8211; try to find a question on Stack Overflow that has no &#8220;use jQuery&#8221; as at least one of the answers. Try to find a <span class="caps">CSS</span> example that supports various prefixes rather than pulling a &#8220;this works only in webkit&#8221; or &#8220;use <a href="http://lesscss.org">Less</a>, no, use <a href="http://sass-lang.com"><span class="caps">SASS</span></a>, no use <a href="http://smacss.com/"><span class="caps">SMACSS</span></a>...&#8221;.</p>

	<p><h2>Abstracting away the need for basic knowledge</h2></p>

	<p>Talking to colleagues and peers in other companies I hear a lot of moaning and complaining that it is impossible to hire real JavaScript developers as 90% of applicants come in and only know jQuery. They have no clue what an event handler is, how to navigate the <span class="caps">DOM</span> or create a simple <span class="caps">XHR</span> call without the library. Ridiculous? Not really &#8211; we are actually to blame.</p>

	<p>The &#8220;in-crowd&#8221; scene has a fetish for abstraction. Instead of building applications and solutions we build more libraries, micro-libraries and polyfills to abstract the evil away from implementers and then we are surprised if implementers don&#8217;t know the basics any longer. Well, they used the precious time they had to learn what we build and started getting things done. And this learning time multiplies with the amount of things we release. The hour learning <a href="http://documentcloud.github.com/backbone/">backbone</a>, <span class="caps">SASS</span>, LESS, <a href="http://eightmedia.github.com/hammer.js/">hammer.js</a> or whatever is gone and should be used to build things with it now. All the more despicable when as the &#8220;cool kids&#8221; we just drop those libraries a few months later and build the next big thing.</p>

	<p><h2>Shouldn&#8217;t we innovate with existing libraries?</h2></p>

	<p>The question I am asking myself right now is this: when most of the market uses libraries to get their job done, why do we bother assuming that people would go back to writing &#8220;native&#8221; code for browsers &#8211; especially when we fail to produce standards that do not differ across browsers?</p>

	<p>Wouldn&#8217;t the better way to get something done to build jQuery plugins that use the new APIs we want people to play with in an unobtrusive way and see real applications built with them? A great example are performance enhancements like <a href="http://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/">requestAnimationFrame</a> and <a href="https://developer.mozilla.org/en/DOM/Using_the_Page_Visibility_API">pageVisibility</a>. We can whine and complain that libraries are horrible and especially on phones drain the battery mercilessly or we could just start playing where our audience hangs out and improve where the errors happen rather than pointing them out.</p>

	<p>Of course some things need us to find people to play with tech outside the libraries but a lot could be sneaked in without people knowing and then allow us to show real examples where a plugin that uses a new feature made an older implementation perform much better.</p>

	<p>I&#8217;ve tried to do this with <a href="https://vimeo.com/40873227">my talk at jQuery UK earlier</a> this year. I showed the JavaScript equivalents of jQuery solutions and that browsers now have those and how following their ideas and principles could lead people to write better jQuery. I got good feedback so far. Maybe I am on to something.</p>

	<p>Drop me an answer <a href="https://plus.google.com/111552931212713155841/posts/KWxY3Yevs3x">on Google+</a> or <a href="http://www.facebook.com/groups/128563000582883/225302874242228/">Facebook&#8217;s <span class="caps">HTML5</span> group</a>.</p>
 
<p><a href="http://feedads.g.doubleclick.net/~a/QhKszLYcyqy0tjCmdzlx1JX3de4/0/da"><img src="http://feedads.g.doubleclick.net/~a/QhKszLYcyqy0tjCmdzlx1JX3de4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/QhKszLYcyqy0tjCmdzlx1JX3de4/1/da"><img src="http://feedads.g.doubleclick.net/~a/QhKszLYcyqy0tjCmdzlx1JX3de4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/chrisheilmann/~4/87PeBtIUx6E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://christianheilmann.com/2012/04/24/is-browser-and-tech-innovation-assuming-an-audience-rather-than-talking-to-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

