<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/2.0" -->
<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/"
	>

<channel>
	<title>Emil's Chronicle</title>
	<link>http://me.eae.net</link>
	<description>The journal of Emil A Eklund</description>
	<pubDate>Thu, 19 Apr 2007 19:37:35 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0</generator>
	<language>en</language>
			<item>
		<title>In Zürich</title>
		<link>http://me.eae.net/archive/2007/04/19/in-zurich/</link>
		<comments>http://me.eae.net/archive/2007/04/19/in-zurich/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 19:34:27 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Personal</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2007/04/19/in-zurich/</guid>
		<description><![CDATA[Haven&#8217;t even been able to live up to my anything-but-ambitious posting schedule lately - it&#8217;s been over six months since my last post.
What can I say, Google has kept my busy and a lot of things are going on.
A few weeks ago I transferred to Google Switzerland and moved to Zürich.
It&#8217;s a really nice city [...]]]></description>
			<content:encoded><![CDATA[<p>Haven&#8217;t even been able to live up to my anything-but-ambitious posting schedule lately - it&#8217;s been over six months since my last post.<br />
What can I say, Google has kept my busy and a lot of things are going on.</p>
<p>A few weeks ago I transferred to Google Switzerland and moved to Zürich.<br />
It&#8217;s a really nice city to live in, despite the fact that people tend to speak Schweizerdeutsch (Swiss German) which I find quite hard to understand. Other than that it&#8217;s great, it&#8217;s a beautiful city. Fairly small but it still has almost everything you expect from a world city.</p>
<p>I&#8217;m still getting settled in but it&#8217;s slowly getting into a routine and starting to feel at home.</p>
<p>I got a ton of pictures from <a href="http://gallery.eae.net/2007/zurich">Zürich</a>, it&#8217;s <a href="http://gallery.eae.net/2007/luzern">surrounding</a> <a href="http://gallery.eae.net/2007/laax">area</a> and <a href="http://gallery.eae.net/2007/sechselauten">bizarre festivals</a> at my <a href="http://gallery.eae.net/">gallery site</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2007/04/19/in-zurich/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Going to Google</title>
		<link>http://me.eae.net/archive/2006/09/13/going-to-google/</link>
		<comments>http://me.eae.net/archive/2006/09/13/going-to-google/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 16:11:04 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Personal</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/09/13/going-to-google/</guid>
		<description><![CDATA[A few months ago I accepted a job offer from Google. Starting next week I&#8217;ll be working for them.
For the last couple of months I&#8217;ve been busy finalizing my work at Basset, completing the projects I&#8217;ve been involved in and handing over my responsibilities. While Basset has been treating me well during the five or [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago I accepted a job offer from Google. Starting next week I&#8217;ll be working for them.</p>
<p>For the last couple of months I&#8217;ve been busy finalizing my work at Basset, completing the projects I&#8217;ve been involved in and handing over my responsibilities. While Basset has been treating me well during the five or so years I&#8217;ve been working there I felt it was time to move on.</p>
<p>Google has some of the best DHTML people and brightest programmers, a chance to work with some of them is very exciting. </p>
<p>Without <a href="http://erik.eae.net/">Erik</a>&#8217;s encouragement I doubt it would have happened, thank you!</p>
<p>I can&#8217;t wait to get started!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/09/13/going-to-google/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>SpellingCow followup</title>
		<link>http://me.eae.net/archive/2006/09/05/spellingcow-followup/</link>
		<comments>http://me.eae.net/archive/2006/09/05/spellingcow-followup/#comments</comments>
		<pubDate>Tue, 05 Sep 2006 16:12:12 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Programming</category>
	<category>Web</category>
	<category>Software</category>
	<category>Rants</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/09/05/spellingcow-followup/</guid>
		<description><![CDATA[Just got the following message from Craig Nuttall, the creator of SpellingCow, as a comment to my LiteSpellChecker post:

Hello All. Right now I am spell checking this message as I type. I am the creator of SpellingCow ( http://www.spellingcow.com ). I would like to thank Emil for his hard work as he inspired my creation. [...]]]></description>
			<content:encoded><![CDATA[<p>Just got the following message from Craig Nuttall, the creator of SpellingCow, as a comment to my LiteSpellChecker post:</p>
<blockquote><p>
Hello All. Right now I am spell checking this message as I type. I am the creator of SpellingCow ( http://www.spellingcow.com ). I would like to thank Emil for his hard work as he inspired my creation. SpellingCow operates completely different in many ways from Emil’s checker, but has the same idea of making the textarea transparent and showing a markup div in the background.</p>
<p>Emil was gracious enough to share his code with the world, benefiting me and who knows how many others. I wish I could open source all of my code, but I just cannot unobfuscate it - though I’d gladly give Emil a peek =] I have open sourced the communication method I’ve developed which allows SpellingCow to be installed with a single line of code on any website or run as a favelet. It’s called COWS Ajax ( http://cows-ajax.sourceforge.net ).</p>
<p>I would like to give some pointers for you guys beyond this though, just to contribute a little more. First of all, Emil’s demo works well b/c the textarea he is using is so large that it masks a lot of problems. The PRE whitespace style type is not recognized by IE and that creates a lot of problems. Also in firefox, this cause long lines to not wrap and completely blows out the display. The fix for this is to drop the PRE whitespace style type entirely. For special cases where you need to render something like consecutive spaces, then wrap just the spaces with the PRE whitespace type. That solves the problem for FF. But IE has a further problem in that in strips leading whitespace on spans. But if you use createTextNode to insert it into the DOM tree directly, that will get you the desired effect.</p>
<p>So… I wish I could make the unobfuscated and commented source available but I can’t. However, the above paragraphs represents MANY hours of tinkering and I think will be quite valuable to someone wanting to OSS what Emil started. Between that and COWS Ajax, I hope you all feel that I am “giving back” at least something <img src='http://me.eae.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Thanks again Emil… you rock!<br />
-Craig
</p></blockquote>
<p>Now that it has been settled that it&#8217;s not a cheap ripoff but rather a service inspired (and partly based on) my work it feels a lot better.</p>
<p>His other claims are true too, quite a few of the bugs and limitations found in my implementation has been resolved, and his description of the conceptual changes required for that could prove quite valuable.</p>
<p>Thanks and sorry about my accusations.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/09/05/spellingcow-followup/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>SpellingCow</title>
		<link>http://me.eae.net/archive/2006/09/04/spellingcow/</link>
		<comments>http://me.eae.net/archive/2006/09/04/spellingcow/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 22:45:16 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Programming</category>
	<category>Web</category>
	<category>Software</category>
	<category>Rants</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/09/04/spellingcow/</guid>
		<description><![CDATA[Browsed slashdot earlier today, and saw a post about SpellingCow, a remotely hosted ajax spell checker.
My initial reaction was &#8220;cool, someone picked up on my ajax spell checker idea and made something useful out of it&#8221;.
However as soon as I tried it I noticed a remarkable resemblance to the LiteSpellChecker component I wrote, as a [...]]]></description>
			<content:encoded><![CDATA[<p>Browsed slashdot earlier today, and saw <a href="http://developers.slashdot.org/article.pl?sid=06/09/04/1738240">a post</a> about <a href="http://www.spellingcow.com/">SpellingCow</a>, a remotely hosted ajax spell checker.<br />
My initial reaction was &#8220;cool, someone picked up on my ajax spell checker idea and made something useful out of it&#8221;.</p>
<p>However as soon as I tried it I noticed a remarkable resemblance to the <a href="http://me.eae.net/stuff/litespellchecker/litedemo.html">LiteSpellChecker</a> component I wrote, as a proof of concept, about a year ago.</p>
<p><b>LiteSpellChecker</b><br />
<img src="http://me.eae.net/images/litespellchecker.png" alt="Screenshot of my LiteSpellChecker" style="width: 393px; height: 250px;"/></p>
<p><b>SpellingCow</b><br />
<img src="http://me.eae.net/images/spellingcow.png" alt="Screenshot of SpellingCow" style="width: 448px; height: 259px;"/></p>
<p>That menu looks a bit too similar for it to be a coincidence so I decided to dig a bit deeper.<br />
Perhaps they&#8217;d actually based it on my implementation and fixed some of the bugs in it, that would have been nice. As both my spell checker implementations are available under the MIT license there&#8217;s nothing preventing anyone from using my code as a base or starting point.</p>
<p>Their javascript file starts out with the following comment and all code is obfuscated.</p>
<pre>/*
 * © 2004-2006 SpellingCow Software - All rights reserved.  This is not free software.
 */</pre>
<p>Not satisfied with that I started to de-obfuscate the code. Quite soon I encountered segments that looked awfully familiar:</p>
<p><b>Style declaration</b></p>
<pre>webfx-spellchecker-menu {
	border: 1px solid;
	border-color: threedlightshadow threeddarkshadow threeddarkshadow threedlightshadow;
	position: absolute;
}

.webfx-spellchecker-menu .inner {
	border: 1px solid;
	border-color: threedhighlight threedshadow threedshadow threedhighlight;
	background: threedface;
	padding: 2px;
}

.webfx-spellchecker-menu a {
	display: block;
	font: menu;
	color: menutext;
	padding: 1px 5ex 1px 3ex;
	text-decoration: none;
}

.webfx-spellchecker-menu a:hover {
	background: highlight;
	color: highlighttext;
}

.webfx-spellchecker-menu .separator {
	border-top: 1px solid threedshadow;
	border-bottom: 1px solid threedhighlight;
	overflow: hidden;
	margin: 2px;
}

webFXSpellCheckHandler.invalidWordBg =
'url(http://me.eae.net/stuff/spellchecker/images/redline.png) repeat-x bottom';</pre>
<pre>this.g('.sc_ayt_menu','
	border: 1px solid ;
	border-color: threedlightshadow threeddarkshadow threeddarkshadow threedlightshadow;
	padding:0px;
	position:absolute;
	z-index:4;
');

this.g('.sc_ayt_menu .inner','
	border: 1px solid ;
	border-color: threedhighlight threedshadow threedshadow threedhighlight;
	background: threedface;
	padding: 2px;
	text-align:left
');

this.g('.sc_ayt_menu a','
	display: block;
	font: menu;
	color: menutext;
	padding: 1px 5ex 1px 3ex;
	text-decoration: none;
');

this.g('.sc_ayt_menu a:hover','
	background: highlight;
	color: highlighttext;
');

this.g('.sc_ayt_menu .separator','
	border-top: 1px solid threedshadow;
	border-bottom: 1px solid threedhighlight;
	overflow: hidden;
	margin: 2px;
	padding: 0px;
');

this.g('#spellingcow_div .red_span',
	az + "background: url(" + ayty + "images/redline.png) repeat-x bottom;
");</pre>
<p>The declaration for the menu is pretty much exactly the same and even though SpellingCow marks misspelled words with a yellow background there&#8217;s still a style declaration using reline.png, precisely matching the one I use.</p>
<p><b>Menu Creation</b></p>
<pre>webFXSpellCheckHandler._init = function() {
	var menu, inner, item;

	menu = document.createElement('div');
	menu.id = 'webfxSpellCheckMenu';
	menu.className = 'webfx-spellchecker-menu';
	menu.style.display = 'none';

	inner = document.createElement('div');
	inner.className = 'inner';
	menu.appendChild(inner);

	item = document.createElement('div');
	item.className = 'separator';
	inner.appendChild(item);

	item = document.createElement('a');
	item.href = 'javascript:webFXSpellCheckHandler._ignoreWord();'
	item.appendChild(document.createTextNode('Ignore'));
	inner.appendChild(item);

	document.body.appendChild(menu);
};</pre>
<pre>function aytv(){
	this.ad = document.createElement('div');
	this.ad.className = 'sc_ayt_menu';
	this.ad.style.display = 'none';

	var et = document.createElement('div');
	et.className = 'inner';
	this.ad.appendChild(et);

	var bb = document.createElement('div');
	bb.className = 'separator';
	et.appendChild(bb);

	bb = document.createElement('a');
	if (aytaa) { bb.href = 'javascript:aytk.ignore_word();' }
	else { bb.href = 'javascript:oSpell.ignore_word();' }
	bb.appendChild(document.createTextNode('Ignore'));
	et.appendChild(bb);
}</pre>
<p>Code for constructing the popup menu on initilization. The SpellingCow implementation does it exatly the same way as mine, it even uses the same class and method names. </p>
<p><b>Displaying suggestions</b></p>
<pre>webFXSpellCheckHandler._showSuggestionsMenu = function(e, el, word, instance) {
	var menu, len, item, sep, frame, aSuggestions, doc, x, y, o;

	if (!webFXSpellCheckHandler.words[word]) { return; }

	menu = document.getElementById('webfxSpellCheckMenu');
	len = menu.firstChild.childNodes.length;
	while (len > 2) { menu.firstChild.removeChild(menu.firstChild.firstChild); len--; }
	sep = menu.firstChild.firstChild;

	aSuggestions = webFXSpellCheckHandler.words[word][1];
	len = aSuggestions.length;
	if (len > 10) { len = 10; }
	for (i = 0; i < len; i++) {
		item = document.createElement('a');
		item.href = 'javascript:webFXSpellCheckHandler._replaceWord(' + instance + ', "' + aSuggestions[i] + '");'
		item.appendChild(document.createTextNode(aSuggestions[i]));
		menu.firstChild.insertBefore(item, sep);
	}
	if (len == 0) {
		item = document.createElement('a');
		item.href = 'javascript:void(0);'
		item.appendChild(document.createTextNode('No suggestions'));
		menu.firstChild.insertBefore(item, sep);
	}

	var n;
	for (n = 0; n < webFXSpellCheckHandler.instances.length; n++) {
		if (webFXSpellCheckHandler.instances[n].doc == el.ownerDocument) {
			frame = webFXSpellCheckHandler.instances[n].el;
			doc   = webFXSpellCheckHandler.instances[n].doc;
	}	}

	x = 0; y = 0;
	for (o = frame; o; o = o.offsetParent) {
		x += (o.offsetLeft - o.scrollLeft);
		y += (o.offsetTop - o.scrollTop);
	}

	if (document.all) {
		menu.style.left = x + (e.pageX || e.clientX) + 'px';
		menu.style.top  = y + (e.pageY || e.clientY) + (el.offsetHeight/2) + 'px';
	}
	else {
		menu.style.left = x + ((e.pageX || e.clientX) - document.body.scrollLeft) + 'px';
		menu.style.top  = y + ((e.pageY || e.clientY) - document.body.scrollTop) + (el.offsetHeight/2) + 'px';
	}
	menu.style.display = 'block';

	webFXSpellCheckHandler.activeWord = word;
};</pre>
</pre>
<pre>aytv.prototype.show_menu = function(e,ak) {
	var bb, bi, co = document.getElementById(ak), fv = this.ad.firstChild.childNodes.length;

	while (fv > 2) { this.ad.firstChild.removeChild(this.ad.firstChild.firstChild); fv--; }

	var cs = co.innerHTML;
	bi = aytk.m[cs].ce.split(', ');
	fv = bi.length;

	if (fv > 10) { fv = 10; }
	for (var i = fv - 1; i >=0; i--) {
		bb = document.createElement('a');
		if (aytaa) { bb.href = 'javascript:aytk.replace_word("' + ak + '", "'+bi[i]+'");' }
		else { bb.href = 'javascript:oSpell.replace_word("' + ak + '", "' + bi[i] + '");' }
		bb.appendChild(document.createTextNode(bi[i]));
		this.ad.firstChild.insertBefore(bb,this.ad.firstChild.firstChild);
	}

	if (aytk.m[cs].ce == '' ) {
		bb = document.createElement('a');
		bb.href = 'javascript:void(0);';
		bb.style.color='gray';
		bb.appendChild(document.createTextNode('- No suggestions -'));
		this.ad.firstChild.insertBefore(bb,this.ad.firstChild.firstChild);
	}

	var db = 0, da = 0;

	if ((document.documentElement) &#038;&#038; (document.documentElement.scrollTop)) {
		db = e.clientX + document.documentElement.scrollLeft;
		da = e.clientY + document.documentElement.scrollTop;
	}
	else if (document.body) {
		db = e.clientX + document.body.scrollLeft;
		da = e.clientY + document.body.scrollTop;
	}
	else {
		db = e.pageX;
		da = e.pageY;
	}

	if (document.all) {
		this.ad.style.left = db + 'px';
		this.ad.style.top = da + (co.offsetHeight/2) + 'px';
	}
	else {
		this.ad.style.left = db + 'px';
		this.ad.style.top = da + (co.offsetHeight/2) + 'px';
	}
	this.ad.style.display = 'block';
}</pre>
<p>Code for populating the menu, the data it&#8217;s populated with is accessed i bit differently but the menu is cleared, populated and positioned in the same way. Even the &#8216;No suggestions&#8217; label is the same.</p>
<p><b>Get Selection Code</b></p>
<pre>WebFXLiteSpellChecker.prototype._getSelection = function() {
	if (document.all) {
		var sr, r, offset;
		sr = document.selection.createRange();
		r = sr.duplicate();
		r.moveToElementText(this.elText);
		r.setEndPoint('EndToEnd', sr);
		this._start = r.text.length - sr.text.length;
		this._end   = this._start + sr.text.length;
	}
	else {
		this._start = this.elText.selectionStart;
		this._end   = this.elText.selectionEnd;
	}
};</pre>
<pre>aytm.prototype.ch = function(return_is_selected) {
	if (document.all){
		var cn, es, offset;
		cn = document.selection.createRange();
		es = cn.duplicate();
		es.moveToElementText(this.a);
		es.setEndPoint('EndToEnd',cn);
		var gv = es.text.replace(/rn/g,'n'), fu = cn.text.replace(/rn/g,'n');
		if (return_is_selected) { return fu.length; }
		else { return gv.length - fu.length; }
	}
	else {
		if (return_is_selected) { return (this.a.selectionEnd - this.a.selectionStart); }
		else { return this.a.selectionStart; }
	}
};</pre>
<p>Code for determining selection. The original method determines the start and end position while the SpellingCow one returns either the length of the selection or the start position, depending on the parameter.<br />
Although it&#8217;s not an exact match there&#8217;s a striking resemblance, <em>the SpellingCow one even has the same unused offset variable that I forgot to remove</em> while testing it.</p>
<p><b>Node Updating</b></p>
<pre>	i = 0;
	startNode = endNode = null;
<code>	for (node = this.elCont.firstChild; node; node = node.nextSibling) {
		if (node.nodeType == 1) {
			str = (node.firstChild)?node.firstChild.nodeValue:'n';
		}
		else { str = node.nodeValue; }
		n = str.length;</code>

		if ((startNode == null) &#038;&#038; (i + n >= startPos)) {
			startNode = node;
			word = str.substr(0, startPos - i);
		}
		<code>if (i + n >= endPos) {</code>
			endNode = node.nextSibling;
			word += str.substr(endPos - i, n - (endPos - i));
			break;
		}

		<code>i += n;</code>
	}</pre>
<pre>	var ar = this.r.firstChild, bl = 0, fi = '';

<code>	for (i = 0; ar; ar = ar.nextSibling ){
		if (ar.nodeType == 1){
			fi = (ar.firstChild)?ar.firstChild.nodeValue:'n';
		}
		else { fi = ar.nodeValue; };
		bl += fi.length;</code>

		if (bl >= this.ag) {
			return ((ar.className) &#038;&#038; (ar.className == &#8216;red_span&#8217;))?ar.id:'&#8217;;
		}
	}</pre>
<p>This one is not so obvious, it&#8217;s a part of the logic that determines where a change has been made. It loops through nodes and find the first and last word affected by counting characters. The SpellingCow one only includes the check for the last word.</p>
<p>This is just a few of the obvious similarities, there are plenty more.</p>
<p>I&#8217;m not saying that they&#8217;ve copied my LiteSpellChecker implementation, there are far too many differences in key parts of it for that.<br />
However it seems quite likely that they&#8217;ve used my implementation as a starting point, and in some places it remains unchanged and shines through.</p>
<p>It&#8217;s not that I mind people using and extending my work, that is in fact exactly why I chose to talk about it and to release it under an open source licence. However removing the copyright notice is not okay and I can&#8217;t believe people still think they can get away with it simply by obfuscating the code.</p>
<p>And why? The MIT license clearly allows royalty free commercial usage, all that is required is that the copyright notice is left intact.</p>
<p><b>Update</b><br />
Turns out they actually give me <a href="http://www.spellingcow.com/site_install.html">some credit</a>:<br />
<blockquote>The red squiggley was produced by Emil A Eklund who also inspired much of the mechanics of SpellingCow. This is my omage to him. Thanks!!</p></blockquote>
<p>That&#8217;s pretty much all it takes, just wish it wasn&#8217;t tucked away in the installation instructions section&#8230;</p>
<p><b>Update 2:</b><br />
See <a href="http://me.eae.net/archive/2006/09/05/spellingcow-followup/">the followup</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/09/04/spellingcow/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Printing Canvas</title>
		<link>http://me.eae.net/archive/2006/08/28/printing-canvas/</link>
		<comments>http://me.eae.net/archive/2006/08/28/printing-canvas/#comments</comments>
		<pubDate>Mon, 28 Aug 2006 13:10:20 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Programming</category>
	<category>Web</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/08/28/printing-canvas/</guid>
		<description><![CDATA[Since I first started with IE Canvas the number one request has been printing support. The same applies to the successor, ExplorerCanvas and the WebFX Chart component.
In fact about 90% of the mails I&#8217;ve received about these projects has been about printing.
So a while ago I started to look into it, however Rostislav Hristov beat [...]]]></description>
			<content:encoded><![CDATA[<p>Since I first started with IE Canvas the number one request has been printing support. The same applies to the successor, ExplorerCanvas and the WebFX Chart component.<br />
In fact about 90% of the mails I&#8217;ve received about these projects has been about printing.</p>
<p>So a while ago I started to look into it, however <a href="http://sourceforge.net/tracker/index.php?func=detail&#038;aid=1512738&#038;group_id=163391&#038;atid=827560">Rostislav Hristov</a> beat me to it. Thanks to him the current trunk version of ExplorerCanvas now supports printing of canvas elements in IE.</p>
<p>I&#8217;ve updated the <a href="http://webfx.eae.net/dhtml/chart/chart.html">WebFX Chart component</a> to include the latest excanvas and also removed the media=&#8221;screen&#8221; declarations from the style sheet links.<br />
As I don&#8217;t have access to a printer right now I haven&#8217;t been able to test it properly yet, however it shows up in print preview, both in IE and Mozilla and printed to file it looks fine.</p>
<p>Print preview in IE:<br />
<img src="/images/canvasprintie.png" style="width: 500px; height: 350px;" alt="Print preview of WebFX Chart componenet in IE" /></p>
<p>Print preview in Mozilla:<br />
<img src="/images/canvasprintmoz.png" style="width: 500px; height: 350px;" alt="Print preview of WebFX Chart componenet in Mozilla" /></p>
<p>Now that graphics generated client side can be printed in both major browsers the biggest obstacle has been removed and there shouldn&#8217;t been much holding it&#8217;s adaption back.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/08/28/printing-canvas/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>WebKit for Windows</title>
		<link>http://me.eae.net/archive/2006/08/07/webkit-for-windows/</link>
		<comments>http://me.eae.net/archive/2006/08/07/webkit-for-windows/#comments</comments>
		<pubDate>Mon, 07 Aug 2006 18:18:18 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Web</category>
	<category>Software</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/08/07/webkit-for-windows/</guid>
		<description><![CDATA[Now this is great news; Apple&#8217;s WebKit (the rendering component powering the Safari web browser) has been ported to Windows, complete with a browser called Swift. I doubt many will use it, at least for now, it&#8217;s not quite as mature as the other offerings. However having another browser to chose from is a good [...]]]></description>
			<content:encoded><![CDATA[<p>Now this is great news; Apple&#8217;s WebKit (the rendering component powering the Safari web browser) has been ported to Windows, complete with a browser called Swift. I doubt many will use it, at least for now, it&#8217;s not quite as mature as the other offerings. However having another browser to chose from is a good thing and I&#8217;m sure it will improve over time.</p>
<p>The most important point it that it will give web developers using Windows the ability to test their web pages and applications in a WebKit based browser, without having to acquire Apple hardware or install KDE. - Thus this could very well lead improved support for Safari and Konqueror.</p>
<p>Download from <a href="http://www.getwebkit.org/">getwebkit.org</a>.</p>
<p>In other related news, a windows port of the Evolution has finally been released; <a href="http://shellter.sourceforge.net/evolution/">Evolution on Win32</a>.</p>
<p>Evolution has been my e-mail client of choice ever since I first tried it some years ago. Now I can finally use it on all my computers. It&#8217;s a bit unstable under windows still and I can&#8217;t get the LDAP support to work properly for contacts, but other than that it seems quite complete and usable.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/08/07/webkit-for-windows/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Summer</title>
		<link>http://me.eae.net/archive/2006/07/07/summer/</link>
		<comments>http://me.eae.net/archive/2006/07/07/summer/#comments</comments>
		<pubDate>Fri, 07 Jul 2006 14:43:07 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Personal</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/07/07/summer/</guid>
		<description><![CDATA[ Been an amazing summer so far, and that&#8217;s not not just by Swedish standards, with temperatures around 30 degrees Celsius (86 Fahrenheit) and clear skies. I&#8217;m having a hard time remember the last time the weather was this nice in June, usually Swedish summers are quite bad with temperatures a lot lower and constant [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://gallery.eae.net/2006/orno/preview/013.jpeg?dimension=3" style="width: 180px; height: 120px;" class="img" alt="Sail boat in the Stockholm archipelago" title="Sail boat in the Stockholm archipelago" /> Been an amazing summer so far, and that&#8217;s not not just by Swedish standards, with temperatures around 30 degrees Celsius (86 Fahrenheit) and clear skies. I&#8217;m having a hard time remember the last time the weather was this nice in June, usually Swedish summers are quite bad with temperatures a lot lower and constant showers.</p>
<p>Given that it&#8217;s probably no surprise that I&#8217;ve spent most, if not all, of my spare time outside. Either cruising the archipelago or enjoying the sun on land.</p>
<p>Later today I&#8217;m going to a Depeche Mode concert and on Sunday I&#8217;m leaving for a ten day vacation in Mexico so don&#8217;t expect to hear back from me in a while <img src='http://me.eae.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/07/07/summer/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>WebFX License Change</title>
		<link>http://me.eae.net/archive/2006/05/30/webfx-license-change/</link>
		<comments>http://me.eae.net/archive/2006/05/30/webfx-license-change/#comments</comments>
		<pubDate>Tue, 30 May 2006 17:44:04 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Web</category>
	<category>Software</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/05/30/webfx-license-change/</guid>
		<description><![CDATA[We&#8217;ve just announced a license change over at WebFX, replacing our commercial/non-commercial/gpl triple with the Apache Software License 2.0.
Although most of the components available there are relatively old, the bulk of them from 2001/2002, some even older, I still believe some of them are relevant today.
With this license change more projects, open source as well [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve just announced a license change over at <a href="http://webfx.eae.net/">WebFX</a>, replacing our commercial/non-commercial/gpl triple with the <a href="http://webfx.eae.net/license/asl2">Apache Software License 2.0</a>.</p>
<p>Although most of the components available there are relatively old, the bulk of them from 2001/2002, some even older, I still believe some of them are relevant today.<br />
With this license change more projects, open source as well as commercial, will hopefully be able to use and extend the collection of widgets, libraries and techniques we&#8217;ve created and refined over the years.</p>
<p>Head over there for the full announcement and post your feedback in the <a href="http://webfx.eae.net/webboard/">webboard</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/05/30/webfx-license-change/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>The List, One Year Later</title>
		<link>http://me.eae.net/archive/2006/05/29/the-list-one-year-later/</link>
		<comments>http://me.eae.net/archive/2006/05/29/the-list-one-year-later/#comments</comments>
		<pubDate>Mon, 29 May 2006 06:24:11 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Programming</category>
	<category>Web</category>
	<category>Software</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/05/29/the-list-one-year-later/</guid>
		<description><![CDATA[About a year ago I wrote about Joel Spolsky&#8217;s list of things that cannot be well done in web applications. 

Create a fast drawing program.
Build a real-time spell checker with wavy red underlines.
Warn users that they are going to lose their work if they hit the close box of the browser.
Update a small part of [...]]]></description>
			<content:encoded><![CDATA[<p>About a year ago I wrote about <a href="http://www.joelonsoftware.com/articles/APIWar.html">Joel Spolsky&#8217;s list</a> of things that cannot be well done in web applications. </p>
<ol>
<li>Create a fast drawing program.</li>
<li>Build a real-time spell checker with wavy red underlines.</li>
<li>Warn users that they are going to lose their work if they hit the close box of the browser.</li>
<li>Update a small part of the display based on a change that the user makes without a full roundtrip to the server.</li>
<li>Create a fast keyboard-driven interface that doesn’t require the mouse.</li>
<li>Let people continue working when they are not connected to the Internet.</li>
</ol>
<p>Last year Erik established that Item 2, 3, 4 and 5 where <a href="http://erik.eae.net/archives/2005/05/28/01.34.16/">already accomplished</a> and predicted that item 1 would be implemented within a year.</p>
<p>Now, a year later it looks like he was right; Rafael Robayna&#8217;s <a href="http://caimansys.com/painter/">Canvas Painter</a> may not be feature complete but it sure is fast.</p>
<p>That leaves item 6 as the only outstanding point, I doubt it will be that way for long though.</p>
<p>The recent introduction of <a href="http://codinginparadise.org/weblog/2006/04/now-in-browser-near-you-offline-access.html">dojo storage</a> could well contribute to solving that, we&#8217;ll just have to wait for an application to utilize it to achieve offline usability..</p>
<p>Even more existing is the the implementation of <a href="http://www.whatwg.org/specs/web-apps/current-work/#scs-client-side">Client-side storage</a> in recent builds of Mozilla, including the preview release <a href="http://www.mozilla.org/projects/bonecho/releases/2.0a3.html">Bon Echo Alpha 3</a>, which opens up the possibility to implement more exotic storage mechanisms.</p>
<p>Projects such as <a href="http://trimpath.com/project/wiki/TrimQuery">TrimQuery</a> may become a lot more useful an relevant now that there&#8217;s a mechanism for storing large amounts of data on the client side.</p>
<p>This is going to be a very interesting year in the web development world!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/05/29/the-list-one-year-later/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Chart 1.02</title>
		<link>http://me.eae.net/archive/2006/04/16/chart-102/</link>
		<comments>http://me.eae.net/archive/2006/04/16/chart-102/#comments</comments>
		<pubDate>Sun, 16 Apr 2006 07:33:22 +0000</pubDate>
		<dc:creator>Emil</dc:creator>
		
	<category>Programming</category>
	<category>Web</category>
	<category>Software</category>
		<guid isPermaLink="false">http://me.eae.net/archive/2006/04/16/chart-102/</guid>
		<description><![CDATA[I&#8217;ve update the WebFX Chart widget to use the new, and superior, ExplorerCanvas IE Emulation layer instead of my old IECanvas one.
I&#8217;ve also included the excellent jsgraphics painter implementation contributed by Ma Bingyao in the official version.
This brings the number of painter implementations to three; canvas, svg and jsgraphics, although the svg one is still [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve update the WebFX Chart widget to use the new, and superior, <a href="http://sourceforge.net/projects/excanvas">ExplorerCanvas</a> IE Emulation layer instead of my old <a href="http://me.eae.net/archive/2005/12/29/canvas-in-ie/">IECanvas</a> one.</p>
<p>I&#8217;ve also included the excellent <a href="http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm">jsgraphics</a> painter implementation contributed by <a href="http://www.coolcode.cn/?p=123">Ma Bingyao</a> in the official version.</p>
<p>This brings the number of painter implementations to three; canvas, svg and jsgraphics, although the svg one is still lacking, and the browser support now includes most, if not all, modern browsers.</p>
<ul>
<li><a href="http://webfx.eae.net/dhtml/chart/chart.html">Chart 1.02</a></li>
<li><a href="http://webfx.eae.net/dhtml/chart/demo.html">Canvas Demo</a></li>
<li><a href="http://webfx.eae.net/dhtml/chart/svgdemo.xhtml">SVG Demo (Mozilla/Opera only)</a></li>
<li><a href="http://webfx.eae.net/dhtml/chart/jsgdemo.html">JsGraphics Demo</a></li>
<li><a href="http://webfx.eae.net/download/chart102.zip">Download</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRSS>http://me.eae.net/archive/2006/04/16/chart-102/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.566 seconds -->
<!-- Cached page served by WP-Cache -->
