<?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>.:: querzone</title>
	<atom:link href="http://www.querzone.de/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.querzone.de/blog</link>
	<description>nerdish by nature</description>
	<lastBuildDate>Mon, 23 Jan 2012 19:52:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>btw. linux kernel &gt;= 2.6.39 &amp;&amp; </title>
		<link>http://www.querzone.de/blog/archives/948</link>
		<comments>http://www.querzone.de/blog/archives/948#comments</comments>
		<pubDate>Mon, 23 Jan 2012 18:30:57 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[RL]]></category>
		<category><![CDATA[bitschubser]]></category>
		<category><![CDATA[CERT]]></category>
		<category><![CDATA[mempodipper security]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=948</guid>
		<description><![CDATA[CERT?!? ;-) # ubuntu, 20120123 apt-get update apt-get upgrade literatur: blog.zx2c4.com/749 mempodipper.c heise.de: &#8220;Linux: Root-Rechte durch Speicherzugriff&#8221;]]></description>
			<content:encoded><![CDATA[<h2> <a href="http://de.wikipedia.org/wiki/CERT" target="_blank">CERT</a>?!? ;-) </h2>
<p><object style="height: 390px; width: 640px"><param name="movie" value="http://www.youtube.com/v/yLu4q4gMCCA?version=3&#038;feature=player_detailpage"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/yLu4q4gMCCA?version=3&#038;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"></object></p>
<pre>
# ubuntu, 20120123
apt-get update
apt-get upgrade
</pre>
<hr/>
literatur:<br />
<a href="http://blog.zx2c4.com/749" target="_blank">blog.zx2c4.com/749</a><br />
<a href="http://git.zx2c4.com/CVE-2012-0056/tree/mempodipper.c" target="_blank">mempodipper.c</a><br />
<a href="http://www.heise.de/newsticker/meldung/Linux-Root-Rechte-durch-Speicherzugriff-1419608.html" target="_blank">heise.de: &#8220;Linux: Root-Rechte durch Speicherzugriff&#8221; </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/948/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EMC Symmetrix WWIDs interpretieren</title>
		<link>http://www.querzone.de/blog/archives/903</link>
		<comments>http://www.querzone.de/blog/archives/903#comments</comments>
		<pubDate>Thu, 19 Jan 2012 20:51:41 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[mtrix]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=903</guid>
		<description><![CDATA[Hängt man an Linux-Systeme SAN-Devices, so versieht das OS sie mit einem eindeutigen Namen. Dieser wird via SCSI erfragt &#8211; im Bsp. einer Symmetrix ist das eine 32-stellige Zahl. Muss man darüber sprechen ist das eher unpraktisch. :) Netterweise ist &#8230; <a href="http://www.querzone.de/blog/archives/903">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hängt man an Linux-Systeme SAN-Devices, so versieht das OS sie mit einem eindeutigen Namen. Dieser wird via SCSI erfragt &#8211; im Bsp. einer Symmetrix ist das eine 32-stellige Zahl. Muss man darüber sprechen ist das eher unpraktisch. :) Netterweise ist der kürzere DeviceName, welche der Symmetrix-Admin kennt (täglich Brot), dort simpel einkodiert. Ab der 20sten Stelle ist das einfach hex-codiertes ASCII (zumindest bei Symmetrix VMAX). Warum das interessant ist &#8211; naja, es liefert mir einen guten Vorwand zu zeigen wie man Python in der Admin-Praxis nutzen kann:</p>
<pre>
def chunks(l,n):
    """
    split a list/string into groups of n-elements
    """
    return [ l[i:i+n] for i in range(0,len(l),n) ]

if __name__ == '__main__':

    wwid = "0123456789ABCDEF0123533030323433"
    sid=wwid[9:20]
    devenc_hex = wwid[20:]
    devenc_hex = chunks(devenc_hex,2)
    devdec=''.join(map(chr,map(int,devenc_hex,[16]*len(devenc_hex))))
    print "%s => %s , %s => %s" % (wwid,sid,devenc_hex, devdec)
</pre>
<p>Output für die WWID <code>0123456789ABCDEF0123533030323433</code> (klar, warum das doof auzusprechen ist? ;) ergibt:</p>
<pre>
hessenm@aomame:/tmp/blu$ python ./bla.py
0123456789ABCDEF0123533030323433 => 9ABCDEF0123 , \
    ['53', '30', '30', '32', '34', '33'] => S00243
</pre>
<p>&#8230;und zu erwähnen, dass ich ein kleines <a href="https://bitbucket.org/shmr/mtrix/" target="_blank"> öffentliches Code-Repository auf bitbucket.org</a> begonnen habe, wo ich derartige Sachen uploade. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/903/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webspace gemeinsam nutzen mit Owncloud (Audiostreaming angetestet)</title>
		<link>http://www.querzone.de/blog/archives/818</link>
		<comments>http://www.querzone.de/blog/archives/818#comments</comments>
		<pubDate>Mon, 16 Jan 2012 18:00:58 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=818</guid>
		<description><![CDATA[Eigenen Webspace mit anderen gemeinsam nutzen und das so einfach wie möglich (also ohne Familienmitglieder für sshfs begeistern zu wollen ;-) und dennoch &#8220;Paranoia-kompatibel&#8221;? Owncloud macht das kinderleicht. Es bietet eine intuitive Weboberfläche mit der man seine Dateien verwalten &#038; &#8230; <a href="http://www.querzone.de/blog/archives/818">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Eigenen Webspace mit anderen gemeinsam nutzen und das so einfach wie möglich (also ohne Familienmitglieder für <code>sshfs</code> begeistern zu wollen ;-) und dennoch &#8220;Paranoia-kompatibel&#8221;? <a href="http://owncloud.org/" target="_blank">Owncloud</a> macht das kinderleicht. Es bietet eine intuitive Weboberfläche mit der man seine Dateien verwalten &#038; mit anderen teilen kann (Up-/Download/Shares etc.). Ein einfacher integrierte MusicPlayer erlaubt das Abspielen hochgeladene MP3s über den Browser &#038; grundlegende PIM-Funktionen (Kalender &#038; Kontakte) sind ebenfalls out-of-the-Box vorhanden. Plugininterfaces bzw. &#8220;Apps&#8221; für z.B. Photogalerien sind geplant.</p>
<p>Aber Owncloud macht sich durch folgende Features bereits jetzt richtig nützlich:</p>
<ul>
<li> via <strong><a href="http://owncloud.org/use/webdav/" target="_blank">WebDAV</a></strong> lässt sich der Speicherplatz über HTTP(S) einbinden und damit plattformunabhängig wie ein lokales Verzeichniss nutzen </li>
<li> Unterstützung für&#8217;s <strong><a href="http://en.wikipedia.org/wiki/Ampache">Ampache-Protokoll</a></strong> erlaubt Audiostreaming auf mobile Player wie z.B. ein Tablet </li>
<li> LDAP Anbindung </li>
</ul>
<p>Auf <a href="http://owncloud.org/use/">owncloud.org/use</a> gibt es eine gute Übersicht über die Nutzung, Installation (kinderleicht) und auch eine Online-Demo der in PHP geschriebenen Applikation.</p>
<p><a href="http://de.wikipedia.org/wiki/Webdav" target="_blank">WebDAV</a> funktioniert sofort wunderbar, eine <a href="http://de.wikipedia.org/wiki/LDAP" target="_blank">LDAP</a>-Anbindung brauche ich privat nicht (gehe davon aus sie funzt problemfrei &#8211; vlt. mal auf Arbeit ausprobieren) aber beim Audio-Streaming &#8211; einer für mich sehr interessanten Option &#8211; hakt es leider schmerzhaft an mobilen Clients. Da der in Owncloud integrierte MusicPlayer bisher nur leidlich geeignet ist um umfangreiche Hörbücher abzuspielen und auf meinen Mobile-Devices (Handy, Tablet) mal sowas von überhaupt nicht funktioniert. ;-(</p>
<h3> angetestet: Audiostreaming auf&#8217;s Handy oder Tablet </h3>
<p>Im Android Market nach &#8220;Ampache&#8221; zu suchen hilft sofort &#8211; die kostenfreie App <code>JustPlayer</code> spricht dieses Protokoll und lässt sich gut bedienen (<code>Amdroid</code> mochte bei mir kein https &#038; und <code>Ampache.net</code> lief nicht). Auf einem Handy mit Android 2.3.6 brachte das aber leider nix &#8211; lokales Audio wird gespielt, von der Owncloud hört man jedoch nix. ;-( Auf <a href="http://www.querzone.de/blog/archives/762" target="_blank">einem Tablet mit Android 3.2</a> funktioniert es hingegen zuerst einwandfrei &#8211; stürzte bei längerer Nutzung aber auch irgendwann ab! Keine Ahnung woran das liegt, aber so kann ich das z.B. meiner Süssen jedenfalls nicht schmackhaft machen. :-/ Schade eigentlich. Sobald der integrierte MusicPlayer besser wird oder jemand passende Apps veröffentlicht, sollte sich dieses &#8220;Problem&#8221; hftl. nicht mehr stellen. :-)</p>
<h3> However&#8230; </h3>
<p>Owncloud ist momentan ein idealer Kandidat zur Installation auf dem eigenen Server &#8211; weil&#8217;s tatsächlich ebenso praktisch wie einfach für jeden zu nutzen ist (und nicht zuletzt weil IMHO &#8220;Thin-Provisioning&#8221; ein nicht triviales Versprechen darstellt, das man ruhig mal von seinem Hoster einfordern darf *g* ;-). Und ja: mit &#8220;Cloud&#8221; hat Owncloud bisher wenig zu tun &#8211; macht nichts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/818/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Viele IOPS kontrolliert produzieren mit C</title>
		<link>http://www.querzone.de/blog/archives/796</link>
		<comments>http://www.querzone.de/blog/archives/796#comments</comments>
		<pubDate>Sat, 07 Jan 2012 14:22:46 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[a.out]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=796</guid>
		<description><![CDATA[Ich hatte ja schonmal über einen kleinen Hack zur (nachvollziehbaren) periodischen Generierung von wenigen IOs geschrieben. In einem &#8220;aktuellen Case&#8221; war Gegenteiliges von Nöten, sprich: ich wollte alle 1000 Mikrosekunden 4KB auf eine SAN-Disk schreiben (also 1000 &#8220;IOs&#8221; a 4KB &#8230; <a href="http://www.querzone.de/blog/archives/796">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ich hatte ja <a href="http://www.querzone.de/blog/2011/11/wenige-iops-kontrolliert-produzieren-mit-c/" target="_blank"> schonmal über einen kleinen Hack zur (nachvollziehbaren) periodischen Generierung von wenigen IOs geschrieben</a>. In einem &#8220;aktuellen Case&#8221; war Gegenteiliges von Nöten, sprich: ich wollte alle 1000 Mikrosekunden 4KB auf eine SAN-Disk schreiben (also 1000 &#8220;IOs&#8221; a 4KB pro Sekunde). Netterweise funzt das mit dem selben Code:<br />
<code><br />
iosnail 4096 60000 1000 0 /dev/mapper/symvmax_XYZ_024E_debugdevice<br />
</code><br />
schreibt 60 Sekunden lang pro Sekunde 1000 mal 4 KB (bzw. versucht dies ;) auf Disk (und soll dabei hostseitige Cache-Mechanismen nicht benutzen). <a href="http://www.querzone.de/wiki/Wiki.jsp?page=IOSnail#section-IOSnail-AUsageExample" target="_blank">Im Wiki gibt&#8217;s ein Beispiel </a> dazu (iostat, symstat).</p>
<p>Der empirische &#8220;Erkenntnisgewinn&#8221; &#8211; den ich im konkreten Fall anstrebe &#8211; geht bisher leider gegen 0 (&#8220;bei uns ist alles grün &#8211; das Setup difft auch&#8221;). Nuja, immerhin kann ich das ehrlich &#8220;belastbar&#8221; sagen. ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/796/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spielzeug für Couch-Potatoes: mein Tablet und &#8220;i&#8221;</title>
		<link>http://www.querzone.de/blog/archives/762</link>
		<comments>http://www.querzone.de/blog/archives/762#comments</comments>
		<pubDate>Tue, 01 Nov 2011 13:30:47 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[tablet]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=762</guid>
		<description><![CDATA[Ich konnte es mir nicht verkneifen ein Tablet zu kaufen. Nachdem Samsung&#8217;s Galaxy dank Apple hier momentan nur über Umwege (mit teilweise absurden Preisaufschlägen) zu bekommen ist, habe ich mich entschieden Geld zu sparen &#038; ein &#8220;Prekariats-Tablet&#8221; gekauft: Acer Iconia &#8230; <a href="http://www.querzone.de/blog/archives/762">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ich konnte es mir nicht verkneifen ein Tablet zu kaufen. Nachdem Samsung&#8217;s Galaxy dank Apple hier momentan nur über Umwege (mit teilweise absurden Preisaufschlägen) zu bekommen ist, habe ich mich entschieden Geld zu sparen &#038; ein &#8220;Prekariats-Tablet&#8221; gekauft:</p>
<p><a href="http://www.amazon.de/gp/product/B004X4QB84/ref=as_li_tf_tl?ie=UTF8&#038;tag=querzone-21&#038;linkCode=as2&#038;camp=1638&#038;creative=6742&#038;creativeASIN=B004X4QB84">Acer Iconia Tab A500 Tablet  </a><img src="http://www.assoc-amazon.de/e/ir?t=querzone-21&#038;l=as2&#038;o=3&#038;a=B004X4QB84" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> (affiliate link)</p>
<p>Das A500 ist relativ preiswert (~400 EUR Saturn), läuft unter Android 3.2 und bringt fast alles mit was ich benötige: 10.1 Zoll, 32GB HDD (via MicroSD erweiterbar), WiFi, GPS, 2 Kameras (vorne/hinten), Mikrofon und USB. UMTS fehlt, aber das lässt sich bei Bedarf einfach via Smartphone lösen (Handy zum Hotspot machen). Die Cams liefern Bilder bescheidener Qualität, aber für Videofonie oder &#8220;Medienexperimente&#8221; mit z.B. <a href="http://kivy.org/" title="kivy" target="_blank">Kivy</a> reicht das vollkommen. Wie beim unsäglichen Trend zu pre-configured  Laptops lässt es sich Acer nicht nehmen, das OS ein wenig zu &#8220;branden&#8221; indem es ein paar krude Applikationen zweifelhaften nutzens &#8220;fest&#8221; auf dem Tablet vorinstalliert &#8211; ohne es zu <a href="http://forum.xda-developers.com/showthread.php?t=1055354&#038;highlight=Root" title="How To Root An Acer Iconia A500" target="_blank">rooten</a> lässt sich das nicht deinstallieren. Das stört nicht so sehr wie auf einem Smartphone, schließlich ist viel mehr Speicherplatz vorhanden &#8211; große &#8220;Anpassungen&#8221; hat sich Acer netterweise verkniffen.</p>
<p>Benchmarks &#038; techn. Details zum A500 gibt es zuhauf im Netz. Mir ist der Aspekt &#8220;Usability&#8221; wichtiger. Ich nutze das Tablet seit ca. einer Woche täglich, hauptsächlich um zu surfen, RSS Feeds zu lesen, Radio oder Podcasts zu hören, kleine Mails zu tippern. Nicht das ich dies vorher nicht auch getan hätte (Netbook, Handy), aber <strong>ein Tablet verträgt sich tatsächlich besser mit abendlicher Entspannung &#8211; es macht einfach keine Arbeit. </strong> Kurzum: ich liebe es und will in Zukunft mehr davon! :-)</p>
<p>Die konkrete Inkarnation vom &#8220;Konzept Tablet&#8221; ist mir recht schnurz, hauptsache es geht in Richtung &#8220;offen, stabile APIs und bezahlbar&#8221; &#8211; Google&#8217;s Android auf Acer&#8217;s A500 macht hier eine gute Figur.</p>
<p>Nicht verschweigen möchte ich <strong>das einzige, was mich momentan echt nervt</strong>: wenn ich auf dem A500 über Google-Listen einen Podcast höre und sich das Display autom. abschaltet, dann &#8220;ruckelt&#8221; der Stream entsetzlich &#8211; die Abschaltzeit für&#8217;s Display hochzusetzen hilft natürlich, verballert aber unnötig Strom. Bei meinem Smartphone (Nexus One) unter Android 2.3.6 funzt das hingegen problemlos. Any ideas?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/762/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wenige IOPS kontrolliert produzieren mit C</title>
		<link>http://www.querzone.de/blog/archives/294</link>
		<comments>http://www.querzone.de/blog/archives/294#comments</comments>
		<pubDate>Tue, 01 Nov 2011 10:42:40 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[a.out]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=294</guid>
		<description><![CDATA[IOPS (Input/Output operations Per Second) auf ein (vernetztes) Storage-Device bieten regelmäßig Stoff für epische Diskussionen großer Bandbreite. Nützlich kann da sogar ein popeliges Tool sein, welches WENIGE IOs pro Sekunde, also z.B. je 1 Byte pro 1/4 Sekunde, auf eine &#8230; <a href="http://www.querzone.de/blog/archives/294">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>IOPS (Input/Output operations Per Second) auf ein (vernetztes) Storage-Device bieten regelmäßig Stoff für epische Diskussionen großer Bandbreite. Nützlich kann da sogar ein popeliges Tool sein, welches WENIGE IOs pro Sekunde, also z.B. je 1 Byte pro 1/4 Sekunde, auf eine Disk schreiben kann. Möglichst low-level versteht sich. Und sei&#8217;s nur, um die Stirn runzeln zu können ob der Fragen die sich da auftun. :-)</p>
<p>In C einen write()-Systemcall abzusetzen ist jedenfalls nicht schwer. Nachdem ich etwas gestöbert habe, konnte ich <a href="http://www.querzone.de/wiki/attach/IOSnail/iosnail.c" title="iosnail" target="_blank">etwas passendes in C &#8220;zusammenkleben&#8221;</a>. Folg. produziert <strong>z.B. alle 1/4 Sekunden einen write()-Call für popelige 4KiB (bis 800 mal sequenziell stumpf 4KiB geschrieben sind)</strong>:<br />
<code><br />
iosnail 4096 800 250000 0 /mnt/superdevice/bla.iosnail<br />
</code><br />
Wenn man jetzt parallel systat &#038; symstat (so man &#8216;ne Symmetrix im Zugriff hat) befragt<br />
&#8230; und ebenso &#8220;kindgerecht&#8221; wie korrekt erklären kann, was da wo passiert (und woher man das weiß) dann hätte ich gerne eine Seminareinladung bitte! Thx! :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/294/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django Screencast für Einsteiger</title>
		<link>http://www.querzone.de/blog/archives/696</link>
		<comments>http://www.querzone.de/blog/archives/696#comments</comments>
		<pubDate>Sun, 16 Oct 2011 14:40:50 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[empfehlung]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=696</guid>
		<description><![CDATA[Wer ein kleines, sehr sauberes Web-Framework ohne Dependency-Hell sucht und Django noch nicht oder nur vom &#8220;hören sagen&#8221; kennt, sollte einen Blick auf die Getting started with Django Screencasts von Kenneth Love riskieren.]]></description>
			<content:encoded><![CDATA[<p>Wer ein kleines, sehr sauberes Web-Framework ohne Dependency-Hell sucht und <a href="http://www.djangoproject.com/">Django</a> noch nicht oder nur vom &#8220;hören sagen&#8221; kennt, sollte einen Blick auf die <a href="http://gettingstartedwithdjango.com/resources/gigantuan.html"> Getting started with Django Screencasts von Kenneth Love</a> riskieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/696/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deployment &amp; Betrieb (nicht nur) von Eigenentwicklungen,  oder:  die Applikation als VM &#8211; ein Nachwort</title>
		<link>http://www.querzone.de/blog/archives/420</link>
		<comments>http://www.querzone.de/blog/archives/420#comments</comments>
		<pubDate>Sun, 16 Oct 2011 12:35:30 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[essay]]></category>
		<category><![CDATA[netzbürger]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[storage]]></category>
		<category><![CDATA[virtualization]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=420</guid>
		<description><![CDATA[Wo's nur geht sollte man IMHO "die" <strong>Applikation endlich zur virtuellen Maschine machen </strong> - und zwar ohne sich auf einen Vendor festzunageln! <a href="http://www.querzone.de/blog/archives/420">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>2011. Die Cloud ist in aller Munde. Gleichzeitig konfigurieren Administratoren in den &#8220;Werkshallen&#8221; (Rechenzentren) vor dem Deployment kruder Applikationen noch immer Betriebssysteme händisch, wälzen Support-Matrizen, suchen applikationsspezifische Runtime-Environments, Libraries, Lizenzkeys, telefonieren mit Sales-Leuten, binden das ganze in diverse Clusterstacks und so weiter.</p>
<p>Das ist Arbeit, von der man sich viel sparen können sollte. Nicht um gelangweilt oder gar arbeitslos (siehe &#8220;weniger wichtig&#8221;) zu sein versteht sich. :-)</p>
<p>Der Schlüssel dazu ist meiner Meinung nach nicht nur <code>ITIL</code> (siehe &#8220;streitbare Begriffe&#8221; wie &#8220;gesunder Menschenverstand&#8221;, &#8220;Freiheit&#8221;, &#8220;Liebe&#8221;, &#8220;Problem-Anderer-Leute-Feld&#8221; (PAL), etc.)  oder <code>zc.buildout</code> oder <code>Puppet</code> oder <code>Grundeinkommen</code> &#8211; das Anstreben von <code>Simplizität</code> (siehe UNIX-Konzept, DNA-Replikation, Mandelbrot-Menge, etc.) reicht vollkommen aus.</p>
<p>Jedenfalls sollte man IMHO wo&#8217;s nur geht &#8220;die&#8221; <strong>Applikation endlich zur virtuellen Maschine machen </strong> &#8211; und zwar ohne sich auf einen Vendor festzunageln! Ein egozentrisches Beispiel:</p>
<p>1. mein Development-Environment ist eine VM (Debian,GPL). Dort habe ich meine Sourcen, mein mercurial-Repository, meine Tools. Dank (InnoTek&#8217;s, äh Sun&#8217;s, äh Oracle&#8217;s) VirtualBox kann ich die mal im Park oder in der Bahn auf&#8217;m Netbook oder auch mal bei Windows-Menschen starten und an Software weiterentwickeln.</p>
<p>2. meine &#8220;Produktion&#8221; ist eine VM (Debian,GPL), läuft allerdings auf einem dicken &#8220;Eisen&#8221; unter SLES &#038; KVM. Natürlich ist das nix weiter als eine Kopie der Prod-VM die ich unter VirtualBox (selbstverständlich in einem Crypto-Container) mal im Park oder in der Bahn auf&#8217;m Netbook oder auch mal bei Windows-Menschen&#8230; :-)</p>
<p>3. Fixe ich direkt auf der auf dem Eisen laufenden VM etwas (&#8220;Prozessbruch&#8221; -> wild! ;-) &#8211; kopiere ich mir die anschließend in meine &#8220;Staging&#8221; Umgebung (Laptop :). So merke ich recht schnell vor jedem Deployment, wenn ich vergessen habe etwas in meine Development-VM &#8220;zurückfließen&#8221; zu lassen. (ok, ich gebe zu an diesem Punkt hakt es ob Faulheit nicht selten :-)</p>
<p>4. Moment&#8230; KVM möchte die vbox-Images nicht &#038; umgekehrt! <a href="http://www.querzone.de/wiki/Wiki.jsp?page=VirtualBox#section-VirtualBox-V2VMigrationZwischenVerschiedenenVirtualisierungsl_C3_B6sungen">Ja, da sind Konvertierungsschritte notwendig</a>, na und?</p>
<p>5. Das Eisen oder der Linux-Cluster werfen komische &#8220;dazed &#038; confused&#8221; Meldungen, komische Geräusche und letztlich macht die HA die Grätsche! -> Solution: Letztes Backup der Prod-VM einfach irgendwoanders hochbeamen (&#8220;Backup-Infrastruktur&#8221;, Laptop ;) und den Cluster betüddeln (der das ja nicht braucht, siehe &#8220;self-healing&#8221;).</p>
<p>6. Viel gute Software &#8220;funktioniert einfach so&#8221; (bei Betriebssystemen wird das z.B. als normal angesehen), und noch viel mehr könnte einfach so funktionieren. Jetzt fragen Sie sich mal, warum das eigentlich nicht so ist. (Falls Sie aus dem Management oder Sales-Bereich kommen &#8211; fragen Sie sich bitte mal: benutzen Sie ihre Software selbst auch? Bottom-Up meine ich? Falls Sie ein &#8220;Hacker&#8221; sind &#8211; fragen Sie sich mal: möchten Sie, wenn Sie Dinge benutzen müssen, die sie nicht interessieren, auch diese verstehen müssen? Interessieren Sie sich für Verwaltungsrecht bei unvermeidbaren Behördengängen? One-Click Patente??)</p>
<p>7. Letztlich sind wir alle irgendwo &#8220;User&#8221; &#8211; und nur wenn wir uns gegenseitig helfen, kann unnötige Arbeit verschwinden statt sie in neuen Schläuchen zu rekreieren. &#8220;EDV&#8221; sollte nicht &#8220;IT&#8221; heissen, nur damit die ursprüngliche Übersetzung &#8220;Ende der Vernunft&#8221; schwerer zu googlen ist. ;-)</p>
<p>8. Vielen Dank für Ihre geschätzte Aufmerksamkeit! &#038; happy <a href="http://en.wikipedia.org/wiki/Write_once,_run_anywhere">&#8220;write once, run everywhere!&#8221;</a> (<a href="http://en.wikipedia.org/wiki/Sun_Microsystems">SUN Microsystems</a>, 1996)! :-)</p>
<p><u>Zusammenfassung</u></p>
<p>Klar, das Thema &#8220;Virtualisierung&#8221; ist letztlich so alt wie ein Mainframe &#8211; aber im Gegensatz zu totem Baum &#8220;lebt sich die Virtualisierung&#8221; mittlerweile netzkompatibel (&#8220;frei und gut&#8221;).<br />
Eine komplett pre-configured VM statt einer Applikation auszuliefern ist in vielen Fällen eine sehr gute Idee und ohne finanzielle Aufwände zu realisieren. Besonders für &#8220;Kleinkram&#8221; (was keine Abwertung von Sinnhaftigkeit meint &#8211; im Gegenteil, sondern hosting-Aspekte wie z.B. I/O Last). Auch können Backup &#038; Restore Mechanismen vereinfacht werden.<br />
Das Potential geht dann flöten, wenn man sich von einem Anbieter oder nebulösen (komplexen) Automatismen abhängig macht (siehe &#8220;KISS&#8221;) &#8211; nicht immer braucht es &#8220;Live Migration Capability&#8221; und &#8220;Self-Healing&#8221; und &#8220;elastic Scale-out&#8221;, zumindest kann es nicht schaden den Ball flach und stattdessen im Auge zu behalten, dass &#8211; wie Großmutter schon wusste &#8211; nicht alles Gold ist, was glänzt. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/420/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Willige Amateure&#8230;</title>
		<link>http://www.querzone.de/blog/archives/349</link>
		<comments>http://www.querzone.de/blog/archives/349#comments</comments>
		<pubDate>Thu, 28 Jul 2011 19:22:55 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=349</guid>
		<description><![CDATA[und professionelle Schlampen scheinen großes Interesse am Thema ISCSI zu haben. Jedenfalls hämmern das die Bots hochfrequent in meine diesbezüglich längst veralteten Notizen. Der RSS feed ist dann auch zu nix gebrauchen (Page eigentlich ewig nicht mehr angefasst). 15 Minuten &#8230; <a href="http://www.querzone.de/blog/archives/349">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>und professionelle Schlampen scheinen großes Interesse am Thema ISCSI zu haben. Jedenfalls hämmern das die Bots hochfrequent in meine <a href="http://www.querzone.de/wiki/PageInfo.jsp?page=ISCSI">diesbezüglich längst veralteten Notizen</a>. Der RSS feed ist dann auch zu nix gebrauchen (Page eigentlich ewig nicht mehr angefasst). 15 Minuten Zeit genommen und <a href="http://doc.jspwiki.org/2.4/wiki/SpamFilter">Akismet als Spamfilter im Wiki</a> installiert. Noch unschlüssig ob es Bots u.U. irgendwie &#8220;ehrt&#8221;, daß sie keine &#8220;early adopters&#8221; sind und auch nicht das Thema &#8220;cloud&#8221; hinkritzeln&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/349/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lieber TÜV&#8230; (Update)</title>
		<link>http://www.querzone.de/blog/archives/241</link>
		<comments>http://www.querzone.de/blog/archives/241#comments</comments>
		<pubDate>Sat, 21 May 2011 12:15:15 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[RL]]></category>
		<category><![CDATA[btw]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=241</guid>
		<description><![CDATA[Lieber TÜV, bitte lass mir meine Nuckelpinne! a) Sie ist volljährig und eine treue Gefährtin. b) Ohne verbeulte, alte Automobile auf den Straßen würde Rundgelutschtes nicht als schön durchgehen. c) Mehr als 50 km/h verlange ich dem Auto selten ab. &#8230; <a href="http://www.querzone.de/blog/archives/241">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.querzone.de/blog/wp-content/uploads/2011/05/shot_1305972568839.jpg"><img src="http://www.querzone.de/blog/wp-content/uploads/2011/05/shot_1305972568839-300x300.jpg" alt="" title="shot_1305972568839" width="300" height="300" class="alignright size-medium wp-image-243" /></a> Lieber TÜV, bitte lass mir meine Nuckelpinne!<br/><br />
a) Sie ist volljährig und eine treue Gefährtin. <br/><br />
b) Ohne verbeulte, alte Automobile auf den Straßen würde Rundgelutschtes nicht als schön durchgehen. <br/><br />
c)  Mehr als 50 km/h verlange ich dem Auto selten ab. Von mir aus kann auf Autobahnen gerne ein Tempolimit eingeführt werden, damit nicht mehr soviele Menschen in verkehrssicheren Autos ihre (und andere) Gedärme über den Asphalt spritzen. <br/><br />
Herzlichen Dank,<br />
Dein kaf!sch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/241/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Von der Symmetrix Management Console (SMC) lernen?</title>
		<link>http://www.querzone.de/blog/archives/224</link>
		<comments>http://www.querzone.de/blog/archives/224#comments</comments>
		<pubDate>Wed, 18 May 2011 16:07:50 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[emc]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[storage]]></category>
		<category><![CDATA[symmetrix]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=224</guid>
		<description><![CDATA[Die Symmetrix Management Console (SMC) ist ein WebGUI zur Administration von EMC&#8217;s High-End Storage-Arrays (Symmetrix). Mit ihr lassen sich z.B. Config-Changes &#8220;zusammenklicken&#8221;. Wie sich das bei einem ordentlichen Softwarestack gehört &#8220;abstrahiert&#8221; die SMC hierbei lediglich die zu bauenden Kommandos für &#8230; <a href="http://www.querzone.de/blog/archives/224">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Die Symmetrix Management Console (SMC) ist ein WebGUI zur Administration von EMC&#8217;s High-End Storage-Arrays (Symmetrix). Mit ihr lassen sich z.B. Config-Changes &#8220;zusammenklicken&#8221;. Wie sich das bei einem ordentlichen Softwarestack gehört &#8220;abstrahiert&#8221; die SMC hierbei lediglich die zu bauenden Kommandos für den (potentiell uninteressierten) User und schickt sie an ein API. Man kann diese Kommandos aber genausogut über die entsprechenden Commandline-Tools (<code>symconfigure</code>) an das API übergeben &#8211; damit bieten sich gute Scripting- &#038; Kontrollmöglichkeiten.</p>
<p><strong>Leider zeigt die SMC die verwendeten Kommandos zur Durchführung der zusammengeklickten Konfigurationsänderungen nicht an. Aus dem Logfile des SymAPI lassen sich diese aber 1:1 ableiten.</strong></p>
<p>Im folg. z.B. Erstellung von ein paar Thin-Devices, anschließendes Meta-zusammenbauen und in einen Thin-Pool namens &#8220;R6&#8243; binden (ohne Pre-Allocation). </p>
<pre>
05/16/2011 14:28:40.716   2436   8096     {
05/16/2011 14:28:40.716   2436   8096       create dev count=3,
    size=294624 cyl, emulation=FBA, config=TDEV, mvs_ssid=0,
    dynamic_capability=dyn_rdf;
05/16/2011 14:28:40.716   2436   8096     }

05/16/2011 14:28:44.091   2436   8096     Validating configuration
    changes..........................Validated.
05/16/2011 14:28:44.107   2436   8096       New symdevs: 02B3:02B5 

05/16/2011 14:48:25.607   2436   4904     {
05/16/2011 14:48:25.607   2436   4904       create dev count=20,
    size=17476 cyl, emulation=FBA, config=TDEV, mvs_ssid=0,
    dynamic_capability=dyn_rdf;
05/16/2011 14:48:25.607   2436   4904     }

05/16/2011 14:48:28.997   2436   4904     Validating configuration
    changes..........................Validated.
05/16/2011 14:48:28.997   2436   4904       New symdevs: 02B6:02C9 

[...]

05/18/2011 11:40:57.794   2436   6848     {
05/18/2011 11:40:57.794   2436   6848       form meta
    from dev 02B3 config=Concatenated;
05/18/2011 11:40:57.794   2436   6848       add dev
    02B4:02B5 to meta 02B3;
05/18/2011 11:40:57.794   2436   6848     }

[...]

05/18/2011 11:58:10.982   2436   7360     {
05/18/2011 11:58:10.982   2436   7360       form meta
    from dev 02B6 config=Concatenated;
05/18/2011 11:58:10.982   2436   7360       add dev
    02B7:02C9 to meta 02B6;
05/18/2011 11:58:10.982   2436   7360     }

[...]

05/18/2011 12:06:26.232   2436   4416     {
05/18/2011 12:06:26.232   2436   4416       bind tdev 02B3
    to pool R6 preallocate size=0 cyl;
05/18/2011 12:06:26.247   2436   4416       bind tdev 02B6
    to pool R6 preallocate size=0 cyl;
05/18/2011 12:06:26.247   2436   4416     }
</pre>
<p>Damit lässt sich tatsächlich Suchaufwand im &#8220;Solution Enabler Guide&#8221; einsparen. :-)</p>
<p>Das Logfile befindet sich üblicherweise unter: </p>
<ul>
<li> <code>/var/symapi/log/symapi-YYYYMMDD.log</code> (UNIX)</li>
<li> <code>C:\Programme\EMC\SYMAPI\log\symapi-YYYYMMDD.log</code> (Windows)</li>
</ul>
<hr/>
Weiterführende Links: <br/></p>
<ul>
<li><a href="http://www.querzone.de/wiki/Wiki.jsp?page=EMCSymmetrix">wikipage: EMCSymmetrix </a></li>
<li><a href="http://www.querzone.de/wiki/Wiki.jsp?page=SymmetrixVMAX">wikipage: SymmetrixVMAX </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/224/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webapps für Faule &#8211; Oracle Application Express (APEX)</title>
		<link>http://www.querzone.de/blog/archives/180</link>
		<comments>http://www.querzone.de/blog/archives/180#comments</comments>
		<pubDate>Wed, 06 Apr 2011 12:32:45 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[apex]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=180</guid>
		<description><![CDATA[Das Versprechen einfach und schnell gute Webapplikationen entwickeln zu können (&#8220;Rapid Webapplication Development&#8221;) wird bei jedem Framework großgeschrieben. Nicht selten erkauft man sich damit Einschränkungen, die zu umgehen Aufwand &#8211; sprich Erfahrung &#8211; erfordern. Django ist ein gutes Beispiel, bei &#8230; <a href="http://www.querzone.de/blog/archives/180">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Das Versprechen einfach und schnell gute Webapplikationen entwickeln zu können (&#8220;Rapid Webapplication Development&#8221;) wird bei jedem Framework großgeschrieben. Nicht selten erkauft man sich damit Einschränkungen, die zu umgehen Aufwand &#8211; sprich Erfahrung &#8211; erfordern. <a href="http://www.djangoproject.com/">Django</a> ist ein gutes Beispiel, bei dem der Nutzen schnell den Aufwand übertrifft &#8211; vorausgesetzt man programmiert gerne.</p>
<p>Es gibt aber genügend Leute, die so ekliges Zeug wie Excel-Sheets benutzen, statt ihre Daten einer kleinen selbstgestrickten Webapplikation anzuvertrauen &#8211; einfach weil sie nicht gerne selbst programmieren. In solchen Fällen lohnt sich ein Blick auf <a href="http://apex.oracle.com">APEX</a> &#8211;  ein Produkt welches Oracle als &#8220;kostenlos&#8221; bewirbt und das auch Nicht-Programmierern erlaubt sich eine Webapplikation inklusive Datenmodell &#8220;zusammenklicken&#8221;.</p>
<p>Klingt erstmal typisch doof, ist es aber nicht. Ausprobieren lohnt sich! Einen Online-Workspace mit der aktuellen APEX Version 4.0 und ein paar MB Speicherplatz kann man kostenfrei &#038; schnell auf <a href="http://apex.oracle.com">apex.oracle.com</a> erstellen. Wer mehr will, kann sich eine Oracle XE DB und APEX lokal (oder besser in einer virtuellen Machine) installieren. </p>
<p><strong>Fazit: Spaß macht APEX auf Anhieb! </strong> Trotz des unangenehmen Nachgeschmacks &#8211; es ist weder Open-Source, noch ist es ohne eine Oracle Datenbank zu gebrauchen. Intensive Nutzung führt damit zu einem Vendor-Lock-In. Fans &#038; Besitzer der Berühmten &#8220;eh-da Kosten&#8221; (Firmen) hält sowas natürlich nicht ab, damit auch komplexe Applikationen zu bauen, die weit über ein &#8220;Zusammenklicken&#8221; hinausgehen. Ob PL/SQL in heutigen Zeiten (Python,Ruby,Java) noch geeignet ist, um Website-/Prozesslogik zu implementieren? Glaub&#8217;s ja nicht, aber es verdienen momentan Consultants richtig Geld damit (Intranetprojekte, Kurse, Bücher) und, naja, meiner bescheidenen Meinung nach wirkt der Layer &#8220;unter den Klicks&#8221; schon &#8220;hacktivistisch&#8221;. Vielleicht bin ich auch einfach nur zu jung (haha ;-). Äußerst beliebt sind übrigens die zahlreichen Rezepte zur Integration von Open-Source Software zum &#8220;Aufhübschen&#8221; des Frontends (jQuery &#038; Co.) &#8211; APEX setzt out-of-the-box (noch) auf Flash.</p>
<p>Auf jeden Fall bleibt mir ein interessanter, kurzweiliger Eindruck des &#8220;Gucken &#038; Herumspielen erlaubt&#8221; (das ist bei Enterprise-Software leider nicht selbstverständlich &#8211; siehe z.B. Fa. EMC, wo IMHO jeder Furz an Information hinter einem uncrawlbaren &#8220;Customer-Portal&#8221; versteckt wird #-)) &#8211; und selbiges kann ich auch nur empfehlen. <strong>Der Weg zum Oracle Fanboy bleibt aber weit</strong> &#8211; gerade folg. in den Lizenzbedingungen zu &#8220;meiner&#8221; lokalen <a href="http://www.querzone.de/blog/2011/03/oracle-db-schulungsumgebung-auf-dem-netbook/"> Oracle XE &#038; APEX Installation unter Debian</a> gelesen:</p>
<p><quote><br />
# ORACLE DATABASE 10g EXPRESS EDITION LICENSE AGREEMENT<br />
[...]<br />
Upon 45 days written notice Oracle may audit the use of the program. You agree to cooperate with Oracle&#8217;s audit and provide reasonable assistance and access to information. You agree that Oracle shall not be responsible for any of your costs incurred in cooperating with the audit.<br />
[...]<br />
</quote></p>
<p>WTF???</p>
<hr/>
Weiterführende Links: <br/></p>
<ul>
<li><a href="http://apex.oracle.com/pls/otn/f?p=4600:6:0::NO:::">APEX &#8211; Basics &#038; Demos </a></li>
<li><a href="http://www.oracle.com/technetwork/developer-tools/apex/documentation/index.html">Documentation and Tutorials</a></li>
<li> <a href="http://www.querzone.de/wiki/Wiki.jsp?page=OracleApplicationExpress"> APEX Page im Querzone Wiki</a></li>
</ul>
<hr/>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/180/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle DB &#8211; Schulungsumgebung auf dem Netbook</title>
		<link>http://www.querzone.de/blog/archives/136</link>
		<comments>http://www.querzone.de/blog/archives/136#comments</comments>
		<pubDate>Tue, 22 Mar 2011 16:26:04 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[newbie]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=136</guid>
		<description><![CDATA[Um grundlegende Erfahrungen mit Oracle&#8217;s Vorzeigeprodukt zu sammeln benötigt man &#8211; entgegen hartnäckigen Gerüchten &#8211; beileibe keine Rechenboliden. Mein Playground-Setup läuft momentan in einer virtuellen Maschine mit schlappen 380MB RAM und 7 GB Festplattenspeicher &#8211; auf einem aktuellen Netbook mit &#8230; <a href="http://www.querzone.de/blog/archives/136">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Um grundlegende Erfahrungen mit Oracle&#8217;s Vorzeigeprodukt zu sammeln benötigt man &#8211; entgegen hartnäckigen Gerüchten &#8211; beileibe keine Rechenboliden. Mein Playground-Setup läuft momentan in einer virtuellen Maschine mit schlappen 380MB RAM und 7 GB Festplattenspeicher &#8211; auf einem aktuellen Netbook mit gerade mal 1GB RAM! :-)</p>
<p>Wie man die Oracle DB Software in der kostenfreien XE-Variante schmerzfrei unter Debian Squeeze installiert, die notwendigsten Basics konfiguriert und via Python darauf zugreift ist Inhalt dieses Artikels. Er richtet sich an Oracle Newbies (wie mich).</p>
<h3> Download der Software </h3>
<p>Nachdem man sich in der VM-Software seiner Wahl ein frisches Debian eingerichtet hat, ist noch die <code>Linux kernel AIO access library</code> nachzuinstallieren:</p>
<p>    <code>apt-get install libaio1</code></p>
<p>Anschließend <a href="http://www.oracle.com/technetwork/database/express-edition/downloads/102xelinsoft-102048.html">holt man sich die Oracle Software in der sog. &#8220;Express Edition&#8221; (XE)</a>. Diese ist kostenfrei nutzbar, jedoch im Funktionsumfang eingeschränkt (z.B. Datenvolumen <= 4GiB, CPU &#038; RAM Beschränkungen, bla) - für's Lernen von Basics reicht sie allemal aus. :-)<br />
<strong>Man achte darauf, Server- und Client-Package zu ziehen</strong>, also folgende:</p>
<pre>
	oracle-xe-client_10.2.0.1-1.0_i386.deb
	oracle-xe-universal_10.2.0.1-1.0_i386.deb
</pre>
<p>Und wenn wir gerade dabei sind, ziehen wir auch gleich noch das <a href="http://cx-oracle.sourceforge.net/">Python-Modul cx_Oracle</a> in der Variante <code> cx_Oracle-5.0.4-10g-unicode-py25-1.i386.rpm</code>.</p>
<h3> Installation </h3>
<p>Die Installation ist eigentlich idiotensicher. Defaultwerte kann man übernehmen, allerdings sollte man die Frage, ob die DB beim Booten automatisch gestartet werden soll, IMHO unbedingt mit No beantworten. Dies schont zum einen die Ressourcen bei Nichtgebrauch der DB und zum anderen lernt man dadurch etwas hilfreiches (später), also:</p>
<pre>
dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb
dpkg -i oracle-xe-client_10.2.0.1-1.0_i386.deb

/etc/init.d/oracle-xe configure</code>
</pre>
<p>Damit ist die DB einsatzbereit und ein hübsches (nützliches) Webinterface bereits über <code>http://127.0.0.1:8080/apex</code> zu erreichen. Da wir in unserer schlanken VM natürlich keinen X-Server laufen lassen, nützt uns das aber noch nix. ;-)</p>
<h3> Console, oder &#8220;In the beginning there was the TTY&#8221; </h3>
<p>Wir werden daher User Oracle</p>
<pre>
su - oracle
</pre>
<p>sollten so automatisch im verzeichnis <code>/usr/lib/oracle/xe</code> landen, setzen notwendige Environment-Variablen (ORACLE_HOME etc.)</p>
<pre>
. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
</pre>
<p>und sollten nun das Tool <code>sqlplus</code> nutzen können, um mit der Datenbank zu sprechen.</p>
<p>Um sich als User sys mit dem beim configure-script vergebenen Passwort (hier &#8220;password&#8221;) anzumelden, tippe man:</p>
<pre>
oracle@vmora:~$ sqlplus system/password@xe

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 8 14:10:13 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL>
SQL> SELECT SYSDATE from dual;
SYSDATE
---------
08-MAR-11
SQL> SELECT SQRT(2) FROM dual;
   SQRT(2)
----------
1.41421356
SQL> quit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
</pre>
<h3> Klicki-Bunti Interface </h3>
<p>OK. So obiges funktioniert ist es jetzt an der Zeit, dem Webinterface abzugewöhnen nur auf&#8217;s Loopback (127.0.0.1) zu lauschen. Googlen fördert eine mitgelieferte PL/SQL-Procedure zu Tage, die man lediglich aufrufen muss.</p>
<p>Also wieder via <code>sqlplus</code> mit der DB verbinden:</p>
<pre>
oracle@vmora:~$ sqlplus system/password@xe

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Mar 8 15:34:30 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
</pre>
<p>Die Procedure aufrufen:</p>
<pre>
SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

PL/SQL procedure successfully completed.

SQL> quit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
</pre>
<p>Und schon ist das Webinterface über alle im OS konfigurierten NICs erreichbar. Innerhalb einer VM ohne X-Server ist das sehr praktisch (ja, das VM-Netzwerkinterface muss an das des Wirts gebridged sein).</p>
<h3> &#8230;oder lieber Python </h3>
<p><code>sqlplus</code> geht mangels History, Cmd-Completion etc. ziemlich schnell auf den Senkel, weswegen &#8211; zumindest ich &#8211; lieber gleich meine momentane Lieblingssprache Python verwenden will. An Bord hat Python IMHO leider keine Oracle-Bindings. Es gibt aber z.B. das Python-Modul <code>cx_Oracle</code>. Für&#8217;s Kompilieren dieses Moduls benötigt man noch einige Development-Packages &#8211; diese kann man zwar von Oracle frei herunterladen, aber den Aufwand sparen wir uns. Stattdessen haben wir ja schon einen passenden RPM-Build heruntergeldaen. Dieses wandeln wir via <code>alien</code> in ein DEB um und installieren es.</p>
<pre>
alien cx_Oracle-5.0.4-10g-unicode-py25-1.i386.rpm
dpkg -i cx-oracle_5.0.4-2_i386.deb
</pre>
<p>Fertig. :-) Jetzt können wir &#8211; vorausgesetzt die Environment-Variablen sind passend gesetzt (<code>LD_LIBRARY_PATH</code>) so komfortabel wie von anderen DBs (MySQL,SQLLite etc.) gewohnt auf die DB zugreifen:</p>
<pre>
#!/usr/bin/env python
import cx_Oracle

if __name__ == '__main__':
    sSQL = unicode('SELECT SYSDATE FROM dual')
    print type(sSQL)

    con = cx_Oracle.connect(unicode("system/password@127.0.0.1"))
    print con.version
    cur = con.cursor()

    cur.execute(sSQL)

    for result in cur:
        print result
    cur.close()
    con.close()
</pre>
<p>Falls es hier zu einem &#8220;<code>ImportError: libclntsh.so.10.1: cannot open shared object file: </code>&#8221; kommt, hat man höchstwahrscheinlich nicht aufgepasst bzw. vergessen obiger Erwähnung zum <code>LD_LIBRARY_PATH</code> zu folgen. ;-) (siehe <code>cat $ORACLE_HOME/app/oracle/product/10.2.0/server/bin/oracle_env.sh</code>).</p>
<p>Voila! Ein großer Teil des Rattenschwanzes von Oracle-Terminologie liegt nun &#8211; empirisch erfahrbar &#038; mobil &#8211; vor uns. Jetzt müssten wir uns eigentlich nur noch aufraffen eine hübsche Django-Applikation darauf zu deployen, Backups &#038; Restores zu triggern, das <code>Data Dictionary</code> zu erforschen oder Ähnliches. <strong>Happy playing!</strong></p>
<h3> Autoboot OFF, reboot und nun??? </h3>
<p>Achso, wer &#8211; wie ich &#8211; keine nebulösen Automatismen mag (Kontrollfreak?) und die DB nicht automatisch starten lässt, hat als Oracle Newbie nach einem Reboot ein Problem.</p>
<p><strong> Die DB lässt sich NICHT &#8211; wie man naiv erwarten könnte &#8211; einfach über das runlevel-script <code>/etc/init.d/oracle-xe start</code> starten! </strong> Das wäre zu einfach. :-)</p>
<p>Deshalb:</p>
<pre>
su - oracle

# 1. datenbank starten

$ sqlplus /nolog
SQL> CONNECT SYS/sys_password as SYSDBA
SQL> STARTUP

# oder (wenn man 'ne BASH hat) als einzeiler:

echo -e "CONNECT SYS/password as SYSDBA\nSTARTUP" | sqlplus /nolog

# 2. listener starten

lsnrctl start
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/136/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rewolluhschinärrie Relaunch &#8211; die neue Querzone</title>
		<link>http://www.querzone.de/blog/archives/19</link>
		<comments>http://www.querzone.de/blog/archives/19#comments</comments>
		<pubDate>Tue, 15 Feb 2011 13:08:26 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog_testing/?p=19</guid>
		<description><![CDATA[Zum ersten mal seit ca. 8 Jahren wird die Querzone kräftig umgebaut. D.h. die &#8220;Altlasten&#8221; fliegen raus (blog, gallery, bla), um mehr Platz für&#8217;s Wesentliche (jep, damit ist das Wiki gemeint :-) und ganz viele neue tolle Produkte zu schaffen. &#8230; <a href="http://www.querzone.de/blog/archives/19">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Zum ersten mal seit ca. 8 Jahren wird die Querzone kräftig umgebaut. D.h. die &#8220;Altlasten&#8221; fliegen raus (blog, gallery, bla), um mehr Platz für&#8217;s Wesentliche (jep, damit ist <a href="http://www.querzone.de/wiki/">das Wiki</a> gemeint :-) und ganz viele neue tolle Produkte zu schaffen. Ist es gut zu erwähnen, daß für die handvoll &#8220;richtiger&#8221; Textbeiträge pro Jahr eine eigene kleine <a href="http://www.djangoproject.com/">Django</a>-Applikation ausreichen würde, diese aber trotz mehrere Zugfahrten &#8220;irgendwie&#8221; immer grottiger / komplexer wurde, weshalb ich nun vorerst doch wieder zu PHP/Wordpress gegriffen habe? ;-) Naja&#8230; das nächste mal fang ich halt nicht mit Multilanguage-Support und selbstgestrickter Revisionssicherheit an  &#8211; oder trinke auf der Zugfahrt kein Bier :-), sondern konzentriere mich.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/19/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualisierung DIY &#8211; Messdaten plotten mit matplotlib</title>
		<link>http://www.querzone.de/blog/archives/30</link>
		<comments>http://www.querzone.de/blog/archives/30#comments</comments>
		<pubDate>Mon, 31 Jan 2011 11:27:28 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[matplotlib]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=30</guid>
		<description><![CDATA[Zur Aufzeichnung von Infos über Aktivitäten der wichtigsten Subsysteme eines Servers (CPU, Mem, Disk, Net, &#8230;) eignet sich die Toolsammlung sar bzw. sysstat hervorragend. Sie ist für die meisten UNIX-Derivate frei verfügbar. Eine graf. Darstellung der Messdaten ist dabei nicht &#8230; <a href="http://www.querzone.de/blog/archives/30">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Zur Aufzeichnung von Infos über Aktivitäten der wichtigsten Subsysteme eines Servers (CPU, Mem, Disk, Net, &#8230;) eignet sich die Toolsammlung <code>sar</code> bzw. <code>sysstat</code> hervorragend. Sie ist für die meisten UNIX-Derivate frei verfügbar. Eine graf. Darstellung der Messdaten ist dabei nicht vorgesehen (und naja, proprietäre Tools wie Excel können mir gestohlen bleiben).<br />
<a href="http://www.querzone.de/blog/wp-content/uploads/2011/02/idoplot_sar_tape.png"><img class="alignright size-medium wp-image-41" title="idoplot_sar_tape" src="http://www.querzone.de/blog/wp-content/uploads/2011/02/idoplot_sar_tape-300x240.png" alt="" width="300" height="240" /></a><br />
Ein entsprechendes Tool ist aber schnell zusammengehackt, weswegen ich genau dies auch getan habe. :-) <a href="http://www.querzone.de/wiki/Wiki.jsp?page=IDoPlot">Das Ergebnis funktioniert ebenso einfach wie gut, so dass ich ihm eine eigene Wiki-Seite spendiert und den Code attached habe</a>. Vielleicht hilft es ja dem ein oder anderen (bitte keine Code-Nazis! :).</p>
<p>Das Tool macht nichts wirklich &#8220;schön&#8221; &#8211; der Fokus liegt einzig auf der Funktion &#8220;mal eben&#8221; Daten im CSV Format auf einen Zeitstrahl zu plotten. Es ist recht &#8220;generisch&#8221; bzw. nicht auf <code>sar</code> festgelegt &#8211; einfach ein entsprechendes CSV File generieren und gut ist.</p>
<p>Per default wird eine einzige große Grafik generiert. Soll heißen: alle im Input-File enthaltenen Metriken werden untereinander geplottet (siehe Beispiel). Zum Anschauen nehme man daher am besten einen Viewer, in dem das Zoomen Spaß macht (ich nehme <code>feh</code>).</p>
<p>Die Usage entnehme man den Docstrings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/30/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie herum liest man eigentlich SCSI_error codes, oder: Bitschubsereien as usual&#8230;</title>
		<link>http://www.querzone.de/blog/archives/119</link>
		<comments>http://www.querzone.de/blog/archives/119#comments</comments>
		<pubDate>Tue, 13 Jul 2010 18:34:59 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bitschubser]]></category>
		<category><![CDATA[scsi]]></category>
		<category><![CDATA[sommer]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=119</guid>
		<description><![CDATA[Aus gg. Anlass ergab sich heute im Büro tatsächlich die Frage, &#8220;wie herum&#8221; denn eigentlich SCSI-Error-Messagecodes zu interpretieren sind. Gute Frage. Besonders bei der IMHO unerträglichen Schweinehitze. :-) Also (verkürzt) konkret. Hintergrund ist die Fehlermeldung: SCSI error: return code = &#8230; <a href="http://www.querzone.de/blog/archives/119">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Aus gg. Anlass ergab sich heute im Büro tatsächlich die Frage, &#8220;wie herum&#8221; denn eigentlich SCSI-Error-Messagecodes zu interpretieren sind. Gute Frage. Besonders bei der IMHO unerträglichen Schweinehitze. :-)</p>
<p>Also (verkürzt) konkret. Hintergrund ist die Fehlermeldung:<br />
<code><br />
SCSI error: return code = 0x00070000<br />
</code><br />
Und die Vermutung / Behauptung:</p>
<p>A) <a href="http://readlist.com/lists/redhat.com/linux-lvm/0/3854.html">es handelt sich um das &#8220;Host Code&#8221; Byte, welches hier auf 7 gesetzt ist</a></p>
<p>B) es handelt sich hier um das &#8220;SCSI Sense&#8221; Byte, welches hier auf 7 gesetzt ist</p>
<p>Unabhängig von der Frage, was denn welcher der beiden Fälle bedeuten würde, nämlich (&#8220;irgendwie&#8221; konkret oder eher &#8220;diffus&#8221;): </p>
<pre>
SCSI Sense Keys, 7h == DATA PROTECT.
    Indicates that a command that reads or writes the medium
    was attempted on a block that is protected from this
    operation. The read or write operation is not performed.

Host Code, 0x07 == DID_ERROR. internal error
</pre>
<p>und ob man der LVM-Mailingliste (A) nicht einfach vertrauen sollte, bleibt ersteinmal die Frage: ja watt denn nun? A oder B?</p>
<p>Also <a href="http://tldp.org/HOWTO/archived/SCSI-Programming-HOWTO/SCSI-Programming-HOWTO-21.html">TLDP (im Archiv, also outdated)</a> meint:</p>
<pre>
The meaning of hd_status can be found in drivers/scsi/scsi.h:
This unsigned int is composed out of different parts:

lsb  |    ...    |    ...    | msb
=======|===========|===========|============
status | sense key | host code | driver byte
</pre>
<p>Ergo: Die 07 ist das 2te Byte von links. Also doch das &#8220;Sense-Key&#8221; Byte? Für mich als nicht low-level Programmierer ist sowas nicht nur bei der Hitze verwirrend. Deswegen am Besten nochmal langsam, lsb steht für least-significant-bit oder -Byte, also das niederwärtigste Bit/Byte, also jenes ganz rechts aussen, ok, und 07 ist nicht nur das 2te Byte von links sondern auch das dritte von rechts, also doch &#8220;Host Code&#8221;? Ich gebe zu den Leuten von der LVM-Liste erstmal intuitiv schneller zu glauben als anderen Aussagen, aber so richtig zufrieden bin ich damit noch nicht. Da fehlt noch etwas, um das zu untermauern.</p>
<p>Also um halbwegs sicher zu gehen, mache ich mir den Spass, ein wenig durch die Kernel-Sourcen zu greppen. Auch ohne grosse C-Kenntnisse geht das. Und tatsächlich, ein wenig Sucherei, et voila: </p>
<p>1. wo wird DID_ERROR definiert und passt das zur doku?</p>
<pre>
kiste:/usr/src/linux/include # grep -iR "DID_ERROR" ./scsi/scsi.h

#define DID_ERROR       0x07    /* Internal error
</pre>
<p>OK, passt. Wenn auch nicht ganz zur Stelle, die in der (veralteten) TLDP Doku genannt wurde (<code>drivers/scsi/scsi.h</code>). </p>
<p>2. Und wo (und vor allem wie) wird nun z.B. mal so ein Wert zurückgegeben? </p>
<pre>
kiste:/usr/src/linux/drivers/scsi # grep -iR "DID_ERROR" ./* | less
[...]
./libfc/fc_fcp.c:               sc_cmd->result = (DID_ERROR << 16);
./wd7000.c:             hosterr = DID_ERROR;
[...]
</pre>
<p>Ah. Die shiften das um 16bit nach links ("<<16"), also ins dritte Byte von rechts, oder? Mal eben schnell mit Python ausprobieren (davon ausgehend es handelt sich um 32bit, also 8 Stellen in Hex-Notation):</p>
<pre>
kiste2:/mnt/bla/tmp# python -c 'print "%08x" % (07 << 0)'
00000007
kiste2:/mnt/bla/tmp# python -c 'print "%08x" % (07 << 8)'
00000700
kiste2:/mnt/bla/tmp# python -c 'print "%08x" % (07 << 16)'
00070000
</pre>
<p>Schön. Das sollte reichen, um zu glauben es ist als DID_ERROR und nicht als DATA_PROTECT zu interpretieren. In welcher Reihenfolge die Bytes zu lesen sind, ist nun schonmal klarer. Was'n toller Sommer! *g* ;-) </p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/119/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>explaining your django models (nope, no &#8220;titty-twister&#8221;)</title>
		<link>http://www.querzone.de/blog/archives/55</link>
		<comments>http://www.querzone.de/blog/archives/55#comments</comments>
		<pubDate>Tue, 13 Jul 2010 18:06:34 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[pesanto]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=55</guid>
		<description><![CDATA[imho a good model is the heart of a good django app. using the the ORM (object-relational-mapper) is really a benefit then! trust me &#8211; &#8217;cause i never managed to write a good one. :-) too often i fiddled with &#8230; <a href="http://www.querzone.de/blog/archives/55">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>imho a good model is the heart of a good django app. using the the ORM (object-relational-mapper) is really a benefit then! trust me &#8211; &#8217;cause i never managed to write a good one. :-) too often i fiddled with falling back to &#8220;dirty&#8221; raw-sql statements because a) my model was crap or b) i just was to lazy to search for how to use the ORM right.</p>
<div id="attachment_59" class="wp-caption alignright" style="width: 310px"><a href="http://www.querzone.de/blog/wp-content/uploads/2011/02/model_tco.png"><img class="size-medium wp-image-59" title="model_tco" src="http://www.querzone.de/blog/wp-content/uploads/2011/02/model_tco-300x158.png" alt="" width="300" height="158" /></a><p class="wp-caption-text">model tco</p></div>
<p>even though i like python&#8217;s &#8220;inline-documenting&#8221; systems (docstrings, ResT etc.) and django&#8217;s beauty in general, i recently searched for a timesaving way of explaining a model in a way a person with no django-experience can understand. and i found it in the third-party-module <a href="http://github.com/django-extensions/django-extensions">&#8220;django extensions&#8221;</a>. next to a lot of things i ignored it can <strong>automatically draw a graph of your application&#8217;s model</strong>.</p>
<p>cool! installation and usage is done quickly:</p>
<pre>
# install
apt-get install python-pygraphviz # 'cauz GraphViz is used
+ install django_extensions (setup.py install; add to INSTALLED_APPS)
</pre>
<pre>
# use
./manage.py graph_models &lt;your-model&gt; &gt; /tmp/model_&lt;your-model&gt;.dot
./manage.py graph_models &lt;your-model&gt; -o /tmp/model_&lt;your-model&gt;.png
./manage.py graph_models -a -g -o whole_project_visualized.png
</pre>
<div id="attachment_60" class="wp-caption alignright" style="width: 310px"><a href="http://www.querzone.de/blog/wp-content/uploads/2011/02/model_wwnfinder.png"><img class="size-medium wp-image-60" title="model_wwnfinder" src="http://www.querzone.de/blog/wp-content/uploads/2011/02/model_wwnfinder-300x183.png" alt="" width="300" height="183" /></a><p class="wp-caption-text">model wwnfinder</p></div>
<p>that&#8217;s it. the png file shows the relationships within your model. the dot files are its unrendered GraphViz sources &#8211; so you&#8217;re free to edit them to fit &#8220;your bosses needs&#8221;.</p>
<p>i attached 2 examples.</p>
<p>btw. to make things easy, on production servers it&#8217;s a good idea to use as less third-party-modules as possible. imho what&#8217;s not absolutely necessary should be kicked &#8211; otherwise their dependencies can lead to the boring area of fixing code while the original intention was: &#8220;let&#8217;s just update or move onto another machine.&#8221; example: i use the above module only on my development-laptop. if the module gets broken (i dunnot hope so, but i know why i left perl ;-). no prob. my fuzzy code will survive without any new needs i did not want to care about. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/55/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enterprise Storage: Administration Symmetrix DMX3 vs VMAX &#8211; gibt&#8217;s da Unterschiede?</title>
		<link>http://www.querzone.de/blog/archives/115</link>
		<comments>http://www.querzone.de/blog/archives/115#comments</comments>
		<pubDate>Fri, 12 Feb 2010 10:58:01 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=115</guid>
		<description><![CDATA[Die Administration einer]]></description>
			<content:encoded><![CDATA[<p>Die Administration einer <a href="http://de.wikipedia.org/wiki/Symmetrix"EMC Symmetrix</a> VMAX unterscheidet sich von der einer &#8220;klassischen&#8221; <a href="http://www.querzone.de/wiki/Wiki.jsp?page=EMCSymmetrix">Symmetrix DMX3</a>. Durch die Verwendung von &#8220;Autoprovisioning Groups&#8221; ab Enginuity 5874 wird das Mappen &#038; Masken &#8211; Bullshitbingo wording zum trotz ;) &#8211; tatsächlich erheblich vereinfacht. <a href="http://www.querzone.de/wiki/Wiki.jsp?page=EMCSymmetrix#section-EMCSymmetrix-SectionEMCSymmetrixQuickguide">Wo früher viele symconfigure Commands notwendig waren</a>, führen nun einfach zu merkende symaccess Kommandos zum Ziel. symmaskdb list ist komplett weggefallen. Ähnlich wie bei anderen Storage-Arrays ist die LUN-Nummerierung auf dem SCSI-Bus nun host- und nicht mehr Frontendadapter-basiert, sprich: man kann z.B. 2 an den selben Frontendadaptern hängenden UNIX-Servern unterschiedliche Devices mit den LUN-Nummern beginnend ab 0 zuweisen. Schön das! :-)</p>
<p>Da mein Brötchengeber sich entschlossen hat dieses Jahr die Weltwirtschaft anzukurbeln und von DMX3 auf VMAXen zu migrieren, habe ich in nächster Zeit wahrscheinlich viele Gelegenheiten auf ganz dufte dollen proprietären &#038; millionenschweren VMAXen zu arbeiten. Einen kurzen, nicht wirklich ordentlichen, Überblick über die wichtigsten Unterschiede in der Administration via CLI habe ich deshalb unter der Page <a href="http://www.querzone.de/wiki/Wiki.jsp?page=SymmetrixVMAX">SymmetrixVMAX</a> begonnen. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/115/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>redirecting streams to python objects (and some other reasons why i just love python)</title>
		<link>http://www.querzone.de/blog/archives/87</link>
		<comments>http://www.querzone.de/blog/archives/87#comments</comments>
		<pubDate>Sun, 09 Nov 2008 14:47:45 +0000</pubDate>
		<dc:creator>Sven</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.querzone.de/blog/?p=87</guid>
		<description><![CDATA[the ability to redirect streams to python objects is a very powerfull python feature. the following code is a part of a (weird :-) puristic symmetrix-configuration-interface i&#8217;m writing on. i have a function named &#8220;do_showAvailableDevs&#8221; in it which can send &#8230; <a href="http://www.querzone.de/blog/archives/87">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>the ability to <strong>redirect streams to python objects is a very powerfull python feature</strong>. the following code is a part of a (weird :-) puristic symmetrix-configuration-interface i&#8217;m writing on. i have a function named &#8220;do_showAvailableDevs&#8221; in it which can send its output to a pager like <code>less</code> but also without paging / just plain to <code>stdout</code>. the last possibility i use in the following case: where i redirect its output to a <code>StringIO</code> object (buff). the <code>stringIO</code> object&#8217;s content is pasted into a file then, opened via <code>vi</code> for editing it and finally <strong>the edited content is executed via <code>exec</code> inside the current python scope.</strong> hell yes, <strong>i love python for making this so fun and easy!</strong></p>
<pre>
ftmp = os.fdopen(ftmp_fd, 'w')
print >> ftmp, "# filename: ", ftmp_name, "\n\n"

if not len(args) > 0:
    print >> ftmp, "self.dictUserVars = ", self.dictUserVars, "\n"
    print >> ftmp, "print self.dictUserVars"
else:
    for arg in args.split():
        if self.dictUserVars.has_key(arg):
            print >> ftmp, "self.dictUserVars['"+arg+"']=" \
            +str(self.dictUserVars[arg])
    print >> ftmp, "print self.dictUserVars"

# now we redirect the stdout of a called function to a buffer
# so we can paste it into the editor

buff = StringIO.StringIO()
orig_stdout = sys.stdout
sys.stdout = buff # like print >> buff,
self.do_showAvailableDevs("",paging=0) # now all stdout goes into buff
sys.stdout = orig_stdout # restore original stream
# print >> ftmp, buff.getvalue()
for line in buff.getvalue().split('\n'):
    print >> ftmp, "#", line

ftmp.close() # flush...
if os.system("vi " + ftmp_name) == 0:
    print "...executing your code...\n"
    ftmp = open(ftmp_name,'r')

    # executing an open file-object
    # with valid python code in current scope
    exec(ftmp)
    ftmp.close()
else:
    print >> sys.stderr, "SORRY..."
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.querzone.de/blog/archives/87/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

