Alex Online Today

some experience to be shared

By

cUrl unter Mac OS updaten/reparieren

Vorgeschichte: (Vermutlich) seit dem Update auf Mavericks funktioniert mein cUrl nicht mehr korrekt. Beim Ausführen von curl im Terminal erhalte ich folgende Fehlermeldung: “Bad CPU type in executable” (eventuell wurde mein eigenes build nicht durch Mavericks überschreiben)

Warum auch immer, folgendermaßen läd und installiert man cUrl neu:

1. Download der aktuellen Version von http://curl.haxx.se/download.html [Download der sourcen als .tar.gz
2. Navigiere im Terminal zu Downlaods: cd ~/Downloads
3. Entpacke den Download: tar zxf curl-7.33.0.tar.gz
4. Wechsel ins richtige Verzeichnis: cd curl-7.33.0
5. Build + install: make && sudo make install

–> Anschließend sollte curl wieder funktionieren:
6. Test: curl –version
—> curl 7.33.0 (x86_64-apple-darwin13.0.0) libcurl/7.33.0 OpenSSL/0.9.8y zlib/1.2.5

By

$PATH unter Mac OS X

Was ist $PATH
Die $PATH Variable definiert, in welchen Verzeichnissen ausführbare Dateien d.h. per Befehl ausführbare Programme, abgelegt sind, sowie die Reihenfolge in welcher diese Verzeichnisse nach ausführbaren Dateien durchsucht werden.
$PATH besteht aus Einträgen des Systems, die für alle Benutzer gleich sind (systemweit), sowie individuellen Benutzereinträgen (benutzerspezifisch).
Die $PATH Variable gibt es übrigens nicht nur unter OS X sondern auf quasi allen Unix und Linux Systemen und auch unter Windows. Die Funktion ist hierbei allgemein die Gleiche – nur wie und wo $PATH definiert wird ist unterschiedlich. Die folgende Anleitung beschreibt das Verhalten unter OS X 10.5 bis 10.8.

1. $PATH auslesen
Um $PATH zu auszulesen öffnet man ein Terminal Fenster (Spotlight –> “Terminal”) und gibt folgenden Befehl ein:

echo $PATH

Man erhält dann beispielsweise folgende Ausgabe:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/git/bin:/usr/local/MacGPG2/bin:/usr/texbin

2. $PATH Syntax
Die Variable besteht aus einer Aneinanderreihung von Verzeichnispfaden, die durch einen Doppelpunkt “:” getrennt sind.
z.B. sind /usr/bin und /bin Standardverzeichnisse des Systems. Dort finden sich auch Programme wie “echo” -> wie wir es zur Anzeige von $PATH gerade verwendet haben. Wichtig ist folgendes – je früher ein Verzeichnis in $PATH auftaucht, desto höher ist seine Priorität.

Ein Beispiel:
Das Programm echo liegt standardmäßig im Verzeichnis /bin. Wird nun ein weiteres Programm mit dem Namen echo in /usr/local/bin abgelegt, so hat das Programm echo im Verzeichnis /bin immer vorrang, denn bei der Auführung wird beim Auffinden eines passenden Programms im $PATH die Suche abgebrochen. Wenn nun in Zukunft die Programme in /usr/local/bin vorrangig ausgeführt werden sollen, muss man $PATH ändern in etc/paths

3. $PATH systemweit anpassen
Seit Mac OS 10.5 Leopard wird $PATH durch das Programm /usr/libexec/path_helper verwaltet. path_helper wird durch /etc/profile beim Öffnen eines neuen Terminal Fensters ausgeführt.

1. Die Einträge der Datei /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

2. Die Einträge in allen Dateien im Verzeichnis /etc/paths.d/
- Hier hinterlegen häufig Frameworks ihre Pfad-Einträge, z.B. von git oder LaTex
- Diese Einträge werden in Alphabetischer Reihenfolge hinzugefügt
- Eine Datei muss mit einer leeren Zeile enden

Die Dateien sind für gewöhnlich schreibgeschützt und die Verzeichnisse versteckt. Am besten man arbeitet im Terminal:
a) Navigation zu den Ordnern:

> cd /bin

b) Editieren mit vim (sudo für root Rechte)

>sudo vi paths

Nütliche Befehle in vim sind:
i Editieren der aktuellen Zeile
dd Löschen der aktuellen Zeile
i und dd werden mit esc beendet.
:q! Beenden (explizit ohne Speichern der Änderungen)
:wq! Beenden und speichern einer readonly Datei

4. Benutzerdefinierte Einträge in $PATH
Vor dem Öffnen eines neuen Terminal Fensters werden werden die Datein .profile und .bash_profile (in dieser Reihenfolge) im Benutzerordner (~) des aktuellen Nutzers ausgeführt. Es handelt sich um versteckte Dateien (beginnend mit ‘.’) weshalb man sie normalerweise im Finder nicht sieht. Um sie im Terminal anzuzeigen geht man folgendermaßen vor:
a) Navigation zum Benutzerverzeichnis:

>cd ~

b) Anzeigen aller Dateien

> ls -a

Um die Dateien zu bearbeiten, nutzt man am besten wieder vim
c) Bearbeiten mit vim (ohne root Rechte)

vi .profile

In diesen Dateien kann durch den Eintrag

export PATH=$PATH:/newpath

die $PATH Variable für diesen Benutzer erweitert werden. Den bestehenden $PATH stellt man für gewöhnlich vorne an.

By

Relativer Pfad bzw. Basis einer URL

Manchmal braucht man ihn einfach, den Basispfad einer Datei d.h. das Verzeichnis (im Dateisystem) oder die zugrunde liegende URL. Z.B. um relative URLs einer CSS-Datei korrekt zu interpretieren.
Häufig wird dann versucht mit String Operationen den nicht-relevanten Teil der absoluten URL auszuschneiden. Dies gelingt aber nicht, wenn z.B. Pfadbestandteile wie “/” auch im QueryStrings vorhanden sein können.

.NET gibt dem Entwickler hierbei eine nützliche Methode im Paket System.IO mit auf den Weg, womit dieses Problem ein für allemal erledigt sein dürfte. In Folge gleich eingepackt in einen einfachen Wrapper:

       public static string getBasePath(string absoluteUrl)
        {
            Uri uri = new Uri(absoluteUrl);
            var newUri = new Uri(uri, System.IO.Path.GetDirectoryName(uri.AbsolutePath));
            return newUri.ToString();
        }

Hurra, Problem gelöst!

By

Visualisierte Simulation mit JavaScript und Canvas Element

Simulationen lässt man für gewöhnlich auf großen Maschinen laufen, um in angemessener Zeit zu Ergebnissen zu kommen. Wenn jedoch die Visualisierung im Vordergrund steht – frage ich mich – warum nicht auch mal mit JavaScript im Browser durchführen.

Folgende Aufgabe war gestellt: (Quelle: Universität Karlsruhe/KIT Vorlesung Grundzüge der Informationswirtschaft 2011, Prof. Dr. Christof Weinhardt, Timm Teubner)

Auf einem Schulhof mit 400 Schülern breiten sich drei unterschiedliche Gerüchte über den Verbleib eines Lehrers aus.

(1) Der Lehrer ist krank und deshalb nicht da.
(2) Der Lehrer ist mit einer Schülerin nach Argentinien durchgebrannt. (3) Der Lehrer ist ein gesuchter Serienmörder und jetzt im Gefängnis.

Bilden Sie den Schulhof als Raster von 20  20 Feldern ab, wobei sich auf jedem Feld genau ein Schüler befindet. Jeder Schüler kann mit den Mitschülern auf den umliegenden acht Positionen reden, (so wie hier dargestellt) und tut dies auch! Jeder Schüler glaubt zu jedem Zeitpunkt an genau eine Version des Gerüchts. Zunächst sei die Verteilung zufällig und gleichverteilt.

Für die Verbreitung der Gerüchte von einem Zeitpunkt auf den nächsten gelten folgende Regeln:

  1. (i)  Ein Schüler glaubt zum Zeitpunkt t+1 an ein Gerücht, wenn zum Zeitpunkt t vier oder mehr seiner Nachbarn an dieses Gerücht geglaubt haben.
  2. (ii)  Gerücht zwei stellt eine Ausnahme dar: Hier genügen drei Nachbarn – das Gerücht wird als plausibler erachtet, weil die betreffende Schülerin ebenfalls abwesend ist.
  3. (iii)  Sollten zwei der Bedingungen erfüllt sein, dominiert (natürlich) das absurdere Gerücht (3 > 2 > 1).

Die visualisierte Lösung findet Ihr unter:

http://www.alexander-wolf.net/simulation.htm

 

Eingesetzt wurde ein Canvas Element zur Darstellung des “Schulhofes”. Dieser wird nach jeder durchgeführtem Simulationsfolge neu gezeichnet. Die größten Zeiteinbußen in der Simulation stellt auch dieser Zeichenschritt dar. Wenn man die Randhöhe des Schulhofes erhöht (z.B. auf 1000) lässt sich mit diesem Skript eine sehr hohe Auslastung im Browser erzeugen. Dann funktioniert auch die Darstellung nur noch bedingt.