<?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/"
	>

<channel>
	<title>izibi weblog</title>
	<atom:link href="http://julian.xairro.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://julian.xairro.com</link>
	<description>Müll, den die Welt unbedingt braucht</description>
	<pubDate>Wed, 05 Nov 2008 15:05:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7-beta3-9731</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Obama</title>
		<link>http://julian.xairro.com/2008/11/05/obama/</link>
		<comments>http://julian.xairro.com/2008/11/05/obama/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 04:17:27 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Präsident]]></category>

		<category><![CDATA[USA]]></category>

		<category><![CDATA[Wahlen]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/?p=140</guid>
		<description><![CDATA[
Obama hat es geschafft!
]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-141" title="Obama '08" src="http://julian.xairro.com/wp-content/uploads/2008/11/obama08.png" alt="" width="440" height="462" /></p>
<p>Obama hat es geschafft!</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/11/05/obama/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Alles wird anders: Linus Torvalds bloggt</title>
		<link>http://julian.xairro.com/2008/10/12/alles-wird-anders-linus-torvalds-bloggt/</link>
		<comments>http://julian.xairro.com/2008/10/12/alles-wird-anders-linus-torvalds-bloggt/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 10:12:08 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Linus Torvalds]]></category>

		<category><![CDATA[Weblog]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/?p=135</guid>
		<description><![CDATA[Ich weiß nicht, wo ich es in den letzten Tagen schon alles gelesen habe, aber es hört sich immer wieder an, als würde sich jetzt alles verändern, nur weil Linus Torvalds ein Blog gestartet hat. Es ist zwar schön, dass er das auch endlich gemacht hat, aber ich habe noch nie ein Blog gesehen, das [...]]]></description>
			<content:encoded><![CDATA[<p>Ich weiß nicht, <a href="http://www.heise.de/newsticker/Linus-Torvalds-bloggt--/meldung/117234">wo</a> <a href="http://www.linux-magazin.de/news/linus_torvalds_geht_unter_die_blogger">ich</a> <a href="http://www.dimension2k.de/2008/10/12/linus-torvalds-bloggt/">es</a> <a href="http://log.handakte.de/13060/linus-torvalds-bloggt/">in</a> <a href="http://www.opensource-weblog.de/50226711/stranger_in_a_strange_land_linus_torvalds_bloggt.php">den</a> <a href="http://hilfe-beim-leben.de/2008/10/ein-neuer-blogger-herzlich-willkommen-linus-torvalds/">letzten</a> <a href="http://www.basicthinking.de/blog/2008/10/10/linus-bloggt/">Tagen</a> <a href="http://www.yetanotherlinuxblog.de/20-linus-bloggt-endlich/">schon</a> <a href="http://www.networkworld.com/community/node/33708">alles</a> <a href="http://linux-magazine.com/online/news/linus_torvalds_his_own_blog">gelesen</a> <a href="http://www.kubieziel.de/blog/archives/1000-Auch-Linus-hat-ein-Blog.html">habe</a>, aber es hört sich immer wieder an, als würde sich jetzt alles verändern, nur weil Linus Torvalds ein <a href="http://torvalds-family.blogspot.com/">Blog</a> gestartet hat. Es ist zwar schön, dass er das auch endlich gemacht hat, aber ich habe noch nie ein Blog gesehen, das so einen Hype ausgelöst hat.</p>
<p>Ob ich mit diesen Beitrag den Hype nur verstärke, oder einfach nur sage, dass es etwas übertrieben ist, weiß ich jetzt auch nicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/10/12/alles-wird-anders-linus-torvalds-bloggt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wandertag</title>
		<link>http://julian.xairro.com/2008/09/25/wandertag/</link>
		<comments>http://julian.xairro.com/2008/09/25/wandertag/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 10:00:35 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Alltag]]></category>

		<category><![CDATA[Chemie]]></category>

		<category><![CDATA[Schule]]></category>

		<category><![CDATA[Unterricht]]></category>

		<category><![CDATA[Wandertag]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/?p=132</guid>
		<description><![CDATA[Ich überlege gerade, wie der Titel für diesen Beitrag heißen soll. Ich kann mich nicht wirklich zwischen &#8220;Wandertag&#8221; und &#8220;Geisteskrank&#8221; entscheiden. Oder doch &#8220;Geisteskranker Wandertag&#8221;? Jedenfalls war heute bei uns an der Schule Wandertag und unser Klassenlehrer hatte einen großartigen Vorschlag was wir machen können und hat alle anderen Vorschläge mit den verrücktesten Begründungen abgelehnt. [...]]]></description>
			<content:encoded><![CDATA[<p>Ich überlege gerade, wie der Titel für diesen Beitrag heißen soll. Ich kann mich nicht wirklich zwischen &#8220;Wandertag&#8221; und &#8220;Geisteskrank&#8221; entscheiden. Oder doch &#8220;Geisteskranker Wandertag&#8221;? Jedenfalls war heute bei uns an der Schule Wandertag und unser Klassenlehrer hatte einen großartigen Vorschlag was wir machen können und hat alle anderen Vorschläge mit den verrücktesten Begründungen abgelehnt. Jedenfalls war sein Vorschlag, dass wir den ganzen Tag auf dem Sportplatz der Schule verbringen, nur darauf hatte keiner Lust.</p>
<p>Andere Klassen sind ins Kino gegangen oder nach Nürnberg gefahren und haben wenigstens etwas sinnvolle Sachen gemacht, aber wir müssen in der gammligen Schule bleiben und den ganzen Tag auf dem Sportplatz verbringen. Naja wenn es denn nur das gewesen wäre, denn es geht ja noch weiter.</p>
<p>Etwa 45 Minuten vor Ende des Wandertages hatte dann niemand mehr Lust auf diesen Schwachsinn und alle hatten sich schon wieder umgezogen. Kurz darauf kam unserem Klassenlehrer, der und in Bio und Chemie unterrichtet, die tolle Idee, dass wir doch noch bis zum Ende in einen Chemieraum gehen könnten. Dort hat er dann noch bis zum Ende ein bisschen abgefragt. Richtig, es war Wandertag, wir haben diesen teilweise auf dem gammligen Sportplatz verbracht und dann wurden noch ein paar in Chemie abgefragt. Super Wandertag!</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/09/25/wandertag/feed/</wfw:commentRss>
		</item>
		<item>
		<title>43200 Sekunden Freiheit</title>
		<link>http://julian.xairro.com/2008/09/15/43200-sekunden-freiheit/</link>
		<comments>http://julian.xairro.com/2008/09/15/43200-sekunden-freiheit/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 18:00:43 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Alltag]]></category>

		<category><![CDATA[Ferien]]></category>

		<category><![CDATA[Informatik]]></category>

		<category><![CDATA[Schule]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/?p=129</guid>
		<description><![CDATA[&#8230;bis die Schule wieder anfängt. Ja, leider sind jetzt auch in Bayern die Sommerferien schon wieder vorbei und morgen um 8 Uhr beginnt das neue Schuljahr. Welche Lehrer ich bekommen werde, weiß ich bis auf den Klassenleiter noch nicht und ich hoffe, dass ich einige andere Lehrer bekomme. Letztes Jahr waren es nicht unbedingt die [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;bis die Schule wieder anfängt. Ja, leider sind jetzt auch in Bayern die Sommerferien schon wieder vorbei und morgen um 8 Uhr beginnt das neue Schuljahr. Welche Lehrer ich bekommen werde, weiß ich bis auf den Klassenleiter noch nicht und ich hoffe, dass ich einige andere Lehrer bekomme. Letztes Jahr waren es nicht unbedingt die besten.</p>
<p><span id="more-129"></span></p>
<p>Ich freue mich besonders auf den Informatik-Unterricht, welchen ich letztes Jahr nicht hatte, da sich irgendjemand im Ministerium ausgedacht hat, dass man diesen ein Jahr zwischen drin nicht haben soll. Auf dem Lehrplan stehen vor allem Tabellenkalkulation und Datenbankverwaltung. Das wird bestimmt ein tolles Schuljahr mit viel Microsoft Excel und Access. Ich freue mich ja schon so sehr! Wobei, einige Informatik-Stunden werden sicherlich aufgrund von Windows-Problemen nicht stattfinden. Programmieren steht irgendwie gar nicht auf dem Lehrplan, wobei das dann sowieso nur Pascal oder Java oder etwas ähnlich schlimmes wäre.</p>
<p>Bitte betet für mich zu dem Fliegenden Spaghettimonster, dem unsichtbaren rosafarbenem Einhorn, Gott und wer euch sonst noch so einfällt, dass ich zumindest ein paar bessere Lehrer bekomme.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/09/15/43200-sekunden-freiheit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>9/11: Die Wahrheit und die offizielle Verschwörungtheorie</title>
		<link>http://julian.xairro.com/2008/09/11/911-die-wahrheit-und-die-offizielle-verschworungtheorie/</link>
		<comments>http://julian.xairro.com/2008/09/11/911-die-wahrheit-und-die-offizielle-verschworungtheorie/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 12:46:13 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[9/11]]></category>

		<category><![CDATA[Terrorismus]]></category>

		<category><![CDATA[USA]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/?p=124</guid>
		<description><![CDATA[Heute möchte ich angesichts des siebten Jahrestags des 11. September 2001 den über 3000 Opfern gedenken. Jedoch möchte ich auch auf den Dokumentarfilm &#8220;Loose Change&#8221; hinweisen, in dem ausführlich erklärt wird, dass es nicht so ist, wie die Regierung es erklärt, sondern ganz anders.
Es ist schon sehr komisch, dass zwei Wolkenkratzer, die so gebaut wurden, [...]]]></description>
			<content:encoded><![CDATA[<p>Heute möchte ich angesichts des siebten Jahrestags des 11. September 2001 den über 3000 Opfern gedenken. Jedoch möchte ich auch auf den Dokumentarfilm &#8220;<a href="http://www.archive.org/details/Loose_Change_Deutsch">Loose Change</a>&#8221; hinweisen, in dem ausführlich erklärt wird, dass es nicht so ist, wie die Regierung es erklärt, sondern ganz anders.</p>
<p>Es ist schon sehr komisch, dass zwei Wolkenkratzer, die so gebaut wurden, dass sie einen Flugzeugeinschlag aushalten beide an einem Tag durch ein Feuer bei einem Flugzeugeinschlag zusammengestürzt sind. Mit WTC7 und den Twin-Towers sind das die ersten und bisher einzigen drei Stahlkonstruktionsgebäude, die jemals eingestürzt sind.</p>
<p>Außerdem ist es komisch, dass ein Flugzeug noch genug Energie hat, um in das Pentagon zu fliegen, obwohl es davor mehrere Straßenlaternen gestreift hat. Normalerweise bricht schon bei einer Laterne der Flügel ab. Des weiteren gab es keine Spuren auf dem Rasen, auch dem die Boeing-Maschine angeblich aufgeschlagen sein soll und komischerweise wurden auch noch nicht zu dieser Maschine gehörende Triebwerke gefunden.</p>
<p>Die letzte Maschine, die abegstürzt sein soll, pulverisierte - wie auch schon die Maschine, die in das Pentagon geflogen sein soll - angeblich beim Aufprall.</p>
<p>Schaut euch einfach mal den Film an, falls ihr das noch nicht getan habt und schreibt einen Kommentar, falls ihr den offiziellen Berichten zu 9/11 glaubt. Ich würde sehr gerne wissen, wie die Meinung anderer zu dem Thema ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/09/11/911-die-wahrheit-und-die-offizielle-verschworungtheorie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>HgWebDir unter lighttpd</title>
		<link>http://julian.xairro.com/2008/09/06/hgwebdir-unter-lighttpd/</link>
		<comments>http://julian.xairro.com/2008/09/06/hgwebdir-unter-lighttpd/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 12:20:18 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Mercurial]]></category>

		<category><![CDATA[hg]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/?p=118</guid>
		<description><![CDATA[Heute mal ein kleiner Trick, wie man hgwebdir.cgi problemlos unter lighttpd zum Laufen bekommt, da es ein paar kleine Tricks braucht. Aber eigentlich ist es ganz einfach.
Also zuerst sollte man sich das Script herunterladen. Ich lade es in /var/www/hg/ wobei /var/www/ mein Document-Root ist.
Danach muss man ein paar Zeilen zur Serverkonfiguration hinzufügen.
server.modules += ("mod_cgi")

$HTTP["url"] =~ [...]]]></description>
			<content:encoded><![CDATA[<p>Heute mal ein kleiner Trick, wie man hgwebdir.cgi problemlos unter lighttpd zum Laufen bekommt, da es ein paar kleine Tricks braucht. Aber eigentlich ist es ganz einfach.</p>
<p>Also zuerst sollte man sich das <a href="http://www.selenic.com/repo/hg-stable/raw-file/tip/hgwebdir.cgi">Script</a> herunterladen. Ich lade es in <code>/var/www/hg/</code> wobei <code>/var/www/</code> mein Document-Root ist.</p>
<p>Danach muss man ein paar Zeilen zur Serverkonfiguration hinzufügen.</p>
<pre>server.modules += ("mod_cgi")

$HTTP["url"] =~ "^/hg/" {
	cgi.assign = (
		".cgi" => "/usr/bin/python",
	)
}</pre>
<p>Damit führt lighttpd nach einem Restart alle <code>.cgi</code> Dateien in <code>/hg/</code> mit Python aus. Dies können wir unter <code>http://server-name/hg/hgwebdir.cgi</code> testen. Es sollte eine Seite mit einer leeren Liste und einem Mercurial-Logo erscheinen.</p>
<p>Jetzt kann man im gleichen Verzeichnis in dem auch die Datei <code>hgwebdir.cgi</code> die Datei <code>hgweb.config</code> erstellen.</p>
<p>Diese Datei könnte etwa so aussehen:</p>
<pre>[web]
style = gitweb
[paths]
repo1 = /pfad/zum/repository
repo2 = /pfad/zum/anderen/repository</pre>
<p>Das Ergebnis sollte dann etwa so wie <a href="http://dev.xairro.com/hg/">hier</a> aussehen.</p>
<p>Jetzt ist <code>http://server-name/hg/hgwebdir.cgi</code> aber keine schöne URL und <code>http://server-name/hg/</code> wäre doch viel schöner. Dazu können wir mod_rewrite verwenden. Die Konfiguration könnte dann etwa so aussehen:</p>
<pre>server.modules += ("mod_cgi", "mod_rewrite")

$HTTP["url"] =~ "^/hg/" {
	cgi.assign = (
		".cgi" => "/usr/bin/python",
	)
}
url.rewrite-once = (
	"^/hg(/.*)$" => "/hg/hgwebdir.cgi$1",
)</pre>
<p>Das endet aber in einem Chaos. Viel besser hierfür geeignet ist mod_alias. Damit lässt sich das ganze problemlos machen:</p>
<pre>server.modules += ("mod_cgi", "mod_alias")

$HTTP["url"] =~ "^/hg/" {
	cgi.assign = (
		".cgi" => "/usr/bin/python",
	)
	alias.url = (
		"/hg" => "/var/www/hg/hgwebdir.cgi"
	)
}</pre>
<p>Damit funktioniert alles perfekt. Wichtig ist, dass der volle Pfad zum CGI-Script angegeben wird.</p>
<p>Im Mercurial Wiki finden sich weitere Informationen, wie man <a href="http://www.selenic.com/mercurial/wiki/index.cgi/HgWebDirStepByStep#head-51f79a5bb503eb9b6fc1b5e38b8b06c3bca5eb2f">Push-Support unter lighttpd</a> einrichtet.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/09/06/hgwebdir-unter-lighttpd/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Django 1.0 erschienen!</title>
		<link>http://julian.xairro.com/2008/09/04/django-10-erschienen/</link>
		<comments>http://julian.xairro.com/2008/09/04/django-10-erschienen/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 23:42:13 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/?p=94</guid>
		<description><![CDATA[
Vor über 3 Jahren erschien am 12. Juli 2005 die erste öffentliche Version von Django. Seitdem ist sehr viel passiert und vor wenigen Minuten ist die lange erwartete Version 1.0 von Django mit nur einem Tag Verspätung erschienen. Frühere Versionen wie 0.96 waren zwar auch schon stabil und zum produktiven Einsatz geeignet, jedoch ist die [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-95" title="Django Logo (1.0)" src="http://julian.xairro.com/wp-content/uploads/2008/09/django-logo-1.png" alt="" width="440" height="180" /></p>
<p>Vor über 3 Jahren <a href="http://code.djangoproject.com/changeset/3">erschien</a> am 12. Juli 2005 die erste öffentliche Version von <a href="http://www.djangoproject.com/">Django</a>. Seitdem ist sehr viel passiert und vor wenigen Minuten ist die lange erwartete Version 1.0 von Django mit nur einem Tag Verspätung <a href="http://code.djangoproject.com/changeset/8960">erschienen</a>. Frühere Versionen wie 0.96 waren zwar auch schon stabil und zum produktiven Einsatz geeignet, jedoch ist die Versionsnummer 1.0 einfach etwas besonderes.</p>
<p>Seit der Version 0.96 hat sich auch sehr viel geändert. Die wahrscheinlich größte Änderung ist newforms-admin, welches aber auch schon in den Alpha- und Beta-Versionen enthalten war. Auch neu ist das Auto-Escaping in den Templates, welches in der SVN-Version jedoch schon lange enthalten ist.</p>
<p><span id="more-94"></span></p>
<p>Auch viele kleinere Neuerungen sind hinzugekommen. So wurden zum Beispiel die <a href="http://docs.djangoproject.com/en/dev/releases/1.0-porting-guide/#signals">Signals komplett überarbeitet</a>. Komplett geändert wurde die <a href="http://docs.djangoproject.com/">Dokumentation</a>, die jetzt auf Sphinx basiert. Als größere Neuerung ist eine contrib-Application hinzugekommen: <a href="http://geodjango.org/">GeoDjango</a> (django.contrib.gis)</p>
<ul>
<li><a href="http://www.djangoproject.com/weblog/2008/sep/03/1/">Django Weblog</a> (englisch)</li>
<li><a href="http://docs.djangoproject.com/en/dev/releases/1.0/">Release Notes</a> (englisch)</li>
<li><a href="http://docs.djangoproject.com/en/dev/releases/1.0-porting-guide/">Porting Guide</a> (englisch)</li>
<li><a href="http://www.djangoproject.com/download/">Download</a> (english)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/09/04/django-10-erschienen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sei (nicht) böse: Chrome</title>
		<link>http://julian.xairro.com/2008/09/03/sei-nicht-bose-chrome/</link>
		<comments>http://julian.xairro.com/2008/09/03/sei-nicht-bose-chrome/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 19:03:51 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<category><![CDATA[Browser]]></category>

		<category><![CDATA[Chrome]]></category>

		<category><![CDATA[Datenschutz]]></category>

		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/?p=99</guid>
		<description><![CDATA[Googles Firmenmotto ist ja bekanntlich &#8220;Don&#8217;t be evil&#8221;, doch ich befürchte leider, dass das immer weniger zutrifft. Vor allem die sogenannten &#8220;Anmerkungen zum Datenschutz&#8221; haben es in sich. Ja, ich habe bewusst sogenannt geschrieben und Anführungszeichen gesetzt, da ich finde, dass man das nicht mehr Datenschutz nennen kann.

Hier mal einige Beispiele, wie ernst es Google [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-100" title="Google Chrome" src="http://julian.xairro.com/wp-content/uploads/2008/09/googlechromelogo.png" alt="" width="196" height="187" />Googles Firmenmotto ist ja bekanntlich &#8220;Don&#8217;t be evil&#8221;, doch ich befürchte leider, dass das immer weniger zutrifft. Vor allem die sogenannten &#8220;<a href="http://www.google.de/chrome/intl/de/privacy.html">Anmerkungen zum Datenschutz</a>&#8221; haben es in sich. Ja, ich habe bewusst sogenannt geschrieben und Anführungszeichen gesetzt, da ich finde, dass man das nicht mehr Datenschutz nennen kann.</p>
<p><span id="more-99"></span></p>
<p>Hier mal einige Beispiele, wie ernst es Google bei Chrome mit dem Datenschutz nimmt:</p>
<blockquote><p>In die Adressleiste eingegebene URLs oder Suchanfragen werden an Google gesendet, damit von der Vorschlagsfunktion automatisch gesuchte Begriffe oder URLs empfohlen werden können. [...]</p></blockquote>
<p>Oh das ist aber sehr nett von Google, dass sie sogar gleich einen Keylogger für die Adresszeile mitliefern. Also Google weiß ganz genau, was ist der Adresszeile steht und das sind dann nunmal die Seiten, die man besucht, dadurch kann theoretisch ein genaues Surfprofil erstellt werden.</p>
<blockquote><p>Von Ihnen aufgerufene nicht vorhandene URLs werden möglicherweise an Google gesendet, damit wir Ihnen bei der Suche nach der gewünschten URL helfen können.</p></blockquote>
<p>Wenn man einen defekten Link besucht, wird das also auch gleich an Google geschickt? Sehr interessant, wobei das doch eigentlich durch Adresszeilenlogging auch schon möglich sein sollte.</p>
<blockquote><p>Die Funktion &#8220;Sicheres Durchsuchen&#8221; stellt regelmäßig eine Verbindung zu den Servern von Google her, um die aktuellste Liste bekannter Phishing- und Malware-Websites herunterzuladen. <em>Zusätzlich wird, wenn Sie eine Website besuchen, die eine Phishing- oder Malware-Website sein könnte, von Ihrem Browser eine verschlüsselte Kopie eines Teils der URL dieser Website an Google gesendet, so dass wir weitere Informationen über diese potentiell gefährliche URL senden können. <strong>Google kann die reale URL, die Sie besuchen, aus diesen Informationen nicht bestimmen.</strong></em></p></blockquote>
<p>Wenn die Verbingung tatsächlich nur zum Blacklist herunterladen gut ist, und auch keine Daten gesendet werden mag das ja noch in Ordnung sein, aber ich frage mich, wozu Google <em>eine verschlüsselte Kopie eines Teils der URL dieser Website</em> braucht, weiß ich nicht, wodurch ich stark bezweifle, dass Google nicht die reale URL herausfinden kann.</p>
<blockquote><p>Ihre Kopie von Google Chrome enthält mindestens eine eindeutige Anwendungsnummer. Diese Nummern und Informationen zur Installation des Browsers (z. B. Versionsnummer, Sprache) werden bei der erstmaligen Installation und Verwendung der Anwendung und bei der automatischen Update-Prüfung von Google Chrome an Google gesendet. Falls Sie Nutzungsstatistiken und Ausfallberichte an Google senden, werden uns diese Informationen sowie eine eindeutige Anwendungsnummer vom Browser übermittelt. Ausfallberichte enthalten Informationen aus Dateien, Anwendungen und Diensten, die zum Zeitpunkt eines Problems ausgeführt wurden. Mithilfe von Ausfallberichten können Browserprobleme diagnostiziert und behoben werden.</p></blockquote>
<p>Gab es nicht auch mal die Cookies, die bis 2038 gültig waren, deren Gültigkeit jetzt aber verkürzt wurde? So ähnlich kommt mir das jetzt auch vor. Vor allem den letzten Satz finde ich sehr schwammig formuliert. Das würde ja eigentlich heißen, dass Google sich wenn Chrome abstürzt alle aktuell geöffneten Dokumente zukommen lassen könnte. Stelle ich mir sicherlich toll vor, wenn man gerade an einer Steuererklärung oder ähnlichem arbeitet.</p>
<blockquote><p>Sie können Google mithilfe von Google Chrome als Suchmaschine festlegen und Sie können mit Google Chrome auch auf andere Dienste von Google zugreifen, wie z. B. Google Mail. Die Datenschutzbestimmungen von Google Mail oder anderen Diensten gelten unabhängig vom verwendeten Browser, sobald sie auf diese Dienste zugreifen. Es werden keine persönlichen Informationen an Google gesendet, wenn Sie über Google Chrome eine Verbindung mit Diensten von Google herstellen.</p></blockquote>
<p>Warum sollte Chrome auch an Google schicken, dass gerade eine Google Anwendung genutzt wird? Das bekommt doch Google sowies schon durch die HTTP-Anfragen mit.</p>
<p><strong>Mein Tipp</strong>: Google Chrome <em>nicht</em> nutzen.</p>
<h4>Links</h4>
<ul>
<li><a href="http://blog.fefe.de/?ts=b640b8e1">Fefes</a> <a href="http://blog.fefe.de/?ts=b6407e30">Blog</a></li>
<li><a href="http://www.googlewatchblog.de/2008/09/03/welche-daten-sammelt-google-chrome/">GoogleWatchBlog</a></li>
<li><a href="http://www.gulli.com/news/google-chrome-datenkrake-will/">gulli.com</a></li>
</ul>
<p>Wer noch einen Link hat, kann gerne einen Kommentar schreiben und ich ergänze die Liste.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/09/03/sei-nicht-bose-chrome/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internet Explorer 8 - Bessert sich Microsoft?</title>
		<link>http://julian.xairro.com/2008/09/01/internet-explorer-8-bessert-sich-microsoft/</link>
		<comments>http://julian.xairro.com/2008/09/01/internet-explorer-8-bessert-sich-microsoft/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 18:14:18 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<category><![CDATA[Browser]]></category>

		<category><![CDATA[Internet Explorer]]></category>

		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=69</guid>
		<description><![CDATA[Mittwoch war es soweit und Microsoft hat die zweite Beta Version das Internet Explorers freigegeben. Außerdem hat Microsoft einige Webentwickler nach Berlin zum IE8-Community-Roundtable eingeladen. Dort wurde die Beta 2 vorgeführt und es waren 2 Entwickler aus den USA anwesend. Scheinbar interessiert sich Microsoft endlich auch für die Meinung der Community. Es sind viele neue [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-70" title="Internet Explorer" src="http://julian.xairro.com/blog/wp-content/uploads/2008/09/internet_explorer.png" alt="" width="128" height="128" />Mittwoch war es soweit und Microsoft hat die zweite Beta Version das Internet Explorers <a href="http://blogs.msdn.com/ie/archive/2008/08/27/internet-explorer-8-beta-2-now-available.aspx">freigegeben</a>. Außerdem hat Microsoft einige Webentwickler nach Berlin zum IE8-Community-Roundtable eingeladen. Dort wurde die Beta 2 vorgeführt und es waren 2 Entwickler aus den USA anwesend. Scheinbar interessiert sich Microsoft endlich auch für die Meinung der Community. Es sind viele neue Funktionen hinzugekommen. Gestern ist auch eine sehr interessante <a href="http://technikwuerze.de/podcast/technikwuerze116/">Ausgabe von Technikwürze</a> erschienen, in der es auch um den Internet Explorer 8 geht.</p>
<p><span id="more-69"></span></p>
<h3>Installation</h3>
<p><a href="http://julian.xairro.com/blog/wp-content/uploads/2008/09/ie_install_security_warning.png" rel="lightbox[69]"><img class="alignright size-medium wp-image-76" title="Internet Explorer Sicherheitswarnung" src="http://julian.xairro.com/blog/wp-content/uploads/2008/09/ie_install_security_warning-300x239.png" alt="" width="270" height="215" /></a>Die Installation ist leider genau so umständlich, wie man es auch von älteren Versionen kennt. Nach dem man die Sicherheitswarnung beim Öffnen des Installers weggeklickt hat und die Lizenzbedingungen akzeptiert hat, werden alte Versionen entfernt. Danach muss man direkt rebooten. In der Meldung steht auch gleich, dass nach dem Reboot Version 8 installiert wird und danach direkt neu rebootet werden muss. <a href="http://julian.xairro.com/blog/wp-content/uploads/2008/09/ie8_reboot_message.png" rel="lightbox[69]"><img class="alignleft size-medium wp-image-79" title="Internet Explorer Reboot" src="http://julian.xairro.com/blog/wp-content/uploads/2008/09/ie8_reboot_message-300x226.png" alt="" width="270" height="203" /></a>Aber das geschiet völlig automatisch und man muss sich eigentlich um nichts kümmern. Und unter VMWare stört mich das auch nicht, wenn Windows meint, es muss 2 Mal rebooten. Jetzt kann man den Internet Explorer 8 starten und nach ein paar Fragen zur Konfiguration auch nutzen.</p>
<h3>Funktionen</h3>
<p>Natürlich hat der Internet Explorer 8 auch ein paar neue Funktionen bekommen. Meine Favoriten werde ich hier kurz beschreiben.</p>
<h4>Hervorhebung der aktuellen Domain</h4>
<p><img class="alignnone size-full wp-image-85" title="Internet Explorer Domain-Hervorhebung" src="http://julian.xairro.com/blog/wp-content/uploads/2008/09/ie8_domain_highlight.png" alt="" width="440" height="28" /></p>
<p>In Zeiten von Phishing ist es immer sehr hilfreich, wenn die aktuelle Domain hervorgehoben wird. Leider ist die Hervorhebung etwas schwach, wodurch ich es auf den ersten Blick garnicht gesehen habe.</p>
<h4>InPrivate-Browsing und InPrivate-Blocking</h4>
<p>Wenn man InPrivate aktiviert hat, ist man sozusagen in einer abgeschirmten Umgebung, die keine Daten auf dem Rechner erzeugt. So werden also keine Cookies dauerhaft gespeichert und auch kein Verlauf protokolliert. Das kann vor allem für Internet-Cafés vorteilhaft sein, da keine Login-Cookies erhalten bleiben können. Außerdem werden Javascripts blockiert, die auf mehr als 10 Seiten eingebunden sind. Dies kann leider aber auch den Nachteil haben, dass jQuery blockiert wird, wenn man viele Seiten besucht, auf denen jQuery von Google Code eingebunden wird.</p>
<h4>Gruppierung von Tabs</h4>
<p><a href="http://julian.xairro.com/blog/wp-content/uploads/2008/09/ie8_tabgroups.png" rel="lightbox[69]"><img class="aligncenter size-medium wp-image-87" title="Internet Explorer Tab-Gruppen" src="http://julian.xairro.com/blog/wp-content/uploads/2008/09/ie8_tabgroups-300x21.png" alt="" width="300" height="21" /></a></p>
<p>Eine sehr nette Funktion ist die Möglichkeit, Tabs zu gruppieren. Diese werden dann in der gleichen Farbe angezeigt und man sieht direkt, was zusammen gehört.</p>
<h3>Fazit</h3>
<p>Der Internet Explorer 8 ist definitiv ein Schritt in die richtige Richtung. Der perfekte Browser ist er aber lange noch nicht. In Sachen CSS-Unterstützung ist der Version 8 besser als die vorherigen Versionen, aber immer noch nicht optimal. Nutzen werde ich ihn nicht, da es keine Linux-Version gibt, er Closed-Source ist und mir Firefox einfach besser gefällt. Aber natürlich nicht zuletzt ist er immer noch von Microsoft. Wenn Microsoft aber so weiter macht, wird der Internet Explorer doch ein durchaus brauchbarer Browser, vor dem nicht alle Webentwickler Angst haben, weil sie lauter IE-Hacks einbauen müssen, dass alles ordentlich funktioniert.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/09/01/internet-explorer-8-bessert-sich-microsoft/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;Even kernel panic looks nice!&#8221;</title>
		<link>http://julian.xairro.com/2008/08/15/even-kernel-panic-looks-nice/</link>
		<comments>http://julian.xairro.com/2008/08/15/even-kernel-panic-looks-nice/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 14:42:49 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=60</guid>
		<description><![CDATA[
Bildquelle
Liebes Smashing Magazine, ich habe im Rahmen eures Gastautor-Wettbewerbs den Artikel Top 10 Usability Highs Of Mac OS gelesen.
Ich finde, ein solcher Artikel hat auf dieser Seite nichts verloren und gehört vielleicht auf eine Apple-Seite. Solch schwachsinnige Gründe für ein Betriebssystem habe ich wirklich noch nie gesehen!
Abgesehen davon, dass ich bei allen 10 Punkten nicht [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/08/osx-kernelpanic.jpg" alt="" title="Mac OS X - Kernel Panic" width="440" height="250" class="alignnone size-full wp-image-62" /><br />
<a style="display:block;text-align:right" href="http://flickr.com/photos/alfonsohuby/2590623434/">Bildquelle</a></p>
<p>Liebes <a href="http://www.smashingmagazine.com/">Smashing Magazine</a>, ich habe im Rahmen eures <a href="http://www.smashingmagazine.com/2008/07/17/write-a-guest-post-and-win-apple-macbook-air/">Gastautor-Wettbewerbs</a> den Artikel <a href="http://www.smashingmagazine.com/2008/08/12/top-10-usability-highs-of-the-mac-os/">Top 10 Usability Highs Of Mac OS</a> gelesen.</p>
<p>Ich finde, ein solcher Artikel hat auf dieser Seite nichts verloren und gehört vielleicht auf eine Apple-Seite. Solch schwachsinnige Gründe für ein Betriebssystem habe ich wirklich noch nie gesehen!</p>
<p>Abgesehen davon, dass ich bei allen 10 Punkten nicht verstanden habe, was daran so toll oder neu ist, wusste ich zum Beispiel bei Punkt 4 erst garnicht, was dieser Fehler bedeuten soll. Herausgefunden habe ich es erst, nachdem ich mehrere Personen gefragt habe. Dieses komische Objekt soll eine Maus darstellen&#8230;</p>
<p>Ganz besonders idiotisch finde ich Punkt 10: <strong>&#8220;Even kernel panic looks nice!&#8221;</strong>. Was ist daran toll? Da enthält selbst ein Bluescreen mehr Informationen, als eine lustige Meldung die mir in vier Sprachen sagt, dass Mac OS X nichts taugt.</p>
<p>Auch wenn es um das <strike>dünnste</strike> <strong>dümmste</strong> Notebook der Welt geht, finde ich passt so ein Artikel überhaupt nicht zum Smashing Magazine und ich hoffe, dass es in Zukunft wieder hochwertigere Inhalte gibt.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/08/15/even-kernel-panic-looks-nice/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Django 1.0 Beta ist da</title>
		<link>http://julian.xairro.com/2008/08/15/django-10-beta-ist-da/</link>
		<comments>http://julian.xairro.com/2008/08/15/django-10-beta-ist-da/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 10:53:04 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[beta]]></category>

		<category><![CDATA[framework]]></category>

		<category><![CDATA[Release]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=57</guid>
		<description><![CDATA[
Planmäßig nach der Django 1.0 Roadmap ist heute um 6 Uhr die Django 1.0 Beta-Version erschienen.
Es sind keine großen neuen Funktionen wie GeoDjango (django.contrib.gis) hinzugekommen. Alles neue und andere kann man jedenfalls in den Releasenotes nachlesen.
Laut Roadmap soll als nächstes am 21. August der erste Release Candidate erscheinen. Die finale Version soll dann am 2. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/06/django-logo.png" alt="Django Logo" title="Django Logo" width="440" height="180" class="size-full wp-image-5" /></p>
<p>Planmäßig nach der <a href="http://code.djangoproject.com/wiki/VersionOneRoadmap#schedule">Django 1.0 Roadmap</a> ist heute um 6 Uhr die <a href="http://code.djangoproject.com/changeset/8362">Django 1.0 Beta-Version</a> <a href="http://www.djangoproject.com/weblog/2008/aug/14/10-beta-1/">erschienen</a>.</p>
<p>Es sind keine großen neuen Funktionen wie <a href="http://geodjango.org/">GeoDjango</a> (<code>django.contrib.gis</code>) hinzugekommen. Alles neue und andere kann man jedenfalls in den <a href="http://www.djangoproject.com/documentation/release_notes_1.0_beta_1/">Releasenotes</a> nachlesen.</p>
<p>Laut <a href="http://code.djangoproject.com/wiki/VersionOneRoadmap#schedule">Roadmap</a> soll als nächstes am 21. August der erste Release Candidate erscheinen. Die finale Version soll dann am 2. September erscheinen.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/08/15/django-10-beta-ist-da/feed/</wfw:commentRss>
		</item>
		<item>
		<title>delicious 2.0 ist da!</title>
		<link>http://julian.xairro.com/2008/07/31/delicious-20-ist-da/</link>
		<comments>http://julian.xairro.com/2008/07/31/delicious-20-ist-da/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 19:59:35 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<category><![CDATA[bookmarking]]></category>

		<category><![CDATA[delicious]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=53</guid>
		<description><![CDATA[Mit dem Titel &#8220;Oh happy day — the new Delicious is here&#8221; wurde im delicious blog das Release von delicious 2.0 angekündigt.
Laut diesem Eintrag soll nicht nur das Design anders sein, sondern auch die Seite schneller und die Suche besser sein. Ich hatte zwar schon über ein halbes Jahr Zugriff auf die Private Beta, aber [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem Titel &#8220;<a href="http://blog.delicious.com/blog/2008/07/oh-happy-day.html">Oh happy day — the new Delicious is here</a>&#8221; wurde im <a href="http://blog.delicious.com/blog/">delicious blog</a> das Release von <a href="http://delicious.com/">delicious 2.0</a> angekündigt.</p>
<p>Laut diesem Eintrag soll nicht nur das Design anders sein, sondern auch die Seite schneller und die Suche besser sein. Ich hatte zwar schon über ein halbes Jahr Zugriff auf die Private Beta, aber genau darum finde ich es besonders toll, wenn das ganze jetzt auf auf der Live-Site verwendet wird, da ich mir die neuen Funktionen schon seit ein paar Monaten anschauen konnte.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/07/31/delicious-20-ist-da/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Upload Status mit Django und AJAX anzeigen</title>
		<link>http://julian.xairro.com/2008/07/28/upload-status-mit-django-und-ajax-anzeigen/</link>
		<comments>http://julian.xairro.com/2008/07/28/upload-status-mit-django-und-ajax-anzeigen/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 16:04:37 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Status]]></category>

		<category><![CDATA[Upload]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=34</guid>
		<description><![CDATA[
Auf einigen Seiten findet man beim Hochladen einer Datei eine kleine Leiste, mit der der Status des Uploads angezeigt wird. So auch zum Beispiel auf Vimeo.

So etwas ist auch mit Django relativ einfach zu machen und ich werde in diesem Artikel zeigen, wie es funktioniert.

Warnung: Dieser Artikel ist nicht für Anfänger gedacht und setzt etwas [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/06/django-logo.png" alt="Django Logo" title="Django Logo" width="440" height="180" class="size-full wp-image-5" /></p>
<p>Auf einigen Seiten findet man beim Hochladen einer Datei eine kleine Leiste, mit der der Status des Uploads angezeigt wird. So auch zum Beispiel auf <a href="http://www.vimeo.com/">Vimeo</a>.</p>
<p><a href="http://julian.xairro.com/blog/wp-content/uploads/2008/07/vimeo-upload.png" rel="lightbox[34]"><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/07/vimeo-upload-300x84.png" alt="" title="Vimeo Upload" width="300" height="84" class="alignnone size-medium wp-image-35" /></a></p>
<p>So etwas ist auch mit Django relativ einfach zu machen und ich werde in diesem Artikel zeigen, wie es funktioniert.</p>
<p><span id="more-34"></span></p>
<p><strong>Warnung</strong>: Dieser Artikel ist nicht für Anfänger gedacht und setzt etwas Erfahrung mit Django voraus.</p>
<p>Zuerst erstellen wir ein Django Projekt und editiert die <code>settings.py</code>. Dort fügt man die Datenbankeinstellungen ein, da wir später ein einfaches Model verwenden werden. Ich nenne das Projekt einfach <code>upload</code>.</p>
<pre>django-admin.py startproject upload</pre>
<p>Als nächstes erstellen wir eine Application. Ich werde die Upload Status Bar an einer einfachen Fotogalerie demonstrieren, also nennen wir diese <code>gallery</code>.</p>
<pre>./manage.py startapp gallery</pre>
<p>Dort erstellen wir jetzt ein <code>Photo</code>-Model (<code>gallery/models.py</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">db</span> <span style="color: #ff7700;font-weight:bold;">import</span> models
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Photo<span style="color: black;">&#40;</span>models.<span style="color: black;">Model</span><span style="color: black;">&#41;</span>:
	photo = models.<span style="color: black;">ImageField</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Foto'</span>, upload_to=<span style="color: #483d8b;">'photos/'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Nach dem wir <code>'gallery'</code> in die <code>INSTALLED_APPS</code> in der <code>settings.py</code> eigetragen haben, können wir die Datenbank synchronisieren:</p>
<pre>./manage.py syncdb</pre>
<p>Nun erstellen wir einen einfachen View, der alle Bilder anzeigt und auch Uploads zulässt (<code>gallery/views.py</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">shortcuts</span> <span style="color: #ff7700;font-weight:bold;">import</span> render_to_response
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">template</span> <span style="color: #ff7700;font-weight:bold;">import</span> RequestContext
<span style="color: #ff7700;font-weight:bold;">from</span> django <span style="color: #ff7700;font-weight:bold;">import</span> forms
<span style="color: #ff7700;font-weight:bold;">from</span> gallery.<span style="color: black;">models</span> <span style="color: #ff7700;font-weight:bold;">import</span> Photo
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">http</span> <span style="color: #ff7700;font-weight:bold;">import</span> HttpResponseRedirect
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> PhotoUploadForm<span style="color: black;">&#40;</span>forms.<span style="color: black;">ModelForm</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">class</span> Meta:
		model = Photo
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> gallery<span style="color: black;">&#40;</span>request<span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">if</span> request.<span style="color: black;">method</span> == <span style="color: #483d8b;">'POST'</span>:
		form = PhotoUploadForm<span style="color: black;">&#40;</span>request.<span style="color: black;">POST</span>, request.<span style="color: black;">FILES</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> form.<span style="color: black;">is_valid</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
			form.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">return</span> HttpResponseRedirect<span style="color: black;">&#40;</span>request.<span style="color: black;">path</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">else</span>:
		form = PhotoUploadForm<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	photo_list = Photo.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">return</span> render_to_response<span style="color: black;">&#40;</span><span style="color: #483d8b;">'gallery/gallery.html'</span>, <span style="color: black;">&#123;</span>
		<span style="color: #483d8b;">'photo_list'</span>: photo_list,
		<span style="color: #483d8b;">'form'</span>: form,
	<span style="color: black;">&#125;</span>, context_instance=RequestContext<span style="color: black;">&#40;</span>request<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Dazu auch noch das passende Template (<code>gallery/templates/gallery/gallery.html</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span>
<span style="color: #00bbdd;">	&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;html</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.w3. org/1999/xhtml&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Galerie<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;style</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/css&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			body {
				font-family: sans-serif;
				font-size: 10pt;
				padding: 25px;
				margin: 0;
			}
			.photo {
				border: 1px solid #ddd;
				background-color: #fafafa;
				padding: 15px;
				margin: 10px;
				width: 200px;
				height: 200px;
				float: left;
			}
			.photo img {
				max-width: 200px;
				max-height: 200px;
				margin: auto;
			}
			.upload-progress {
				position: fixed;
				left: 0px;
				bottom: 50px;
				background-color: #fff;
				border: 1px solid #ddd;
				padding: 10px;
				color: #aaa;
				text-align: right;
			}
			.progress-info span {
				font-size: 2.25em;
				font-weight: bold;
				display: block;
			}
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/style<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;{{ MEDIA_URL }}jquery.js&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;{{ MEDIA_URL }}upload.js&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Neues Foto hochladen<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;form</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;post&quot;</span> <span style="color: #000066;">enctype</span>=<span style="color: #ff0000;">&quot;multipart/form-data&quot;</span> <span style="color: #000066;">action</span>=<span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			{{ form.as_p }}
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Foto hochladen&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/form<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Fotos ansehen<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		{% for photo in photo_list %}
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;photo&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;img</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;{{ photo.get_photo_url }}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		{% endfor %}
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Das ganze tragen wir jetzt noch in die URL-Konfiguration ein (<code>urls.py</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'^$'</span>, <span style="color: #483d8b;">'gallery.views.gallery'</span><span style="color: black;">&#41;</span>,</pre></div></div>

<p>Jetzt funktioniert der Upload und wir können die Galerie eigentlich schon nutzen. Das sieht dann so aus:</p>
<p><a href="http://julian.xairro.com/blog/wp-content/uploads/2008/07/gallery-1.png" rel="lightbox[34]"><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/07/gallery-1-300x270.png" alt="" title="Galery 1" width="300" height="270" class="alignnone size-medium wp-image-41" /></a></p>
<p>Jetzt wird es etwas komplizierter: Wir müssen einen sogenannten <code>FileUploadHandler</code> &#8220;einbinden&#8221;. Diesen findet man auf <a href="http://www.djangosnippets.org/snippets/678/">djangosnippets.org</a>. Um diesen nutzen zu können, muss Caching aktiviert sein! Standardmäßig ist das mit dem Wert <code>'locmem:///'</code> für <code>CACHE_BACKEND</code> der Fall. Das könnte jedenfalls Probleme machen. Am sichersten ist es, wenn man <code>'file:///foo/bar'</code> oder <code>'memcached://host:port'</code> nutzt. Dieser Wert darf jedenfalls nicht <code>'dummy:///'</code> sein!</p>
<p>Jetzt erstellen wir die Datei <code>gallery/uploadhandlers.py</code> und fügen den Code von djangosnippets.org dort ein (bis zu dem Kommentar <code># A view to report back on upload progress:</code>). Danach müssen wir dir <code>settings.py</code> erneut editieren und diese zwei Zeilen Code hinzufügen:</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">conf</span> <span style="color: #ff7700;font-weight:bold;">import</span> global_settings 
FILE_UPLOAD_HANDLERS = <span style="color: black;">&#40;</span><span style="color: #483d8b;">'gallery.uploadhandlers.UploadProgressCachedHandler'</span>,<span style="color: black;">&#41;</span> + global_settings.<span style="color: black;">FILE_UPLOAD_HANDLERS</span></pre></div></div>

<p>Außerdem müss man in der Datei <code>gallery/uploadhandlers.py</code> die erste Zeile durch die folgende ersetzen, da es im Django Trunk eine entsprechende Änderung gab:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">core</span>.<span style="color: black;">files</span>.<span style="color: black;">uploadhandler</span> <span style="color: #ff7700;font-weight:bold;">import</span> FileUploadHandler</pre></td></tr></table></div>

<p>Als nächstes fügen wir den Code nach dem Kommentar in unsere <code>views.py</code> ein. Dann muss nur noch die URL in der <code>urls.py</code> gemappt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'^upload_status/$'</span>, <span style="color: #483d8b;">'gallery.views.upload_progress'</span><span style="color: black;">&#41;</span>,</pre></div></div>

<p>Damit sind wir im Python-Code fertig. Der Rest wird Javascript sein. Darum speichern wir zuerst ein <a href="http://www.djangosnippets.org/snippets/679/">Javascript von djangosnippets.org</a> in <code>media/upload.js</code>. Dieses müssen wir jetzt etwas anpassen.</p>
<p>Also müssen wir Zeile 18 so abändern:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>18
</pre></td><td class="code"><pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> progress_url <span style="color: #339933;">=</span> <span style="color: #3366CC;">'/upload_status/'</span>; <span style="color: #006600; font-style: italic;">// ajax view serving progress info</span></pre></td></tr></table></div>

<p>Als nächstes müssen wir nur noch <a href="http://www.jquery.com/">jQuery</a> und <code>upload.js</code> einbinden:</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;{{ MEDIA_URL }}jquery.js&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;script</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;{{ MEDIA_URL }}upload.js&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/script<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Jetzt sollte der die Statusanzeige beim Upload funktioniern. Wichtig ist jedoch, dass das das ganze <strong>nicht</strong> mit dem Development Server funktioniert, da dieser nur eine Anfrage gleichzeitig (in diesem Fall den Upload) verarbeiten kann, wird die AJAX-Anfrage einfach nicht verarbeitet, wodurch die Anzeige durchgehend bei 0% bleibt.</p>
<p><a href="http://julian.xairro.com/blog/wp-content/uploads/2008/07/gallery_2.png" rel="lightbox[34]"><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/07/gallery_2-300x293.png" alt="" title="Galerie 2" width="300" height="293" class="alignnone size-medium wp-image-47" /></a></p>
<p>Wichtig ist, dass man zum Testen eine etwas größere Datei nimmt, damit auch Zeit zum Updaten ist. Auch werden die Grafiken einfach durch CSS skaliert, aber hier geht es nur um die Statusanzeige.</p>
<p><strong>Download</strong>: Das gesamte Django Project steht auch zum Download bereit. In diesem sind auch noch ein paar kleinere, relativ unwichtige Anpassungen enthalten.</p>
<p><strong><a href='http://julian.xairro.com/blog/wp-content/uploads/2008/07/upload.tar.gz'>upload.tar.gz</a></strong> (tar.gz, 2,1MB, BSD-Lizenz)</p>
<p>Die Fotos stammen von verschiedenen <a href="http://www.flickr.com/">Flickr</a>-Benutzern:<br />
<a href="http://www.flickr.com/photos/mychatham/206928250/">Chris Seufert</a>, <a href="http://www.flickr.com/photos/lorenzaccio/1401546415/">lorenzaccio*</a>, <a href="http://www.flickr.com/photos/victorgeere/65194622/">Victor Geere</a>, <a href="http://www.flickr.com/photos/lf-photodesign/476457019/">von Lutz-R. Frank</a> und <a href="http://www.flickr.com/photos/coda/142856948/">coda</a></p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/07/28/upload-status-mit-django-und-ajax-anzeigen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ubuntu 8.10 Alpha 3 erschienen</title>
		<link>http://julian.xairro.com/2008/07/27/ubuntu-810-alpha-3-erschienen/</link>
		<comments>http://julian.xairro.com/2008/07/27/ubuntu-810-alpha-3-erschienen/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 20:29:17 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Ubuntu]]></category>

		<category><![CDATA[Alpha]]></category>

		<category><![CDATA[Intrepid Ibex]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=31</guid>
		<description><![CDATA[
Vorgestern ist die dritte Alpha-Version der kommenden Ubuntu-Version erschienen. Die Alpha-Version enthält unter Anderem den Linux-Kernel in der Version 2.6.26-rc8. Den Download findet man wie gewohnt auf den Ubuntu Servern.
]]></description>
			<content:encoded><![CDATA[<p><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/06/ubuntu-logo.png" alt="" title="Ubuntu Logo" width="440" height="130" class="alignnone size-full wp-image-16" /></p>
<p>Vorgestern ist die dritte Alpha-Version der kommenden Ubuntu-Version erschienen. Die Alpha-Version enthält unter Anderem den Linux-Kernel in der Version 2.6.26-rc8. Den Download findet man wie gewohnt auf den <a href="http://cdimage.ubuntu.com/releases/intrepid/alpha-3/">Ubuntu Servern</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/07/27/ubuntu-810-alpha-3-erschienen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Django newforms-admin jetzt im Trunk</title>
		<link>http://julian.xairro.com/2008/07/19/django-newforms-admin-jetzt-im-trunk/</link>
		<comments>http://julian.xairro.com/2008/07/19/django-newforms-admin-jetzt-im-trunk/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 08:40:06 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Admin]]></category>

		<category><![CDATA[newforms]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=23</guid>
		<description><![CDATA[
Mir ist kein besserer Titel für diesen Beitrag eingefallen, aber jedenfalls wurde in Changeset 7967 oldforms-admin durch newforms-admin ersetzt.
Für Django ist das ein großer Schritt in Richtung Version 1.0. Wer wissen will, wie er die Models für newforms-admin ändern (oder auch die Einstellungen für newforms-admin aus den Models entfernen) muss, findet bei Michael Trier einen [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/06/django-logo.png" alt="Django Logo" title="Django Logo" width="440" height="180" class="size-full wp-image-5" /></p>
<p>Mir ist kein besserer Titel für diesen Beitrag eingefallen, aber jedenfalls wurde in <a href="http://code.djangoproject.com/changeset/7967">Changeset 7967</a> oldforms-admin durch newforms-admin ersetzt.</p>
<p>Für Django ist das ein großer Schritt in Richtung Version 1.0. Wer wissen will, wie er die Models für newforms-admin ändern (oder auch die Einstellungen für newforms-admin aus den Models entfernen) muss, findet bei <a href="http://blog.michaeltrier.com/2008/2/9/django-screencasts-7-newforms-admin-i">Michael Trier einen Screencast</a> dazu.</p>
<p>[<a href="http://groups.google.com/group/django-users/browse_thread/thread/53ace41d27dfa7d9">Meldung auf Google Groups</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/07/19/django-newforms-admin-jetzt-im-trunk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Django - Was sind Views?</title>
		<link>http://julian.xairro.com/2008/07/05/django-was-sind-views/</link>
		<comments>http://julian.xairro.com/2008/07/05/django-was-sind-views/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 20:03:27 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Views]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=21</guid>
		<description><![CDATA[
In dem heutigen Teil der Artikelserie über Django wird erklärt, was Views sind. Views sind einfache Python-Funktionen, die meist in der Datei views.py einer Django-App gespeichert sind. Sie nehmen ein request-Objekt entgegen und geben ein response-Objekt zurück.

Dieser Artikel wird alleine recht kurz sein und ich werde dann im nächsten Artikel, dessen Thema Templates sind, genauer [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/blog/wp-content/uploads/2008/06/django-logo.png" alt="Django Logo" title="Django Logo" width="440" height="180" class="alignnone size-full wp-image-5" /></p>
<p>In dem heutigen Teil der Artikelserie über Django wird erklärt, was Views sind. Views sind einfache Python-Funktionen, die meist in der Datei <code>views.py</code> einer Django-App gespeichert sind. Sie nehmen ein <code>request</code>-Objekt entgegen und geben ein <code>response</code>-Objekt zurück.</p>
<p><span id="more-21"></span></p>
<p>Dieser Artikel wird alleine recht kurz sein und ich werde dann im nächsten Artikel, dessen Thema Templates sind, genauer darauf eingehen, aber es wäre jetzt nicht sinnvoll, wenn ich alles ohne Templates mache.</p>
<p>Hier ist also der Inhalt unserer <code>todo/views.py</code> (bezieht sich auf den <a href="/blog/2008/06/28/django-was-sind-models/">vorherigen Artikel</a>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">http</span> <span style="color: #ff7700;font-weight:bold;">import</span> HttpResponse
<span style="color: #ff7700;font-weight:bold;">from</span> todo.<span style="color: black;">models</span> <span style="color: #ff7700;font-weight:bold;">import</span> Item
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> todolist<span style="color: black;">&#40;</span>request<span style="color: black;">&#41;</span>:
	item_list = Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	response = <span style="color: #483d8b;">''</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> item <span style="color: #ff7700;font-weight:bold;">in</span> item_list:
		response += <span style="color: #483d8b;">'%s&lt;hr/&gt;'</span><span style="color: #66cc66;">%</span>item.<span style="color: black;">title</span>
	<span style="color: #ff7700;font-weight:bold;">return</span> HttpResponse<span style="color: black;">&#40;</span>response<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Jetzt starten wir den Development-Server:</p>
<pre>python manage.py runserver</pre>
<p>Jetzt läuft unter <a href="http://localhost:8000/">http://localhost:8000/</a> zwar der Server, aber wir haben noch keine Möglichkeit, unsere View aufzurufen, da wir keine URL definiert haben. Dies geht aber ganz einfach: Mann muss dazu nur die Datei <code>urls.py</code>. Dort muss nur eine Zeile Code eingefügt werden. Die Datei sieht danach etwa so aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">conf</span>.<span style="color: black;">urls</span>.<span style="color: black;">defaults</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
&nbsp;
urlpatterns = patterns<span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span>,
	<span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'^todo/list/$'</span>, <span style="color: #483d8b;">'todo.views.todolist'</span><span style="color: black;">&#41;</span>,
<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Jetzt kann man unter <a href="http://127.0.0.1:8000/todo/list/">http://127.0.0.1:8000/todo/list/</a> unsere noch recht invalide Todoliste erreichen. Diese sollte etwa so aussehen:</p>
<p><a href='http://julian.xairro.com/blog/wp-content/uploads/2008/07/todolist.png' rel="lightbox[21]"><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/07/todolist-150x150.png" alt="" title="Todoliste" width="150" height="150" class="alignnone size-thumbnail wp-image-22" /></a></p>
<p>So viel bis jetzt zu Views. Im nächsten Teil werden Views dann noch einmal genauer zusammen mit Templates erklärt.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/07/05/django-was-sind-views/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ubuntu 8.04.1</title>
		<link>http://julian.xairro.com/2008/07/05/ubuntu-8041/</link>
		<comments>http://julian.xairro.com/2008/07/05/ubuntu-8041/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 08:56:55 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Ubuntu]]></category>

		<category><![CDATA[Hardy Heron]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Upgrade]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=20</guid>
		<description><![CDATA[Gestern ist es erschienen, aber ich möchte hier nur mitteilen, dass ich gestern endlich von Ubuntu 7.04 auf Ubuntu 8.04.1 umgestiegen bin. Mit fglrx funktioniert jetzt auch die Grafikkarte super und schafft jetzt statt früher 200fps unter Festy jetzt ganze 350fps bei ruhendem Desktop. Ich weiß, dass das keine perfekten Werte sind, aber ich hab [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern ist es erschienen, aber ich möchte hier nur mitteilen, dass ich gestern endlich von Ubuntu 7.04 auf Ubuntu 8.04.1 umgestiegen bin. Mit fglrx funktioniert jetzt auch die Grafikkarte super und schafft jetzt statt früher 200fps unter Festy jetzt ganze 350fps bei ruhendem Desktop. Ich weiß, dass das keine perfekten Werte sind, aber ich hab auch keine sonderlich gute Grafikkarte. Sagen wir es so: Für mich reicht das aus.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/07/05/ubuntu-8041/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mozilla hat den Weltrekord</title>
		<link>http://julian.xairro.com/2008/07/03/mozilla-hat-den-weltrekord/</link>
		<comments>http://julian.xairro.com/2008/07/03/mozilla-hat-den-weltrekord/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 11:40:37 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=19</guid>
		<description><![CDATA[
Wie ich bereits berichtet habe fand vor ein paar Wochen der Firefox Download Day statt.
Heute erreichte mich eine Mail von Mozilla, in der das Ergebnis steht:
Wir haben einen Guinness Weltrekord mit den meisten Software-Downloads innerhalb von 24 Stunden aufgestellt. Mit Ihrer Hilfe sind es 8.002.530 Downloads.
Sie sind jetzt Teil eines Weltrekords und der stolze Besitzer [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/06/firefox-logo.png" alt="Firefox Logo" title="Firefox Logo" width="440" height="180" class="alignnone size-full wp-image-9" /></p>
<p>Wie ich bereits <a href="/blog/2008/06/17/firefox-3-ist-da/">berichtet habe</a> fand vor ein paar Wochen der Firefox Download Day statt.</p>
<p>Heute erreichte mich eine Mail von Mozilla, in der das Ergebnis steht:</p>
<blockquote><p>Wir haben einen Guinness Weltrekord mit den meisten Software-Downloads innerhalb von 24 Stunden aufgestellt. Mit Ihrer Hilfe sind es 8.002.530 Downloads.</p>
<p>Sie sind jetzt Teil eines Weltrekords und der stolze Besitzer der bisher besten Version von Firefox!</p>
<p>Vergessen Sie nicht, Ihr ganz persönliches <a href="http://spreadfirefox.com/de/worldrecord/certificate_form">Zertifikat</a> für die Hilfe zur Aufstellung des Guinness-Weltrekordes herunterzuladen.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/07/03/mozilla-hat-den-weltrekord/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Einfacher Syntax-Highlighting Templatefilter für Django</title>
		<link>http://julian.xairro.com/2008/06/29/einfacher-syntax-highlighting-templatefilter-fur-django/</link>
		<comments>http://julian.xairro.com/2008/06/29/einfacher-syntax-highlighting-templatefilter-fur-django/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 14:07:50 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Code]]></category>

		<category><![CDATA[Syntax]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=18</guid>
		<description><![CDATA[Es ist eigentlich ganz einfach einen Templatefilter für Django zu schreiben, der Syntax highlighten kann, jedoch habe ich noch keinen entsprechenden gefunden. Darum habe ich meinen eigenen geschrieben und möchte ihn hier mit der Welt teilen.

Die funktionsweise ist ganz einfach. Es wird einfach nach &#60;pre&#62; Elementen im HTML-Code gesucht. Diese werden dann entweder mit der [...]]]></description>
			<content:encoded><![CDATA[<p>Es ist eigentlich ganz einfach einen Templatefilter für Django zu schreiben, der Syntax highlighten kann, jedoch habe ich noch keinen entsprechenden gefunden. Darum habe ich meinen eigenen geschrieben und möchte ihn hier mit der Welt teilen.</p>
<p><span id="more-18"></span></p>
<p>Die funktionsweise ist ganz einfach. Es wird einfach nach <code>&lt;pre&gt;</code> Elementen im HTML-Code gesucht. Diese werden dann entweder mit der angegebenen Sprache (<code>&lt;pre lang="python"&gt;) gehighlightet, oder es wird versucht die Sprache zu erkennen.</p>
<p>Es werden nur Pygments und BeautifulSoup benötigt, um den Filter zu benutzen.</p>
<p>Der Code:</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django <span style="color: #ff7700;font-weight:bold;">import</span> template
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> pygments <span style="color: #ff7700;font-weight:bold;">import</span> highlight as pygments_highlight
<span style="color: #ff7700;font-weight:bold;">from</span> pygments.<span style="color: black;">lexers</span> <span style="color: #ff7700;font-weight:bold;">import</span> guess_lexer, TextLexer, get_lexer_by_name
<span style="color: #ff7700;font-weight:bold;">from</span> pygments.<span style="color: black;">formatters</span> <span style="color: #ff7700;font-weight:bold;">import</span> HtmlFormatter
<span style="color: #ff7700;font-weight:bold;">from</span> BeautifulSoup <span style="color: #ff7700;font-weight:bold;">import</span> BeautifulSoup
&nbsp;
register = template.<span style="color: black;">Library</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
@register.<span style="color: #008000;">filter</span>
<span style="color: #ff7700;font-weight:bold;">def</span> highlight<span style="color: black;">&#40;</span>value<span style="color: black;">&#41;</span>:
	soup = BeautifulSoup<span style="color: black;">&#40;</span>value<span style="color: black;">&#41;</span>
	pre_list = soup.<span style="color: black;">findAll</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'pre'</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> pre <span style="color: #ff7700;font-weight:bold;">in</span> pre_list:
		<span style="color: #ff7700;font-weight:bold;">try</span>:
			lexer = get_lexer_by_name<span style="color: black;">&#40;</span>pre<span style="color: black;">&#91;</span><span style="color: #483d8b;">'lang'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">KeyError</span>:
			<span style="color: #ff7700;font-weight:bold;">try</span>:
				lexer = guess_lexer<span style="color: black;">&#40;</span>pre.<span style="color: black;">renderContents</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ValueError</span>:
				lexer = TextLexer<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		pre.<span style="color: black;">replaceWith</span><span style="color: black;">&#40;</span>pygments_highlight<span style="color: black;">&#40;</span>pre.<span style="color: black;">renderContents</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, lexer, HtmlFormatter<span style="color: black;">&#40;</span>linenos=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>soup<span style="color: black;">&#41;</span></pre></div></div>

<p>Die entsprechenden Styles für Pygments müssen natürlich manuell eingebunden werden.</p>
<p><strong>Lizenz</strong>: Der Code ist unter der BSD-Lizenz verfügbar.</p>
<p>[<strong>Update</strong>] Der Filter hatte ein paar kleine Probleme und ich habe ihn weiter verbessert. Der Code ist jetzt genau der gleiche, wie er auch auf <a href="http://www.xairro.com">Xairro.com</a> verwendet wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/06/29/einfacher-syntax-highlighting-templatefilter-fur-django/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Django - Was sind Models?</title>
		<link>http://julian.xairro.com/2008/06/28/django-was-sind-models/</link>
		<comments>http://julian.xairro.com/2008/06/28/django-was-sind-models/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 15:42:38 +0000</pubDate>
		<dc:creator>izibi</dc:creator>
		
		<category><![CDATA[Django]]></category>

		<category><![CDATA[Models]]></category>

		<guid isPermaLink="false">http://julian.xairro.com/blog/?p=17</guid>
		<description><![CDATA[
In den anderen Artikeln dieser Serie wurde schon mehrmals der Begriff &#8220;Models&#8221; erwähnt. Jetzt wird endlich erklärt, was das ist: Models sind bei Django und einigen anderen Webframeworks bestimmte Objekte, die eine Tabelle in der Datenbank darstellen und über die auch einfach auf diese Datenbank zugegriffen werden kann. In diesem Artikel werden Models an einer [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://julian.xairro.com/blog/wp-content/uploads/2008/06/django-logo.png" alt="Django Logo" title="Django Logo" width="440" height="180" class="alignnone size-full wp-image-5" /></p>
<p>In den anderen Artikeln dieser Serie wurde schon mehrmals der Begriff &#8220;Models&#8221; erwähnt. Jetzt wird endlich erklärt, was das ist: Models sind bei Django und einigen anderen Webframeworks bestimmte Objekte, die eine Tabelle in der Datenbank darstellen und über die auch einfach auf diese Datenbank zugegriffen werden kann. In diesem Artikel werden Models an einer Todo-Liste demonstriert.</p>
<p><span id="more-17"></span></p>
<p>Als erstes erstellen wir eine neue App in userem Projekt:</p>
<pre>python manage.py startapp todo</pre>
<p>Zuerst sollte diese App auch in der <code>settings.py</code> eintragen werden. Dazu öffnet man diese Datei und sucht nach <code>INSTALLED_APPS</code>. Dort kann dann <code>'todo'</code> hinzugefügt werden. Dies kann danach so aussehen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="python python" style="font-family:monospace;">INSTALLED_APPS = <span style="color: black;">&#40;</span>
	<span style="color: #483d8b;">'django.contrib.auth'</span>,
	<span style="color: #483d8b;">'django.contrib.contenttypes'</span>,
	<span style="color: #483d8b;">'django.contrib.sessions'</span>,
	<span style="color: #483d8b;">'django.contrib.sites'</span>,
	<span style="color: #483d8b;">'todo'</span>
<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Außerdem müssen ganz oben in der <code>settings.py</code> die <code>DATABASE_*</code>-Einstellungen gesetzt werden, dass man überhaupt eine Datenbank hat. Zum Entwickeln empfiehlt sich SQLite.</p>
<p>Als nächstes kann man in der Datei <code>todo/models.py</code> anfangen, seine Models zu erstellen. Ein Model ist eine einfache Python-Klasse. Ein Model könnte zum Beispiel so aussehen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">db</span> <span style="color: #ff7700;font-weight:bold;">import</span> models
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Item<span style="color: black;">&#40;</span>models.<span style="color: black;">Model</span><span style="color: black;">&#41;</span>:
	title = models.<span style="color: black;">CharField</span><span style="color: black;">&#40;</span>max_length=<span style="color: #ff4500;">50</span><span style="color: black;">&#41;</span>
	done = models.<span style="color: black;">BooleanField</span><span style="color: black;">&#40;</span>default=<span style="color: #008000;">False</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Hier wird eine Klasse <code>Item</code> definiert, die von <code>django.db.models.Model</code> abgeleitet wird. Sie hat zwei Felder:</p>
<ul>
<li><code>title</code>: Ein Textfeld mit der maximalen Länge von 50 Zeichen</li>
<li><code>done</code>: Ein Feld in dem entweder <code>True</code> für erledigt oder <code>False</code> für unerledigt steht.</li>
</ul>
<p>Außerdem wird jedem Model noch ein Feld <code>id</code> hinzugefügt. Dieses enthält eine eindeutige ID für jeden Datensatz.</p>
<p>Jetzt muss nicht die Datenbank synchronisiert werden. Dabei wird man gefragt, ob man einen Superuser erstellen möchte. Das ist noch nicht nötig, kann aber nicht schaden. Der Befehl sieht so aus:</p>
<pre>python manage.py syncdb</pre>
<p>Anschließend kann man mit diesem Befehl eine interaktive Shell starten:</p>
<pre>python manage.py shell</pre>
<p>Hier kann man jetzt nach Lust und Lauene mit seinen Models spielen:</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;">In <span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>: <span style="color: #ff7700;font-weight:bold;">from</span> todo.<span style="color: black;">models</span> <span style="color: #ff7700;font-weight:bold;">import</span> Item
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>: Item
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>: <span style="color: #66cc66;">&lt;</span>class <span style="color: #483d8b;">'todo.models.Item'</span><span style="color: #66cc66;">&gt;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span>: Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span>: <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span>: Item<span style="color: black;">&#40;</span>title=<span style="color: #483d8b;">'Programmieren'</span><span style="color: black;">&#41;</span>.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span>: Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span>: <span style="color: black;">&#91;</span><span style="color: #66cc66;">&lt;</span>Item: Item object<span style="color: #66cc66;">&gt;</span><span style="color: black;">&#93;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span>: Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span>: <span style="color: #66cc66;">&lt;</span>Item: Item object<span style="color: #66cc66;">&gt;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">7</span><span style="color: black;">&#93;</span>: Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span>.<span style="color: black;">title</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">7</span><span style="color: black;">&#93;</span>: u<span style="color: #483d8b;">'Programmieren'</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">8</span><span style="color: black;">&#93;</span>: Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span>.<span style="color: black;">done</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">8</span><span style="color: black;">&#93;</span>: <span style="color: #008000;">False</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">9</span><span style="color: black;">&#93;</span>: Item<span style="color: black;">&#40;</span>title=<span style="color: #483d8b;">'Essen'</span>, done=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#93;</span>: Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#93;</span>: <span style="color: black;">&#91;</span><span style="color: #66cc66;">&lt;</span>Item: Item object<span style="color: #66cc66;">&gt;</span>, <span style="color: #66cc66;">&lt;</span>Item: Item object<span style="color: #66cc66;">&gt;</span><span style="color: black;">&#93;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">11</span><span style="color: black;">&#93;</span>: i = Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>0<span style="color: black;">&#93;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">12</span><span style="color: black;">&#93;</span>: i.<span style="color: black;">done</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">12</span><span style="color: black;">&#93;</span>: <span style="color: #008000;">False</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">13</span><span style="color: black;">&#93;</span>: i.<span style="color: black;">done</span> = <span style="color: #008000;">True</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">14</span><span style="color: black;">&#93;</span>: i.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">15</span><span style="color: black;">&#93;</span>: Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">15</span><span style="color: black;">&#93;</span>: <span style="color: black;">&#91;</span><span style="color: #66cc66;">&lt;</span>Item: Item object<span style="color: #66cc66;">&gt;</span>, <span style="color: #66cc66;">&lt;</span>Item: Item object<span style="color: #66cc66;">&gt;</span><span style="color: black;">&#93;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">16</span><span style="color: black;">&#93;</span>: i.<span style="color: black;">delete</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
In <span style="color: black;">&#91;</span><span style="color: #ff4500;">17</span><span style="color: black;">&#93;</span>: Item.<span style="color: black;">objects</span>.<span style="color: black;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
Out<span style="color: black;">&#91;</span><span style="color: #ff4500;">17</span><span style="color: black;">&#93;</span>: <span style="color: black;">&#91;</span><span style="color: #66cc66;">&lt;</span>Item: Item object<span style="color: #66cc66;">&gt;</span><span style="color: black;">&#93;</span></pre></div></div>

<p><strong>Hinweis</strong>: Der Promt könnte etwas anders aussehen (<code>&gt;&gt;&gt;</code>), aber ich habe ipython installiert, welches genutzt wird, wenn es vorhanden ist.</p>
<p><a href="/blog/django-artikel/">Alle Artikel dieser Serie über Django</a></p>
]]></content:encoded>
			<wfw:commentRss>http://julian.xairro.com/2008/06/28/django-was-sind-models/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
