seeseekey.net - Invictus Deus Ex Machina

Wenn man eine PHP-Applikation schreibt, wel­che in irgend­ei­ner Form mit Daten han­tiert, so feh­len einem bei der Ent­wick­lung meist plau­si­ble Test­da­ten. An die­ser Stelle springt die Biblio­thek Faker ein. Mit die­ser Biblio­thek ist es mög­lich die unter­schied­lichs­ten Daten zu erzeu­gen. Ein Mini­mal­b­ei­spiel würde dabei so aussehen:

require_once '/path/to/Faker/src/autoload.php';
$faker = Faker\Factory::create();
echo $faker->name; //Erzeugt einen Namen

Mög­lich wird dies durch die unter­schied­lichs­ten Pro­vi­der wel­che ange­fan­gen bei Lorem Ipsum über Mail­adres­sen bis Datums­an­ga­ben und Has­hes alles lie­fern was das Herz begehrt. Die Biblio­thek selbst steht unter der MIT-Lizenz und ist somit freie Soft­ware. Zu fin­den ist Faker in einem Git­Hub Repo­sitory.

Möchte man in einer .NET respek­tive Mono­spra­che einen Anwen­dung schrei­ben wel­che mit der Twit­ter API inter­agiert, so sollte man hier­für eine Biblio­thek nut­zen um den Auf­wand in Gren­zen zu halten.

tweetinvi.codeplex.com

Eine emp­feh­lens­werte Bibli­to­thek in die­sem Bereich ist dabei Tweet­invi wel­che auf Code­P­lex zu fin­den ist. Tweet­invi ist dabei unter der Micro­soft Public License lizen­siert und somit freie Soft­ware. Die Biblio­thek ist dabei pro­blem­los in der Lage meh­rere Mil­lio­nen Tweets zu ver­ar­bei­ten und befin­det sich in akti­ver Ent­wick­lung. Ein ein­fa­ches Bei­spiel um einen Tweet abzu­set­zen könnte dabei so aussehen:

IToken token=new Token(twitterAccessToken, twitterAccessTokenSecret, twitterConsumerKey, twitterConsumerSecret);
ITweet tweet=new Tweet(tweetText, token);
bool success=tweet.Publish();

Damit hätte man den ers­ten Tweet mit die­ser Biblio­thek abgesendet.

Bei Open­Lay­ers han­delt es sich um eine JavaScript-Biliothek zur Dar­stel­lung von Kar­ten, im spe­zi­el­len zur Dar­stel­lung von Geo­da­ten. Die Biblio­thek steht dabei unter der BSD-Lizenz (2er Klau­sel Ver­sion). So fußt z.B. das Front­end von OpenStreetMap.org auf die­ser Biblio­thek. Mit Hilfe der Biblio­thek ist es ein leich­tes Web­an­wen­dun­gen zu schrei­ben wel­che Web Fea­ture Ser­vices oder Web Map Ser­vices nut­zen. Auch das Ein­bin­den von Open­Street­Map oder den Google Kar­ten ist kein Pro­blem. Wer vor hat in nächs­ter Zeit so eine Anwen­dung zu schrei­ben, der sollte sich Open­Layer anschauen. Die offi­zi­elle Seite ist dabei unter http://openlayers.org/ zu finden.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/BSD-Lizenz
http://de.wikipedia.org/wiki/OpenLayers

Bei XMPP wel­ches auch unter den Namen Jab­ber bekannt ist, han­delt es sich um freies und stan­dar­di­sier­tes Pro­to­koll für Instant Mes­sa­ging. Auf der Suche nach einer ent­spre­chen­den Biblio­thek für XMPP wel­che unter iOS und Mac OS X läuft bin ich auf das „XMPP­Frame­work“ gesto­ßen. Die Selbst­be­schrei­bung des Autors sieht dabei viel­ver­spre­chend aus:

XMPP­Frame­work pro­vi­des a core imple­men­ta­tion of RFC-3920 (the xmpp stan­dard), along with the tools nee­ded to read & write XML. It comes with mul­ti­ple popu­lar exten­si­ons (XEP’s), all built atop a modu­lar archi­tec­ture, allo­wing you to plug-in any code nee­ded for the job. Addi­tio­nally the frame­work is mas­si­vely par­al­lel and thread-safe. Struc­tu­red using GCD, this frame­work per­forms well regard­less of whe­ther it’s being run on an old iPhone, or on a 12-core Mac Pro. (And it won’t block the main thread… at all)

Das Frame­work ist dabei unter https://github.com/robbiehanson/XMPPFramework zu fin­den und wird unter einer BSD Lizenz zur Ver­fü­gung gestellt. Neben der Doku­men­ta­tion im Wiki gibt es auch eine Google Group wel­che unter https://groups.google.com/forum/?fromgroups#!forum/xmppframework zu fin­den ist.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/Xmpp

Es gibt Dinge wel­che man immer wie­der gebrau­chen kann. In diese fal­len unter ande­rem Mathe­par­ser. Einer die­ser Par­ser ist der Yet Ano­ther Math Par­ser kurz YAMP. Dabei han­delt es sich um einen von Flo­rian Rappl in C# geschrie­be­nen Par­ser. Der Par­ser beherscht dabei die Grund­re­chen­ar­ten, sowie tri­go­me­tri­sche Funk­tio­nen (Sinus, Cosi­nus et cetera) und einige andere Dinge. Die Biblio­thek steht dabei unter der BSD Lizenz, nach­dem sie vor­her nur unter der CPOL Lizenz ver­füg­bar war. Bezo­gen wer­den kann sie unter https://github.com/FlorianRappl/YAMP.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.florian-rappl.de/Articles/Page/143/YAMP

Es gibt die ein­fa­che Art und die nicht ganz so ein­fa­che Art. So ist es zum Bei­spiel unter C# ziem­lich ein­fach eine Biblio­thek zu einem Pro­jekt hin­zu­zu­fü­gen und diese anschlie­ßend zu benut­zen. Also was liegt näher als das glei­che unter Objec­tive C mit­tels Xcode zu versuchen.

Und dort merkt man dann das Objec­tive C ein Super­set von C ist. Es ist lei­der nicht ganz so ein­fach wie man es sich wünscht. Aber fan­gen wir von vorne an. Gege­ben seien zwei Projekte:

  • Taschen­rech­ner (iOS App)
  • LibCore (Cocoa Touch Bibliothek)

Die Biblio­thek „LibCore“ soll dabei dem Pro­jekt „Taschen­rech­ner“ hin­zu­ge­fügt wer­den, damit man die­ses die ent­spre­chen­den Funk­tio­nen nut­zen kann. Unter Objec­tive C gibt es Frame­works und Biblio­the­ken. Frame­works kön­nen auf den iOS Gerä­ten nicht benutzt wer­den, damit blei­ben nur noch sta­ti­sche Bibliotheken.

Die Ein­stel­lun­gen für die Suchpfade

Im ers­ten Schritt müs­sen im Pro­jekt die Such­pfade defi­niert wer­den. Dazu gehen wir in die Pro­jekt­ein­stel­lun­gen in den Punkt „Build Set­tings“ und suchen dort nach „Hea­der“. Die Suche wird dann den Punkt „Hea­der Search Paths“ fin­den. Dort tra­gen wir den Pfad zur ent­spre­chen­den Biblio­thek ein.

Nun wer­den Hea­der­da­teien wel­che mittels:

#import "LibCore.h";

ein­ge­bun­den wer­den vom Com­pi­ler gefun­den. Beim Lin­ker kommt es aller­dings noch zu Feh­lern. Des­halb zie­hen wir das Pro­jekt (die „LibCore.xcodeprj“) auf unse­rer Taschen­rech­ner­pro­jekt. Dadurch ist die­ses Pro­jekt nun ein „Unter­pro­jekt“ von Taschen­rech­ner. In den Pro­jekt­ein­stel­lun­gen suchen wir nun den Tab „Build Pha­ses“ auf „Link Binary With Libra­ries“ und fügen dort die „LibCore.a“ hinzu.

Die Biblio­thek wird dem Lin­ker bekannt gemacht

Danach sollte das Pro­jekt mit der Biblio­thek ohne Pro­bleme kompilieren.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/Xcode
http://de.wikipedia.org/wiki/Objective_C

Mitte Juli wird die Regio­nal­bi­blio­thek im HKB geschlos­sen. Hin­ter­grund ist der Umzug der Biblio­thek in das Rat­haus, wegen der Bau­ar­bei­ten bzw. der Moder­ni­sie­rung des HKBs.

Nach dem vor­läu­fi­gen Umzug ins Rat­haus ist die Biblio­thek ab dem 1. Okto­ber 2012 wie­der geöff­net. Sie ist dabei in rech­ten Anbau des Rat­hau­ses zu fin­den, wel­cher durch den Haupt­ein­gang zu errei­chen ist. Die genaue Lage wird dabei noch aus­ge­schil­dert. Bücher wer­den im übri­gen bis Okto­ber ver­län­gert, damit nie­mand Gebüh­ren zah­len muss wenn die Biblio­thek geschlos­sen ist.

Bei Socket.IO han­delt es sich um eine Java­script Biblio­thek wel­che eine Socket basierte Kom­mu­ni­ka­tion (unter ande­rem über Webso­ckets und diverse Fall­backs) ermög­licht. Zu fin­den ist diese Biblio­thek unter http://socket.io. Meist wird diese zusam­men mit Node.js benutzt.

Möchte man aller­dings nur den Cli­ent basie­ren­den Teil benut­zen so steht man im ers­ten Moment vor dem Pro­blem das man kei­nen offi­zi­el­len Down­load dafür fin­det, da die Instal­la­tion nur über „npm“ beschrie­ben wird. Aller­dings wird man im Repo­sitory unter https://github.com/LearnBoost/socket.io-client/tree/master/dist fün­dig. Dort kann man sich die fer­ti­gen Cli­ent­da­teien her­un­ter­la­den und anschlie­ßend benutzen.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/Node.js
http://stackoverflow.com/questions/6587319/how-to-get-socket-io-0–7-client-file
http://stackoverflow.com/questions/6884413/socket-io-the-good-parts-and-the-bad-parts

Die Daten in einer SQLite Daten­bank sind im Nor­mal­fall unver­schlüs­selt. Natür­lich kann man die Daten von Hand ver­schlüs­seln, was aber auf Dauer wahr­schein­lich etwas anstren­gend wird. Anhilfe schafft hier die Biblio­thek SQL­Ci­pher mit wel­cher SQLite Daten­ban­ken ver­schlüs­selt wer­den kön­nen. Die Biblio­thek ist dabei Open Source und steht unter der BSD Lizenz. Zu fin­den ist die Biblio­thek unter http://sqlcipher.net/.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/Sqlite

Bei ENet (http://enet.bespin.org/) han­delt es sich um eine Biblio­thek wel­che ursprüng­lich im Open Source Shoo­ter Cube zum Ein­satz kam. Man könnte sagen das ENet so etwas wie „TCP über UDP“ bie­tet. Nun gibt es von ENet nicht nur die ursprüng­li­che C Ver­sion son­dern auch unter­schied­lichs­ten Por­tie­run­gen und Bin­dings, wobei letz­tere klar über­wie­gen. An Por­tie­run­gen ist mir eigent­lich nur jeNet bekannt, bei wel­chem es sich um eine Por­tie­rung von ENet zu Java handelt:

Auf der Seite der Bin­dings sieht es schon umfang­rei­cher aus:

Schade ist nur, das es nicht mehr native Imple­men­tie­run­gen gibt, son­dern meist nur Bin­dings. Wenn ihr wei­tere Bin­dings oder Por­tie­run­gen von ENet kennt, schreibt es in den Kom­men­ta­ren ;)