<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>toscho.design&#187; Links</title>
	<atom:link href="http://toscho.de/thema/links/feed/" rel="self" type="application/rss+xml" />
	<link>http://toscho.de</link>
	<description>Redaktion und schwer geprüftes Webdesign aus Halle (Saale)</description>
	<lastBuildDate>Thu, 17 May 2012 23:03:08 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>daily</sy:updatePeriod>
	<sy:updateFrequency>4</sy:updateFrequency>
	
		<item>
		<title>Browser-ABC</title>
		<link>http://toscho.de/2010/browser-abc/</link>
		<comments>http://toscho.de/2010/browser-abc/#comments</comments>
		<pubDate>Sun, 16 May 2010 06:35:03 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1680</guid>
		<description><![CDATA[Welche Seiten mir der Browser anbietet, wenn ich nur einen Buchstaben in das Adressfeld eintippe.]]></description>
			<content:encoded><![CDATA[<p>Ich bin gerade erst darüber gestolpert – Sonntagmorgen, fragt nicht! – <a href="http://leumund.ch/browser-abc-008247">Christian Leu listet auf</a>, welche Seite ihm der Browser für jeden einzelnen Buchstaben vorschlägt. Find’ ich lustig, also steige ich verspätet noch ein. Das Ergebnis entlarvt mich vermutlich als langweiligen Fachmenschen. Und doch stehe ich dazu.</p>
<p class="wideimg"><img src="http://toscho.de/wp-content/uploads/2010/05/browser-abc.png" alt="Browser-ABC" width="500" height="347" class="size-full wp-image-1681 border" /></p>
<ul>
<li><a href="http://www.andrewnacin.com/">andrewnacin.com</a></li>
<li><a href="http://bugs.webkit.org/">bugs.webkit.org</a></li>
<li><a href="http://core.trac.wordpress.org/">core.trac.wordpress.org</a></li>
<li><a href="http://developer.palm.com/">developer.palm.com</a></li>
<li><a href="http://www.evalotta.net/">evalotta.net</a></li>
<li><a href="http://www.fileformat.info/">fileformat.info</a></li>
<li><a href="https://github.com/">github.com</a></li>
<li><a href="http://hakre.wordpress.com">hakre.wordpress.com</a></li>
<li><a href="http://ip-lookup.net">ip-lookup.net</a></li>
<li><a href="http://www.joindiaspora.com/">joindiaspora.com</a></li>
<li><a href="http://kaliban.de/">kaliban.de</a></li>
<li><a href="http://labjs.com/">labjs.com</a></li>
<li><a href="http://meta.stackexchange.com">meta.stackexchange.com</a></li>
<li><a href="http://neuralmesh.com/">neuralmesh.com</a></li>
<li><a href="http://opera-info.de">opera-info.de</a></li>
<li><a href="http://www.php.net/">php.net</a></li>
<li><a href="http://www.quirksmode.org">quirksmode.org</a></li>
<li><a href="http://research.swtch.com/">research.swtch.com</a></li>
<li><a href="http://stackoverflow.com">stackoverflow.com</a></li>
<li><a href="http://www.typolexikon.de">typolexikon.de</a></li>
<li><a href="http://www.unwrongest.com/">unwrongest.com</a></li>
<li><a href="http://validator.nu">validator.nu</a></li>
<li><a href="http://wpdocs.labs.thedextrousweb.com/">wpdocs.labs.thedextrousweb.com</a></li>
<li><a href="http://xhtmlforum.de">xhtmlforum.de</a></li>
<li><a href="http://yoast.com">yoast.com</a></li>
<li><a href="http://zomigi.com/">zomigi.com</a></li>
</ul>
<p>Wer spielt mit?</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/browser-abc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Designlinks 12</title>
		<link>http://toscho.de/2010/designlinks-12/</link>
		<comments>http://toscho.de/2010/designlinks-12/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 10:19:33 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Zeichen]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1669</guid>
		<description><![CDATA[Eine Katze, die gerne duscht, langsame Referenzen, schlanke User-Agent-Strings, fette Zeichenreferenzen, ein enorm flexibles Stylesheet und ein Malprogramm.]]></description>
			<content:encoded><![CDATA[<p>Wird mal wieder Zeit. Aber zuerst entspannen wir uns ein bißchen:</p>
<p class="wp-caption-text"><object type="application/x-shockwave-flash" data="http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=1920326&#038;fullscreen=1" width="480" height="360" ><param name="allowfullscreen" value="true"/><param name="wmode" value="transparent"/><param name="allowScriptAccess" value="always"/><param name="movie" quality="best" value="http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=1920326&#038;fullscreen=1"/><embed src="http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=1920326&#038;fullscreen=1" type="application/x-shockwave-flash" wmode="transparent"  width="480" height="360"  allowScriptAccess="always"></embed></object><br />
Quelle: <a href="http://www.collegehumor.com/video:1920326" hreflang="en">CollegeHumor</a>.</p>
<p>›<a href="http://schlueters.de/blog/archives/125-Do-not-use-PHP-references.html" hreflang="en" lang="en">Do not use PHP references</a>‹, empfiehlt Johannes Schlüter, denn Referenzen kosten Tempo, Übersicht und Flexibilität. Ob seiner klaren und verständlichen Darstellung dieses kniffligen Themas möchte ich den Artikel jetzt schon in die Liste der zehn besten dieses Jahres rücken.</p>
<p>Nicholas C. Zakas: <a href="http://www.nczonline.net/blog/2010/01/12/history-of-the-user-agent-string/" hreflang="en" lang="en">History of the user-agent string</a>. Warum die UA-Strings heute oft so sonderbar aussehen. Die neue <a href="http://blogs.msdn.com/ie/archive/2010/03/23/introducing-ie9-s-user-agent-string.aspx" hreflang="en">Kennung des IE 9</a> lautet:</p>
<pre class="notranslate">Mozilla/5.0 (compatible, MSIE 9.0; Windows NT 6.1; Trident/5.0)</pre>
<p>Anhängsel irgendwelcher Zusatzsoftware werden nicht mehr eingebaut; damit schrumpft die <a href="http://www.useragentstring.com/_uas_Internet%20Explorer_version_8.0.php" hreflang="en">Liste der möglichen Kennungen</a> gewaltig – was es Proxys erheblich erleichtert, gespeicherte Versionen einer Webseite auszuliefern. Das erklärt Billy Hoffman gut in: ›<a href="http://zoompf.com/blog/2010/03/the-big-performance-improvement-in-ie9-no-one-is-talking-about" hreflang="en" lang="en">The Big Performance Improvement in IE9 No One is Talking About</a>‹. Er rät auch dazu, die <a href="http://toscho.de/2010/gzip-pro-und-kontra/">gzip-komprimierte</a> Version <em>nur noch</em> anhand des Accept-Headers zu versenden und den User-Agent zu ignorieren, damit beispielsweise ein Safari-Nutzer die Version bekommt, die der Firefox-Nutzer zuvor in den Proxy gehievt hat.</p>
<p>Man kann <a href="http://toscho.de/2008/zeichenkodierung-begriffe/#toc-maskierung-entity-und-zeichenreferenz">dezimale Zeichenreferenzen</a> mit beliebig vielen führenden Nullen versehen. So läßt sich das <samp>A</samp> als <code>&amp;#65;</code> schreiben oder als <code>&amp;#000000000000000000000000000000065;</code><br />
›hakre‹ hat mal ausprobiert, wie weit man damit gehen kann: ›<a href="http://hakre.wordpress.com/2010/02/25/html-entity-boundaries-zero-padding/" hreflang="en" lang="en">HTML Entity Boundaries – Zero Padding</a>‹.<br />
Ein Experiment, dessen praktischer Nutzen sicher weit unter seinem Unterhaltungswert liegt. Doch zeigt es, wie weit die Entwickler vorausdenken und wo sie die Grenze ziehen zwischen ›das versuche ich noch‹ und ›das wird zu langsam‹. Wenig überraschend frißt Firefox die meisten Nullen – bis zum Erstickungstod.</p>
<p>Anne van Kesteren hat auch ein Experiment mit gewaltigem Geekpotential hingestellt: <a href="http://annevankesteren.nl/test/contenteditable-style.htm" lang="en">Live style sheet editing!</a><br />
Und da muß ich einfach mal den Quelltext zitieren:</p>
<pre class="notranslate">&lt;!doctype html&gt;
&lt;html&gt;
 &lt;head&gt;
  &lt;title&gt;Live style sheet editing!&lt;/title&gt;
  &lt;style style="<code class="string">white-space:pre <i>/* hack for Opera */</i></code>" contenteditable=""&gt;
html {
margin:.2em;
font-size:2em;
color:lime;
background:purple
}
head, title, style
{
display:block
}
body {
display:none
}
  &lt;/style&gt;
 &lt;/head&gt;
 &lt;body&gt;<i>&lt;!-- nothing is needed here --&gt;</i>&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Zum Schluß noch ein Link für die Freunde der Maus: <a href="http://mrdoob.com/projects/harmony/">Harmony</a>, ein Zeichenprogramm in Javascript und Canvas. Das macht wirklich Freude.</p>
<p><img src="http://toscho.de/wp-content/uploads/2010/04/harmony-toscho.png" alt="Harmony. Ein Experiment." width="485" height="330" class="alignnone size-full wp-image-1670 border" /></p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/designlinks-12/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Twitter: Einen Tweet formatieren</title>
		<link>http://toscho.de/2010/twitter-einen-tweet-formatieren/</link>
		<comments>http://toscho.de/2010/twitter-einen-tweet-formatieren/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 22:59:59 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1611</guid>
		<description><![CDATA[Wie man in einem Tweet Hashtags, User und viele URLs erkennt.]]></description>
			<content:encoded><![CDATA[<p>Twitter bietet Feeds für fast alles an. Prima.<br />
Ohne jegliches Markup. <em>Auch prima.</em></p>
<p>Denn wenn wir Twitter per Webinterface erleiden, sehen wir schnell: Mit Umlauten in Hashtags kommt Twitter schlecht zurecht, ebenso mit URLs, denen kein Leerzeichen vorangeht. Und so richtig viele Protokollbezeichner kennt der Parser auch nicht.</p>
<p>Wollen wir also <a href="http://twitter.com/statuses/user_timeline/19575603.rss">einen Twitterfeed</a> per RSS einbinden, müssen wir die Links selbst erzeugen. Auf <a href="http://labs.toscho.de/twegolicious/">Twegolicious</a>, wo ich nur meine eigene <span lang="en">Timeline</span> einbinde, entferne ich auch noch meinen Nutzernamen.</p>
<p>Der einzelne Tweet sieht im Quelltext so aus:</p>
<pre class="notranslate">&lt;item&gt;
    &lt;title&gt;toscho: Informieren statt Sperren: http://toscho.de/p1609 #gebloggt&lt;/title&gt;
    &lt;description&gt;toscho: Informieren statt Sperren: http://toscho.de/p1609 #gebloggt&lt;/description&gt;
    &lt;pubDate&gt;Tue, 19 Jan 2010 21:44:21 +0000&lt;/pubDate&gt;
    &lt;guid&gt;http://twitter.com/toscho/statuses/7960752682&lt;/guid&gt;
    &lt;link&gt;http://twitter.com/toscho/statuses/7960752682&lt;/link&gt;
&lt;/item&gt;</pre>
<p><code>title</code> und <code>description</code> unterscheiden sich also nicht. Ich finde, daß man zumindest in einem von beiden den Nutzernamen hätte entfernen können …</p>
<p>Den Feed hole ich mit <a href="http://simplepie.org/" hreflang="en">SimplePie</a>, und den einzelnen Tweet werte ich mit dieser Funktion auf:</p>
<pre class="notranslate">function format_tweet(<var>$content</var>, <var>$user</var> = NULL)
{
    <var>$uri_schemes</var> = array (
        '<code class="string">mailto</code>', '<code class="string">news</code>', '<code class="string">nntp</code>', '<code class="string">callto</code>', '<code class="string">ed2k</code>', '<code class="string">irc</code>', '<code class="string">ssh</code>', '<code class="string">svn</code>',
        '<code class="string">s?ftps?</code>', '<code class="string">https?</code>' );
    <var>$regex</var>['<code class="string">url</code>'] = '(' . implode('<code class="string">|</code>', <var>$uri_schemes</var>)
            . '<code class="string">)://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?</code>';
    <var>$regex</var>['username'] = "<code class="string">@([a-zA-Z_\d]+)</code>";
    <var>$regex</var>['hashtag']  = "<code class="string">([^\pL]){0,1}(#([-_\pL\d]+))</code>";

    if ( ! is_null(<var>$user</var>) )
    {
        <i>// Usernamen + ': ' aus Text entfernen</i>
        <var>$content</var> = substr( <var>$content</var>, ( strlen(<var>$user</var> ) + 2 ) );
    }
    <i>// Hyperlinks umwandeln</i>
    <var>$content</var> = preg_replace(
        '<code class="string">~</code>' . <var>$regex</var>['<code class="string">url</code>'] . '<code class="string">~u</code>', '<code class="string">&lt;a href="${0}"&gt;${0}&lt;/a&gt; </code>', <var>$content</var>);
    <i>// Usernamen verlinken</i>
    <var>$content</var> = preg_replace(
        '<code class="string">~</code>' . <var>$regex</var>['username'] . '<code class="string">~u</code>',
        '<code class="string">&lt;a class="user" href="http://twitter.com/${1}"&gt;${0}&lt;/a&gt;</code>',
        <var>$content</var>);
    <i>// Hashtags verlinken</i>
    <var>$content</var> = preg_replace(
        '<code class="string">~</code>' . <var>$regex</var>['hashtag'] . '<code class="string">~u</code>',
        '<code class="string"> ${1}&lt;a class="tag" href="http://twitter.com/search?q=%23${3}"&gt;${2}&lt;/a&gt;</code>',
        <var>$content</var>);

    return <var>$content</var>;
}</pre>
<p>Das hätte ich wesentlich kompakter schreiben können, aber die Übersicht geht vor.</p>
<p>Aus dem oben gezeigten Quelltext wird per …</p>
<pre class="notranslate">echo format_tweet(<var>$item</var>, '<code class="string">toscho</code>');</pre>
<p>… dieses Markup:</p>
<pre class="notranslate">Informieren statt Sperren:
&lt;a href="<code class="string"><a href="http://toscho.de/p1609">http://toscho.de/p1609</a></code>"&gt;http://toscho.de/p1609&lt;/a&gt;
&lt;a class="<code class="string">tag</code>"
    href="<code class="string"><a href="http://twitter.com/search?q=%23gebloggt">http://twitter.com/search?q=%23gebloggt</a></code>"
&gt;#gebloggt&lt;/a&gt;</pre>
<p>In einem Projekt, das ich hier nicht nennen kann, habe ich Feeds zu bestimmten Suchworten eingebunden. Um Spam herauszufiltern, habe ich die Hashtags und die URLs eines Tweets gezählt, und den Tweet beim Überschreiten bestimmter Grenzen verworfen. Das funktioniert zwar nicht sehr zuverlässig, aber wer darauf verzichtet, holt sich schnell viel Schund auf die eigene Seite.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/twitter-einen-tweet-formatieren/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Designlinks 11</title>
		<link>http://toscho.de/2010/designlinks-11/</link>
		<comments>http://toscho.de/2010/designlinks-11/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 18:13:39 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1588</guid>
		<description><![CDATA[Über den Dialog zwischen Webprofis und Amateuren, eine performante Einbindung von Print-Stylesheets, das Opera-OS »Tabbee« und einen ungewöhnlichen Fall von Unordnung.]]></description>
			<content:encoded><![CDATA[<ul>
<li>Molily: <a lang="en" href="http://molily.de/weblog/new-amateurs">In Defense of New Amateurs</a>.<br />
Laßt euch vom Titel nicht erschrecken: Der Text wurde auf Deutsch geschrieben.<br />
Mathias beklagt hier, daß die Webexperten sich nicht (genug) um die Anfänger kümmerten, zu wenig verständliches Wissen vorhanden sei und kein Dialog zustande komme.</p>
<p>Ich finde es gut und wichtig, diesen Dialog zwischen Profis und Amateuren mal zum Thema zu machen. Aber ganz so schlecht ist die Situation ja nicht: Michael Jendryschik hat mit seiner <a href="http://jendryschik.de/wsdev/einfuehrung/">Einführung in XHTML, CSS und Webdesign</a> einen übersichtlichen Einstieg hingelegt, den man kostenlos im Netz lesen oder als Buch kaufen kann. Im <a href="http://xhtmlforum.de/">XHTML-Forum</a> diskutieren täglich Anfänger und Experten auf Augenhöhe miteinander – zuweilen mit eiserner Geduld.</p>
<p>Und dann gibt es tausende Blogs, kleine Foren und ähnliche Angebote. Die Information für Einsteiger gibt es noch – nur weiter gestreut als vor zehn Jahren.</li>
<li>Billy Hoffman: <a hreflang="en" lang="en" href="http://zoompf.com/blog/2009/12/browser-performance-problem-with-css-print-media-type/">Browser Performance Problem with CSS “print” Media Type</a>.
<p>Webbrowser sind gierig: Sie laden <span lang="en">Print-Stylesheets</span> immer, ob gedruckt wird oder nicht. Hoffman schlägt unter anderem vor, den Link zu diesem Stylesheet erst nach <code>onload</code> ins Dokument zu schreiben, um das Rendering am Bildschirm zu beschleunigen.</p>
<p>Wer dann aber versucht, eine validierende Noscript-Variante einzubauen, dürfte ordentlich ins Schwitzen kommen.</p>
<p>Sehr unschön finde ich übrigens die vielen Spamlinks im Seitenkopf. In Opera mal unter »Ansicht/Seitendarstellung« den Benutzermodus auswählen … und das Essen im Magen halten. Bah!</li>
<li>Haavard K. Moen: <a hreflang="en" lang="en" href="http://my.opera.com/haavard/blog/2009/12/14/opera-tabbee">Chrome OS, eh? How about designing your own OS using Opera and Widgets?</a>.
<p>Haavard stellt <a hreflang="fr" href="http://www.tabbee.fr/">Tabbee</a> vor, die Alternative zu Chrome OS. Die ganze Oberfläche besteht aus Opera-Widgets!<br />
Bei den Auswahllisten sieht man gut, warum man <em>so</em> keine Navigation bauen sollte: Der Finger ist doppelt so dick wie ein Listeneintrag.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/k7VhlItPzkE&#038;hl=de_DE&#038;fs=1&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/k7VhlItPzkE&#038;hl=de_DE&#038;fs=1&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>
</li>
<li><a hreflang="en" lang="en" href="http://www.sankakucomplex.com/2009/12/29/otaku-nightmare-room/">Otaku Nightmare Room</a>.
<p>Ganz ehrlich: Bei mir sieht es nicht immer ordentlich aus. Die ganze Wohnung ist zugebüchert; selbst unter der Decke habe ich Regale langgezogen. Aber seitdem ich <em>das</em> gesehen habe, fühlt sich meine Wohnung geradezu steril an.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/designlinks-11/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WordPress: Shortlinks reloaded</title>
		<link>http://toscho.de/2010/wordpress-shortlinks-reloaded/</link>
		<comments>http://toscho.de/2010/wordpress-shortlinks-reloaded/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 21:25:07 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Interna]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1594</guid>
		<description><![CDATA[Wie man Short-URIs in WordPress erzeugt, ausgibt und narrensicher per .htaccess abfängt. Code und ein Plugin zum Download.]]></description>
			<content:encoded><![CDATA[<!--TOC-->
<p>Im April 2009 habe ich gezeigt, wie man in WordPress <a href="http://toscho.de/2009/shortlinks-in-wordpress/">mit Bordmitteln kurze URLs</a> für Seiten und Artikel erzeugt: Blog-Adresse plus »<code class="string">?p=</code>« plus Post-Id. Das funktioniert einfach und schnell. Nicht.</p>
<h2>Formatkrieg</h2>
<p>Meine Grundidee war: Ich habe nur einen Ort für die Logik des Verfahrens – die <code>functions.php</code>. Das stellte sich als zu naiv heraus, als die ersten <strong>kaputten Crawler</strong> aufschlugen, die das Fragezeichen mit einem <code>urlencode()</code> vorbehandelten. Requests auf <samp>/%3F=762</samp> sind eben etwas anderes als auf <samp>/?=762</samp>.</p>
<p>Jetzt mußte ich doch einen zweiten Ort anfassen: die .htaccess.</p>
<pre class="notranslate">RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/\<strong>%3f</strong>p\=(\d+)$
RewriteRule ^.* /?p=%1 [L,R=301]</pre>
<p>Dann versagte auch die URL-Erkennung bei <strong>Twitter</strong>: Verlinkt wurde nur der Teil bis zum Fragezeichen, alles dahinter fiel weg.<br />
Also habe ich die Kurz-URLs auf das Format /p762 umgestellt und die .htaccess angepaßt:</p>
<pre class="notranslate">RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/\%3fp\=(\d+)$ [OR]
RewriteCond %{REQUEST_URI} ^<strong>/p</strong>\=?(\d+)$
RewriteRule ^.* /?p=%1 [L,R=301]</pre>
<p>Auftritt <strong>Rivva-Bot</strong>: Der hat das neue Format um einen Slash <code>/</code> ergänzt, <a href="http://toscho.de/2010/logfiles-analysieren/#toc-400er">die Fehlerseite bestaunt</a> – und dann blieb er weg. Kein Problem:</p>
<pre class="notranslate">RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/\%3fp\=(\d+)$ [OR]
RewriteCond %{REQUEST_URI} ^/p\=?(\d+)<strong>/?</strong>$
RewriteRule ^.* /?p=%1 [L,R=301]</pre>
<h2>Markup</h2>
<p>In einem sehr fruchtbaren <a href="http://toscho.de/2009/shortlinks-in-wordpress/#comment-405">Ideen-Pingpong</a> (vulgo: Dialog) mit <a href="http://bernhardhaeussner.de/">Bernhard Häussner</a> haben wir die perfekte Notation für die Bekanntgabe des Shortlinks gefunden: Ein separater HTTP-Header samt <code>meta</code>-Element:</p>
<pre class="notranslate">&lt;meta http-equiv="<code class="string">X-Short-URI</code>" content="<code class="string">http://toscho.de/?p=762</code>"&gt;</pre>
<p>Interessiert kein Schwein. Am 14. August <a href="http://en.blog.wordpress.com/2009/08/14/shorten/">schuf WordPress.com Tatsachen</a> und verstetigte die sehr schlechte Lösung <code>rel="shortlink"</code> (<a href="http://microformats.org/wiki/rel-shortlink">Referenz</a>). Schade.</p>
<p>Jetzt könnte die URL also so angegeben werden:</p>
<pre class="notranslate">&lt;link rel="shortlink" href="http://toscho.de/?p=762"&gt;</pre>
<p><div id="attachment_1595" class="wp-caption alignright" style="width: 287px"><img src="http://toscho.de/wp-content/uploads/2010/01/opera-shortlink-info.png" alt="Opera: Shortlink im Infopanel" width="277" height="279" class="border size-full wp-image-1595" /><p class="wp-caption-text">Opera: Shortlink im Infopanel</p></div><em>Könnte.</em> Opera, auf den ich unter keinen Umständen verzichte, ignoriert leider genau diesen Link im Info-Panel. Also füge ich als Beziehung noch ein <code>alternate</code> hinzu, damit die Erkennung wieder klappt.<br />
Wer es ausprobieren möchte: F4 drücken, »Leiste anpassen/Erscheinungsbild/Paneele/« und ein Häkchen bei »Info« setzen.</p>
<h2 style="clear:right">PHP-Code</h2>
<p>Ich habe den Code zur Ausgabe in WordPress in eine kleine Klasse mit statischen Methoden gegossen – des armen Mannes Namensraum. Verzeiht mir.</p>
<pre class="notranslate">&lt;?php
<i>/**
 * Class Short_URI: Short-URIs erzeugen und ausgeben.
 * @author Thomas Scholz &lt;http://toscho.de&gt;
 * @see <a href="http://microformats.org/wiki/rel-shortlink">http://microformats.org/wiki/rel-shortlink</a>
 * @license GPL 3 &lt;<a href="http://www.gnu.org/licenses/gpl.html">http://www.gnu.org/licenses/gpl.html</a>&gt;
 * @version 1.3
 *
 */</i>
class Short_URI {

    <i>/**
     * Kurz-URI
     * @var string
     */</i>
    protected static <var>$short_uri</var>      = NULL;

    <i>/**
     * Sendet einen Link-HTTP-Header
     * @param bool <var>$headonly</var> Nur bei HEAD-Requests senden?
     * @return void
     */</i>
    public static function send_header(<var>$headonly</var> = TRUE)
    {
        if (<var>$headonly</var> and ('<code class="string">HEAD</code>' != <var>$_SERVER</var>['<code class="string">REQUEST_METHOD</code>']) )
        {
            return;
        }
        if ( ! self::prepare() )
        {
            return;
        }
        header('<code class="string">Link: &lt;</code>' . self::<var>$short_uri</var> . '<code class="string">&gt;; rel="shortlink"</code>');
        return;
    }

    public static function link_elem(<var>$echo</var> = TRUE)
    {
        if ( ! self::prepare() )
        {
            return;
        }
        <var>$link</var> = '<code class="string">&lt;link rel="alternate shortlink" title="Shortlink"</code>'
                . '<code class="string"> href="</code>' . self::<var>$short_uri</var> . '<code class="string">" /&gt;</code>';

        if ( ! <var>$echo</var>)
        {
            return <var>$link</var>;
        }

        echo <var>$link</var>;
        return;

    }

    <i>/**
     * Erzeugt einen Link zum Twittern der aktuellen Seite.
     * @param string|array <var>$args</var>
     * @return string
     */</i>
    static function tweet_link(<var>$args</var> = NULL)
    {
        <var>$message_template</var> = '<code class="string">Lese gerade: %TITLE %URL von @toscho</code>';
        <var>$link_text</var>        = '<code class="string">Artikel twittern</code>';
        <var>$title_length</var>     = 80;
        <var>$class</var>            = '<code class="string">twitterlink</code>';
        <i>// Zum Ändern echo=0 übergeben.</i>
        <var>$echo</var>             = TRUE;

        if ( ! is_null(<var>$args</var>) )
        {
            if ( is_array(<var>$args</var>) )
            {
                extract(<var>$args</var>);
            }
            elseif ( is_string(<var>$args</var>) )
            {
                parse_str(<var>$args</var>);
            }
            else
            {
                trigger_error(
                    '<code class="string"><var>$args</var> muss ein Array oder ein String sein.</code>',
                    E_USER_ERROR
                );
            }
        }
        global <var>$post</var>;

        <var>$title</var>       = trim(<var>$post</var>-&gt;post_title);

        if ( isset ( <var>$title</var>[<var>$title_length</var>+2] ) )
        {<i>// Verkürzen bei Bedarf</i>
            <var>$title</var> = self::end_on_word(substr(<var>$title</var>, 0, <var>$title_length</var>)) . '<code class="string"> …</code>';
        }

        <var>$message</var> = str_replace(
            array('<code class="string">%TITLE</code>', '<code class="string">%URL</code>'),
            array(<var>$title</var>, self::<var>$short_uri</var> ),
            <var>$message_template</var>
        );

        <var>$link</var> = '<code class="string">&lt;a class="</code>' . <var>$class</var>
            . '<code class="string">" href="http://twitter.com/home?status=</code>' . urlencode(<var>$message</var>)
            . '<code class="string">" title="</code>' . <var>$message</var> . '<code class="string">"&gt;</code>'
            . <var>$link_text</var> . '<code class="string">&lt;/a&gt;</code>';

        if (<var>$echo</var>)
        {
            echo <var>$link</var>;
            return;
        }

        return <var>$link</var>;
    }

    <i>/**
     * Prüft, ob eine Short-URI erstellt werden soll
     * @return bool
     */</i>
    public static function prepare()
    {
        if ( is_front_page() )
        {
            return FALSE;
        }
        if ( is_page() or is_single() or is_attachment() )
        {
            global <var>$post</var>;

            if ( is_null( self::<var>$short_uri</var> ) )
            {
                self::<var>$short_uri</var> =
                    rtrim(get_option('home'), '<code class="string">/</code>') . '<code class="string">/p</code>' . <var>$post</var>-&gt;ID;
            }
            return TRUE;
        }
        <i>// Archive</i>
        return FALSE;
    }

    <i>/**
     * Entfernt unvollständige Worte am Ende eines Strings.
     * @see http://toscho.de/2009/php-funktion-end_on_word/
     * @param <var>$str</var> Zeichenkette
     * @return string
     */</i>
    static function end_on_word(<var>$str</var>)
    {
        <var>$str</var> = trim(<var>$str</var>);

        <i>// Nur ein Wort, wird also nicht gekürzt.</i>
        if ( FALSE === strpos(<var>$str</var>, '<code class="string"> </code>') )
        {
            return <var>$str</var>;
        }

        <i>// Jedes Wort ein Eintrag im Array …</i>
        <var>$arr</var>   = explode('<code class="string"> </code>', <var>$str</var>);
        <i>// … letztes Stück wegwerfen …</i>
        array_pop(<var>$arr</var>);
        <i>// … den String wieder herstellen und Kommas trimmen.</i>
        return rtrim( implode('<code class="string"> </code>', <var>$arr</var>), '<code class="string">,;</code>');
    }
}</pre>
<p>Wer bis hierhin durchgehalten hat, darf sich das auch als …</p>
<p class="downloadlink"><a class='piwik_download' href="http://f.toscho.de/php-skripte/short-uri.0.1.zip">WordPress-Plugin Short-URI herunterladen</a>.</p>
<p>Den Tweetlink baut ihr <em>innerhalb des Loops</em> mit diesem Code ein:</p>
<pre class="notranslate">do_action('tweet_link');</pre>
<p>Oder so:</p>
<pre class="notranslate">do_action('tweet_link', 'parameter=wert');</pre>
<p>Die darin enthaltene Klasse könnt ihr natürlich auch einfach in die <code>functions.php</code> einbinden, um den Code direkt zu verwenden.</p>
<p>Ich habe ihn unter die <a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a> gestellt (<a href="http://toscho.de/2009/no-no-no-nofollow/#comment-1109">hallo Helmut!</a>), damit ihr damit machen könnt, was immer ihr wollt. Er ist mir länger geraten, als ich erhofft hatte; das heißt: Er hat sicher auch mehr Fehler. Findet sie!</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2010/wordpress-shortlinks-reloaded/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Designlinks 10</title>
		<link>http://toscho.de/2009/designlinks-10/</link>
		<comments>http://toscho.de/2009/designlinks-10/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 05:05:50 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[Suchmaschinen]]></category>
		<category><![CDATA[Typographie]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Kommentare]]></category>
		<category><![CDATA[Spam]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Tabelle]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[VML]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1555</guid>
		<description><![CDATA[Videos untertiteln, ein schräges Impressum, dumme Ratschläge zur Vermeidung von Kommentarspam, Schriftenglättung mit Javascript und Canvas erkennen, JAWS’ Tabellenheuristik und Bilder drehen mit SVG und VML.]]></description>
			<content:encoded><![CDATA[<ul>
<li><a lang="en" hreflang="en" href="http://www.iheni.com/make-video-accessible-localised-mobile-and-searchable-by-captioning/">Henny Swan: Make video accessible, localised, mobile and searchable by captioning</a>.
<p>Henny stellt mehrere Programme vor und gibt gute Hinweise. Auch die Kommentare sind einen Blick wert.</li>
<li><a href="http://seat-1.com/ERP/Impressum.html">seat-1 Software GmbH: Impressum</a>
<p>Bis zum Ende lesen!</li>
<li><a lang="en" hreflang="en" href="http://googlewebmastercentral.blogspot.com/2009/11/hard-facts-about-comment-spam.html">Adel Saoud and Paolo Petrolini (Google): Hard facts about comment spam</a>.
<p>Ich habe schon lange nicht mehr solchen Unsinn gelesen. Zur Vermeidung von Kommentarspam empfehlen die Autoren dies:</p>
<blockquote lang="en"><ul>
<li>Disallow anonymous posting.</li>
<li>Use CAPTCHAs and other methods to prevent automated comment spamming.</li>
<li>Turn on comment moderation.</li>
<li>Use the "nofollow" attribute for links in the comment field.</li>
<li>Disallow hyperlinks in comments.</li>
<li>Block comment pages using robots.txt or meta tags.</li>
</ul>
</blockquote>
<p>Aus meiner eigenen Erfahrung kann ich dazu dies beisteuern: </p>
<ul>
<li>Ich erlaube schon lange anonyme Kommentare, aber die Spammer füllen immer alle Felder aus. Wirkungslos.</li>
<li>Captchas stellen auch für richtige Besucher immer eine Hürde dar. Der Schaden wiegt den Nutzen nicht auf.</li>
<li>Kommentare moderiere ich im Nachhinein. Für den Schreiber ist es sehr frustrierend, etwas beizutragen und es dann nicht zu sehen. Wenn doch mal ein Spamkommentar durchrutscht, dann hat derjenige ein paar Stunden lang einen Backlink. Na und?</li>
<li>Nofollow interessiert keinen Spammer. Für eine weitere Diskussion verweise ich auf meinen <a href="http://toscho.de/2009/no-no-no-nofollow/">Nofollow-Artikel</a>.</li>
<li>Ein Linkverbot für Kommentare würde <del datetime="2009-12-08T04:25:03+00:00">dieses</del> <ins datetime="2009-12-08T04:25:03+00:00">jedes</ins> Blog sehr entwerten.</li>
<li>Selbst wenn man Kommentarseiten von den Artikeln separiert – was mich als Leser eher nervt – so habe ich doch noch keinen Spammer gesehen, der erst die robots.txt prüft.</li>
</ul>
<p>All diese Hinweise nützen nur einem: Google. Wer sie befolgt, hilft Google dabei, den Index sauber zu halten. Aber er beschädigt die Qualität der eigenen Website.<br />
Mein Rat an Google: Macht eure Arbeit selbst. Wir benutzen serverseitige Spamfilter.</li>
<li><a lang="en" hreflang="en" href="http://www.useragentman.com/blog/2009/11/29/how-to-detect-font-smoothing-using-javascript/">Zoltan Hawryluk: How to Detect Font-Smoothing Using JavaScript</a>.
<p>Clevere Lösung mit Canvas. Ob das aufs Tempo geht? Mal sehen.</li>
<li><a lang="en" hreflang="en" href="http://webaim.org/blog/jaws-ate-my-tables/">Jared Smith: JAWS ate my tables</a>.
<p>Ob eine Tabelle für Daten oder fürs Layout gedacht wurde, entscheidet JAWS nach dieser Regel: Wenn sie mindestens zwei Spalten und zwei Reihen hat und mindestens vier Zellen zwischen 200 und 16000 Pixel groß sind –  dann muß es eine Datentabelle sein, sonst nicht. Im Artikel illustrieren zwei Beispiele, warum das eine dämliche Heuristik ist.</li>
<li>
<p><a lang="ru" hreflang="ru" href="http://0range.ru/archives/20">Тагир Юсупов: Поворот изображении с помощью SVG и VML</a>.<br />
(<a title="Automatische Übersetzung ins Deutsche" href="http://translate.google.com/translate?hl=de&#038;sl=ru&#038;tl=de&#038;u=http%3A%2F%2F0range.ru%2Farchives%2F20">Tagir Yusupov: Bilder drehen mit SVG und VML</a>)</p>
<p>Eigentlich ganz einfach. Man muß nur drauf kommen. Via <a href="http://twitter.com/pawelf">Andreas Fritsch, @pawelf</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/designlinks-10/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Designlinks 9</title>
		<link>http://toscho.de/2009/designlinks-9/</link>
		<comments>http://toscho.de/2009/designlinks-9/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 08:31:53 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1548</guid>
		<description><![CDATA[Überblick zu HTML5, Linkpopularität errechnen, Amazons nicht mehr ganz offene API, Googles Startseitenpatent, Zeichenkodierung externer Scripte, vi als Javascript und Facebookmanieren.]]></description>
			<content:encoded><![CDATA[<p>Nach einer langen Pause gibt’s heute die doppelte Portion.</p>
<ul>
<li><a href="http://molily.de/weblog/was-ist-html5">Mathias Schäfer: Was ist HTML 5? – Weit mehr als eine Auszeichnungssprache</a>.
<p>Wie das DOM in HTML5 serialisiert und per API angesprochen wird. Ein verständlicher Überblick zum Moloch der aktuellen HTML5-Spezifikation. Der Folgeartikel listet die <a href="http://molily.de/weblog/html5-specs">wichtigsten Referenzen</a> auf.</li>
<li><a lang="en" hreflang="en" href="http://blog.linkibol.com/post/How-to-Build-a-Popularity-Algorithm-You-can-be-Proud-of.aspx">Volkan Özçelik: How to Build a Popularity Algorithm You can be Proud of</a>.
<p><a href="http://linkibol.com/" hreflang="tr">Linkibol</a> ist ein türkisches Digg: Per Abstimmung können die Nutzer beeinflussen, welcher Link es bis weit oben auf der Startseite schafft.<br />
Aber wie verhindert man, daß ältere Links mit vielen Stimmen jüngere blockieren? Wie gewichtet man einzelne Stimmen? Wie verhindert man Spam?<br />
Özçelik beantwortet diese Fragen, stellt unterschiedliche Lösungen vor, die Algorithmen anderer Linkdienste und zuletzt den eigenen.</li>
<li><a lang="en" hreflang="en" href="http://www.librarything.com/blog/2009/09/amazon-policy-change-and-how-were.php">Tim Spalding (LibraryThing): The Amazon policy change, and how we're responding</a>.
<p>Amazon verlangt neuerdings, daß man auf der Hauptseite eines Produktes <em>ausschließlich</em> auf Amazon linkt, wenn man die API benutzt (<a lang="en" hreflang="en" href="https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html">Lizenz, Punkt 4 d</a>).<br />
Das ist natürlich ein Problem:</p>
<blockquote lang="en"><p>LibraryThing is not a social cataloging and social networking site for Amazon customers but for book lovers. Most of us are Amazon customers on Tuesday, and buy from a local bookstore or get from a library on Wednesday and Thursday! We recognize Amazon's value, but we certainly value options.</p></blockquote>
<p>Da LibrabryThing jedoch nicht auf die Buchumschläge Amazons verzichten möchte, hat Tim sich eine neue Lösung ausgedacht: Er will eine zusätzliche Seite »<i lang="en">Get it now</i>« zu jedem Buch anbieten, auf der dann nicht nur Links zu Amazons Konkurrenten stehen, sondern auch ein aktueller Preisvergleich und ein Abschnitt zu E- und Audio-Büchern.</p>
<p>Ich finde an diesem Ereignis zweierlei bemerkenswert: Amazon verdankt seine Dominante Position im Netz vor allem seiner Offenheit. Die API hat viele Entwickler überhaupt erst in die Lage versetzt, daraus <a hreflang="en" title="Auswahl an Mashups auf ProgrammableWeb.com" href="http://www.programmableweb.com/apitag/?q=amazon">Dienste</a> zu entwickeln. Jetzt erliegt das Unternehmen dem Reiz der Marktdominanz und zieht die Gurte ein bißchen enger. Das wird nicht der letzte Schritt gewesen sein.</p>
<p>LibrabryThing wird nun zur Kreativität gezwungen. Ob die jetzt gefundene Antwort auch die Nutzer befriedigt, wird sich zeigen – ich halte es für möglich.</p>
<p>Jedes Geschäftsmodell, das an die Nutzung offener APIs gebunden ist, sollte darauf vorbereitet sein und entsprechende Pläne bereithalten.</li>
<li><a hreflang="en" href="http://gawker.com/5350982/google-patents-worlds-simplest-home-page">Google hat seine Startseite patentieren lassen</a>.
<p>Auch solche Patente stellen ein Geschäftsrisiko dar. Dieses spezielle lasse ich als einzige Entschuldigung für die albernen Hintergrundbilder auf <a href="http://www.bing.com/">bing.com</a> gelten.</li>
<li><a lang="en" hreflang="en" href="http://lists.w3.org/Archives/Public/www-archive/2009Aug/att-0086/script-encoding-detection.html">Björn Höhrmann: Character encoding detection for external scripts</a>.
<p>Umfangreiche Testergebnisse dazu, welche <a href="http://toscho.de/thema/zeichen/">Zeichenkodierung</a> welcher Browser unter welchen Umständen erkennt.</li>
<li><a hreflang="en" href="http://gpl.internetconnection.net/vi/">JSvi: ein vi-Klon in Javascript</a>.
<p><a href="http://debiananwenderhandbuch.de/vi.html">Vi</a> oder dessen Nachbildung <a href="http://wiki.ubuntuusers.de/Vim">Vim</a> kennt jeder, der schon einmal Linux benutzt hat … hoffe ich.<br />
Warum man das in Javascript braucht, habe ich erst verstanden als jemand die <a hreflang="en" href="http://groups.google.com/group/opera.general/browse_thread/thread/edde9ed8e7639895/">passende Frage</a> gestellt hat. Und wer schreibt jetzt das Userscript dazu?</li>
<li>Zum Schluß noch was zum Gucken: <i lang="en">Facebook Manners And You</i>.
<p><object width="560" height="340" data="http://www.youtube.com/v/iROYzrm5SBM&#038;hl=de&#038;fs=1"><param name="movie" value="http://www.youtube.com/v/iROYzrm5SBM&#038;hl=de&#038;fs=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/iROYzrm5SBM&#038;hl=de&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340" /><br />
</object></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/designlinks-9/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Blogday 2009</title>
		<link>http://toscho.de/2009/blogday-2009/</link>
		<comments>http://toscho.de/2009/blogday-2009/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 09:09:46 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Kunterlei]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1525</guid>
		<description><![CDATA[Vier Empfehlungen jenseits des Webdesigns.]]></description>
			<content:encoded><![CDATA[<p>Heute ist <a href="http://www.blogday.org/">Blogtag</a>. Also wärmen wir uns mit einem Blog auf, dessen Thema noch einigermaßen vertraut wirkt:</p>
<h2><a href="http://www.yankodesign.com/">Yanko Design</p>
<p><img src="http://img.toscho.de/screenshots/blogday-2009/yanko-design.jpg" alt="" width="400" height"300" /></a></h2>
<p>Häuser, Möbel, Fahrzeuge, Gärten oder Telefone – wer je bezweifelt, daß er noch einmal wirklich neue Ideen zu Gesicht bekommt, der lese ein paar Tage Yanko Design. Hier lasse ich mich gerne inspirieren.<br />
Schön schräg: <a href="http://www.yankodesign.com/2008/03/24/insect-printer/">der Insektendrucker</a>.</p>
<h2><a href="http://emailsfromcrazypeople.com/">Emails from crazy people</p>
<p><img src="http://img.toscho.de/screenshots/blogday-2009/emailsfromcrazypeople.jpg" alt="" width="400" height"300" /></a></h2>
<p>Hier werden Briefe und E-Mails veröffentlich, die Menschen in Wut, Neid oder ähnlich inspirierenden Gemütszuständen verfaßt haben.<br />
Bösartig: <a href="http://emailsfromcrazypeople.com/2009/08/22/a-present-for-you/">A Present For You</a>.</p>
<h2><a href="http://faz-community.faz.net/blogs/ding/default.aspx">Ding und Dinglichkeit</p>
<p><img src="http://img.toscho.de/screenshots/blogday-2009/dinglichkeit.jpg" alt="" width="400" height"300" /></a></h2>
<p>Hier schreibt Andrea Diener seit Mitte Juli über die kleinen und großen Alltagsgegenstände, Gardinen, Kittelschürze und Wahlplakate.<br />
Scharf: <a href="http://faz-community.faz.net/blogs/ding/archive/2009/08/19/kahlschlag-am-koerper-der-rasierer.aspx">Kahlschlag am Körper: Der Rasierer</a>.</p>
<h2><a href="http://500beine.myblog.de/">500 Beine</p>
<p><img src="http://img.toscho.de/screenshots/blogday-2009/500beine.jpg" alt="" width="400" height"300" /></a></h2>
<p>Andreas Glumm schreibt über … ja was genau? Über alles, was er sieht und fühlt und denkt. Oder zumindest über das, was er erzählen mag in seiner kräftigen, bilderreichen Sprache.<br />
Nicht peinlich: <a href="http://500beine.myblog.de/500beine/art/6388309">Du klaust? Warum klaust du?</a>.</p>
<hr />
<p>Und jetzt sollte ich noch ein fünftes Blog empfehlen – aber ich kann mich nicht entscheiden. Also frage ich euch: Welches könnte das denn sein?</p>
<hr />
Törtchen für Tante Technorati: blogday2009<br />
<em>Nachtrag 05.01.2010:</em> Daran ist Technorati wohl erstickt. Den toten Link habe ich gelöscht.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/blogday-2009/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Designlinks 8</title>
		<link>http://toscho.de/2009/designlinks-8/</link>
		<comments>http://toscho.de/2009/designlinks-8/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 10:09:14 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[Typographie]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Zeichen]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1523</guid>
		<description><![CDATA[Zurückstrahlende Überwachungskameras, eine gefahrene Schrift, Mikrodaten, Phreaker, ein Rückblick auf 1984 und mehr.]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://www.heise.de/newsticker/Gutachter-Vorratsdatenspeicherung-bringt-lueckenlose-raeumliche-Ueberwachung--/meldung/141192">Vorratsdatenspeicherung</a>, <a href="http://www.main-spitze.de/region/ruesselsheim/print_6809397.htm">erzwungene DNS-Tests</a>, Bundestrojaner und <a href="http://www.zeit.de/online/2009/34/iphone-app-spyware">geschwätzige iPhones</a> – <a href="http://www.heise.de/newsticker/Kanzlerin-Merkel-als-Opfer-von-Videoueberwachung--/meldung/71316">niemand</a> darf sich heute noch sicher fühlen.<br />
Eine schöne gestalterische Antwort darauf hat das Team <a href="http://www.antrepo4.com/">antrepo4.com</a> gefunden: die <a href="http://www.a2591.com/2009/08/im-not-security-camera.html">Spoticam</a>.</p>
<p class="wideimg"><img src="http://toscho.de/wp-content/uploads/2009/08/spoticam.jpg" alt="Spoticam" title="Spoticam" width="600" height="600" class="size-full wp-image-1524" /></p>
</li>
<li>Kameras können Designer nicht nur inspirieren, sondern ihnen auch helfen, eine Schrift zu gestalten, hier den <a href="http://nl.toyota.be/cars/new_cars/iq/iq_font.aspx">iQ-Font</a>:
<p><object width="500" height="281"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5233789&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5233789&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="281"></embed></object></li>
<li>Einen ganz anderen Weg zur Schrift hat <a href="http://blog.foolip.org/">Philip Jägenstedt</a> eingeschlagen: Auf der Suche nach einem besseren Format für chinesische Schriften hat er bei Opera dessen internes SVG-Toolkit erweitert und ein Konzept entwickelt, das er <a href="http://liu.diva-portal.org/smash/record.jsf?pid=diva2:18417"><i lang="en">Stylized Stroke Fonts</i> (SSF)</a> nennt.</li>
<li>Vom gleichen Autor empfehle ich den Text »<a href="http://blog.foolip.org/2009/08/23/microformats-vs-rdfa-vs-microdata/">Microformats vs RDFa vs Microdata</a>«. Hier werden die drei unterschiedlichen Modelle mal anhand eines Praxisbeispiels verglichen.
<p>Letzten Endes ist er bei den <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html">Microdaten aus HTML 5</a> hängengeblieben – ein Konzept, vor dem ich ob seiner »vorläufigen« Anmutung bisher eher zurückschrecke. Jetzt reizt es mich aber doch.</li>
<li>SVG aber leidet immer noch unter der dünnen Unterstützung durch den Internet Explorer: Ohne Plugin sehen dessen Nutzer nichts. Das möchten die Betreiber des Projektes <a href="http://code.google.com/p/svgweb/">SVG Web</a> mittels Javascript und Flash lösen. Sicher ein interessanter Ansatz; nur die dafür nötigen 150 KiB finde ich ein bißchen viel.</li>
<li>Simon Willison hat über den richtigen MIME-Typen für <a href="http://www.json.org/">JSON-Dateien</a> nachgedacht: <a lang="en" href="http://simonwillison.net/2009/Feb/6/json/">Pragmatism, purity and JSON content types</a>.<br />
Kurzfassung: Das in <a href="http://www.ietf.org/rfc/rfc4627.txt">RFC 4672</a> definierte <code>application/json</code> gebrauche man nur in Ausnahmefällen. Spannende Kommentare.</li>
<li>Wem Kompatibilität ebenso wichtig ist wie Simon Willison, der sollte sich mal gründlich die <a href="http://blogs.msdn.com/ieinternals/archive/2009/08/20/WinINET-IE-Cookie-Internals-FAQ.aspx">Internet Explorer Cookie Internals</a> von Eric Lawrence durchlesen.
<p>Eine bessere Ressource dafür wird man so schnell nicht finden, denn:</p>
<blockquote><p>Internet Explorer (including IE8) does not attempt to support any RFC for cookies.</p></blockquote>
<p>Auf dieser Seite poppt bei mir irgendwann eine Paßwortanfrage auf. Kann das jemand nachvollziehen?</li>
<li>Kompatibilitätsprobleme hat nicht nur der Internet Explorer; sie treten in jedem größeren Projekt auf. Dazu habe ich eine sehr <a href="http://www.projectcartoon.com/cartoon/27">treffende Illustration</a> gefunden.</li>
<li>Andere Leute nutzen ihr Talent weniger … produktiv. David Kushner erzählt in »<a href="http://www.rollingstone.com/news/story/29787673/the_boy_who_heard_too_much/print">The Boy Who Heard Too Much</a>« eindringlich die Geschichte eines blinden Jungen, der sein Gehör für ungewöhnliche Telefonhacks genutzt hat.</li>
<li>Ebenso kurzsichtig, wenngleich mit weniger drastischen Konsequenzen, zeigte sich die Stiftung Warentest, als sie 1984 <a href="http://www.atari-computermuseum.de/warentest.htm">über »Homecomputer« schrieb</a>:<br />
<blockquote><p>Obwohl es ein Hauptziel unseres Tests war, herauszufinden, welche heimischen Anwendungsgebiete es für einen Computer geben könnte, sind wir in monatelangen Prüfungen nicht fündig geworden.</p></blockquote>
<p>Ich mag die unfreiwillige Komik, die <em>rückblickend</em> immer dann entsteht, wenn jemand versucht, die aktuelle Technik in die Zukunft zu extrapolieren. Auch unsere eigenen Texte werden irgendwann so wirken. Ein Gedanke, der mir hilft, mich nicht übermäßig ernst zu nehmen …</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/designlinks-8/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Blogdesign für Profis</title>
		<link>http://toscho.de/2009/blogdesign-fuer-profis/</link>
		<comments>http://toscho.de/2009/blogdesign-fuer-profis/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 19:09:27 +0000</pubDate>
		<dc:creator>Thomas Scholz</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Trickkiste]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://toscho.de/?p=1479</guid>
		<description><![CDATA[Wie man sein Blog echt cool … ähm … verunstaltet.]]></description>
			<content:encoded><![CDATA[<p>Deinem Blog fehlt der Pfeffer? Du willst ihm einen professionellen Anstrich geben, weißt aber nicht wie? Hier sind sie: die geheimen Tricks der Profis.</p>
<ul>
<li>Mach die <strong>Schrift</strong> <small>ganz, <small>ganz <small><a href="http://toscho.de/2009/schriftgroesse-meine-praxis/">klein</a>.</small></small></small> Dann hast du mehr Platz für Werbung.<br />
Wer doch etwas lesen will, kann ja einfach ein bißchen näher heranrücken oder mit der Vergrößerungsfunktion seines Browsers herumfummeln. Macht jeder gerne.</li>
<li>Packe alles in den <strong><a href="http://toscho.de/2009/titel-voran/">Titel</a></strong>, das irgendwie wichtig sein könnte: Kategorien, wichtige Suchworte und ein bißchen Werbung.<br />
Wer ein Lesezeichen setzen will, kann ja selbst nacharbeiten, wenn ihm das nicht paßt. Oder darauf verzichten.</li>
<li>Du brauchst kein <strong>Druckstylesheet</strong>. Und wenn doch, dann zumindest keinen Umbruch vor den Kommentaren. Laß unbedingt die Werbung drin; die ist so schön bunt und lockert den schwarzen Hintergrund auf.</li>
<li><strong>Verlinke</strong> einfach alles. Überall. Auf jeder Seite jede Kategorie, jedes Schlagwort, die 100 »beliebtesten« Artikel, die 100 am häufigsten kommentierten, 50 Werbepartner, deine Lieblingslinks und deine letzten 20 Tweets. Und die Seite, die der Leser <a href="http://toscho.de/2009/deppenlink-entfernen/">gerade sieht</a>. Dann findet er sie schneller wieder. Insgesamt wirkt deine deine Seite dann bestimmt sehr (wert)voll.</li>
<li>Links sind zwar eine tolle Sache, sehen aber doof aus. Kein Problem: Per CSS kannst du Links prima in den Rest des Textes eingliedern. Bau einfach die <strong>Unterstriche</strong> aus, und gib besuchten Links die gleiche <strong>Farbe</strong> wie unbesuchten: die des Textes. Und schon sieht die Linkwüste ein bißchen freundlicher aus.</li>
<li>Links auf <strong>fremde Seiten</strong> lassen sich übrigens sehr einfach mit dem Attribut <code>target="_blank"</code> vergolden. Wir wollen doch klarstellen, wer hier das Sagen hat, oder?</li>
<li>Warum nur einen <strong>Statistikdienst</strong>? Der könnte irgendwann <a href="https://www.datenschutzzentrum.de/tracking/">verboten</a> werden, da ist es sicherer, gleich zehn zu benutzen – die können ja nicht alle rechtswidrig sein. Und wer dein Blog besucht, verzichtet doch automatisch auf seine Privatsphäre, denn es ist ja öffentlich. Ladezeit? Ach was. Heute hat doch jeder DSL.</li>
<li>Du bist ein Genie, deine Artikel zeitlos gültig. Wozu also die Leser mit der Information verwirren, <strong>wann</strong> du einen Artikel geschrieben hast?<br />
Wenn du doch ein <strong>Datum</strong> verrätst, dann verstecke es gut. Direkt neben oder unter der Überschrift ist ein sehr schlechter Platz, da lenkt man nur von der Werbung ab.</li>
<li>Teile deine Artikel in <strong>mehrere Seiten</strong>. Leser blättern gerne, denn das schafft so eine … literarische Atmosphäre. Außerdem verdienst du dann mehr Geld mit deiner Werbung.</li>
</ul>
<p>Nächste Woche in dieser Sendung: Wie man seine Kommentatoren züchtigt.</p>
]]></content:encoded>
			<wfw:commentRss>http://toscho.de/2009/blogdesign-fuer-profis/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Database Caching using disk: basic
Object Caching 641/758 objects using disk: basic

Served from: toscho.de @ 2012-05-21 15:48:55 -->
