<?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>ubuntuverse.at &#187; Programmierung</title>
	<atom:link href="http://www.ubuntuverse.at/category/programmierung/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ubuntuverse.at</link>
	<description>Berichte aus dem Ubuntu Universum</description>
	<lastBuildDate>Thu, 21 Aug 2014 09:42:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Fallgruben in BASH</title>
		<link>http://www.ubuntuverse.at/2014/07/10/fallgruben-in-bash/</link>
		<comments>http://www.ubuntuverse.at/2014/07/10/fallgruben-in-bash/#comments</comments>
		<pubDate>Thu, 10 Jul 2014 05:23:49 +0000</pubDate>
		<dc:creator>Bernhard Essl</dc:creator>
				<category><![CDATA[Konsole]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.ubuntuverse.at/?p=1726</guid>
		<description><![CDATA[Immer wieder bin ich angenehm überrascht wie viele Aufgaben ich mit BASH in oft einer (langen) oder nur wenigen Zeilen lösen kann. Warum schreibe ich dann fast alles in Skriptsprachen wie Ruby, Python oder Perl? Ganz einfach weil die Syntax einfacher zu merken ist und BASH doch einige Eigenheiten hat, die es zu merken gilt. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="post_img" src="http://www.ubuntuverse.at/wp-content/85504626_9a784bf601_m.jpg" alt="cat hunting the bash" title="cat hunting the bash" width="240" height="192" class="alignnone size-full wp-image-1728" /> Immer wieder bin ich angenehm überrascht wie viele Aufgaben ich mit BASH in oft einer (langen) oder nur wenigen Zeilen lösen kann. Warum schreibe ich dann fast alles in Skriptsprachen wie Ruby, Python oder Perl?<br />
Ganz einfach weil die Syntax einfacher zu merken ist und BASH doch einige Eigenheiten hat, die es zu merken gilt. </p>
<p>Darum hier ein Versuch sämtliche gern gemachte Fehler niederzuschreiben. Ich würde mich über Kommentare eurer Fallgruben von euch freuen.<br />
<span id="more-1726"></span></p>
<ol>
<li><strong>whitespaces und wildcards</strong>
<pre>
mv $file_old $file_new # falsch
</pre>
<p>Das kann bei Dateinamen mit Leerzeichen oder wildcards zu Problemen führen, wenn man sich nicht sicher ist welchen Inhalt eine Variable hat, sollte man sie in Anführungszeichen setzen.</p>
<pre>
mv "$file_old" "$file_new"
</pre>
<p>Nun können in $file_old und $file_new Leerzeichen und wildcards wie * oder ? oder [...] verwendet werden.
</li>
<li><strong>runde Klammern werden nicht erkannt</strong>
<p>Ich bin schon öfter über Posting gestolpert wo das Skript mit dieser Meldung abstürzte:</p>
<pre>Syntax error: "(" unexpected</pre>
<p>Das liegt dann meistens daran das keine BASH sondern eine abgemagerte Shell wie <em>dash</em> verwendet wurde.<br />
Welche Shell verwendet wird kann über $SHELL abgefragt werden:</p>
<pre>echo $SHELL</pre>
</li>
<li><strong>Variablen-Deklaration</strong>
<pre>
$ubuntu="super" # falsch
ubuntu = "super" # falsch
ubuntu ="super" # falsch
</pre>
<p>in BASH werden einer Variable, ohne $ und ohne Zwischenabstände Werte zugewiesen.</p>
<pre>
ubuntu="super"
</pre>
</li>
<li><strong>lesen und schreiben in die selbe Datei</strong>
<p>Es ist nicht möglich in die selbe Datei, über eine pipe zu schreiben, von der gelesen wird. In den meisten Fällen bleibt dann eine 0 Byte große Datei über.</p>
<pre>cat datei | sed s/foo/bar/ > datei # falsch</pre>
<p>Eine Lösung wäre mit einer temporären Datei zuarbeiten und diese mit der Originaldatei zu überschreiben</p>
<pre>sed 's/foo/bar/g' datei > tmpdatei &#038;&#038; mv tmpdatei datei</pre>
</li>
<li><strong>Globing verwenden</strong>
<p>Ein gern gemachter Fehler ist das verwenden von subshells in loops</p>
<pre>
for x in `ls *.jpg`; do # falsch
</pre>
<p>Hat einer der Dateinamen whitespaces wird es hier zu Fehlern kommen (siehe 1). Außerdem wird ein externes Kommando <em>ls</em> unnötig aufgerufen.<br />
In BASH sollte darum für solche Aufgaben das BASH interne Glob verwendet werden.</p>
<pre>
for i in *.jpg; do
</pre>
</li>
<li><strong>Verwenden absoluter Pfade bei externen Programmen</strong>
<p>Oft werden externe Programme in BASH ohne absoluten Pfad aufgerufen, sehr sicher ist das allerdings nicht.</p>
<pre>dateien=`ls /home/userin/`</pre>
<p>Das Problem hier könnte sein das jemand mutwillig ein Programm mit den Namen <em>ls</em> erzeugt und nicht mehr <em>/bin/ls</em> wie gedacht, sondern ein manipuliertes <em>ls</em> ausgeführt wird.<br />
Ein besserer Ansatz mit einem absoluten Pfad:</p>
<pre>ls="/bin/ls"
dateien=`$ls /home/userin/`
</pre>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.ubuntuverse.at/2014/07/10/fallgruben-in-bash/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Web-Entwicklung mit Ubuntu</title>
		<link>http://www.ubuntuverse.at/2009/11/11/web-entwicklung-mit-ubuntu/</link>
		<comments>http://www.ubuntuverse.at/2009/11/11/web-entwicklung-mit-ubuntu/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 12:43:18 +0000</pubDate>
		<dc:creator>Bernhard Essl</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[entwicklung]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[webentwicklung]]></category>

		<guid isPermaLink="false">http://www.ubuntuverse.at/?p=1794</guid>
		<description><![CDATA[Das Vorurteil das man keine Webseiten unter Linux entwickeln kann, möchte ich hiermit mal aus der Welt schaffen. Ich arbeite fast täglich an Webseiten mit Linux, seit Jahren und würde mit keinem Betriebsystem tauschen wollen. Der Editor Der Editor ist Geschmackssache dazu will ich nicht viele Worte verlieren. Ich verwende vim und bin durch die [...]]]></description>
			<content:encoded><![CDATA[<p>Das Vorurteil das man keine Webseiten unter Linux entwickeln kann, möchte ich hiermit mal aus der Welt schaffen. Ich arbeite fast täglich an Webseiten mit Linux, seit Jahren und würde mit keinem Betriebsystem tauschen wollen.</p>
<p><strong>Der Editor</strong></p>
<p>Der Editor ist Geschmackssache dazu will ich nicht viele Worte verlieren. Ich verwende vim und bin durch die ganzen Plugins und der Konfigurationsmöglichkeiten sehr zufrieden damit. Quanta und Bluefish sind zwei speziell für web development zugeschnittene Editoren.</p>
<p><strong>kleine Helfer</strong></p>
<p>Ich finde eine Bildschirmlupe die Bereiche des Bildschirms vergrößert darstellt sehr praktisch dazu verwende ich kmag. Um Pixeln zumessen verwende ich kruler, das ein Bildschirmlineal ist das man in alle 4 Himmelsrichtungen drehen kann. Ksnapshot ist ein Programm das Screenshots erzeugt, es ist unter anderen möglich nur ein Fenster oder nur eine Region auszuwählen.</p>
<p><strong>Firefox-Plugins</strong></p>
<p>Der Firefox ist zum Entwickeln besonders geeignet durch die große Anzahl an Plugins.<br />
Mit Firebug und dem Web Developer ist es möglich Informationen aller Art herauszufinden und direkt CSS oder HTML zu ändern. Tamper Data ist ideal um Werte von Formularen abzufangen und die Einträge zu manipulieren. Mit Selenium IDE kann man Navigationen und Interaktionen auf einer Webseite aufzeichnen und abspielen. </p>
<p><strong>Browserchecks</strong></p>
<p>Webseiten sollten auf allen gängigen Browsern funktionieren. Um Webseiten auf Windows zu testen verwende ich virtual box, eine Virtualisierungs Software mit einer Windows XP Installation und allen möglich installierten Browsern. Es gäbe auch das Programm <a href="http://www.tatanka.com.br/ies4linux/page/Main_Page">ie4linux</a> das verschiedene IE Versionen mit wine emulieren kann. Leider ist das sehr langsam, nach meiner Erfahrung. Für Safari den OSX Browser verwende ich Konqeuror der ebenfalls wie Safari Webkit verwendet zum rendern der Webseite und man so ziemlich die selbe Darstellung hat. Mit Lynx kann man auch Webseiten im Textmodus testen. Es gibt auch das Webservice <a href="http://browsershots.org/ ">browsershots.org</a> die von einer URL mit beliebig einstellbaren Browsern Screenshots erzeugt.</p>
<p><strong>Validierung</strong></p>
<p>Um zu überprüfen ob die Seite valides HTML und CSS liefert, kann direkt der Validator von <a href="http://validator.w3.org/ ">w3.org</a> zum überprüfen verwendet werden. Wenn die Seite lokal am Rechner liegt kann man tidy verwenden, es gibt auch das Firefox Plugin Html Validator womit man auch offline validieren kann.</p>
<p><strong>Server-Technik</strong></p>
<p>Da auf den meisten Servern auch ein Linux lauft ist es natürlich klar das man auch die selbe Server-Technik lokal am Desktop installieren kann. Ein Webserver wie den Apachen lässt sich genau so einfach wie MySQL, PHP, Django oder Rails mittels aptitude installieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ubuntuverse.at/2009/11/11/web-entwicklung-mit-ubuntu/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Diagramme generieren mit Graphviz</title>
		<link>http://www.ubuntuverse.at/2009/08/19/diagramme-generieren-mit-graphviz/</link>
		<comments>http://www.ubuntuverse.at/2009/08/19/diagramme-generieren-mit-graphviz/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 05:23:40 +0000</pubDate>
		<dc:creator>Bernhard Essl</dc:creator>
				<category><![CDATA[Konsole]]></category>
		<category><![CDATA[Programme]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[diagramme]]></category>
		<category><![CDATA[dot]]></category>
		<category><![CDATA[graphviz]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.ubuntuverse.at/?p=1404</guid>
		<description><![CDATA[Nennt mich Nerd, aber ich erfreue mich an automatisch generierten Grafiken wie Diagrammen aus Datenmengen. Ein Tool das genau zu diesen Zweck verwendet werden kann ist Graphviz, damit lassen sich schnell und einfach Diagramme erstellen. Strukturdiagramme, Pfeildiagramme, automatisch erzeugte Diagramme und aufwändig manuell gestaltete Diagramme. Bevor eine Grafik erstellt werden kann wird eine Definitionsdatei erstellt [...]]]></description>
			<content:encoded><![CDATA[<p>Nennt mich Nerd, aber ich erfreue mich an automatisch generierten Grafiken wie Diagrammen aus Datenmengen. Ein Tool das genau zu diesen Zweck verwendet werden kann ist Graphviz, damit lassen sich schnell und einfach Diagramme erstellen. Strukturdiagramme, Pfeildiagramme, automatisch erzeugte Diagramme und aufwändig manuell gestaltete Diagramme. Bevor eine Grafik erstellt werden kann wird eine Definitionsdatei erstellt in der Beschreibungssprache DOT.</p>
<p>Im ersten Beispiel soll eine Grafik erzeugt werden, die von &#8220;Linux&#8221; Verbindungen zu &#8220;Debian&#8221;, &#8220;Gentoo&#8221; und &#8220;Ubuntu&#8221; zeigt.</p>
<pre>
/* linux_family_1.dot */
digraph G {
    Linux -> Debian
    Linux -> Gentoo
    Linux -> Ubuntu
}
</pre>
<p>Mit dem Kommandozeilenbefehl dot wird nun der Quelltext zu einer Grafik (GIF, PNG, SVG oder PostScript) verarbeitet. In unseren Beispiel wollen wir eine PNG Datei aus dem DOT Quelltext erzeugen.</p>
<pre>dot -Tpng linux_family_1.dot > linux_family_1.png</pre>
<p><span id="more-1404"></span></p>
<p><img src="http://www.ubuntuverse.at/wp-content/linux_family_1.png" alt="linux_family_1" title="linux_family_1" width="427" height="155" class="alignnone size-full wp-image-1407" /></p>
<p>Das ganze kann noch etwas mit Farb- und Font-Definitionen aufgewertet werden.</p>
<pre>
digraph G {
    node [fontname=Verdana,fontsize=9]
    node [style=filled]
    node [fillcolor="#EEEEEE"]
    node [color="#EEEEEE"]
    edge [color="#31CEF0"]
    node [shape=box]

    Linux -> Debian
    Linux -> Gentoo
    Linux -> Ubuntu
    Debian -> Ubuntu
}
</pre>
<p><img src="http://www.ubuntuverse.at/wp-content/linux_family_2.png" alt="linux_family_2" title="linux_family_2" width="196" height="251" class="alignnone size-full wp-image-1408" /></p>
<p>Es lässt sich noch einiges mehr mit Graphviz anstellen, ich möchte hier aber auf die Doku von <a href="http://www.graphviz.org/">Graphviz</a> und auf den Wiki-Artikel <a href="http://wiki.ubuntuusers.de/Graphviz">http://wiki.ubuntuusers.de/Graphviz</a> verweisen.</p>
<p>Zum Schluss noch ein Beziehungsdiagramm das die Tags aus den Bookmarks von meinen delicious.com Account darstellt. </p>
<p><a href="http://www.ubuntuverse.at/wp-content/delicious.png"><img src="http://www.ubuntuverse.at/wp-content/delicious-300x176.png" alt="delicious" title="delicious" width="300" height="176" class="alignnone size-medium wp-image-1418" /></a></p>
<p>Hier das Skript (Ruby) für Interessierte.</p>
<p><script src='http://pastie.org/987002.js'></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ubuntuverse.at/2009/08/19/diagramme-generieren-mit-graphviz/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Diese Woche in der Konsole #5</title>
		<link>http://www.ubuntuverse.at/2009/08/02/diese-woche-in-der-konsole-5/</link>
		<comments>http://www.ubuntuverse.at/2009/08/02/diese-woche-in-der-konsole-5/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 05:23:25 +0000</pubDate>
		<dc:creator>Bernhard Essl</dc:creator>
				<category><![CDATA[Konsole]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[dig]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[dnsutils]]></category>
		<category><![CDATA[dwik]]></category>
		<category><![CDATA[handbrake]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[ngrep]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[shuf]]></category>
		<category><![CDATA[symlink]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.ubuntuverse.at/?p=1281</guid>
		<description><![CDATA[Datei kopieren mit dem selben Namen aber neue Endung (.bkp). cp datei{,.bkp} ls datei* datei datei.bkp FTP Passwort vergessen? Aber es befindet sich noch in einem Programm wie gftp? Dann kann ngrep helfen. Zuerst ngrep auf das Netzwerkdevice lauschen lassen, wie das lautet kann aus ifconfig ausgelesen werden und den FTP Port angeben. Danach kann [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ubuntuverse.at/wp-content/utilities-terminal.png" alt="Diese Woche in der Konsole" width="64" height="64" /></p>
<ol>
<li>
Datei kopieren mit dem selben Namen aber neue Endung (.bkp).</p>
<pre>cp datei{,.bkp}

ls datei*
datei  datei.bkp
</pre>
</li>
<li>FTP Passwort vergessen? Aber es befindet sich noch in einem Programm wie gftp? Dann kann ngrep helfen. Zuerst ngrep auf das Netzwerkdevice lauschen lassen, wie das lautet kann aus ifconfig ausgelesen werden und den FTP Port angeben. Danach kann man sich mit dem Server verbinden und sieht den Login im Klartext vorbeihuschen.
<pre>
sudo ngrep -d eth1 port 21

interface: eth1 (192.168.1.0/255.255.255.0)
filter: (ip or ip6) and ( port 21 )
#
T 912.103.134.87:21 -> 192.168.1.4:41085 [AP]
  220 ProFTPD 1.3.0 Server (Debian) [::ffef:912.103.134.87]..
##
T 192.168.1.4:41085 -> 912.103.134.87:21 [AP]
  USER benutzerin..
##
T 912.103.134.87:21 -> 192.168.1.4:41085 [AP]
  331 Password required for benutzerin...
##
T 192.168.1.4:41085 -> 912.103.134.87:21 [AP]
  PASS supergeheim23..
</pre>
<p>Wie wir hier sehen, ist das Passwort des Benuzters &#8220;benutzerin&#8221; &#8220;supergeheim23&#8243;.
</li>
<li>Vier Zeilen einer Datei, hier von /etc/passwd per Zufall auslesen.
<pre>shuf /etc/passwd -n 4</pre>
</li>
<li>
<del datetime="2009-08-02T19:37:31+00:00">Das Ziel eines Symlinks (ln) abkürzen mit einem Punkt.</del><br />
Wenn das Ziel eines Symlinks (ln) sich im gerade aktuellen Ordner befindet und der Dateiname der selbe sein soll, braucht es keinen Dateinamen.</p>
<pre>ln -s config/database.yml

ls -al database.yml
lrwxrwxrwx 1 user user 19 2009-07-31 22:52 database.yml -> config/database.yml
</pre>
</li>
<li>Wer so wie ich die Programme &#8220;dig&#8221; oder &#8220;host&#8221; unter Ubuntu sucht der findet sie im Paket dnsutils.
<pre>aptitude install dnsutils</pre>
</li>
<li>
Mit der Konsolenversion von <a href="http://trac.handbrake.fr/wiki">HandBrake</a>, ein Video in ein ipodtaugliches Video konvertieren.</p>
<pre>HandBrakeCLI -i video.avi -o video_ipod.mp4 -e x264b13  \
-b 700 -R 44100 -B 128 -2 -w 320</pre>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.ubuntuverse.at/2009/08/02/diese-woche-in-der-konsole-5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
