seeseekey.net - Invictus Deus Ex Machina

Wenn man eine AVI Datei unter C# schrei­ben möchte, wird man fest­stel­len das es zwar viele Wege gibt, aber kei­ner die­ser Wege führt nach Rom. Jede vor­ge­schla­gende Vari­ante hat meist Abhän­gig­kei­ten, wel­che man nicht haben möchte. So wird bei vie­len Vari­an­ten FFMPEG als DLL genutzt, bei ande­ren wer­den Win­dows DLLs genutzt, was dazu führt das der Quell­code nicht unab­hän­gig von der Platt­form ist. Abhilfe schafft hier die freie unter der MIT-Lizenz lizen­zierte Biblio­thek Shar­pAvi. Um eine AVI-Datei zu schrei­ben sind mit Hilfe der Biblio­thek nur einige Zei­len Quell­text nötig:

//AviWriter anlegen
AviWriter writer=new AviWriter("test.avi");
writer.FramesPerSecond=25;

//Videostream anlegen
IAviVideoStream stream=writer.AddVideoStream();
stream.Width=1920;
stream.Height=1080;
stream.Codec=KnownFourCCs.Codecs.Uncompressed;
stream.BitsPerPixel=BitsPerPixel.Bpp24;

//Encode für Kompression anlegen
//Ohne Encoder wird die Datei unkomprimiert gepsiechert (stream.WriteFrame)
var encoder=new MotionJpegVideoEncoderWpf(stream.Width, stream.Height, 100);
var encodingStream=new EncodingVideoStreamWrapper(stream, encoder);

//Schwarzen Frame anlegen
byte[] frameData=new byte[stream.Width*stream.Height*3];

//Frames schreiben
for(int i=0;i<25; i++)
{
    encodingStream.WriteFrame(frameData, 0);
}

//Writer schließen
writer.Close();

In diesem Beispiel wird eine AVI Datei mit 25 schwarzen Frames erzeugt, was bei der angegebenen Framerate exakt einer Sekunde entspricht. Zu finden ist SharpAvi auf der offiziellen Webseite. Alternativ kann der Spiegel auf GitHub genutzt werden.

Bei Tweepy han­delt es sich um eine freie unter der MIT-Lizenz lizen­zierte Twit­ter­bi­blio­thek für Python, deren offi­zi­elle Web­seite unter tweepy.org zu fin­den ist. Unter ande­rem wird diese Biblio­thek für den Twit­ter Radier­gummi genutzt. Im Gegen­satz zu frü­her hat sich die Instal­la­tion der Biblio­thek etwas ver­än­dert. Hier­für sollte man jetzt pip nut­zen. Dabei han­delt es sich um ein Tool zur Paket­ver­wal­tung unter Python. Zur Instal­la­tion gibt man im Ter­mi­nal fol­gen­des ein:

curl -O https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

Damit ist pip instal­liert und kann genutzt werden:

sudo pip install tweepy

Pip instal­liert hier­mit die Biblio­thek Tweety und löst alle Abhän­gig­kei­ten auf, so das diese anschlie­ßend sys­tem­weit genutzt wer­den kann.

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