Freitag, 11. Juli 2014

Grafiken mit TIKZ

TIKZ

Ich bin dazu übergegangen, die Zeichnungen meiner Skripten mit Tikz zu erstellen, da dies,
  1. gut aussieht
  2. perfekt zu latex passt
  3. und sich somit leicht warten lässt
In  weiterer Folge werde ich hier einige Bilder mit Sourcecode posten, damit leicht nachvollzogen werden kann wie man solche Zeichnungen erstellt, und ich eine Eselsbrücke für mich habe, wie einzelne Probleme gelöst werden können. Die Zeichnungen sind grundsätzlich "straight forward" und ohne Tricks gelöst. Oft wird es bessere Lösungen geben -> ich hoffe auf Hinweise/Erläuterungen in den Kommentaren.....

Aufbau einer IP-Adresse/Netzmaske:

 

Source: (ohne Kopf)





% Aufbau einer IP-Adresse Bitmuster - Dezimaldarstellung und Netzmaske
% $Id:$

\tikzstyle{ipmatrix}=[matrix of nodes,
nodes={rectangle,minimum size=4mm,very thick,draw=black!50,font=\ttfamily,
top color=white,bottom color=black!40}]
\tikzstyle{netmask}=[matrix of nodes, below = of ip,
nodes={rectangle,minimum size=4mm,very thick,draw=blue!50,font=\ttfamily,
top color=white,bottom color=blue!40}]
\tikzstyle{decmatrix}=[matrix of nodes, above = of ip,
nodes={rectangle, inner sep=0,minimum size=8mm, very thick, draw = black!50,
font=\ttfamily, top color=white, bottom color = black!40}]
\tikzstyle{nmmatrix}=[matrix of nodes, below = of nm,
nodes={rectangle, inner sep=0,minimum size=8mm, very thick, draw = blue!50,
font=\ttfamily, top color=white, bottom color = blue!40}]

\begin{tikzpicture}

% die Oktets
\matrix (ip)[ipmatrix] {1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0 &
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0\\};
\matrix (nm)[netmask] {1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 &
1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\};

\matrix (bin)[decmatrix] {192 & 168 & 1 & 10\\};

\matrix (nm-dec)[nmmatrix] {255 & 255 & 255 & 0\\};
% die Dezimalnummern


%Klammern über der Bitdarstellung
\begin{scope}[decoration={brace,amplitude=1.5mm}] %scope damit immer gleiche Formatierung
\draw [decorate] (ip-1-1.north west) -- (ip-1-8.north east);
\draw [decorate] (ip-1-8.north east) -- (ip-1-16.north east);
\draw [decorate] (ip-1-16.north east) -- (ip-1-24.north east);
\draw [decorate] (ip-1-24.north east) -- (ip-1-32.north east);
\end{scope}

%Klammern zwischen den Dezimalzahlen
\begin{scope}[decoration={brace, mirror,amplitude=1.5mm}] % mirror damit nach unten
\draw [decorate] (bin-1-1.south west) -- (bin-1-1.south east);
\draw [decorate] (bin-1-2.south west) -- (bin-1-2.south east);
\draw [decorate] (bin-1-3.south west) -- (bin-1-3.south east);
\draw [decorate] (bin-1-4.south west) -- (bin-1-4.south east);
\end{scope}
%Klammern über der Netzmaske
\begin{scope}[decoration={brace, mirror,amplitude=1.5mm}] %scope damit immer gleiche Formatierung
\draw [decorate] (nm-1-1.south west) -- (nm-1-8.south east);
\draw [decorate] (nm-1-8.south east) -- (nm-1-16.south east);
\draw [decorate] (nm-1-16.south east) -- (nm-1-24.south east);
\draw [decorate] (nm-1-24.south east) -- (nm-1-32.south east);
\end{scope}

%Klammern zwischen den Dezimalzahlen der Netmask
\begin{scope}[decoration={brace, amplitude=1.5mm}] % mirror damit nach unten
\draw [decorate] (nm-dec-1-1.north west) -- (nm-dec-1-1.north east);
\draw [decorate] (nm-dec-1-2.north west) -- (nm-dec-1-2.north east);
\draw [decorate] (nm-dec-1-3.north west) -- (nm-dec-1-3.north east);
\draw [decorate] (nm-dec-1-4.north west) -- (nm-dec-1-4.north east);
\end{scope}

% Strukturierungspunkte (um 1mm noch oben verschoben)
\shade[ball color=red] (bin-1-1.south east)++(0,1mm) circle(1mm);
\shade[ball color=red] (bin-1-2.south east)++(0,1mm) circle(1mm);
\shade[ball color=red] (bin-1-3.south east)++(0,1mm) circle(1mm);
% geschwungene Verbindungslinien
\begin{scope} [<->, out=270, in=90, shorten >=1.5mm, shorten <=1.5mm, looseness=.75]
\draw(bin-1-1) to (ip-1-4.north east);
\draw(bin-1-2) to (ip-1-12.north east);
\draw(bin-1-3) to (ip-1-20.north east);
\draw(bin-1-4) to (ip-1-28.north east);
\end{scope}

\begin{scope} [<->, in=270, out=90, shorten >=6.5mm, shorten <=1.5mm, looseness=1]
\draw(nm-dec-1-1) to (nm-1-4.north east);
\draw(nm-dec-1-2) to (nm-1-12.north east);
\draw(nm-dec-1-3) to (nm-1-20.north east);
\draw(nm-dec-1-4) to (nm-1-28.north east);
\end{scope}

%Strukturierungspunkte zwischen den Octetts der Netmask
\shade[ball color=red] (nm-1-8.south east) circle(1mm);
\shade[ball color=red] (nm-1-16.south east) circle(1mm);
\shade[ball color=red] (nm-1-24.south east) circle(1mm);

\shade[ball color=red] (nm-dec-1-1.south east)++(0,1mm) circle(1mm);
\shade[ball color=red] (nm-dec-1-2.south east)++(0,1mm) circle(1mm);
\shade[ball color=red] (nm-dec-1-3.south east)++(0,1mm) circle(1mm);


% Bereichsschattierung
\begin{pgfonlayer}[background] % Ebene wechseln
\draw [fill,green!40,path, fading=north](ip-1-1.south west) -- (ip-1-24.south east) -- (nm-1-24.north east) -- (nm-1-1.north west) -- cycle;
\draw [fill,yellow!40,path, fading=north](ip-1-24.south east) -- (ip-1-32.south east) -- (nm-1-32.north east) -- (nm-1-24.north east) -- cycle;
\end{pgfonlayer}

% Beschriftung
\node (ipdec) [left = of bin] {\textbf{Nodeadresse (IP)}};
\node (netdec) [left = of nm-dec] {\textbf{Netzmaske}};
\node (netadr) [below left = 2mm and -7cm of ip] {\textbf{Netzadresse}};
\node (netadr) [below right = 2mm and -3cm of ip] {\textbf{Hostadresse}};
%Strukturierungspunkte zwischen den Octetts der IP
\shade[ball color=red] (ip-1-8.south east) circle(1mm);
\shade[ball color=red] (ip-1-16.south east) circle(1mm);
\shade[ball color=red] (ip-1-24.south east) circle(1mm);

\end{tikzpicture}


Samstag, 20. Juli 2013

Kartenerstellung mit GMT

Will man Karten mit hochaufgelösten Küstenlinien ("full") erstellen, dann müssen die zur GMT-Version passenden Libraries nachinstalliert werden. Diese findet man (für die unterschiedlichen Versionen) auf

ftp://ftp.iris.washington.edu/pub/gmt/

Die Archive sind zu entpacken und in das Verzeichnis (Linux/Ubuntu) /usr/share/gmt/coast kopiert werden. Die Archive können dann gelöscht werden.

Tip: bei den Archiven und der GMT-Version auf das Filedatum schauen!

Sonntag, 10. März 2013

Bilder verkleinern unter Linux

Meine Nikon D5200 liefert im "L-Format" für ein Video zu große Bilder. Mein schwaches Notebook kann diese Datenmengen nicht mehr verdauen. Daher muss das Bildformat vor der Videoerstellung verkleinert werden.

Imagemagick eigenet sich sehr gut um Bilder schnell unter Linux zu verkleinern. Es  ist schnell mit:  

sudo apt-get install imagemagick  

installiert.
Wenn man viele Bilder verändern möchte verschiebt man diese in einen Ordner und öffnet ein Terminal-Fenster. Im Bilderordner können mit dem Befehl

mogrify -resize 1056x864 *.JPG
 
alle Bilder mit der Fileextension .JPG sofort umgewandelt werden.
Mit
ffmpeg -r 10 -f image2 -i pic%04d.JPG video.mpg

kann dann das Video erzeugt werden. 
Achtung wird ein mp4-Coder verwendet, dann müssen die Abmessungszahlen durch 2 teilber sein! Die Zahl bei Parameter r (hier 10) steuert wie "schnell" das Video läuft. damit kann der Zeitraffereffekt beeinflusst werden.


Dienstag, 27. März 2012

USB-Platte mit NTFS reparieren

Für den Datenaustausch mit Windoofen Systemen verwende ich eine NTFS-formatierte Festplatte. Meine "Bessere Hälfte" hat bei der letzten Datensicherung die Steckdosenleiste abgeschaltet, und somit das Filesystem beleidgt. Die Linux-Umgebung warnte mich, und meldete, einleuchtend und korrekt, dass die Platte unter "Winzigweich" eingebunden und mit chkdsk "behandelt" werden sollte.
Problem: das windoofe Sytem erkannte,  bzw. akzeptierte die Platte nicht mehr. Möglicherweise hätten unzählige Registry-Patches und undokumentierte (UNIX)-Funktionen das Problem behoben, aber zum Spielen verwende ich lieber eine SONY Playstation!
Lösung: UBUNTU-Linux starten (bei mir von der lokalen Festplatte des Notebooks) und dann mit

tail -n 50 /var/log/messages

nachsehen unter welchem Devicenamen Linux das Sorgenkind erkannt hat (hier sdb). Dann (nichts für Fensterklickser, die tagelang spielen wollen ...)auf der Commandline

ntfsfix /dev/sdb

eingeben - und - nach wenigen Sekunden ist die Disk wieder OK (Commandprompt erscheint und die Disk kann mit

sudo mount -t ntfs /dev/sdb1 /media/usb-disk 

gemountet und angesprochen werden - ohne Fingerbeschwerden vom Klicksen.... ;-) . Also wieder bestätigt: Spielzeuge gehören in die Sandkiste (= VirtualBox) und nicht in Arbeitsumgebungen ....

Montag, 5. September 2011

Linux Terminalbefehle

Soll ein von der Konsole gestarteter Befehl weiterlaufen, wenn die Terminalsitzung (z.B. ssh-Login) beendet wird, dann kann der Befehl mit


nohup befehl &

gestartet werden. Der Ampersand (&) schickt den Befehl in den Hintergrund damit noch auf der Konsole weitergearbeitet werden kann. So wird z.B. ein Befehlsabbruch verhindert, wenn ein Router oder eine Firewall eine Terminalsitzung schließt, weil lange keine Useraktion erfolgte.

Eine gute Übersicht über Terminalbefehle im Zusammenhang mit Prozessen ist unter

http://www.orgapedia.de/knowmore/index.php/Linux_PowerTrain/1.103.5

zu finden.

Samstag, 30. Juli 2011

video aus einzelnen files erstellen

Hierfür eignet sich ffmpeg hervorragend. Zu beachten ist nur, dass die Files OHNE "Löcher" beginnend mit 1 durchnummeriert sind! Hat man aus Formatsgründen ein hohe Startnummer, dann muss die Erstnummer im Filenamen angegeben werden, z.B. wenn das erste File den Namen file10001 hat dann lautet die Konvertierung:

ffmpeg -f image2 -i ./file1%04d.jpg video.mpg


besser ist als Zielfile video.mp4.

file-und Verzeichnisoperationen

Einige Kommandos die fallweise sehr nützlich sind:

find /home -name "*~" -exec rm "{}" \;

Dies bedeutet: "Lösche alle Dateien unterhalb des Verzeichnisses /home, deren Name auf eine Tilde endet".

 Über ein anderes Suchkriterium lassen sich mit find leere Dateien löschen:

find / -empty -ok rm "{}" \;
find . -empty -exec rm "{}" \;


Dateien über einer bestimmten größe finde:

ls -lahS $(find / -type f -size +100M)

findet alle Dateien grösser  100M (find und +) und gibt die Verzeichnisdaten aus (Suchergebnis mit $ an ls übergeben)

Mehrere Dateien in einem Verzeichnis umbenennen und fortlaufend nummerieren:

let counter=10000; for i in *.jpg; do let counter=counter+1; mv $i file$counter.jpg; done

Mit SEDs regulären Ausdrücken lässt sich sehr präzise formulieren, was man wie ändern möchte. Ein einfaches sed-Beispiel sieht so aus:

sed -e s/text1/text2/g datei.txt > datei.neu

Das Bedeutet so viel, wie: "Ersetze alle Vorkommen von text1 durch text2." Die geänderten Zeilen schreibt sed auf die Standardausgabe, von wo man sie mit einer Output-Umleitung (>) in eine neue Datei schreiben kann.


Mit

tail -f /var/log/messages

lassen sich die Ausgaben in die LogDatei "online" verfolgen