<?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>codegods &#187; Featured</title>
	<atom:link href="http://codegods.de/category/featured/feed/" rel="self" type="application/rss+xml" />
	<link>http://codegods.de</link>
	<description>where code meets experts</description>
	<lastBuildDate>Wed, 18 Apr 2012 12:42:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Joomla Mod Social Version 1.2</title>
		<link>http://codegods.de/2010/01/19/joomla-mod-social-version-1-1/</link>
		<comments>http://codegods.de/2010/01/19/joomla-mod-social-version-1-1/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 12:22:16 +0000</pubDate>
		<dc:creator>Sebastian Henke</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[mod social]]></category>
		<category><![CDATA[modul]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[search engine optimization]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[style]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://codegods.de/?p=191</guid>
		<description><![CDATA[(see english version below) Update für das Joomla-Modul mod_social. Neuerungen: CSS ins Modul integriert. Muss nun nicht mehr in andere CSS-Files angefügt werden. Veränderung des Designs via Stylesheet in modules/mod_social/styles/social.css Zu den Features: nativ für Joomla 1.5.x unabhängig von Sprachen, da nur Symbole Social-Bookmark-Dienste können ausgewählt werden, verfügbar bisher: Google, Twitter, Windows Live, Facebook, StudiVZ [...]]]></description>
			<content:encoded><![CDATA[<p>(see english version below)</p>
<p><img src="http://codegods.de/wp-content/uploads/2009/10/bookmarks.png" alt="mod_social" title="mod_social" width="407" height="142" />Update für das Joomla-Modul mod_social.</p>
<p><strong>Neuerungen:</strong></p>
<li>CSS ins Modul integriert. Muss nun nicht mehr in andere CSS-Files angefügt werden.</li>
<li>Veränderung des Designs via Stylesheet in modules/mod_social/styles/social.css</li>
<p><strong>Zu den Features:</strong></p>
<li>nativ für Joomla 1.5.x</li>
<li>unabhängig von Sprachen, da nur Symbole</li>
<li>Social-Bookmark-Dienste können ausgewählt werden, verfügbar bisher: Google, Twitter, Windows Live, Facebook, StudiVZ MeinVZ SchülerVZ, MySpace, Deli.cio.us, Digg, Folkd, Linkarena, Mister Wong, Newsvine, Reddit, Stumble Uppon, Yahoo, Bookmarks, Yigg</li>
<li>Frei von Werbung und anderen überflüssigen Texten</li>
<li>Design via CSS</li>
<li>frei von Javascript und co.</li>
<li>Übergabe des Seitentitles</li>
<li>gut integrierbar unter den Seiteninhalt als "footer" oder "syndicate"</li>
</ul>
<p><strong></strong><br />
<strong>Download:</strong> <a href='http://codegods.de/wp-content/uploads/2010/08/mod_social-1.2.zip'>mod_social-1.2.zip</a><br />
HTML-Validität gefixt, Übersetzung gefixt.<br />
<strong>Archiv:</strong> <a href='http://codegods.de/wp-content/uploads/2010/01/mod_social-1.1.zip'>mod_social-1.1.zip</a></p>
<p><strong>Vorschau:</strong> siehe Bild oben</p>
<p><strong>Lizenz:</strong> GPL - zur freien Verwendung</p>
<p>Das Modul entstand im Auftrag von <a href="http://www.henke-schulungen.de">henke schulungen</a>. Die Wahl der Dienste sowie das Design wurden an die von Spiegel Online angelehnt.</p>
<p>Konstruktive Kritik sowie Verbesserungsvorschläge in den Kommentaren werden gerne gesehen.</p>
<p><strong>ENGLISH VERSION:</strong></p>
<p><strong>Improvements:</strong></p>
<li>Directly integrated stylesheet into the module. No need to modify other css files anymore.</li>
<li>Change design of module via stylesheet in modules/mod_social/styles/social.css</li>
<p><strong>Features:</strong></p>
<li>Native Joomla 1.5.x</li>
<li>Language independent (only icons, no text)</li>
<li>Social bookmark services can be enabled and disabled. Choose among: Google, Twitter, Windows Live, Facebook, StudiVZ MeinVZ SchülerVZ, MySpace, Deli.cio.us, Digg, Folkd, Linkarena, Mister Wong, Newsvine, Reddit, Stumble Uppon, Yahoo, Bookmarks, Yigg</li>
<li>Free of superfluous text</li>
<li>Design via CSS</li>
<li>Free of javascript</li>
<li>Parsing of page title to the service</li>
<li>Easy to integrate into containers "footer" or "syndicate"</li>
</ul>
<p><strong></strong><br />
<strong>Download:</strong> <a href='http://codegods.de/wp-content/uploads/2010/08/mod_social-1.2.zip'>mod_social-1.2.zip</a><br />
Fixed HTML-validity, translated some words<br />
<strong>Archive:</strong> <a href='http://codegods.de/wp-content/uploads/2010/01/mod_social-1.1.zip'>mod_social-1.1.zip</a></p>
<p><strong>Preview:</strong> see picture above</p>
<p><strong>Licence:</strong> GPL - free</p>
<p>I wrote the module for <a href="http://www.henke-schulungen.de">henke schulungen</a>. The services and design were chosen following more or less Spiegel Online.</p>
<p>Feel free to drop me a line in case you have any ideas of improvements or hints!</p>
]]></content:encoded>
			<wfw:commentRss>http://codegods.de/2010/01/19/joomla-mod-social-version-1-1/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Joomla-Modul: Social Booksmarks</title>
		<link>http://codegods.de/2009/10/05/joomla-modul-social-booksmarks/</link>
		<comments>http://codegods.de/2009/10/05/joomla-modul-social-booksmarks/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 12:37:50 +0000</pubDate>
		<dc:creator>Sebastian Henke</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[1.5]]></category>
		<category><![CDATA[bookmark]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[mister wong]]></category>
		<category><![CDATA[modul]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://codegods.de/?p=136</guid>
		<description><![CDATA[Für bessere Ergebnisse benutzen Sie bitte die neue Version! Nachdem ich für die Homepage eines Kunden ein fertiges Modul für die sogenannten "Social Bookmarks" gesucht habe - und leider keines der vorhandenen Module meine Erwartungen befriedigen konnte, habe ich kurzerhand selbst eines programmiert. Dieses biete ich natürlich nun auch hier zum Download an. Das Modul [...]]]></description>
			<content:encoded><![CDATA[<p>Für bessere Ergebnisse benutzen Sie bitte die <a href="http://codegods.de/2010/01/19/joomla-mod-social-version-1-1/">neue Version</a>!</p>
<p><img src="http://codegods.de/wp-content/uploads/2009/10/bookmarks.png" alt="mod_social" title="mod_social" width="407" height="142" />Nachdem ich für die Homepage eines Kunden ein fertiges Modul für die sogenannten "Social Bookmarks" gesucht habe - und leider keines der vorhandenen Module meine Erwartungen befriedigen konnte, habe ich kurzerhand selbst eines programmiert.<br />
Dieses biete ich natürlich nun auch hier zum Download an. Das Modul kann wie gewohnt im Backend von Joomla installiert werden.</p>
<p><strong>Zu den Features:</strong></p>
<li>nativ für Joomla 1.5.x</li>
<li>unabhängig von Sprachen, da nur Symbole</li>
<li>Social-Bookmark-Dienste können ausgewählt werden, verfügbar bisher: Google, Twitter, Windows Live, Facebook, StudiVZ MeinVZ SchülerVZ, MySpace, Deli.cio.us, Digg, Folkd, Linkarena, Mister Wong, Newsvine, Reddit, Stumble Uppon, Yahoo, Bookmarks, Yigg</li>
<li>Frei von Werbung und anderen überflüssigen Texten</li>
<li>Design via CSS</li>
<li>frei von Javascript und co.</li>
<li>Übergabe des Seitentitles</li>
<li>gut integrierbar unter den Seiteninhalt als "footer"</li>
</ul>
<p><strong></strong><br />
<strong>Download:</strong> <a href='http://codegods.de/wp-content/uploads/2009/10/mod_social-1.0.zip'><del datetime="2010-01-24T10:44:24+00:00">mod_social-1.0</del></a><br />
<strong>Neue Version:</strong> <a href="http://codegods.de/2010/01/19/joomla-mod-social-version-1-1/">Version 1.1</a></p>
<p><strong>Vorschau:</strong> siehe Bild oben</p>
<p><strong>Lizenz:</strong> GPL - zur freien Verwendung</p>
<p><strong>CSS</strong></p>
<p>Für optimale Darstellung sollte der folgende CSS-Code an den des eigenen Templates angefügt werden:</p>
<pre class="css">&nbsp;
<span style="color: #cc00cc;">#social</span> ul<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">margin</span>: <span style="color: #933;">0</span>;
	<span style="color: #000000; font-weight: bold;">padding</span>: <span style="color: #933;">0</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#social</span> li<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">float</span>: <span style="color: #000000; font-weight: bold;">left</span>;
	<span style="color: #000000; font-weight: bold;">list-style</span>: <span style="color: #993333;">none</span>;
	<span style="color: #000000; font-weight: bold;">margin</span>: <span style="color: #933;">0</span> <span style="color: #933;">2px</span> <span style="color: #933;">0</span> <span style="color: #933;">0</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#social</span> li img<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">padding</span>: <span style="color: #933;">1px</span>;
	<span style="color: #000000; font-weight: bold;">border</span>: <span style="color: #993333;">solid</span> <span style="color: #933;">1px</span> <span style="color: #cc00cc;">#ccc</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>Dieser Code kann natürlich angepasst werden.</p>
<p>Das Modul entstand im Auftrag von <a href="http://www.henke-schulungen.de">henke schulungen</a>. Die Wahl der Dienste sowie das Design wurden an die von Spiegel Online angelehnt.</p>
<p>Konstruktive Kritik sowie Verbesserungsvorschläge in den Kommentaren werden gerne gesehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://codegods.de/2009/10/05/joomla-modul-social-booksmarks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VmWare ESXi Remote-Installation</title>
		<link>http://codegods.de/2008/12/02/vmware-esxi-remote-installation/</link>
		<comments>http://codegods.de/2008/12/02/vmware-esxi-remote-installation/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 01:04:30 +0000</pubDate>
		<dc:creator>Sebastian Henke</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Virtualisierung]]></category>
		<category><![CDATA[dd]]></category>
		<category><![CDATA[esx]]></category>
		<category><![CDATA[esxi]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[rootserver]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://codegods.de/?p=100</guid>
		<description><![CDATA[Nur wenige Anbieter von sogenannten Rootservern, welche wegen Verwechslungsgefahr mit den "richtigen" Rootserver für das DNS eigentlich eher anders bezeichnet werden sollten, bieten ausführliche Details über verbaute Hardware. Eine der wenigen Ausnahmen ist Serverloft. Dies lud uns zu einem waghalsigen Experiment ein: ist es möglich, einen ESXi Server, der momentan von VmWare kostenlos zum Download [...]]]></description>
			<content:encoded><![CDATA[<p>Nur wenige Anbieter von sogenannten Rootservern, welche wegen Verwechslungsgefahr mit den "richtigen" Rootserver für das DNS eigentlich eher anders bezeichnet werden sollten, bieten ausführliche Details über verbaute Hardware. Eine der wenigen Ausnahmen ist Serverloft. Dies lud uns zu einem waghalsigen Experiment ein: ist es möglich, einen ESXi Server, der momentan von VmWare kostenlos zum Download angeboten wird, über das Netz und ohne Eingreifen des Supports zu installieren?<br />
<span id="more-100"></span><br />
Beim ESXi Server handelt es sich um eine Virtualisierungslösung aus dem Hause VmWare. VmWare ist seit einigen Jahren Marktführer bezüglich Virtualisierung und ermöglicht Virtualisierung für den professionellen Einsatz.<br />
Der ESXi setzt hierbei nicht wie andere Virtualisierungslösungen auf ein vorhandenes Betriebsystem auf, sondern bringt seinen eigenen Kernel mit. Dieser Kernel ist auf das Nötigste reduziert und bringt neben einem eigenen Dateisystem (vmfs) auch einiges an Tools mit, um virtuelle Maschinen später zu vernetzen. Dieser "Bare-Metal-Hypervisors", wie ihn VmWare nennt, hat jedoch nicht nur Vorteile:<br />
Zum einen hält sich die Unterstützung für verschiedene Hardware in Grenzen, zum anderen gestaltet sich die Installation des ESXi ohne direkten Zugang mit Monitor und Tastatur zum Server äußerst schwierig.<br />
Hier ist es sehr hilfreich, wenn Provider wie Serverloft Daten über die verwendete Hardware preisgeben.<br />
In unserem Beispiel wird der ESXi Hypervisor auf dem "PerfectServer L", einem Fujitsu Siemens PRIMERGY Econel 230R S1 mit folgender Hardware installiert (siehe <a href="http://sp.fujitsu-siemens.com/dmsp/docs/ds_prim-econel230r_s1_ge.pdf">FSC Hardwarebeschreibung</a> bzw. <a href="http://www.serverloft.de">Serverloft Hardwarebeschreibung</a>):</p>
<p>Raid-Controller: LSI 1068<br />
Netzwerkkarten: Broadcom BMC 5715<br />
CPU: AMD Opteron 2344 HE, Quad-Core der Barcelona-Serie<br />
RAM: 4 GB DDR2-RAM ECC</p>
<p>Nach einiger Recherche kamen wir zu dem Ergebnis: diese wichtigen Kernkomponenten werden vom ESX allesamt unterstützt.</p>
<p><strong>Die Installation des ESXi</strong></p>
<p>Die Installation gestaltet sich jetzt etwas komplizierter. An einigen Stellen sollte sehr aufgepasst werden, da Befehle verwendet werden, die potenziell Daten zerstören können, daher bitte immer darauf achten, dass der Befehl beim ersten mal passt (und in der richtigen Konsole ausgeführt wird).</p>
<p>Die Installation geschieht in 3 Schritten:</p>
<li>1. Vorbereitungen</li>
<li>2. Vorbereitung einer VM für den ESX</li>
<li>3. Installation des ESXi in einer lokalen VM</li>
<li>4. Kopieren des Systems</li>
<p><br><br />
1. Vorbereitungen<br />
Der ESXi verfügt über einige Sicherheitsvorkehrungen, die verhindern sollen, dass der ESXi ungewollt falsch verwendet wird. Dazu gehört zum Beispiel auch eine Überprüfung der MAC-Adressen beim Starten. Wenn sich diese ändert, wird die Netzwerkkarte deaktiviert.<br />
Aus diesem Grund wird als erstes die MAC-Adresse des Zielsystems benötigt. Diese kann durch den Befehl "ifconfig" im laufenden Linux des Rootservers herausgefunden werden.<br />
Der Server kann zudem schonmal im Rescuemodus hochgefahren werden.<br />
Außerdem sollte die VmWare Workstation installiert sein. Hier reicht die kostenlos bei VmWare erhältliche 30-Tage-Testversion. Es bietet sich jedoch an, eine Lizenz der Workstation zu kaufen, da sich diese prima eignet, um die VMs aufzusetzen, die später im ESXi laufen sollen. Zudem muss darauf geachtet werden, dass es sich um eine neuere Version handelt (bei uns Version 6.5 Build 126130), da der ESXi auf älteren Versionen nicht läuft.<br />
Außerdem muss <strong>bei 64-Bit-Systemen im BIOS die Hardwarevirtualisierung eingeschaltet</strong> sein.</p>
<p>Der Server, der schon im Rescue-Modus läuft, muss nun temporär etwas angepasst werden. Dazu startet man</p>
<pre>cfdisk /dev/sda</pre>
<p>und löscht alle vorhandenen Partitionen. Dann werden zwei neue erstellt. Die erste sicherheitshalber 20 GB, die zweite mit dem Rest der Festplatte (eigentlich RAID).<br />
Die <strong>zweite</strong> wird nun mit</p>
<pre>mfks.ext2 /dev/sda2</pre>
<p>formatiert. Die erste Partition dient nur als Platzhalter und wird nicht weiter verwendet.<br />
Dann wird die formatierte Partition mit</p>
<pre>mount /dev/sda2 /mnt</pre>
<p>gemountet.</p>
<p>2. Vorbereitung einer VM für den ESXi<br />
Um einen ESXi als VM ans laufen zu bringen sind einige Modifikationen an den Konfigurationsdateien einer virtuellen Maschine nötig. Am einfachsten geht es wohl, die folgenden Zeilen in eine .vmx-Datei zu kopieren und dann in Workstation entsprechend anzupassen:</p>
<pre>
.encoding = "windows-1252"
config.version = "8"
virtualHW.version = "7"
scsi0.present = "TRUE"
scsi0.virtualDev = "lsilogic"
memsize = "1024"
scsi0:0.present = "TRUE"
scsi0:0.fileName = "anthill.vmdk"
ide1:0.present = "TRUE"
ide1:0.autodetect = "TRUE"
ide1:0.deviceType = "cdrom-image"
floppy0.present = "FALSE"
ethernet0.present = "TRUE"
ethernet0.connectionType = "bridged"
ethernet0.wakeOnPcktRcv = "FALSE"
svga.autodetect = "TRUE"
mks.enable3d = "FALSE"
pciBridge0.present = "TRUE"
pciBridge4.present = "TRUE"
pciBridge4.virtualDev = "pcieRootPort"
pciBridge4.functions = "8"
pciBridge5.present = "TRUE"
pciBridge5.virtualDev = "pcieRootPort"
pciBridge5.functions = "8"
pciBridge6.present = "TRUE"
pciBridge6.virtualDev = "pcieRootPort"
pciBridge6.functions = "8"
pciBridge7.present = "TRUE"
pciBridge7.virtualDev = "pcieRootPort"
pciBridge7.functions = "8"
vmci0.present = "TRUE"
roamingVM.exitBehavior = "go"
displayName = "Anthill"
guestOS = "other"
nvram = "anthill.nvram"
deploymentPlatform = "windows"
virtualHW.productCompatibility = "hosted"
easyInstall.removeFloppy = "FALSE"
unity.customColor = "|23000000"
tools.upgrade.policy = "useGlobal"

extendedConfigFile = "anthill.vmxf"

ide1:0.fileName = "D:\Software\Images\kubuntu-8.04-desktop-amd64.iso"

ethernet0.addressType = "generated"
uuid.location = "56 4d 50 b3 6d cc d9 ea-43 27 69 e1 61 3d 96 c4"
uuid.bios = "56 4d 50 b3 6d cc d9 ea-43 27 69 e1 61 3d 96 c4"
scsi0:0.redo = ""
vmotion.checkpointFBSize = "16777216"
pciBridge0.pciSlotNumber = "17"
pciBridge4.pciSlotNumber = "21"
pciBridge5.pciSlotNumber = "22"
pciBridge6.pciSlotNumber = "23"
pciBridge7.pciSlotNumber = "24"
scsi0.pciSlotNumber = "16"
ethernet0.pciSlotNumber = "32"
vmci0.pciSlotNumber = "33"
ethernet0.generatedAddress = "00:0c:29:3d:96:c4"
ethernet0.generatedAddressOffset = "0"
vmci0.id = "-646518333"
ethernet0.virtualDev = "e1000"
monitor.virtual_exec = "hardware"
monitor_control.restrict_backdoor = "true"

tools.syncTime = "FALSE"

scsi0:1.present = "TRUE"
scsi0:1.fileName = "anthill-0.vmdk"

scsi0:1.redo = ""

vmi.present = "FALSE"

vmi.pciSlotNumber = "-1"

debugStub.linuxOffsets = "0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0"

ethernet1.present = "TRUE"
ethernet1.connectionType = "hostonly"
ethernet1.wakeOnPcktRcv = "FALSE"

ethernet1.addressType = "generated"
ethernet1.pciSlotNumber = "34"
ethernet1.generatedAddress = "XXXXXXXXXXXXXXXXXXXXXXXXX"
ethernet1.generatedAddressOffset = "10"
</pre>
<p>In der zweitletzten Zeile müssen die vielen X durch die MAC (aus Punkt 1) ersetzt werden.<br />
Dann kann Workstation gestartet und diese Datei geladen werden. Als nächstes klickt man auf "Edit Virtual Machine Settings" -> "Hardware". Sobald man auf die Platten klickt, wird Workstation feststellen, dass die zugehörigen Dateien fehlen. Also die alten löschen und neu anlegen:</p>
<p>Die erste als virtuelle Platte, SCSI (LSI Logic), 8 GB vorallokiert.<br />
Die zweite dient lediglich zum Extrahieren des Systems aus der ersten. 1 GB reicht völlig aus.</p>
<p>3. Installation des ESXi in der lokalen VM</p>
<p>Die soeben erstelle VM kann nun gestartet werden. Als CD wird das Image der ESXi-Installationscd "eingelegt". Beim ESXi kann getrost immer auf weiter geklickt werden. Es sollte natürlich die 8GB Platte ausgewählt werden (falls die andere überhaupt angezeigt wird).</p>
<p>Nachdem die Installation abgeschlossen ist: <font color=red>NICHT REBOOTEN!</font></p>
<p>Der ESXi darf nicht von der VM-Platte gestartet werden. Stattdessen wird nun eine beliebige Linux-Live-CD eingelegt und diese gestartet. </p>
<p>4. Kopieren des Systems</p>
<p>In einer Root-Console des Livesystems in der VM muss jetzt das Image erstellt werden, welches nachher auf den Server geladen wird.</p>
<pre>fdisk -l</pre>
<p>wird nun die zwei VM-Festplatten anzeigen. /dev/sda enthält zahlreiche ESXi-Partitionen, während /dev/sdb unpartitioniert bleibt.<br />
Auf /dev/sdb wird nun eine Partition mit der vollen Größe angelegt. Diese wird anschließend formatiert und z.B. nach /mnt gemountet.<br />
In /mnt wird nun folgender Befehl ausgeführt:</p>
<pre>dd if=/dev/sda | gzip > esximage.gz</pre>
<p>Dieser Befehl liest die Festplatte /dev/sda komplett aus (sind ja nur 8GB) und komprimiert diese in gerademal 200MB und speichert sie in der neu erstellten Partition.<br />
Die Datei esximage.gz enthält jetzt alles was nötig ist, um den ESXi zu installieren. Sie muss jetzt auf den Server nach /mnt kopiert werden. Dies geht direkt mit SSH aus der VM heraus.</p>
<p>Damit ist die Arbeit der lokalen VM erledigt. Workstation kann beendet werden.<br />
Nun wird eine Konsole auf dem Server geöffnet. Im Verzeichnis /mnt wird der folgende Befehl ausgeführt:</p>
<pre>gunzip -c esximage.gz | dd of=/dev/sda</pre>
<p>Dieser sorgt dafür, dass das Image entpackt und auf der Platte gespeichert wird. Dabei wird selbst die aktuell verwendete Partitionstabelle überschrieben. Um sicher zu gehen, dass alle Daten geschrieben werden, wird der Befehl sync ohne Parameter aufgerufen.<br />
Nachdem das Rescuesystem ausgeschaltet wird, kann der Server von my.serverloft.de aus hardresettet werden. Dadurch wird sichergestellt, dass keine Daten mehr am Anfang des RAID-Verbundes geschrieben werden.</p>
<p>Nun sollte der ESXi-Server vom RAID aus Booten. Der Infrastructure Client sollte sich mit dem Server verbinden können. nmap zeigt etwa folgendes Bild:</p>
<pre>
Starting Nmap 4.62 ( http://nmap.org ) at 2008-12-02 00:11 CET
Interesting ports on loft3333.serverloft.de (12.23.23.34):
Not shown: 1710 closed ports
PORT     STATE    SERVICE
80/tcp   open     http
427/tcp  open     svrloc
443/tcp  open     https
902/tcp  open     iss-realsecure
6667/tcp filtered irc

Nmap done: 1 IP address (1 host up) scanned in 1.510 seconds
</pre>
<p><font color=red><strong>Achtung: der ESXi läuft jetzt ohne Passwort! Dieses sollte sofort mit Hilfe des VmWare Infrastructure Clients gesetzt werden!</strong></font></p>
<p>Der Standardlogin mit dem Infrastructure Client funktioniert als Benutzer "root" ohne Passwort.</p>
<p>Der installierte ESXi besitzt bis jetzt noch keine Partition, auf der die VMs abgelegt werden können. Diese kann jedoch leicht angelegt werden. Die weitere Vorgehensweise findet sich in den sehr detailreichen Handbüchern des ESXi.<br />
Außerdem sollte natürlich nicht vergessen werden, den Lizenzkey einzutragen!</p>
<div id="attachment_104" class="wp-caption alignnone" style="width: 310px"><a href="http://codegods.de/wp-content/uploads/2008/12/vmic.jpg"><img src="http://codegods.de/wp-content/uploads/2008/12/vmic-300x184.jpg" alt="VmWare Infrastructure Client auf frisch installiertem ESXi" title="VMIC" width="300" height="184" class="size-medium wp-image-104" /></a><p class="wp-caption-text">VmWare Infrastructure Client auf frisch installiertem ESXi</p></div>
<p>In diesem Sinne auch an einen Dank an Serverloft.<br />
Die Bestellung bei Serverloft ging erstaunlich schnell von Statten. Von der Order bis zur Betriebsbereitschaft vergingen nur 55 Minuten, obwohl Serverloft zuerst mit meiner spanischen Handynummer nicht einverstanden war. Eine Mail an den Support klärte den Sachverhalt und der Server wurde ohne Rückruf freigeschaltet.</p>
]]></content:encoded>
			<wfw:commentRss>http://codegods.de/2008/12/02/vmware-esxi-remote-installation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Synchrone und asynchrone HTTP-Requests in JavaScript</title>
		<link>http://codegods.de/2008/08/28/synchron-asynchron-http-requests-javascript/</link>
		<comments>http://codegods.de/2008/08/28/synchron-asynchron-http-requests-javascript/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 14:19:22 +0000</pubDate>
		<dc:creator>Sebastian Henke</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asynchron]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[request]]></category>
		<category><![CDATA[synchron]]></category>
		<category><![CDATA[warten]]></category>

		<guid isPermaLink="false">http://codegods.de/?p=46</guid>
		<description><![CDATA[In JavaScript gibt es zwei Möglichkeiten HTTP-Requests zu verarbeiten. Sie können entweder synchron oder asynchron durchgeführt werden. Synchron bedeutet hier, dass die weitere Programmausführung so lange unterbrochen wird, bis der Request durchgeführt wurde und eine Anwort vorliegt. Diese Programmierung ist zwar einfacher verständlich, birgt jedoch einige Schwierigkeiten. JavaScript ist nicht multithreadingfähig. Somit können keine anderen [...]]]></description>
			<content:encoded><![CDATA[<p>In JavaScript gibt es zwei Möglichkeiten HTTP-Requests zu verarbeiten. Sie können entweder synchron oder asynchron durchgeführt werden. Synchron bedeutet hier, dass die weitere Programmausführung so lange unterbrochen wird, bis der Request durchgeführt wurde und eine Anwort vorliegt. Diese Programmierung ist zwar einfacher verständlich, birgt jedoch einige Schwierigkeiten. JavaScript ist nicht multithreadingfähig. Somit können keine anderen Operationen durchgeführt werden, solange auf einen synchronen HTTP-Request gewartet wird. Insbesondere, wenn z. B. auf einer Homepage mehrere Inhalte per HTTP-Requests nachgeladen werden sollen, kann somit das "Ausfallen" eines einzigen Requests zum Nichtladen weiterer Inhalte führen. Zudem wird wertvolle Rechenzeit (z. B. für die Vorbereitung weiterer Requests) verschwendet!</p>
<p>Um diesem Problem zu entgehen, werden besonders zu diesem Zweck in der Regel asynchrone Requests verwendet. Dies bedeutet, dass JavaScript direkt nach dem Absenden des Requests (siehe unten) nicht auf eine Antwort wartet, sondern mit der Ausführung in der nächsten Zeile fortfährt. Um das Ergebnis der Anfrage dennoch verarbeiten zu können, wird dem Request-Objekt zusätzlich eine Funktion mitgegeben, die bei einer Statusänderung des Requests ausgeführt wird. Diese asynchrone Form wird AJAX (Asynchronous JavaScript and XML) genannt und wird vermutlich dem einen oder anderen schon als "Buzzword" bekannt sein.</p>
<p>Die folgenden zwei Beispiele - einmal synchron, einmal asynchron - führen jeweils einen Request aus und geben nach erfolgreicher Abfrage mittels <em>alert</em> eine Meldung aus.</p>
<p>Synchron:</p>
<pre class="javascript">&nbsp;
<span style="color: #009900; font-style: italic;">// In den ersten Zeilen wird ein HTTP-Requestobjekt erzeugt. Dieses geschieht mittels Browserweiche.</span>
<span style="color: #009900; font-style: italic;">// Der interessante Teil geschieht ab dem nächsten Kommentar.</span>
<span style="color: #003366; font-weight: bold;">var</span> xmlHttpObject = <span style="color: #003366; font-weight: bold;">false</span>;
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> XMLHttpRequest != <span style="color: #3366CC;">'undefined'</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	xmlHttpObject = <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>!xmlHttpObject<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">try</span>
	<span style="color: #66cc66;">&#123;</span>
		xmlHttpObject = <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;Msxml2.XMLHTTP&quot;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">catch</span><span style="color: #66cc66;">&#40;</span>e<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">try</span>
		<span style="color: #66cc66;">&#123;</span>
			xmlHttpObject = <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;Microsoft.XMLHTTP&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">catch</span><span style="color: #66cc66;">&#40;</span>e<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			xmlHttpObject = <span style="color: #003366; font-weight: bold;">null</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #009900; font-style: italic;">// Vorbereiten des Requests:</span>
xmlHttpObject.<span style="color: #000066;">open</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'get'</span>, getUrl, <span style="color: #003366; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;  <span style="color: #009900; font-style: italic;">// HIER WICHTIG: das &quot;false &quot; sorgt für den synchronen Request!</span>
xmlHttpObject.<span style="color: #006600;">send</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>;                      <span style="color: #009900; font-style: italic;">// Request absenden. Hier wird gewartet, bis der Request erfolgreich war.</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>xmlHttpObject.<span style="color: #006600;">readyState</span> == <span style="color: #CC0000;">4</span><span style="color: #66cc66;">&#41;</span>         <span style="color: #009900; font-style: italic;">//  Status 4 bedeutet, dass die Abfrage erfolgreich war und das Ergebnis vorliegt</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;HTTP-Request erfolgreich!&quot;</span><span style="color: #66cc66;">&#41;</span>;  <span style="color: #009900; font-style: italic;">// Das Ergebnis des Requests findet sich in xmlHttpObject.responseText</span>
<span style="color: #66cc66;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;Request fehlgeschlagen!&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>Asynchron:</p>
<pre class="javascript">&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> xmlHttpObject = <span style="color: #003366; font-weight: bold;">false</span>;
<span style="color: #009900; font-style: italic;">// In den ersten Zeilen wird ein HTTP-Requestobjekt erzeugt. Dieses geschieht mittels Browserweiche.</span>
<span style="color: #009900; font-style: italic;">// Der Interessante Teil geschieht ab dem nächsten Kommentar.</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> XMLHttpRequest != <span style="color: #3366CC;">'undefined'</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	xmlHttpObject = <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>!xmlHttpObject<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">try</span>
	<span style="color: #66cc66;">&#123;</span>
		xmlHttpObject = <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;Msxml2.XMLHTTP&quot;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">catch</span><span style="color: #66cc66;">&#40;</span>e<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">try</span>
		<span style="color: #66cc66;">&#123;</span>
			xmlHttpObject = <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;Microsoft.XMLHTTP&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">catch</span><span style="color: #66cc66;">&#40;</span>e<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			xmlHttpObject = <span style="color: #003366; font-weight: bold;">null</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
xmlHttpObject.<span style="color: #000066;">open</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'get'</span>, getUrl<span style="color: #66cc66;">&#41;</span>; <span style="color: #009900; font-style: italic;">// Hier kein false wie oben -&gt; Request läuft asynchron</span>
xmlHttpObject.<span style="color: #006600;">onreadystatechange</span> = setstate;            <span style="color: #009900; font-style: italic;">// HIER WICHTIG: Funktion wird gesetzt, die bei Statusänderung ausgeführt wird.</span>
xmlHttpObject.<span style="color: #006600;">send</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> setstate<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>	<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>xmlHttpObject.<span style="color: #006600;">readyState</span> == <span style="color: #CC0000;">4</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;Request wurde erfolgreich verarbeitet.&quot;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>	
&nbsp;
<span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;Request wurde soeben abgesendet!&quot;</span><span style="color: #66cc66;">&#41;</span>;   <span style="color: #009900; font-style: italic;">// Kaum zu glauben, aber dieses Alert wird vor dem oben in der Funktion aufgerufen!</span>
&nbsp;</pre>
]]></content:encoded>
			<wfw:commentRss>http://codegods.de/2008/08/28/synchron-asynchron-http-requests-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ruby und Regular Expressions (Regex)</title>
		<link>http://codegods.de/2008/04/16/ruby-regular-expressions-regex/</link>
		<comments>http://codegods.de/2008/04/16/ruby-regular-expressions-regex/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 15:30:34 +0000</pubDate>
		<dc:creator>Sebastian Henke</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[regulaere ausdrücke]]></category>
		<category><![CDATA[regulaerer ausdruck]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[split]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[suchen]]></category>
		<category><![CDATA[trennen]]></category>

		<guid isPermaLink="false">http://codegods.de/?p=39</guid>
		<description><![CDATA[Wie zahlreiche andere Scriptsprachen beherrscht auch Ruby reguläre Audrücke. Diese dienen dazu in Strings verschiedene Muster wiederzuerkennen. So kann zum Beispiel eine Emailadresse auf ein korrektes Format überprüft werden (siehe Beispiel unten). Jede Regular Expression (kurz "regex") beginnt und endet in Ruby mit einem / (Slash). Diese stehen zur gleichen Zeit auch als Begrenzer. So [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://codegods.de/wp-content/uploads/2008/04/ruby.png'><img src="http://codegods.de/wp-content/uploads/2008/04/ruby.png" alt="" title="ruby" width="150" height="150" class="alignnone size-medium wp-image-40" /></a><br />
Wie zahlreiche andere Scriptsprachen beherrscht auch Ruby reguläre Audrücke. Diese dienen dazu in Strings verschiedene Muster wiederzuerkennen. So kann zum Beispiel eine Emailadresse auf ein korrektes Format überprüft werden (siehe Beispiel unten).</p>
<p>Jede Regular Expression (kurz "regex") beginnt und endet in Ruby mit einem / (Slash). Diese stehen zur gleichen Zeit auch als Begrenzer.</p>
<p>So wie Ruby mit<span id="more-39"></span></p>
<pre class="ruby"> text = <span style="color:#996600;">&quot;Codegods erklären regex.&quot;</span></pre>
<p>erkennt, dass es sich bei <em>text</em> um einen String handelt, erkennt Ruby auch, dass es sich bei</p>
<pre class="ruby"> regex = /\d/</pre>
<p>die Variable <em>regex</em> vom Typ <em>Regexp</em> ist. Nebenbei kann mit <em>regex</em> erkannt werden, ob ein String eine Ziffer (\d) enthält, oder kann zum Beispiel einen String anhand dieses Musters aufsplitten. Mehr dazu unten.</p>
<table>
<tr>
<th>Ausdruck</th>
<th>Bedeutung</th>
</tr>
<tr>
<td><strong><em>.</em></strong> (Punkt)</td>
<td>Genau ein beliebiges Zeichen</td>
</tr>
<tr>
<td><strong><em>\s</em></strong></td>
<td>Genau ein beliebiges Whitespace-Zeichen. (Zeilenumbruch, Blank, Tabulator, ...)</td>
</tr>
<tr>
<td><strong><em>\S</em></strong></td>
<td>Genau ein beliebiges Zeichen, jedoch kein Whitespace-Zeichen.</td>
</tr>
<tr>
<td><strong><em>\d</em></strong></td>
<td>Genau eine Ziffer</td>
</tr>
<tr>
<td><strong><em>\D</em></strong></td>
<td>Genau ein Zeichen, jedoch keine Ziffer</td>
</tr>
<tr>
<td><strong><em>\w</em></strong></td>
<td>Genau ein Word-Character (Buchstabe, Zahl, Unterstrich)</td>
</tr>
<tr>
<td><strong><em>\W</em></strong></td>
<td>Genau ein Zeichen, jedoch kein Word-Character</td>
</tr>
<tr>
<td><strong><em>\b</em></strong></td>
<td>Genau ein Wortbegrenzungszeichen</td>
</tr>
<tr>
<td><strong><em>[abc]</em></strong></td>
<td>Genau ein a, b oder c</td>
</tr>
<tr>
<td><strong><em>[^abc]</em></strong></td>
<td>Genau ein Zeichen, jedoch nicht a, b oder c</td>
</tr>
<tr>
<td><strong><em>[a-z]</em></strong></td>
<td>Genau ein Zeichen von a bis z</td>
</tr>
<tr>
<td><strong><em>[a-zA-Z]</em></strong></td>
<td>Genau ein Zeichen von a bis z ODER A - Z</td>
</tr>
<tr>
<td><strong><em>^</em></strong></td>
<td>Zeilenanfang</td>
</tr>
<tr>
<td><strong><em>$</em></strong></td>
<td>Zeilenende</td>
</tr>
<tr>
<td><strong><em>\A</em></strong></td>
<td>Anfang des Strings</td>
</tr>
<tr>
<td><strong><em>\z</em></strong></td>
<td>Ende des Strings</td>
</tr>
<tr>
<td><strong><em>(...)</em></strong></td>
<td>Erkennt alles zwischen den Klammern</td>
</tr>
<tr>
<td><strong><em>(a|b)</em></strong></td>
<td>Erkennt a oder b, wobei a und b auch wieder Ausdrücke sind</td>
</tr>
<tr>
<td><strong><em>a?</em></strong></td>
<td>Erkennt den Ausdruck <em>a</em> 0 oder 1 mal</td>
</tr>
<tr>
<td><strong><em>a*</em></strong></td>
<td>Erkennt den Ausdruck <em>a</em> beliebig oft hintereinander</td>
</tr>
<tr>
<td><strong><em>a*</em></strong></td>
<td>Erkennt den Ausdruck <em>a</em> beliebig oft, jedoch mindestens einmal</td>
</tr>
<tr>
<td><strong><em>a{4}</em></strong></td>
<td>Erkennt den Ausdruck <em>a</em> genau 4 mal</td>
</tr>
<tr>
<td><strong><em>a{4,}</em></strong></td>
<td>Erkennt den Ausdruck <em>a</em> mindestens 4 mal</td>
</tr>
<tr>
<td><strong><em>a{4,8}</em></strong></td>
<td>Erkennt den Ausdruck <em>a</em> 4 bis 8 mal</td>
</tr>
<tr>
<th>Befehl nach / am ende des Ausdrucks</th>
<th>Bedeutung</th>
</tr>
<tr>
<td><strong><em>/i</em></strong></td>
<td>Veranlasst Ruby "case insensitive" zu suchen, dh. Groß-/Kleinschreibung zu ignorieren</td>
</tr>
<tr>
<td><strong><em>/m</em></strong></td>
<td>Ruby erkennt Zeilenumbrüche als beliebiges Zeichen</td>
</tr>
<tr>
<td><strong><em>/x</em></strong></td>
<td>Ruby ignoriert Whitespaces zwischen Teilen</td>
</tr>
<tr>
<td><strong><em>/o</em></strong></td>
<td>Es wird nur das erste Vorkommnis ersetzt (nur bei Replace)</td>
</tr>
</table>
<p><em>Alle Möglichkeiten auf einen Blick</em></p>
<p><strong>Ein einfaches Beispiel</strong><br />
Als erstes einfaches Beispiel unterscheiden wir ganze Zahlen (Natural) von Namen.<br />
Der Ausdruck
<pre>/^[1-9][\d]*$/</pre>
<p> erkennt eine (einzeilige) Zeichenkette als Zahl, wenn diese nicht mit <em>0</em> beginnt und mindestens aus einer Ziffer bestehen. Das erste / symbolisiert den Beginn der Regex. Das ^ stellt klar, dass wir uns am Anfang des Strings befinden. Dann kommt eine Zahl zwischen 1 und 9 (also keine 0). Anschließend dürfen durch [\d]* beliebig viele Ziffern folgen. Das Dollarzeichen am Ende macht klar, dass hier auch der String zu Ende sein muss.</p>
<p><strong>Regex verwenden</strong><br />
Die Verwendung ist in Ruby an vielen Stellen möglich. Beispielhaft sollen hier nur wenige Möglichkeiten erklärt werden.</p>
<p>1. Match: Die Regexp-Klasse aus Ruby verfügt über eine Methode names <em>"match"</em>. Diese erlaubt das einfache Überprüfen von Strings gegenüber Regex und gibt als Ergebnis <em>true</em> oder <em>false</em> zurück. Das folgende Beispiel überprüft eine Emailadresse auf Gültigkeit.</p>
<pre class="ruby">&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> /\A<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>\w\.\-\+<span style="color:#006600; font-weight:bold;">&#93;</span>+<span style="color:#006600; font-weight:bold;">&#41;</span>@<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span>?:<span style="color:#006600; font-weight:bold;">&#91;</span>-a-z0<span style="color:#006666;">-9</span><span style="color:#006600; font-weight:bold;">&#93;</span>+\.<span style="color:#006600; font-weight:bold;">&#41;</span>+<span style="color:#006600; font-weight:bold;">&#91;</span>a-z<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006666;">2</span>,<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>\z/i.<span style="color:#9900CC;">match</span><span style="color:#006600; font-weight:bold;">&#40;</span>emailadresse<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">then</span>
  // Die Adresse ist korrekt
  weiter<span style="color:#006600; font-weight:bold;">&#40;</span>emailadresse<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">else</span>
  // Die Adresse ist keine gültige Emailadresse
  emailadresseabfragen<span style="color:#006600; font-weight:bold;">&#40;</span>emailadresse<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;</pre>
<p>2. Aufteilen von Strings anhand von Mustern und speichern im Array</p>
<pre class="ruby">&nbsp;
myarray = mystring.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span>/trennregex/<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;</pre>
<p>3. Ersetzten bzw. neu zusammenbauen</p>
<pre class="ruby">&nbsp;
englischesdatum = <span style="color:#996600;">&quot;1984-11-05&quot;</span>
deutschesdatum = englischesdatum.<span style="color:#CC0066; font-weight:bold;">sub</span><span style="color:#006600; font-weight:bold;">&#40;</span>/<span style="color:#006600; font-weight:bold;">&#40;</span>\w+<span style="color:#006600; font-weight:bold;">&#41;</span>-<span style="color:#006600; font-weight:bold;">&#40;</span>\w+<span style="color:#006600; font-weight:bold;">&#41;</span>-<span style="color:#006600; font-weight:bold;">&#40;</span>\w+<span style="color:#006600; font-weight:bold;">&#41;</span>/, <span style="color:#996600;">'<span style="color:#000099;">\\</span>3.<span style="color:#000099;">\\</span>2.<span style="color:#000099;">\\</span>1'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#008000; font-style:italic;"># deutschesdatum == &quot;05.11.1984&quot;</span>
&nbsp;</pre>
<p><strong>Häufig gesuchte Expressions</strong></p>
<ul>
<li>Emailadresse validieren: /\A([\w\.\-\+]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i</li>
<li>Homepage-URL validieren: ^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix</li>
<li><em>Weitere Regex gerne gegen Vorschlag</em></li>
</ul>
<p><strong>Tools</strong><br />
Es existieren auch einige Tools im Internet, die das Checken von Strings gegen Expressions ermöglichen. Ein sehr hilfreiches finden Sie unter <a href="http://www.rubular.com/">http://www.rubular.com/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://codegods.de/2008/04/16/ruby-regular-expressions-regex/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows Management Instrumentation (WMI) und Java</title>
		<link>http://codegods.de/2008/03/26/windows-management-instrumentation-wmi-und-java/</link>
		<comments>http://codegods.de/2008/03/26/windows-management-instrumentation-wmi-und-java/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 22:23:15 +0000</pubDate>
		<dc:creator>Dimitrij Wulf</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jawin]]></category>
		<category><![CDATA[system information]]></category>
		<category><![CDATA[windows management instrumentation]]></category>
		<category><![CDATA[wmi]]></category>

		<guid isPermaLink="false">http://codegods.de/2008/03/26/windows-management-instrumentation-wmi-und-java/</guid>
		<description><![CDATA[Wenn man mit Java Systeminformationen auslesen möchte, so stößt man mit Java schnell an die Grenzen des Machbaren. Will man die CPU-Geschwindigkeit oder die installierten Festplatten so muss man dies über JNI und einer entsprechenden nativen Bibliothek bedienen. Mit WMI hat Microsoft eine Möglichkeit geschaffen lokal und über das Netzwerk auf alle erdenklichen Systeminformationen zu [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man mit Java Systeminformationen auslesen möchte, so stößt man mit Java schnell an die Grenzen des Machbaren. Will man die CPU-Geschwindigkeit oder die installierten Festplatten so muss man dies über JNI und einer entsprechenden nativen Bibliothek bedienen.<br />
Mit WMI hat Microsoft eine Möglichkeit geschaffen lokal und über das Netzwerk auf alle erdenklichen Systeminformationen zu zugreifen. WMI ist ab Windows 2000 fester Bestandteil der Microsoft Betriebssysteme. Für Windows 9x und NT 4.0 gibt es jedoch die Möglichkeit diese Funktionalität nach zu installieren.</p>
<p>Da jedoch diese Funktionalität als native Bibliothek vorliegt kann man nicht so ohne weiteres mit Java darauf zugreifen. Abhilfe schafft hier die freie Java-Bibliothek Jawin. Mit dieser Bibliothek ist es möglich auf DLLs oder auf COM-Objekte zu zugreifen. Zusätzlich bietet das Binär-Packet ein Tool namens Jawin Type Browser womit man Stubs für die nativen Objekte von WMI erstellen kann.</p>
<p>Will man nun von Java aus auf WMI zugreifen so erstellt man zuerst Stub-Klassen für Methoden und Objekte mit dem Jawin Type Browser. Dabei startet man die jawinBrowser.jar Datei, die in dem Ordner typebrowser im Binär-Packet von Jawin enthalten ist. Nun erstellt man ein neues Projekt über das Menu Project und gibt einen Dateinamen für das Projekt an. Danach öffnet sich ein Fenster mit den Einstellungen des Projektes. Mit New wählt man nun die Datei wbemdisp.tlb im Ordner C:\windows\system32\wbem\ aus. Als letzte wichtige Einstellung muss noch das Verzeichnis angegeben werden wo die Jawin Stubs gespeichert werden sollen. Dieses legt man Textfeld "Export directory" fest.</p>
<p>Jetzt klickt man auf "Code Generation" und dann auf "Generate full code" wodurch intern die Stubs erstellt wurden. Um diese schließlich in das Verzeichnis zu lagern muss noch auf "Save Java files" im Menü "Code Generation" geklickt werden.</p>
<p>Wurde alles erfolgreich beendet kann man jetzt mit der eigentlichen Programmierung loslegen. Man muss noch darauf achten, dass man das Verzeichnis, in dem die jawin.jar liegt im classpath anpasst.</p>
<p>Hier stelle ich eine Beispielimplementierung rein. Damit ist es möglich die CPU-Frequenz und den Namen auszulesen.</p>
<pre class="java"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> args<span style="color: #66cc66;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> COMException <span style="color: #66cc66;">&#123;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">String</span></a> computerName = <span style="color: #ff0000;">&quot;.&quot;</span>;
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">String</span></a> userName = <span style="color: #ff0000;">&quot;&quot;</span>;
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">String</span></a> password = <span style="color: #ff0000;">&quot;&quot;</span>;
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">String</span></a> namespace = <span style="color: #ff0000;">&quot;root/cimv2&quot;</span>;
&nbsp;
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">String</span></a> queryProcessor = <span style="color: #ff0000;">&quot;SELECT * FROM Win32_Processor&quot;</span>;
&nbsp;
    DispatchPtr dispatcher = <span style="color: #000000; font-weight: bold;">null</span>;
&nbsp;
    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
        ISWbemLocator locator = <span style="color: #000000; font-weight: bold;">new</span> ISWbemLocator<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;WbemScripting.SWbemLocator&quot;</span><span style="color: #66cc66;">&#41;</span>;
        ISWbemServices wbemServices = locator.<span style="color: #006600;">ConnectServer</span><span style="color: #66cc66;">&#40;</span>computerName, namespace, userName, password, <span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #ff0000;">&quot;&quot;</span>, <span style="color: #cc66cc;">0</span>, dispatcher<span style="color: #66cc66;">&#41;</span>;
        ISWbemObjectSet wbemObjectSet = wbemServices.<span style="color: #006600;">ExecQuery</span><span style="color: #66cc66;">&#40;</span>queryProcessor, <span style="color: #ff0000;">&quot;WQL&quot;</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>;
        DispatchPtr<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> results = <span style="color: #000000; font-weight: bold;">new</span> DispatchPtr<span style="color: #66cc66;">&#91;</span>wbemObjectSet.<span style="color: #006600;">getCount</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>;
        IUnknown unknown = wbemObjectSet.<span style="color: #006600;">get_NewEnum</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        IEnumVariant enumVariant = <span style="color: #66cc66;">&#40;</span>IEnumVariant<span style="color: #66cc66;">&#41;</span> unknown.<span style="color: #006600;">queryInterface</span><span style="color: #66cc66;">&#40;</span>IEnumVariant.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
        enumVariant.<span style="color: #006600;">Next</span><span style="color: #66cc66;">&#40;</span>wbemObjectSet.<span style="color: #006600;">getCount</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, results<span style="color: #66cc66;">&#41;</span>;
&nbsp;
        <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> i = <span style="color: #cc66cc;">0</span>; i &amp;lt; results.<span style="color: #006600;">length</span>; i++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            ISWbemObject wbemObject = <span style="color: #66cc66;">&#40;</span>ISWbemObject<span style="color: #66cc66;">&#41;</span> results<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">queryInterface</span><span style="color: #66cc66;">&#40;</span>ISWbemObject.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
           <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Name: &quot;</span> + wbemObject.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Name&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
           <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;CurrentClockSpeed: &quot;</span> + wbemObject.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;CurrentClockSpeed&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #66cc66;">&#40;</span>COMException e<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        e.<span style="color: #006600;">printStackTrace</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>Das gleiche als VBScript würde folgendermaßen aussehen:</p>
<pre class="vb">computerName = <span style="color: #ff0000;">&quot;.&quot;</span>
<span style="color: #b1b100;">Set</span> wmi = <span style="color: #b1b100;">GetObject</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;winmgmts:\\&quot;</span> &amp;amp; computerName &amp;amp; <span style="color: #ff0000;">&quot;\root\cimv2&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #b1b100;">Set</span> colItems = wmi.<span style="color: #66cc66;">ExecQuery</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;select * from win32_processor&quot;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #b1b100;">For</span> Each objItem in colItems
    WScript.<span style="color: #66cc66;">Echo</span> objItem.<span style="color: #b1b100;">Name</span>
    WScript.<span style="color: #66cc66;">Echo</span> objItem.<span style="color: #66cc66;">CurrentClockSpeed</span>
<span style="color: #b1b100;">Next</span></pre>
<p>Hallo Leute, ich habe das ganze nochmals unter Windows 7 64-bit mit Java 1.6 getestet und scheint noch zu funktionieren. Alles unter meinem Blog: <a href="http://www.dimitrijwulf.de">Software-Engineering and IT-Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codegods.de/2008/03/26/windows-management-instrumentation-wmi-und-java/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

