<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-5251629</id><updated>2008-05-02T10:13:24.366+02:00</updated><title type='text'>stefan.goessner</title><link rel='alternate' type='text/html' href='http://goessner.net/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default?start-index=26&amp;max-results=25'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://goessner.net'/><author><name>stefan</name></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5251629.post-4338109971700016268</id><published>2007-09-01T23:14:00.000+02:00</published><updated>2007-09-01T23:25:30.372+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XPath'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><title type='text'>JSONPath - XPath for JSON</title><content type='html'>&lt;p&gt;&lt;a href="http://www.tbray.org/ongoing/When/200x/2006/12/21/JSON"&gt;Here&lt;/a&gt; and &lt;a href="http://www.smartclient.com/#_Data.Integration_JSON_JSON.XPath.Binding"&gt;there&lt;/a&gt; on the web we can find a &lt;a href="http://blog.jclark.com/2007/04/xml-and-json.html"&gt;discussion&lt;/a&gt; or &lt;a href="http://labs.adobe.com/technologies/spry/articles/json_dataset/index.html"&gt;solution&lt;/a&gt; for something like &lt;a href="http://en.wikipedia.org/wiki/XPath"&gt;XPath&lt;/a&gt; for &lt;a href="http://json.org/"&gt;JSON&lt;/a&gt;. Despite the fact, that JSON structures can be processed by the C family of programming languages quite easily, there should be a benefit in having some kind of &lt;em&gt;XPath4JSON&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;So I was thinking about a suitable path expression syntax for addressing portions of any JSON structure. Those path expressions should
&lt;/p&gt;&lt;ul&gt;
&lt;li class="u"&gt;be naturally based on C language family characteristics.&lt;/li&gt;
&lt;li class="u"&gt;cover only essential parts of XPath 1.0.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;As a result here is &lt;em&gt;JSONPath&lt;/em&gt;, wich is a dual thing. Primarily JSONPath is a path expression syntax, which can select parts of JSON structures in the same way as XPath expressions select nodes of XML documents. Such an expression may look like&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$..book[2].title&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and is quite similar to its XPath counterpart&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//book[3]/title&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Currently there is a small set of nine JSONPath &lt;a href="http://goessner.net/articles/JsonPath/index.html#e2"&gt;syntax elements&lt;/a&gt;, which allows the construction of sophisticated path expressions.&lt;/p&gt;
&lt;p&gt;Furthermore JSONPath is a lightweight tool implemented in &lt;em&gt;Javascript&lt;/em&gt; and &lt;em&gt;PHP&lt;/em&gt; for accessing JSON structures on the client and the server.&lt;/p&gt;
&lt;p&gt;You can download
&lt;/p&gt;&lt;ul&gt;
&lt;li class="u"&gt;&lt;a href="http://code.google.com/p/jsonpath/"&gt;jsonpath.js&lt;/a&gt;&lt;/li&gt;
&lt;li class="u"&gt;&lt;a href="http://code.google.com/p/jsonpath/"&gt;jsonpath.php&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;for free and read &lt;a href="http://goessner.net/articles/JsonPath/"&gt;more&lt;/a&gt; about it.
&lt;/p&gt;
&lt;h4&gt; Update: &lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.raboof.com/"&gt;Atif Aziz&lt;/a&gt; came up with a C# port of JSONPath in a very short time (&lt;a href="http://code.google.com/p/jsonpath/"&gt;jsonpath.cs&lt;/a&gt;). Thanks for that.
&lt;/p&gt;

&lt;p&gt;
&lt;a class="tag" href="http://technorati.com/tag/json" rel="tag"&gt;JSON&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/xpath" rel="tag"&gt;XPath&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/php" rel="tag"&gt;PHP&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/csharp" rel="tag"&gt;C#&lt;/a&gt;
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2007/09/jsonpath-xpath-for-json.html' title='JSONPath - XPath for JSON'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=4338109971700016268&amp;isPopup=true' title='3 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/4338109971700016268'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/4338109971700016268'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-114924772973923545</id><published>2006-06-02T13:27:00.000+02:00</published><updated>2006-10-08T22:38:38.520+02:00</updated><title type='text'>Converting Between XML and JSON @ XML.com</title><content type='html'>&lt;p&gt;
&lt;img style="float:right;" src="/img/xml_json.gif" alt="/img/xml_json.gif" title="/img/xml_json.gif"/&gt;
&lt;a href="http://xml.com"&gt;xml.com&lt;/a&gt; has published my article &lt;a href="http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html"&gt;Converting Between XML and JSON&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The conversion scripts are &lt;a href="http://goessner.net/download/prj/jsonxml/"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Update:&lt;/h3&gt;
&lt;p&gt;There are some bug fixes and updates available to &lt;i&gt;xml2json.js&lt;/i&gt; and &lt;i&gt;json2xml.js&lt;/i&gt;. Read more in the &lt;a href="http://goessner.net/download/prj/jsonxml/"&gt;download section&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;a class="tag" href="http://technorati.com/tag/xml" rel="tag"&gt;XML&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/json" rel="tag"&gt;JSON&lt;/a&gt;
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/06/converting-between-xml-and-json-xmlcom.html' title='Converting Between XML and JSON @ XML.com'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=114924772973923545&amp;isPopup=true' title='15 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114924772973923545'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114924772973923545'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-114855494156359165</id><published>2006-05-25T12:59:00.000+02:00</published><updated>2006-05-25T13:29:27.690+02:00</updated><title type='text'>Towel Day</title><content type='html'>&lt;p&gt;Don't forget &amp;#8230; today is &lt;a href="http://de.wikipedia.org/wiki/Towel_Day"&gt;towel day&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The reason why this date was chosen, is obviously a numerical one:&lt;/p&gt;
&lt;div class="eq"&gt;25&lt;sub&gt;16&lt;/sub&gt; + 5&lt;sub&gt;16&lt;/sub&gt; = 42&lt;sub&gt;10&lt;/sub&gt;&lt;/div&gt;
&lt;p&gt;
&lt;a class="tag" href="http://technorati.com/tag/towelday" rel="tag"&gt;TowelDay&lt;/a&gt;
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/05/towel-day.html' title='Towel Day'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=114855494156359165&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114855494156359165'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114855494156359165'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-114848076762318837</id><published>2006-05-24T16:25:00.000+02:00</published><updated>2006-05-24T16:30:08.740+02:00</updated><title type='text'>XTech 2006</title><content type='html'>&lt;p&gt;I had the opportunity to attend the web technology conference &lt;a href="http://xtech06.usefulinc.com/"&gt;XTech 2006&lt;/a&gt; in Amsterdam last week.&lt;/p&gt;
&lt;p&gt;All in all it was a great conference, starting with an &lt;a href="http://xtech06.usefulinc.com/content/ajax"&gt;Ajax Developers' Day&lt;/a&gt; chaired by &lt;a href="http://simon.incutio.com/"&gt;Simon Willison&lt;/a&gt; of Yahoo!.&lt;/p&gt;
&lt;p&gt;What followed were 3 days of interesting sessions and conversation with nice people mostly about technical stuff.&lt;/p&gt;
&lt;p&gt;Finally the real highlight was the closing note "&lt;a href="http://developer.mozilla.org/presentations/xtech2006/javascript/"&gt;Javascript 2 and the Future of the Web&lt;/a&gt;" of &lt;a href="http://weblogs.mozillazine.org/roadmap/"&gt;Brendan Eich&lt;/a&gt;, the inventor of javascript.&lt;/p&gt;
&lt;p&gt;
&lt;a class="tag" href="http://technorati.com/tag/xtech2006" rel="tag"&gt;XTech2006&lt;/a&gt;
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/05/xtech-2006.html' title='XTech 2006'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=114848076762318837&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114848076762318837'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114848076762318837'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-114440844356847897</id><published>2006-04-07T13:12:00.000+02:00</published><updated>2006-04-07T13:57:56.790+02:00</updated><title type='text'>Web Component Model</title><content type='html'>&lt;p&gt;After reading the article about &lt;a href="http://ajaxian.com/archives/ale-ajax-linking-and-embedding"&gt;ALE - Ajax Linking &amp;amp; Embedding&lt;/a&gt; over at &lt;a href="http://ajaxian.com/"&gt;Ajaxian&lt;/a&gt; I was thinking a while about the potential of this concept. I wasn't so much drawing the parallel to &lt;abbr title="Object Linking &amp;amp; Embedding"&gt;OLE&lt;/abbr&gt;, but stepped down a level to the concept of Microsoft's &lt;abbr title="Component Object Model"&gt;COM&lt;/abbr&gt;-Programming.&lt;/p&gt;
&lt;p&gt;Basically COM-Interfaces allow design by contract via immutable interfaces and demand separation of interface and implementation. Given this, COM-components implementing identical interfaces are arbitrarily interchangeable.&lt;/p&gt;
&lt;p&gt;Considering an inline web component, we might start with a clearly defined document fragment. A very good example for that is the open standard microformat &lt;a href="http://microformats.org/wiki/xoxo"&gt;XOXO&lt;/a&gt;, which is
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;A simple, open outline format written in standard XHTML and suitable for embedding in (X)HTML, Atom, RSS, and arbitrary XML.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;
Given a specific XOXO structure, we could easily define two different presentations via CSS, which might be even switched by the user.&lt;/p&gt;
&lt;p&gt;But what's about behaviour. XOXO components might be
&lt;/p&gt;&lt;ul&gt;
&lt;li class="u"&gt;collapsable/expandable (&lt;a href="http://homepage.mac.com/ctholland/thelab/outlines/"&gt;example&lt;/a&gt;),&lt;/li&gt;
&lt;li class="u"&gt;resortable via drag and drop (&lt;a href="http://tool-man.org/examples/sorting.html"&gt;example&lt;/a&gt; by Tim Taylor).&lt;/li&gt;
&lt;li class="u"&gt;collapsable/expandable and editable (&lt;a href="http://www.decafbad.com/2005/07/map-test/tree2.html"&gt;example&lt;/a&gt; by &lt;a href="http://www.decafbad.com/blog/"&gt;Les Orchard&lt;/a&gt;).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;So if there would be a standardized object interface &amp;#8211; perhaps defined alongside with the microformats specification, we rather did a big step forward to a truely reusable, implementation independent &lt;em&gt;inline web component&lt;/em&gt;. The interface definition of a collapsable XOXO element might look somewhat like:
&lt;/p&gt;&lt;pre class="code"&gt;interface XOXOCollapsableElement: Element {
void collapseItem(bool collapse);
void forEachItem(Function callback);
NodeList filterItems(Function callback);
...
};&lt;/pre&gt;&lt;p&gt;
There might be another interface for an editable XOXO element.
&lt;/p&gt;&lt;pre class="code"&gt;interface XOXoEditableElement: Element {
...
};&lt;/pre&gt;&lt;p&gt;
Now as a user i could download a specific XOXO object implementation, which implements either both interfaces or merely the &lt;code&gt;XOXOCollapsableElement&lt;/code&gt; interface.&lt;/p&gt;
&lt;p&gt;I believe, the long term benefit is worth the effort of agreeing to common interfaces for heavily reused inline web components.
&lt;/p&gt;
&lt;p&gt;
&lt;a class="tag" href="http://technorati.com/tag/ajax" rel="tag"&gt;Ajax&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/dom" rel="tag"&gt;DOM&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/microformats" rel="tag"&gt;Microformats&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/04/web-component-model.html' title='Web Component Model'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=114440844356847897&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114440844356847897'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114440844356847897'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-114129965424025327</id><published>2006-03-02T18:40:00.000+01:00</published><updated>2006-03-02T16:03:48.813+01:00</updated><title type='text'>Das wissenschaftliche Web</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span/&gt;&lt;p&gt;Der CSS Krieger &lt;a href="http://my.opera.com/White Lynx/archive/monthly/?month=200602"&gt; George Chavchanidze&lt;/a&gt; kritisiert die gegenwärtigen Webstandards aus der Sicht eines Wissenschaftlers …&lt;/p&gt;­
&lt;blockquote cite="http://my.opera.com/White Lynx/archive/monthly/?month=200602"&gt;&lt;p&gt;­
Being emerged in European Centre for Nuclear Research (CERN), world wide web quickly evolved into entertainment oriented media and left many scientists disappointed. Web standards were science unfriendly and embedding complex mathematical formulae in web pages was far from being easy.­
&lt;/p&gt;&lt;/blockquote&gt;­
&lt;p&gt;… und spricht mir damit aus der Seele. Es zeichnet sich speziell bei der Darstellung mathematischer Formeln keine allgemeine Einigung auf einen gemeinsamen Markup Standard ab; nicht zuletzt wegen individueller Vorlieben.&lt;/p&gt;­
&lt;blockquote&gt;&lt;p&gt;­
Some dislike angle brackets some curly ones, some want to have self contained markup, some want to integrate math oriented markup with the rest of webstandards, some want to code pages manually, some think that &lt;em&gt;what they see is what they get&lt;/em&gt;, some prefer to have clear hierarchical structure, some vote for drastically abridged Unicode based notations­
&lt;/p&gt;&lt;/blockquote&gt;­
&lt;p&gt;Trotz dieser gegenwärtig "verrückten" Verhältnisse sieht er einen natürlichen Ausweg einhergehend mit der Weiterentwicklung – und Implementierung – von CSS &lt;em&gt;(inline-blocks, inline-tables,…)&lt;/em&gt; und der Unterstützung mathematischer Unicode-Bereiche. Hierbei haben offensichtlich die Browser &lt;em&gt;Opera&lt;/em&gt; und &lt;em&gt;Safari&lt;/em&gt; die Nase vorn.&lt;/p&gt;­
&lt;p&gt;Flankiert wird dieser Trend aus seiner Sicht durch clientseitige Webanwendungen zur Erstellung/Darstellung mathematischer Formeln. Ich freue mich, dass er in diesem Zusammenhang neben­
&lt;a href="http://www.math.union.edu/locate/jsMath/"&gt;jsMat&lt;/a&gt;, &lt;a href="http://www1.chapman.edu/~jipsen/asciimath.html"&gt;AsciiMathML&lt;/a&gt; und &lt;a href="http://sourceforge.net/projects/hmath"&gt;HMath&lt;/a&gt; auch &lt;a href="http://goessner.net/articles/wiky/"&gt;Wiky&lt;/a&gt; erwähnt.&lt;/p&gt;&lt;span/&gt;&lt;/div&gt;
&lt;p&gt;
&lt;a class="tag" href="http://technorati.com/tag/math" rel="tag"&gt;Math&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/css" rel="tag"&gt;CSS&lt;/a&gt;
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/03/das-wissenschaftliche-web.html' title='Das wissenschaftliche Web'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=114129965424025327&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114129965424025327'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114129965424025327'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-114131430147155574</id><published>2006-03-02T17:44:00.000+01:00</published><updated>2006-03-02T16:45:01.483+01:00</updated><title type='text'>Math Is Easy ...</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span/&gt;&lt;p&gt;&lt;img alt="http://goessner.net/2006/03/findx.jpg" src="http://goessner.net/2006/03/findx.jpg" style="display:block;margin:0 auto;" title="http://goessner.net/2006/03/findx.jpg"/&gt;­
from: &lt;a href="http://www.flickr.com/photos/83981086@N00/106436158/"&gt; Phantomakos&lt;/a&gt;&lt;br/&gt;­
via: &lt;a href="http://technorati.com/tag/math"&gt; technorati&lt;/a&gt;&lt;/p&gt;&lt;span/&gt;&lt;/div&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/03/math-is-easy.html' title='Math Is Easy ...'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=114131430147155574&amp;isPopup=true' title='4 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114131430147155574'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114131430147155574'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-114088273263297164</id><published>2006-02-25T16:49:00.000+01:00</published><updated>2006-03-10T12:36:37.343+01:00</updated><title type='text'>WikyBloggerBox</title><content type='html'>&lt;p&gt;As a proof of concept to combine &lt;a href="http://www.blogger.com/"&gt; Blogger&lt;/a&gt; with a pure clientside Wiki/HTML converter, I implemented &lt;a href="http://goessner.net/bin/wikybloggerbox.html"&gt;WikyBloggerBox&lt;/a&gt;. In fact it is the modified &lt;a href="http://goessner.net/2006/01/bloggerbox.html"&gt;BloggerBox&lt;/a&gt; and &lt;a href="http://goessner.net/articles/wiky/wikybox.html"&gt; WikyBox&lt;/a&gt;, which works on top of Blogger's Atom API for remote communication and &lt;a href="http://goessner.net/articles/wiky/"&gt;Wiky&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some noteworthy points are:&lt;/p&gt;&lt;ul&gt;
&lt;li class="u"&gt;conversion from/to Wiki syntax to/from HTML is performed clientside. So Blogger only sees validating XHTML.&lt;/li&gt;
&lt;li class="u"&gt;The HTML code create depends only minimally on internal CSS &amp;#8211; as long as no math formulas are used. So this solution is supposed to be friendly to weblog readers.&lt;/li&gt;
&lt;li class="u"&gt;Wiky supports a simplified LaTeX markup to create cross-browser math formulas purely in HTML/CSS.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
&lt;a class="tag" href="http://technorati.com/tag/blogger" rel="tag"&gt;Blogger&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/wiki" rel="tag"&gt;Wiki&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/math" rel="tag"&gt;Math&lt;/a&gt;
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/02/wikybloggerbox.html' title='WikyBloggerBox'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=114088273263297164&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114088273263297164'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114088273263297164'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-114053762433472071</id><published>2006-02-21T16:54:00.000+01:00</published><updated>2006-02-21T17:45:42.926+01:00</updated><title type='text'>Wiky: A Clientside Wiki/Html Converter</title><content type='html'>&lt;p&gt;&lt;img style="float:right;" src="http://goessner.net/img/wiky.png" alt="http://goessner.net/img/wiky.png" title="http://goessner.net/img/wiky.png"/&gt;Wiky is a bidirectional Wiki markup to HTML converter written in javascript.
So there is no need for the web server to convert or even store wiki text, just plain HTML &amp;#8212; &lt;em&gt;yes, I like smart clients&lt;/em&gt;. Besides converting wiki markup, &lt;em&gt;Wiky&lt;/em&gt; also can do syntax highlighting and translate LaTeX style math formulas to HTML+CSS.&lt;/p&gt;
&lt;p&gt;In fact &lt;i&gt;Wiky + inplace editing&lt;/i&gt; is the way I am adding content to my web pages.&lt;/p&gt;
&lt;p&gt;[ &lt;a href="http://goessner.net/articles/wiky/"&gt;read more ...&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;
&lt;a class="tag" href="http://technorati.com/tag/wiki" rel="tag"&gt;Wiki&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/math" rel="tag"&gt;Math&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/02/wiky-clientside-wikihtml-converter.html' title='Wiky: A Clientside Wiki/Html Converter'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=114053762433472071&amp;isPopup=true' title='9 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114053762433472071'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/114053762433472071'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-113900100769213573</id><published>2006-02-03T22:05:00.000+01:00</published><updated>2006-02-03T22:22:29.306+01:00</updated><title type='text'>JSONT - Transforming JSON</title><content type='html'>&lt;p&gt;In XML we can transform documents by another XML document containing transformation rules (XSLT) and applying these rules using an XSLT-processor.&lt;/p&gt;
&lt;p&gt;Adopting that concept I have been experimenting with a set of transformation rules written in JSON.&lt;/p&gt;
&lt;p&gt;Now in analogy to XML/XSLT the combination JSON/JSONT can be used to transform JSON data into any other format by applying a specific set of rules.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://goessner.net/articles/jsont/"&gt;Read more ...&lt;/a&gt;&lt;/p&gt;

&lt;a class="tag" href="http://technorati.com/tag/json" rel="tag"&gt;Json&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/02/jsont-transforming-json.html' title='JSONT - Transforming JSON'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=113900100769213573&amp;isPopup=true' title='5 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113900100769213573'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113900100769213573'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-113888370707191185</id><published>2006-02-02T13:30:00.000+01:00</published><updated>2006-03-02T15:46:32.396+01:00</updated><title type='text'>Die Geschichte der Familie der "C"-Sprachen ...</title><content type='html'>&lt;p&gt;... ist &lt;a href="http://dotnetmasters.com/HistoryOfCFamily.htm"&gt;vergnüglich&lt;/a&gt; zu lesen.&lt;/p&gt;

&lt;a class="tag" href="http://technorati.com/tag/programming" rel="tag"&gt;Programming&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/02/die-geschichte-der-familie-der-c.html' title='Die Geschichte der Familie der &quot;C&quot;-Sprachen ...'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=113888370707191185&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113888370707191185'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113888370707191185'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-113830273621725730</id><published>2006-01-26T20:09:00.000+01:00</published><updated>2006-01-27T09:37:39.666+01:00</updated><title type='text'>Remote Json</title><content type='html'>&lt;p&gt;&lt;img style="float:right;" src="http://goessner.net/2006/01/json.png" alt="Jason" title="Jason"/&gt; I really like &lt;a href="http://json.org"&gt;Json&lt;/a&gt; and use it as a data exchange format between client and server for quite some time.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://developer.yahoo.net/common/json.html"&gt;Yahoo!&lt;/a&gt; and &lt;a href="http://del.icio.us/help/json"&gt;del.icio.us&lt;/a&gt; are prominent representatives that currently offer web services based upon &lt;em&gt;Json&lt;/em&gt;.&lt;/p&gt; 
&lt;p&gt;In order to use these web services in your web page you unfortunately cannot use standard &lt;a href="http://en.wikipedia.org/wiki/Ajax_(programming)"&gt;Ajax&lt;/a&gt; without a proxy script on your web server.&lt;/p&gt;
&lt;p&gt;As a way out of this we can adopt the &lt;a href="http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html?CMP=OTC-TY3388567169&amp;amp;ATT=JSON+and+the+Dynamic+Script+Tag:+Easy+XML-less+Web+Services+for+JavaScript"&gt;dynamic &amp;lt;script&amp;gt; element approach&lt;/a&gt;. In his well written &lt;a href="http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html?CMP=OTC-TY3388567169&amp;amp;ATT=JSON+and+the+Dynamic+Script+Tag:+Easy+XML-less+Web+Services+for+JavaScript"&gt;article&lt;/a&gt; Jason Levitt illustrates, how to access &lt;em&gt;Json&lt;/em&gt; data from remote web servers. &lt;/p&gt;

&lt;p&gt;Despite the benefit of this solution using a &amp;lt;script&amp;gt; element &amp;#8211; either static or dynamic, one problem remains depending on the way, the remote server is wrapping the &lt;em&gt;Json&lt;/em&gt; data:
&lt;/p&gt;&lt;ol style="list-style-type:decimal;"&gt;
&lt;li class="1"&gt;&lt;code class="syntax_js"&gt;{&lt;span class="str"&gt;"a"&lt;/span&gt;:&lt;span class="str"&gt;"b"&lt;/span&gt;}&lt;/code&gt; &lt;br/&gt;

There is no way to deal with anonymous data recieved by the &amp;lt;script&amp;gt; element.&lt;/li&gt;
&lt;li class="1"&gt;&lt;code class="syntax_js"&gt;&lt;span class="kwd"&gt;var&lt;/span&gt; x={&lt;span class="str"&gt;"a"&lt;/span&gt;:&lt;span class="str"&gt;"b"&lt;/span&gt;}&lt;/code&gt;&lt;br/&gt;
Here the data is accessible through variable &lt;em&gt;x&lt;/em&gt;, which is visible in the client's global scope. However the exact time of the data availability is not known, as it is delivered by an asynchron process.&lt;/li&gt;

&lt;li class="1"&gt;&lt;code class="syntax_js"&gt;f({&lt;span class="str"&gt;"a"&lt;/span&gt;:&lt;span class="str"&gt;"b"&lt;/span&gt;});&lt;/code&gt;&lt;br/&gt;
This is the best way, as the function &lt;em&gt;f&lt;/em&gt; will get called automatically, when the data is available. But how do remote web service and web client agree upon the function name?&lt;ol style="list-style-type:lower-alpha;"&gt;
&lt;li class="1a"&gt;The web service rigidly dictates the name of the callback function.&lt;/li&gt;
&lt;li class="1a"&gt;The web client sends the callback name as part of its request.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;I wrote a javascript function &lt;code&gt;remoteJson&lt;/code&gt; that handles incoming &lt;em&gt;Json&lt;/em&gt; data according to cases 2. + 3. from static as well as dynamic &amp;lt;script&amp;gt; elements.&lt;/p&gt;

&lt;p&gt;That function &lt;code&gt;remoteJson(listener)&lt;/code&gt; expects a single object as argument. The optional data members of this object are:
&lt;/p&gt;&lt;dl&gt;
&lt;dt&gt;"uri":&lt;/dt&gt;&lt;dd&gt;The uri to get the &lt;em&gt;Json&lt;/em&gt; data from, which is equivalent to the &lt;em&gt;src&lt;/em&gt;-attribute of the dynamic &amp;lt;script&amp;gt; element. When omitted, a corresponding static &amp;lt;script&amp;gt; element is expected in the same document.&lt;/dd&gt;

&lt;dt&gt;"callback":&lt;/dt&gt;&lt;dd&gt;A reference to the callback function with no arguments. When omitted, an automatic callback from the web service according to case 3. will occur.&lt;/dd&gt;
&lt;dt&gt;"condition":&lt;/dt&gt;&lt;dd&gt;A boolean javascript expression as a string, which will be evaluated to decide, if the &lt;em&gt;Json&lt;/em&gt; data has been completely loaded. Only needed in combination with &lt;em&gt;callback&lt;/em&gt;.&lt;/dd&gt;&lt;/dl&gt;
&lt;p&gt;An example call to &lt;em&gt;del.icio.us&lt;/em&gt; with a static &amp;lt;script&amp;gt; element might be: 

&lt;/p&gt;&lt;pre class="code syntax_js"&gt;remoteJson({&lt;span class="str"&gt;"callback"&lt;/span&gt;: &lt;span class="kwd"&gt;function&lt;/span&gt;(){alert(Delicious.posts.length);},
            &lt;span class="str"&gt;"condition"&lt;/span&gt;: &lt;span class="str"&gt;"typeof(Delicious) != 'undefined'"&lt;/span&gt;});&lt;/pre&gt;&lt;p&gt;
with the corresponding &amp;lt;script&amp;gt; element somewhere on the same page.
The alternative call creating a dynamic &amp;lt;script&amp;gt; element looks like so:

&lt;/p&gt;&lt;pre class="code syntax_js"&gt;remoteJson({&lt;span class="str"&gt;"uri"&lt;/span&gt;: &lt;span class="str"&gt;"http://del.icio.us/feeds/json/yourname/"&lt;/span&gt;,
            &lt;span class="str"&gt;"callback"&lt;/span&gt;: &lt;span class="kwd"&gt;function&lt;/span&gt;(){alert(Delicious.posts.length);},
            &lt;span class="str"&gt;"condition"&lt;/span&gt;: &lt;span class="str"&gt;"typeof(Delicious) != 'undefined'"&lt;/span&gt;});&lt;/pre&gt;&lt;p&gt;
And making a call relying on the server calling back into a provided function might look like:
&lt;/p&gt;&lt;pre class="code syntax_js"&gt;remoteJson({&lt;span class="str"&gt;"uri"&lt;/span&gt;: &lt;span class="str"&gt;"http://del.icio.us/feeds/json/yourname?callback=f"&lt;/span&gt;});&lt;/pre&gt;&lt;p&gt;

Finally here is the implementation of &lt;code&gt;remoteJson&lt;/code&gt;:
&lt;/p&gt;&lt;pre class="code syntax_js"&gt;&lt;span class="kwd"&gt;function&lt;/span&gt; remoteJson(listener) {
   &lt;span class="kwd"&gt;if&lt;/span&gt; (listener &amp;amp;&amp;amp; listener.uri) { &lt;span class="cmt"&gt;// create dynamic script element. &lt;/span&gt;
      script = document.getElementById(&lt;span class="str"&gt;"remotejson"&lt;/span&gt;);
      &lt;span class="kwd"&gt;if&lt;/span&gt; (script) &lt;span class="cmt"&gt;// script element may exist from previous call, so ..&lt;/span&gt;
         script.parentNode.removeChild(script);  &lt;span class="cmt"&gt;// .. delete it.&lt;/span&gt;
      script = document.createElement(&lt;span class="str"&gt;"script"&lt;/span&gt;); &lt;span class="cmt"&gt;// new script element.&lt;/span&gt;
      script.setAttribute(&lt;span class="str"&gt;"type"&lt;/span&gt;, &lt;span class="str"&gt;"text/javascript"&lt;/span&gt;);
      script.setAttribute(&lt;span class="str"&gt;"id"&lt;/span&gt;, &lt;span class="str"&gt;"remotejson"&lt;/span&gt;);
      script.setAttribute(&lt;span class="str"&gt;"src"&lt;/span&gt;, listener.uri);
      document.getElementsByTagName(&lt;span class="str"&gt;"head"&lt;/span&gt;)[0].appendChild(script);
   }
   &lt;span class="kwd"&gt;if&lt;/span&gt; (listener &amp;amp;&amp;amp; listener.condition &amp;amp;&amp;amp; listener.callback)
      &lt;span class="kwd"&gt;var&lt;/span&gt; timer = setInterval(&lt;span class="kwd"&gt;function&lt;/span&gt;(){
                                 &lt;span class="kwd"&gt;if&lt;/span&gt; (eval(listener.condition)) {
                                     clearInterval(timer);
                                     listener.callback(listener.target);
                                 }
                              }, 500);
}&lt;/pre&gt;&lt;p&gt;

This function basically works by periodically testing the provided condition twice a second and when &lt;em&gt;true&lt;/em&gt;, the callback function is invoked.&lt;/p&gt;
&lt;p&gt;It's a pity, that current browsers don't support the &lt;em&gt;onload&lt;/em&gt; event handler also for the &amp;lt;script&amp;gt; element as they do with the &amp;lt;body&amp;gt; and &amp;lt;img&amp;gt; elements. This would make the function presented here obsolete.&lt;/p&gt;
&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/json" rel="tag"&gt;Json&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/delicious" rel="tag"&gt;Delicious&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/01/remote-json.html' title='Remote Json'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=113830273621725730&amp;isPopup=true' title='3 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113830273621725730'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113830273621725730'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-113793675539106282</id><published>2006-01-22T14:29:00.000+01:00</published><updated>2006-01-27T09:23:41.430+01:00</updated><title type='text'>jQuery</title><content type='html'>&lt;p&gt;Jon Resig comes out with &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, a new lightweight javascript library. &lt;/p&gt;
&lt;p&gt;A specific feature of &lt;em&gt;jQuery&lt;/em&gt; is the &lt;strong&gt;$&lt;/strong&gt; function, adopted from the &lt;a href="http://prototype.conio.net/"&gt;prototype framework&lt;/a&gt;.
In &lt;em&gt;prototype&lt;/em&gt; the &lt;strong&gt;$&lt;/strong&gt; function is a simple wrapper around the heavily used &lt;em&gt;DOM&lt;/em&gt; method &lt;code&gt;document.getElementById&lt;/code&gt;, accepting multiple ID's as arguments. &lt;/p&gt;
&lt;p&gt;Jon's implementation is more powerful, as it&lt;/p&gt;&lt;ul&gt;
&lt;li class="u"&gt;accepts general CSS selectors and &amp;#8230;&lt;/li&gt;
&lt;li class="u"&gt;&amp;#8230; a useful subset of XPath expressions as arguments.&lt;/li&gt;
&lt;li class="u"&gt;uses lazy evaluation of the arguments by an internal object.&lt;/li&gt;
&lt;li class="u"&gt;returns that internal query object to allow call chains.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Just to get the idea, the following example uses plain DOM to change the text color of all &lt;em&gt;paragraph&lt;/em&gt; elements with &lt;em&gt;class&lt;/em&gt; attribute of &lt;em&gt;"remark"&lt;/em&gt; to &lt;em&gt;green&lt;/em&gt; :
&lt;/p&gt;&lt;pre class="code syntax_js"&gt;&lt;span class="kwd"&gt;var&lt;/span&gt; p = document.getElementsByTagName(&lt;span class="str"&gt;"p"&lt;/span&gt;);
&lt;span class="kwd"&gt;for&lt;/span&gt; (&lt;span class="kwd"&gt;var&lt;/span&gt; i=0; i&amp;lt;p.length; i++)
   &lt;span class="kwd"&gt;if&lt;/span&gt; (p[i].getAttribute(&lt;span class="str"&gt;"class"&lt;/span&gt;) == &lt;span class="str"&gt;"remark"&lt;/span&gt;)
      p[i].style.color = &lt;span class="str"&gt;"green"&lt;/span&gt;;&lt;/pre&gt;&lt;p&gt;
Using &lt;em&gt;jQuery&lt;/em&gt; we can write now:
&lt;/p&gt;&lt;pre class="code syntax_js"&gt;$(&lt;span class="str"&gt;"a"&lt;/span&gt;).filter(&lt;span class="str"&gt;".remark"&lt;/span&gt;).css(&lt;span class="str"&gt;"color"&lt;/span&gt;, &lt;span class="str"&gt;"green"&lt;/span&gt;);
&lt;span class="cmt"&gt;// or ..&lt;/span&gt;
$(&lt;span class="str"&gt;"a[@class='remark']"&lt;/span&gt;).css(&lt;span class="str"&gt;"color"&lt;/span&gt;, &lt;span class="str"&gt;"green"&lt;/span&gt;);&lt;/pre&gt;&lt;p&gt;
I really like this concept, especially the use of the paradigma:
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;A function, that deals with a unique object and doesn't have a specific return value, should always return that object.&lt;/p&gt;&lt;/blockquote&gt;
&lt;br/&gt;
&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/dom" rel="tag"&gt;DOM&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/01/jquery.html' title='jQuery'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=113793675539106282&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113793675539106282'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113793675539106282'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-113701783686806547</id><published>2006-01-12T07:30:00.000+01:00</published><updated>2006-01-12T00:24:53.210+01:00</updated><title type='text'>BloggerBox</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;
&lt;img alt="blogger.png" src="http://goessner.net/2006/01/blogger.png" style="float:right;" title="blogger.png"/&gt; I would like to introduce a lightweight &lt;em&gt;Ajaxian&lt;/em&gt; application to the public. It allows to read, edit and delete &lt;em&gt;Blogger&lt;/em&gt; posts on top of the &lt;em&gt;Blogger Atom API&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I named it &lt;em&gt;Bloggerbox&lt;/em&gt; and created a Demo weblog at Blogger to let you try it out.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Here is &lt;a href="http://goessner.net/bin/bloggerbox.html" target="_blank"&gt;Bloggerbox&lt;/a&gt; working with that &lt;a href="http://goessner-test.blogspot.com/" target="_blank"&gt;Demo Weblog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;
&lt;img alt="bloggerbox.png" src="http://goessner.net/2006/01/bloggerbox.png" title="bloggerbox.png"/&gt;
&lt;/center&gt;
&lt;em&gt;BloggerBox&lt;/em&gt; consists of only 3 files and doesn't use any other libraries.&lt;/p&gt;
&lt;table&gt;
&lt;tr class="evn"&gt;
&lt;td&gt;
&lt;strong&gt;file name&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;description&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;kilobytes&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="odd"&gt;
&lt;td&gt;
&lt;code&gt;bloggerbox.html&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt; Html Css Javascript Webapplication as shown above. &lt;/td&gt;
&lt;td&gt; 11.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="evn"&gt;
&lt;td&gt;
&lt;code&gt;blogger.php&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt; Proxy to the &lt;a href="http://code.blogger.com/archives/atom-docs.html"&gt;Blogger Atom Api&lt;/a&gt;. &lt;/td&gt;
&lt;td&gt; 7.8 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="odd"&gt;
&lt;td&gt;
&lt;code&gt;http.js&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt; Simple wrapper around the &lt;em&gt;XmlHttpRequest&lt;/em&gt; object. &lt;/td&gt;
&lt;td&gt; 3.4 &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;You can dowload those three files as a &lt;a href="http://goessner.net/download/prj/bloggerbox/bloggerbox.zip"&gt;zip archive&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In order to use &lt;em&gt;BloggerBox&lt;/em&gt; with your own weblog, you have to install the files on your webserver and modify the following two lines in &lt;code&gt;blogger.php&lt;/code&gt; by filling in your personal &lt;em&gt;blogger&lt;/em&gt; data.
&lt;/p&gt;
&lt;pre class="code"&gt;$bid = "1234567"; // hardwire your blog id ..
function userpass() { return base64_encode("username:password"); }&lt;/pre&gt;
&lt;p&gt;
Please note, that &lt;em&gt;BloggerBox&lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class="u"/&gt;
&lt;li class="u"&gt;uses the content type &lt;code&gt;application/xhtml xml&lt;/code&gt;, so it accepts only valid XHTML markup.&lt;/li&gt;
&lt;li class="u"&gt;mostly avoids using the DOM-API and relies on a couple of regular expressions as well as &lt;em&gt;JSON&lt;/em&gt;-based data exchange.&lt;/li&gt;
&lt;li class="u"&gt;cannot handle comments as long as he &lt;em&gt;Atom Api&lt;/em&gt; lacks that functionality.&lt;/li&gt;
&lt;li class="u"&gt;is freely available under the &lt;a href="http://creativecommons.org/licenses/LGPL/2.1/"&gt;Creative Commons GNU LGPL License&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It should be easy to integrate any &lt;em&gt;Wysiwyg&lt;/em&gt;-Editor with BloggerBox. I intend to combine it with &lt;em&gt;WIKI&lt;/em&gt;-like input capabilities and &lt;em&gt;Latex&lt;/em&gt;-like math expressions. More about this later.
&lt;hr/&gt;
PS: This post was created using BloggerBox.&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;a class="tag" href="http://technorati.com/tag/ajax" rel="tag"&gt;Ajax&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/blogger" rel="tag"&gt;Blogger&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/atom" rel="tag"&gt;Atom&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/json" rel="tag"&gt;Json&lt;/a&gt;
&lt;/div&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2006/01/bloggerbox.html' title='BloggerBox'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=113701783686806547&amp;isPopup=true' title='3 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113701783686806547'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113701783686806547'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-113230831458900952</id><published>2005-11-18T11:44:00.000+01:00</published><updated>2006-01-11T07:12:50.770+01:00</updated><title type='text'>A Slideous Show</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;I was using &lt;a href="http://www.meyerweb.com/"&gt;Eric Meyer&lt;/a&gt;'s simple slide show system &lt;a href="http://www.meyerweb.com/eric/tools/s5/"&gt;S5&lt;/a&gt; for over more than a year in some of my lectures and most of my talks. To have one document for the web, for presentation and for print is great.&lt;/p&gt;
&lt;p&gt;Since I never seriously used those highly sophisticated presentation tools that come with nearly every office software package out there, I was perfectly happy with S5.&lt;/p&gt;
&lt;p&gt;Then, several weeks ago, I stumpled over &lt;a href="http://www.w3.org/People/Raggett/"&gt;Dave Raggett&lt;/a&gt;'s &lt;a href="http://www.w3.org/Talks/Tools/Slidy/"&gt;Html Slidy&lt;/a&gt; and after a short inspection I even liked it more. &lt;/p&gt;
&lt;p&gt;After using &lt;em&gt;Html Slidy&lt;/em&gt; for a while I tried to customise and extend it. In fact I wanted ?
&lt;/p&gt;
&lt;ul&gt;
&lt;li class="u"&gt;manual instead of automatical font resizing.&lt;/li&gt;
&lt;li class="u"&gt;capability to select content during presentation &lt;strong&gt;and&lt;/strong&gt; using the mouse for single-click navigation.&lt;/li&gt;
&lt;li class="u"&gt;automatical generation of a Table of Content inside of a specific slide.&lt;/li&gt;
&lt;li class="u"&gt;one-click completion of incremental slides.&lt;/li&gt;
&lt;li class="u"&gt;menu buttons in the statusbar.&lt;/li&gt;
&lt;li class="u"&gt;easy configuration and customization of behaviour and statusbar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Patching &lt;em&gt;Html Slidy&lt;/em&gt; turned out to be a surprisingly hard task for me, so I finally decided to write yet another script for controlling a slide show.&lt;/p&gt;
&lt;p&gt;To get a first impression of &lt;em&gt;Slideous&lt;/em&gt; you may want to start &lt;a href="http://goessner.net/articles/slideous/slideous.html"&gt;this presentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please note, that &lt;em&gt;Slideous&lt;/em&gt; hasn't implemented those cool features ?&lt;/p&gt;
&lt;ul&gt;
&lt;li class="u"&gt;different backgrounds for individual slides &lt;em&gt;(Html Slidy)&lt;/em&gt;.&lt;/li&gt;
&lt;li class="u"&gt;semivisible / highlighted incremental items &lt;em&gt;(S5)&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have tested &lt;em&gt;Slideous&lt;/em&gt; with&lt;/p&gt;
&lt;ul&gt;
&lt;li class="u"&gt;Mozilla Firefox 1.5&lt;/li&gt;
&lt;li class="u"&gt;Internet Explorer 6.0&lt;/li&gt;
&lt;li class="u"&gt;Opera 8.5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[ &lt;a href="http://goessner.net/articles/slideous/"&gt;read more ...&lt;/a&gt;]&lt;/p&gt;

&lt;a class="tag" href="http://technorati.com/tag/slideshow" rel="tag"&gt;SlideShow&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;
&lt;/div&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/11/slideous-show.html' title='A Slideous Show'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=113230831458900952&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113230831458900952'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113230831458900952'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-113157384141366954</id><published>2005-11-09T23:01:00.000+01:00</published><updated>2006-03-02T15:50:20.510+01:00</updated><title type='text'>Das tägliche - "Was zum Teufel"</title><content type='html'>&lt;p&gt;Alex Papadimoulis stöbert weltweit im Quellcode irgendwelcher Software und fördert Erstaunliches zu Tage. Seine Webseite nennt er bezeichnenderweise &lt;a href="http://thedailywtf.com/"&gt;The Daily WTF&lt;/a&gt;, wobei &lt;a href="http://wikipedia.de"&gt;Wikipedia&lt;/a&gt; &lt;abbr title="What The F..k"&gt;WTF&lt;/abbr&gt; mit &lt;em&gt;"Was zum Teufel"&lt;/em&gt; &lt;a href="http://de.wikipedia.org/wiki/Liste_der_Abk%C3%BCrzungen_%28Netzjargon%29"&gt; übersetzt&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Das heutige &lt;a href="http://thedailywtf.com/forums/50129/ShowPost.aspx"&gt;Code-Schnipselchen&lt;/a&gt; ist aus meiner Sicht eines der Besten seit Längerem.&lt;/p&gt;
&lt;p&gt;Einer der Kommentatoren mutmasst, ob dieser Programmierer wohl nach Codezeilen bezahlt wird.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/11/das-tgliche-was-zum-teufel.html' title='Das tägliche - &quot;Was zum Teufel&quot;'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=113157384141366954&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113157384141366954'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/113157384141366954'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-112748973757904905</id><published>2005-09-23T17:34:00.000+02:00</published><updated>2005-09-23T18:45:45.953+02:00</updated><title type='text'>Rational Trigonometry</title><content type='html'>&lt;p&gt;&lt;img style="float:right;" src="http://goessner.net/img/vectors.gif" alt="http://goessner.net/img/vectors.gif" title="http://goessner.net/img/vectors.gif"/&gt; After more than 2000 years of silence there is a current lively &lt;a href="http://physorg.com/news6555.html"&gt;discussion about trigonometry&lt;/a&gt;. &lt;a href="http://web.maths.unsw.edu.au/~norman/"&gt;Dr. Wildberger&lt;/a&gt;, an Associate Professor in mathematics in Sydney Australia (University of New South Wales) simply states, that &lt;/p&gt;&lt;blockquote&gt; Generations of students have struggled with classical trigonometry because the framework is wrong, &lt;/blockquote&gt;&lt;p&gt; The transcendental functions &lt;em&gt;sin, cos, tan&lt;/em&gt;, etc. are complicated, inaccurate and computation expensive, Dr. Wildberger argues in his new &lt;a href="http://wildegg.com/"&gt;book&lt;/a&gt; &lt;em&gt;Divine Proportions: Rational Trigonometry to Universal Geometry&lt;/em&gt;. He goes into some details in its &lt;a href="http://web.maths.unsw.edu.au/~norman/papers/Chapter1.pdf"&gt;first chapter&lt;/a&gt;, which is available online.&lt;/p&gt; &lt;p&gt;Instead of using &lt;em&gt;distance&lt;/em&gt; and &lt;em&gt;angle&lt;/em&gt; as fundamental measurable quantities, Wildberger introduces &lt;em&gt;quadrance&lt;/em&gt; and &lt;em&gt;spread&lt;/em&gt; as first citizen quantities. &lt;em&gt;Quadrance&lt;/em&gt; is the &lt;em&gt;distance squared&lt;/em&gt; and &lt;em&gt;spread&lt;/em&gt; proportional to the &lt;em&gt;sine squared&lt;/em&gt; of the angle between two lines. &lt;/p&gt;&lt;blockquote&gt; &lt;div class="eq"&gt;&lt;a name="eq1"&gt;(1)&lt;/a&gt;Q = (x&lt;sub&gt;2&lt;/sub&gt; &amp;#8722; x&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;2&lt;/sup&gt; + (y&lt;sub&gt;2&lt;/sub&gt; &amp;#8722; y&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;2&lt;/sup&gt; &lt;/div&gt; &lt;div class="eq"&gt;&lt;a name="eq2"&gt;(2)&lt;/a&gt;s(l&lt;sub&gt;1&lt;/sub&gt;, l&lt;sub&gt;2&lt;/sub&gt;) = &lt;span class="f"&gt;&lt;span class="n c"&gt;(a&lt;sub&gt;1&lt;/sub&gt; b&lt;sub&gt;2&lt;/sub&gt; &amp;#8722; a&lt;sub&gt;2&lt;/sub&gt; b&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;2&lt;/sup&gt;&lt;/span&gt;&lt;span class="d c"&gt;(a&lt;span class="s"&gt;&lt;span class="i"&gt;2&lt;/span&gt;&lt;span class="i"&gt;1&lt;/span&gt;&lt;/span&gt;+ b&lt;span class="s"&gt;&lt;span class="i"&gt;2&lt;/span&gt;&lt;span class="i"&gt;1&lt;/span&gt;&lt;/span&gt;)(a&lt;span class="s"&gt;&lt;span class="i"&gt;2&lt;/span&gt;&lt;span class="i"&gt;2&lt;/span&gt;&lt;/span&gt;+ b&lt;span class="s"&gt;&lt;span class="i"&gt;2&lt;/span&gt;&lt;span class="i"&gt;2&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; with points &lt;div class="eq"&gt;&lt;span class="b"&gt;p&lt;/span&gt;&lt;sub&gt;1&lt;/sub&gt; = (x&lt;sub&gt;1&lt;/sub&gt;, y&lt;sub&gt;1&lt;/sub&gt;)&lt;/div&gt; &lt;div class="eq"&gt;&lt;span class="b"&gt;p&lt;/span&gt;&lt;sub&gt;2&lt;/sub&gt; = (x&lt;sub&gt;2&lt;/sub&gt;, y&lt;sub&gt;2&lt;/sub&gt;)&lt;/div&gt; and lines &lt;div class="eq"&gt; a&lt;sub&gt;1&lt;/sub&gt; x + b&lt;sub&gt;1&lt;/sub&gt; y + c&lt;sub&gt;1&lt;/sub&gt; &lt;/div&gt; &lt;div class="eq"&gt; a&lt;sub&gt;2&lt;/sub&gt; x + b&lt;sub&gt;2&lt;/sub&gt; y + c&lt;sub&gt;2&lt;/sub&gt; &lt;/div&gt; &lt;/blockquote&gt;&lt;p&gt; I can see the benefits of rational math expressions here, especially for 2D computer graphics algorithms. But I can't &amp;#8212; at least at the time of this writing &amp;#8212; see the necessity to do completely without &lt;em&gt;distance&lt;/em&gt; and &lt;em&gt;angle&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;Especially in mechanics &amp;#8212; from an engineer's view &amp;#8212; I really do need not so much an angle, but it's derivatives, angular velocity and acceleration. Oscillations also seem to be very hard to handle without angles and distances.&lt;/p&gt; &lt;p&gt;In my mechanics lecture I usually give a short introduction to vector math, where I derive similar formulas to (2) above. I published a short &lt;a href="http://goessner.net/articles/vectormath/index.html"&gt;article&lt;/a&gt; about this.&lt;/p&gt; &lt;p&gt;Nevertheless I welcome such new ideas and would really like to read Dr. Wildberger's complete book.&lt;/p&gt;

&lt;a class="tag" href="http://technorati.com/tag/trigonometry" rel="tag"&gt;Trigonometry&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/09/rational-trigonometry.html' title='Rational Trigonometry'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=112748973757904905&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112748973757904905'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112748973757904905'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-112747404587280624</id><published>2005-09-23T13:11:00.000+02:00</published><updated>2006-03-12T14:42:43.163+01:00</updated><title type='text'>Free Opera</title><content type='html'>&lt;p&gt;&lt;img style="float: right;" src="/2005/09/operalogo.gif" alt="/2005/09/operalogo.gif" title="/2005/09/operalogo.gif" /&gt; Der Browser &lt;em&gt;Opera&lt;/em&gt; ist ab seiner &lt;a href="http://www.opera.com/"&gt;Vollversion 8.5&lt;/a&gt; nun kostenlos und werbefrei. Gleichzeitig setzt sich der gleichnamige norwegische Browserhersteller das Ziel, die Nummer zwei auf dem Browsermarkt zu werden. &lt;/p&gt; &lt;p&gt;Ich frage mich, warum diese strategische Entscheidung nicht bereits vor der Markteinführung von Firefox 1.0 umgesetzt wurde.&lt;/p&gt; &lt;p&gt;(via &lt;a href="http://www.heise.de/newsticker/meldung/64190"&gt;heise&lt;/a&gt;)&lt;/p&gt;
&lt;a class="tag" href="http://technorati.com/tag/web" rel="tag"&gt;Web&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/09/free-opera.html' title='Free Opera'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=112747404587280624&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112747404587280624'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112747404587280624'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-112436362210725456</id><published>2005-08-18T13:13:00.000+02:00</published><updated>2006-03-12T14:40:49.843+01:00</updated><title type='text'>Bildungspolitik im Vergleich</title><content type='html'>&lt;p&gt;Einen Vergleich der beabsichtigten Bildungspolitik von CDU/CSU, SDP, FPD und der Linkspartei stellt &lt;a href="http://www.n24.de/politik/wahl-2005/index.php/n2005081212203100002"&gt;N24 in einer Kurzübersicht&lt;/a&gt; zur Verf�gung.
&lt;/p&gt;
(via &lt;a href="http://bildung.twoday.net/stories/904970/"&gt;Bildungsblog&lt;/a&gt;)
&lt;br/&gt;&lt;br/&gt;
&lt;a class="tag" href="http://technorati.com/tag/education" rel="tag"&gt;Education&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/08/bildungspolitik-im-vergleich.html' title='Bildungspolitik im Vergleich'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=112436362210725456&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112436362210725456'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112436362210725456'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-112428688072250254</id><published>2005-08-17T15:46:00.000+02:00</published><updated>2005-08-18T02:11:34.500+02:00</updated><title type='text'>DOM Event registered multiple times</title><content type='html'>&lt;p&gt;According to the &lt;a href="http://www.w3.org/TR/DOM-Level-3-Events/"&gt;W3C DOM&lt;/a&gt; an event must not be registered more than once on the same object.&lt;/p&gt;
&lt;p&gt;Now there is an issue with crossbrowser events using the DOM &lt;strong&gt;and&lt;/strong&gt; Microsoft event registration model, which I am describing &lt;a href="http://goessner.net/articles/domevents/"&gt;in detail here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As a workaround we can extend the IE event target by an event list in order to store the registered event types by itself.&lt;/p&gt;
&lt;pre class="code syntax_js"&gt;&lt;span class="kwd"&gt;function&lt;/span&gt; addListener(obj, type, listener, capture) {
   &lt;span class="kwd"&gt;if&lt;/span&gt; (obj.addEventListener)   &lt;span class="cmt"&gt;// W3C DOM registering ..&lt;/span&gt;
      obj.addEventListener(type, listener, capture);
   &lt;span class="kwd"&gt;else&lt;/span&gt; &lt;span class="kwd"&gt;if&lt;/span&gt; (obj.attachEvent) { &lt;span class="cmt"&gt;// IE 5/6 registering ..&lt;/span&gt;

      &lt;span class="kwd"&gt;if&lt;/span&gt; (!obj.eventListeners)
         obj.eventListeners = [];
      &lt;span class="kwd"&gt;if&lt;/span&gt; (!obj.eventListeners[type]) {
         obj.eventListeners[type] = &lt;span class="kwd"&gt;true&lt;/span&gt;;
         obj.attachEvent(&lt;span class="str"&gt;"on"&lt;/span&gt;+type, listener);
      }
   }
}
&lt;span class="kwd"&gt;function&lt;/span&gt; removeListener(obj, type, listener, capture) {
   &lt;span class="kwd"&gt;if&lt;/span&gt; (obj.removeEventListener) &lt;span class="cmt"&gt;// W3C DOM unregistering ..&lt;/span&gt;

      obj.removeEventListener(type, listener, capture);
   &lt;span class="kwd"&gt;else&lt;/span&gt; &lt;span class="kwd"&gt;if&lt;/span&gt; (obj.detachEvent) {  &lt;span class="cmt"&gt;// IE 5/6 unregistering ..&lt;/span&gt;
      &lt;span class="kwd"&gt;if&lt;/span&gt; (obj.eventListeners &amp;amp;&amp;amp; obj.eventListeners[type]) {
         obj.eventListeners[type] = &lt;span class="kwd"&gt;false&lt;/span&gt;;
         obj.detachEvent(&lt;span class="str"&gt;"on"&lt;/span&gt;+type, listener);
      }
   }
}&lt;/pre&gt;

&lt;p&gt;Using this and avoiding anonymous functions as event handlers resolves this issue with IE 6.&lt;/p&gt;

&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/dom" rel="tag"&gt;dom&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/html" rel="tag"&gt;HTML&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/08/dom-event-registered-multiple-times.html' title='DOM Event registered multiple times'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=112428688072250254&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112428688072250254'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112428688072250254'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-112034790457597185</id><published>2005-07-03T00:49:00.000+02:00</published><updated>2006-03-12T14:36:44.420+01:00</updated><title type='text'>Google Maps</title><content type='html'>&lt;p&gt;Google hat in einer etwas überraschenden Aktion die &lt;a href="http://www.google.com/apis/maps/"&gt;Google Maps Programmierschnittstelle&lt;/a&gt;  freigegeben. Damit kann nun jedermann Kartographie auf seiner eigenen Webseite betreiben &amp;#8213; nunja, solange er sich auf die USA oder Grossbritannien beschränkt. Gegenwärtig ist halt nur jener Teil der Welt von Google erschlossen. Als nächstes soll übrigens Deutschland hinzukommen. Jedoch liefert Google jetzt schon den Rest der Welt als Satellitenbilder aus.&lt;/p&gt;
&lt;p&gt;Als erstes ben�tigt man einen &lt;em&gt;Google Account&lt;/em&gt;, den ich bereits als Inhaber eines &lt;em&gt;Google Mail&lt;/em&gt; (ehemals &lt;em&gt;GMail&lt;/em&gt;) Zugangs besitze. Wer von mir eine &lt;em&gt;Google Mail&lt;/em&gt; Einladung m�chte, hinterl�sst hier einfach einen diesbezüglichen Kommentar. Mit diesem Zugang kann man sich nun zur Teilnahme an der Betaphase von &lt;em&gt;Google Maps&lt;/em&gt; &lt;a href="http://www.google.com/apis/maps/signup.html"&gt;anmelden&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;Die Dokumentation der Javascript Programmierschnittstelle ist sehr gut und ein schneller Einstieg dank der übersichtlichen Beispiele leicht möglich.&lt;/p&gt;
&lt;div id="map" style="width: 48em; height: 40em"&gt;&lt;/div&gt;
 &lt;script src="http://maps.google.com/maps?file=api&amp;amp;v=1&amp;amp;key=ABQIAAAAvuiJx3rJftB891fCxf7sjxRX2p6LbM21UcNaKv9XZKks7qKLEhSxWteIHNZpmQTwP3_xeFhI_c36lQ"     type="text/javascript"&gt;&lt;/script&gt;
 &lt;script type="text/javascript"&gt;
      var map = null;
      function show(lng,lat,zoom) {
        map.centerAndZoom(new GPoint(lng,lat), zoom);
      }
      function update(lng,lat, zoom) {
        document.getElementById('lng').value = lng;
        document.getElementById('lat').value = lat;
        document.getElementById('zoom').value = zoom;
      }
      function change() {
         var center = map.getCenterLatLng();
         update(center.x, center.y, map.getZoomLevel());
      }
      function initmap() {
         map = new GMap(document.getElementById("map"));
         map.addControl(new GSmallMapControl());
         map.setMapType(_SATELLITE_TYPE);
         GEvent.addListener(map, "moveend", change);
         GEvent.addListener(map, "zoom", change);
         show(8.91149039031456,52.0154866242451,4);
         return false;
      }
      if (window.addEventListener) window.addEventListener("load", initmap, false);
      else if (window.attachEvent) window.attachEvent("onload", initmap);
    &lt;/script&gt;
    longitude: &lt;input id="lng" type="text" value=""/&gt; 
    latitude: &lt;input id="lat" type="text" value=""/&gt;&lt;br/&gt;
    zoom: &lt;input id="zoom" type="text" value=""/&gt;
    &lt;input type="button" value="go"  onclick="show(document.getElementById('lng').value,document.getElementById('lat').value,document.getElementById('zoom').value);"/&gt;

&lt;p&gt;Der weisse Punkt genau in Bildmitte zeigt meine &lt;a href="http://www.fh-luh.de"&gt;Hochschule&lt;/a&gt; . Leider bietet ein Zoom mittels der Navigationssymbole in der linken oberen Ecke keine Qualitätsverbesserung. Dies scheint momentan nur in einigen Regionen vernünftig zu funktionieren.&lt;/p&gt;
&lt;p&gt;In den beiden unteren Feldern kann man Längen- und Breitengrad eines beliebigen Ortes eingeben. Wer möchte, versucht es mal mit:
&lt;/p&gt;&lt;ul&gt;
&lt;li class="u"&gt;Europa (&lt;a href="javascript:show(9.36035, 47.636718, 12);"&gt;9.36035, 47.636718&lt;/a&gt;)&lt;/li&gt;
&lt;li class="u"&gt;Olympiastadion, M�nchen (&lt;a href="javascript:show(11.546312, 48.173171, 2);"&gt; 11.546312, 48.173171&lt;/a&gt;)&lt;/li&gt;
&lt;li class="u"&gt;Hafen, Hamburg (&lt;a href="javascript:show(9.9324989, 53.52127075, 3);"&gt; 9.9324989, 53.52127075&lt;/a&gt;)&lt;/li&gt;
&lt;li class="u"&gt;Bodensee (&lt;a href="javascript:show(9.36035, 47.636718, 7);"&gt; 9.36035, 47.636718&lt;/a&gt;)&lt;/li&gt;
&lt;li class="u"&gt;Eiffelturm, Paris (&lt;a href="javascript:show(2.294177, 48.85834, 2);"&gt; 2.294177, 48.85834&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;TravelGIS bietet einen &lt;a href="http://www.travelgis.com/geocode/Default.aspx"&gt;Webservice&lt;/a&gt;  mit dem  sich Breiten- und Längengrade beliebiger Orte auf der Welt bestimmen lassen.&lt;/p&gt;
&lt;p&gt;Der Code für die hier demonstrierte kleine Webanwendung ist recht übersichtlich (hier als vollständige Webseite).&lt;/p&gt;
&lt;pre class="code syntax_xml"&gt;&amp;lt;&lt;span class="xtag"&gt;html&lt;/span&gt; &lt;span class="xnam"&gt;xmlns&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&amp;gt;
  &amp;lt;&lt;span class="xtag"&gt;body&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class="xtag"&gt;div&lt;/span&gt; &lt;span class="xnam"&gt;id&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;map&amp;quot;&lt;/span&gt; &lt;span class="xnam"&gt;style&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;width: 500px; height: 400px&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span class="xtag"&gt;div&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class="xtag"&gt;script&lt;/span&gt; &lt;span class="xnam"&gt;src&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;http://maps.google.com/maps?file=api&amp;amp;v=1&amp;amp;key=XXXX&amp;quot;&lt;/span&gt; 
            &lt;span class="xnam"&gt;type&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span class="xtag"&gt;script&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span class="xtag"&gt;script&lt;/span&gt; &lt;span class="xnam"&gt;type&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;
      &lt;span class="kwd"&gt;var&lt;/span&gt; map = &lt;span class="kwd"&gt;new&lt;/span&gt; GMap(document.getElementById(&lt;span class="str"&gt;"map"&lt;/span&gt;));
      map.addControl(&lt;span class="kwd"&gt;new&lt;/span&gt; GSmallMapControl());
      map.setMapType(_SATELLITE_TYPE);
      &lt;span class="kwd"&gt;function&lt;/span&gt; show(lon,lat) {
        map.centerAndZoom(&lt;span class="kwd"&gt;new&lt;/span&gt; GPoint(lon,lat), 4);
      }
      show(8.91149039031456,52.0154866242451);
    &amp;lt;/&lt;span class="xtag"&gt;script&lt;/span&gt;&amp;gt;
    longitude: &amp;lt;&lt;span class="xtag"&gt;input&lt;/span&gt; &lt;span class="xnam"&gt;id&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;lon&amp;quot;&lt;/span&gt; &lt;span class="xnam"&gt;type&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span class="xnam"&gt;value&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;&amp;quot;&lt;/span&gt;/&amp;gt; 
    latitude: &amp;lt;&lt;span class="xtag"&gt;input&lt;/span&gt; &lt;span class="xnam"&gt;id&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;lat&amp;quot;&lt;/span&gt; &lt;span class="xnam"&gt;type&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span class="xnam"&gt;value&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;&amp;quot;&lt;/span&gt;/&amp;gt;
    &amp;lt;&lt;span class="xtag"&gt;input&lt;/span&gt; &lt;span class="xnam"&gt;type&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span class="xnam"&gt;value&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;go&amp;quot;&lt;/span&gt; 
           &lt;span class="xnam"&gt;onclick&lt;/span&gt;=&lt;span class="xval"&gt;&amp;quot;show(document.getElementById('lon').value,
                        document.getElementById('lat').value);&amp;quot;&lt;/span&gt;/&amp;gt;
  &amp;lt;/&lt;span class="xtag"&gt;body&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span class="xtag"&gt;html&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;p&gt;Das key=XXXX Attribute muss hierbei jeweils mit dem individuellen Schlüssel des eigenen Google Maps Zugangs ersetzt werden.&lt;/p&gt;

&lt;a class="tag" href="http://technorati.com/tag/google+maps" rel="tag"&gt;Google Maps&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/07/google-maps.html' title='Google Maps'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=112034790457597185&amp;isPopup=true' title='1 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112034790457597185'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/112034790457597185'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-111780556289397267</id><published>2005-06-03T15:31:00.000+02:00</published><updated>2006-03-12T14:32:00.496+01:00</updated><title type='text'>Firefox Download Counter</title><content type='html'>&lt;p&gt;&lt;img style="float:right;" src="/2005/06/firefox.jpg" alt="/2005/06/firefox.jpg" title="firefox.jpg"/&gt;&lt;a href="http://www.mozilla.org/"&gt;Firefox&lt;/a&gt;  is without doubt a  remarkable, innovative web browser. &lt;/p&gt;
&lt;p&gt;The browsers actual download number is available on &lt;a href="http://www.spreadfirefox.com/"&gt;Spread Firefox&lt;/a&gt;  as an &lt;a href="http://feeds.spreadfirefox.com//downloads/firefox.xml?ff=1"&gt;RSS-Feed&lt;/a&gt;  &amp;#8212; a small XML-File, which is updated every minute. &lt;/p&gt;
&lt;p&gt;I decided to implement a small web application on top of that service. Well in fact I needn't to, since the smart people at &lt;a href="http://www.infocraft.com/"&gt;Infocraft&lt;/a&gt;  already did it in an &lt;a href="http://www.infocraft.com/projects/ffcounter/"&gt;excellent manner&lt;/a&gt; . So I implemented a stripped down version, just to learn, how it is working. You can see it in action in the box titled &lt;em&gt;Firefox growth&lt;/em&gt; in the left column. Please note, that it's a little boring and not as pleasent as the original. So just sit and look at it for a while in order to see the numbers changing every minute.&lt;/p&gt;
&lt;p&gt;The web appliction consists of a javascript fragment and a php file &lt;em&gt;ffcounter.php&lt;/em&gt;. The javascript code uses the &lt;em&gt;XmlHttpRequest&lt;/em&gt; object to poll the actual download number from my server.&lt;/p&gt;
&lt;pre class="code syntax_js"&gt;&lt;span class="kwd"&gt;function&lt;/span&gt; getHttpRequest(uri, callback) {
  &lt;span class="kwd"&gt;var&lt;/span&gt; http = &lt;span class="kwd"&gt;false&lt;/span&gt;;

  &lt;span class="kwd"&gt;if&lt;/span&gt; (!!window.XMLHttpRequest) { 
    &lt;span class="kwd"&gt;try&lt;/span&gt; { http = &lt;span class="kwd"&gt;new&lt;/span&gt; XMLHttpRequest(); } 
    catch (e) { http = &lt;span class="kwd"&gt;false&lt;/span&gt;; } 
  }
  &lt;span class="kwd"&gt;else&lt;/span&gt; &lt;span class="kwd"&gt;if&lt;/span&gt; (!!window.ActiveXObject) { 
    &lt;span class="kwd"&gt;try&lt;/span&gt; {http = &lt;span class="kwd"&gt;new&lt;/span&gt; ActiveXObject(&lt;span class="str"&gt;"Msxml2.XMLHTTP"&lt;/span&gt;); } 
    catch (e) { 
      &lt;span class="kwd"&gt;try&lt;/span&gt; { http = &lt;span class="kwd"&gt;new&lt;/span&gt; ActiveXObject(&lt;span class="str"&gt;"Microsoft.XMLHTTP"&lt;/span&gt;); } 
      catch (e) { http = &lt;span class="kwd"&gt;false&lt;/span&gt;; }
    }
  }

  &lt;span class="kwd"&gt;if&lt;/span&gt; (http) {
    http.onreadystatechange = &lt;span class="kwd"&gt;function&lt;/span&gt;() {
      &lt;span class="kwd"&gt;if&lt;/span&gt; (http.readyState == 4 &amp;amp;&amp;amp; 
        http.status == 200 &amp;amp;&amp;amp; callback)
        callback(http.responseText);
    };
    http.open(&lt;span class="str"&gt;"GET"&lt;/span&gt;, uri, &lt;span class="kwd"&gt;true&lt;/span&gt;);
    http.send(null);
  }
}

&lt;span class="kwd"&gt;var&lt;/span&gt; ff;
&lt;span class="kwd"&gt;function&lt;/span&gt; count() {
  getHttpRequest(&lt;span class="str"&gt;"/bin/ffcounter.php"&lt;/span&gt;, 
                 &lt;span class="kwd"&gt;function&lt;/span&gt;(res) {
                   document.getElementById(&lt;span class="str"&gt;"ffc"&lt;/span&gt;).innerHTML = ff ? ff : res; 
                   document.getElementById(&lt;span class="str"&gt;"ffi"&lt;/span&gt;).innerHTML = ff ? res-ff : 0;
                   ff = res; 
                 });
  setTimeout(&lt;span class="str"&gt;"count()"&lt;/span&gt;, 60000); &lt;span class="cmt"&gt;// wait one minute after each refresh ..&lt;/span&gt;
}

&lt;span class="kwd"&gt;if&lt;/span&gt; (window.addEventListener) window.addEventListener(&lt;span class="str"&gt;"load"&lt;/span&gt;, count, &lt;span class="kwd"&gt;false&lt;/span&gt;);
&lt;span class="kwd"&gt;else&lt;/span&gt; &lt;span class="kwd"&gt;if&lt;/span&gt; (window.attachEvent) window.attachEvent(&lt;span class="str"&gt;"onload"&lt;/span&gt;, count);&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;setTimeout&lt;/code&gt; method is responsible for polling the updated download number every minute from my server. I cannot obtain the RSS feed directly from its &lt;a href="http://www.spreadfirefox.com/download_counter.php?ff=1"&gt;original location&lt;/a&gt;  because of security restrictions of the &lt;em&gt;XmlHttprequest&lt;/em&gt; object.&lt;/p&gt;
&lt;p&gt;This is where the php file &lt;em&gt;ffcounter.php&lt;/em&gt; comes to the rescue. It is nearly identical with that on  &lt;a href="http://www.infocraft.com/projects/ffcounter/"&gt;Infocraft&lt;/a&gt; . Instead of transfering the complete XML file to the web client, I am using a little regular expression to extract the download number. Here is the modified code.
&lt;/p&gt;&lt;pre class="code"&gt;&amp;lt;?php 
$host = "www.spreadfirefox.com"; 
$path = "/download_counter.php?ff=1"; 
$fp = fsockopen($host, 80, $errno, $errstr, 30); 
if ($fp) { 
   $out  = "GET $path HTTP/1.1\r\n"; 
   $out .= "Host: $host\r\n"; 
   $out .= "Connection: Keep-Alive\r\n\r\n"; 
   fwrite($fp, $out); 
   while (!feof($fp)) { 
      $buffer .= fgets($fp, 128); 
   }
   fclose($fp); 
   header('Content-Type: text/plain');
   header('Expires: Fri, 01 Jun 2005 00:00:00 GMT'); 
   if (preg_match("/&amp;lt;description&amp;gt;([0-9,]+)&amp;lt;\/description&amp;gt;/", $buffer, $matches))
      print($matches[1]);
} 
else { 
   print("$errstr ($errno)\n"); 
} 
?&gt;&lt;/pre&gt;
&lt;p&gt;Feel free to use these scripts for whatever, as it is noted at &lt;a href="http://www.infocraft.com/projects/ffcounter/"&gt;Infocraft&lt;/a&gt; , where &amp;#8212; again &amp;#8212; the credits should go. I tested it with Firefox and IE6. &lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Update:&lt;/b&gt; Feed url had changed and was corrected!
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Update:&lt;/b&gt; Finally I removed the script from my sidebar.
&lt;/p&gt;
&lt;a class="tag" href="http://technorati.com/tag/firefox" rel="tag"&gt;Firefox&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/javascript" rel="tag"&gt;Javascript&lt;/a&gt;
&lt;a class="tag" href="http://technorati.com/tag/ajax" rel="tag"&gt;Ajax&lt;/a&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/06/firefox-download-counter.html' title='Firefox Download Counter'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=111780556289397267&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/111780556289397267'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/111780556289397267'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-111480830680529686</id><published>2005-04-29T22:55:00.000+02:00</published><updated>2006-03-12T14:26:12.346+01:00</updated><title type='text'>einstein@home</title><content type='html'>&lt;p&gt;&lt;img src="/2005/04/einstein.png" style="float:right" alt="Einstein" title="Einstein" /&gt;  Seit Mitte Februar stelle ich die überschüssige Rechenleistung meines PC &amp;#8212; immerhin meist über 90% &amp;#8212; den Gravitationswellenforschern zur Verfügung. &lt;/p&gt;
&lt;p&gt;Gravitationswellen wurden 1916 von Albert Einstein im Rahmen seiner &lt;em&gt;Allgemeinen Relativit�tstheorie&lt;/em&gt; beschrieben, jedoch bis heute nicht zweifelsfrei nachgewiesen. Dieser Nachweis soll nun mittels dreier &lt;em&gt;Laserinterferometer&lt;/em&gt; geführt werden. Ein Kleines steht bei Hannover und zwei Grosse im amerikanischen Hanford und Livingston. Das Problem ist nun hierbei, dass diese Interferometer einen kontinuierlichen, enormen Datenstrom liefern, der zu 99.99% aus unerwüschtem Rauschen besteht. Die vermuteten relevanten Daten aus diesem Rauschen herauszufiltern setzt somit eine extrem hohe Rechenleistung voraus. Einen tieferen Einblick vermittelt &lt;a href="http://www.boinc-team.de/portal/portal.php?html=boinc/artikel/einstein02.html"&gt;Boinc&lt;/a&gt;  und &lt;a href="http://www.astronews.com/news/artikel/2005/02/0502-004.shtml"&gt;AstroNews&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.boinc.de/einstein.htm"&gt;Einstein@home&lt;/a&gt;  basiert nun auf einem genialen, kosteng�nstigen  Verfahren, wonach durch verteiltes Rechnen auf Millionen von  &lt;em&gt;spendenden&lt;/em&gt; Privat-PCs weltweit die geforderte Rechenarbeit summiert werden kann.&lt;/p&gt;
&lt;p&gt;Eine Anmeldung des eigenen PC's ist &lt;a href="http://einstein.phys.uwm.edu/"&gt;einfach&lt;/a&gt;  mittels &lt;em&gt;create account&lt;/em&gt; bewerkstelligt. Die abgezapfte Rechenleistung hab' ich bislang zu keiner Zeit gespürt. Der entsprechende Prozess läuft ja auch mit niedrigster Priorität im Hintergrund. Neue Datenpakete werden gelegentlich via Internet zur Bearbeitung heruntergeladen und aktuelle Berechnungsergebnisse hochgeladen. Als nette Dreingabe erhalten wir einen &lt;a href="http://einstein.phys.uwm.edu/starsphere.php"&gt;interessanten, animierten Bildschirmschoner&lt;/a&gt; .
&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/04/einsteinhome.html' title='einstein@home'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=111480830680529686&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/111480830680529686'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/111480830680529686'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-111384421124311784</id><published>2005-04-18T18:42:00.000+02:00</published><updated>2006-03-12T13:30:48.523+01:00</updated><title type='text'>Adobe kauft Macromedia</title><content type='html'>&lt;p&gt;Diese &lt;a href="http://www.adobe.com/aboutadobe/invrelations/adobeandmacromedia.html"&gt;Fusion&lt;/a&gt; ist aus Sicht der Vektorgrafik-Anwender und -Entwickler eine interessante Neuigkeit. &lt;a href="http://adobe.com"&gt;Adobe&lt;/a&gt; ist maßgeblich an der Entwicklung des Vektorgrafikstandards &lt;a href="http://w3c.org/Graphics/SVG"&gt;SVG&lt;/a&gt; beteiligt und unterstützt dessen Verbreitung mittels des bekannten &lt;a href="http://www.adobe.com/svg/"&gt;SVG-Viewer&lt;/a&gt; Plugins. Dagegen hat &lt;a href="http://macromedia.com/"&gt;Macromedia&lt;/a&gt; bislang sein weit verbreitetes, proprietäres &lt;a href="http://macromedia.com/software/flashplayer/"&gt;Flash-Format&lt;/a&gt; gesetzt.
&lt;/p&gt;

&lt;p&gt;Wie Adobe nun künftig mit diesen beiden konkurrierenden Technologien in eigenem Hause umgeht, wird zur Zeit heiss &lt;a href="http://groups.yahoo.com/group/svg-developers/message/49051"&gt;diskutiert&lt;/a&gt;. 
F�r eine voraussichtliche Treue zu SVG spricht die j�ngste &lt;a href="http://www.heise.de/newsticker/meldung/58296"&gt;Kooperationsvereinbarung&lt;/a&gt; zwischen Adobe und dem Browserhersteller Opera. Letzterer ist ja erstaunlich weit in der Entwicklung seiner integrierten SVG-Fähigkeiten fortgeschritten.&lt;/p&gt;

&lt;p&gt;Vermutungen gehen in die Richtung, dass dieses Zusammengehen eine Kräftebündelung gegen das Grafik-Subsystem &lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/avalon/default.aspx"&gt;Avalon&lt;/a&gt;
darstellt. In jedem Fall sind die Karten ab heute neu gemischt.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/04/adobe-kauft-macromedia.html' title='Adobe kauft Macromedia'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=111384421124311784&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/111384421124311784'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/111384421124311784'/><author><name>stefan</name></author></entry><entry><id>tag:blogger.com,1999:blog-5251629.post-111329609865835713</id><published>2005-04-12T10:33:00.000+02:00</published><updated>2006-03-12T13:29:24.636+01:00</updated><title type='text'>Der transparente Surfer</title><content type='html'>&lt;p&gt;Weit über das Ziel hinaus schiesst offensichtlich Harald Lemke, Staatssekretär im hessischen Innenministerium, mit seiner Kritik an öffentlicher Förderung von &lt;a href="http://www.heise.de/newsticker/meldung/58311"&gt;Kryptographie und Anonymisierung im WWW&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Als Killerargumente führt er Kindesmissbrauch, organisierte Kriminalität und Terrorismus an. Die von der Politik favorisierte Einführung einer &lt;a href="http://www.heise.de/ct/05/08/054/"&gt;Vorratsdatenspeicherung im TK-Bereich&lt;/a&gt; geht Lemke dabei offensichtlich nicht weit genug. Er äussert nicht ganz unberechtigte Zweifel an deren technischer Durchführbarkeit.&lt;/p&gt;

&lt;p&gt;Glücklicherweise gibt es sofort &lt;a href="http://www.netzpolitik.org/index.php?p=608"&gt;lauten Widerstand&lt;/a&gt; zur Sicherstellung des grundgesetzlich gesicherten Datenschutzes und Unterstützung des hier im Fokus stehenden &lt;a href="http://anon.inf.tu-dresden.de/"&gt;Projekts&lt;/a&gt;.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://goessner.net/2005/04/der-transparente-surfer.html' title='Der transparente Surfer'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5251629&amp;postID=111329609865835713&amp;isPopup=true' title='0 Kommentare'/><link rel='replies' type='application/atom+xml' href='http://goessner.net' title='Kommentare zum Post'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/111329609865835713'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5251629/posts/default/111329609865835713'/><author><name>stefan</name></author></entry></feed>