Clang, LLDB und libc++ unter Ubuntu bauen

Information: Dieser Artikel ist leider momentan nur auf Englisch verfügbar. Ich werde ihn so bald als möglich auch in Deutsch veröffentlichen.

Recently I wanted to support building of one of my projects (Life++) on Linux. Since this project makes use of some of the features of the fairly new C++11 Standard, I thought I’d use clang and libc++.

Because I really like clang and libc++ I thought it would be cool if i built clang, llvm and libc++ using clang and libc++. Sounds a little strange, doesn’t it? As i learned throughout my adventures, building libc++ also involved another decission to be made. Would i build it using the libsupc++ ABI or the libc++abi ABI. A quick google check made it clear for me, I wanted to have the libc++abi ABI since it was feature complete, modern, and written by the people behind llvm, clang and libc++.

Weiterlesen

Warum Haskell interessant ist

Nur einer von vielen Gründen:

Der Ausdruck:

[(x,y,z) | x <- grundmenge, y <- grundmenge, z <- grundmenge, x^2 + y^2 == z^2]

,wobei grundmenge = [1..], braucht zur vollständigen Berechnung unendlich lange. Fragt man Haskell jedoch mit

(56,90,106) `elem` [(x,y,z) | x <- grundmenge, y <- grundmenge, z <- grundmenge, x^2 + y^2 == z^2]

danach ob (56,90,106) in diesem Ausdruck enthalten ist, benötigt es nur einen Bruchteil einer Sekunde.

Der Staatstrojaner

Endlich haben wir der digitalen Staatswillkür Tür und Tor geöffnet. Heute hat der Bundesrat entschieden den Einsatz des so genannten Staatstrojaners zu erlauben.

Es werden proprietäre und intransparente Systeme zur Überwachung der Bevölkerung eingesetzt um sie vor sich selber zu schützen. Dass das alles nichts nützt und nur Millionen kostet ist nicht so schlimm, denn wenigstens fühlt sich der Normalbürger sicher und der subversive hat immer noch kein Problem. Jetzt noch Internetsperren à la Nachbarland und wir können uns direkt an Deutschland angliedern und müssen nicht mehr mühsam über den EU Beitritt abstimmen. Vielen herzlichen dank! Und nicht vergessen: Es ist ganz ganz wichtig, dass der Staat die Freiheiten der Bürger, wie zum Beispiel Redefreiheit und Privatsphäre im richtigen Maß erhält, denn zu viel davon tut niemandem gut. Deshalb schicke ich Geschäftsbriefe auch auf Postkarten und verteile meine Pincodes und und gebe jedem freiwillig alle meine persönlichen Daten, ob er sie will oder nicht. Jetzt noch die Demokratie abschaffen und alles ist perfekt!

Und bitte liebe Bevölkerung: ladet euren Frust nicht auf die Datenschützer etc. ab. Verschiedene Organisationen, wie zum Beispiel der CCCZH haben sich für eure rechte eingesetzt. Jetzt ist jeder einzelne gefragt, dieser höchst fragwürdigen Praktik Einhalt zu gebieten. Jeder einzelnen kann und muss sich informieren. Die Möglichkeiten dafür sind da, beim CCCZH und dem Schweizer Fellowship der FSFE.

Weiterführende Links zum Thema:

Fritzing Fab

Vorgestern habe ich meine erste Platine von, hergestellt von Fritzing Fab, erhalten. Und ich muss sagen ich bin wirklich begeistert von der Qualität.

Fritzing Fab ist ein Dienst von Fritzing. Fritzing ist eine Open Source Software, welche es auch für Laien erlaubt, elektronische Schaltungen digital aufzubauen und Schaltpläne und Platinen-Layouts daraus abzuleiten. Die Software befindet sich momentan noch in der Beta-Phase, ist jedoch bereits sehr gut einsetzbar. Doch nicht nur für Laien ist Fritzing geeignet sondern auch für Profis, die nur mal schnell etwas “zusammenstecken” wollen. Fritzing läuft unter Mac OS X, Linux und Windows und kann, da es Open Source ist, von jedem modifiziert werden.

Fritzing Fab ist ein Dienst von Fritzing, welcher es erlaubt

Arduino - DIL16 ProtoShield - Fritzing

Die Version des mit Fritzing hergestellten Shields.

in Fritzing erstellte Layouts direkt herstellen zu lassen. Preislich liegt Fritzing Fab eigentlich sehr gut im Rennen, vor Allem wenn man bedenkt, dass sich auch Einzelstücke herstellen lassen. Beispielsweise kostet eine Platine in der Grösse eines Arduino Shields ca. 29€ und bei zwei Stück sind es bereits nur noch 24€ pro Stück. Auch die Qualität der Platine hat mich überzeugt wieder einmal etwas bei Fritzing Fab herstellen zu lassen. Der Aufdruck auf den Platinen ist von sehr hoher Qualität und ich finde, dass die schwarzweisse Farbkombination dem ganzen eine ganz eigene und ziemlich coole Note verleiht. Die Kanten scheinen gefräst zu sein und sind dadurch absolut sauber. Auch die Lötaugen sind qualitativ hochwertig und es lässt sich gut mit ihnen arbeiten.

Alles in Allem gebe ich Fritzing Fab 5 von 5 Sternen für die ausgezeichnete Qualität der Platinen für einen so günstigen Preis! Und mit jeder Bestellung wird nicht nur die Platine bezahlt, sondern auch die Weiterentwicklung von Fritzing.

Debugbaren Code schreiben

Mir gehts es oft so, dass wenn ich gerade ein Programm oder ein Framework schreibe, ich dazu tendiere, Mehrere Operationen in einer Zeilen zusammen zu fassen. Das bringt ein grosses Problem mit sich: der Code lässt sich so kaum mehr debuggen.

Ein gutes Beispiel für diesen “schlechten” Code findet sich in meinem Twitter Framework FMTwitterKit. In den Initialisierungsmethoden der Klassen FMTweet und FMTwitterUser finden sich Zeilien wie diese:

[self setText:[[[aXMLNode objectsForXQuery:@"for $p in text return $p" error:0] objectAtIndex:0] stringValue]];

Zwar funktioniert diese Statement einwandfrei, aber was passiert wenn sich einmal der Name der abgefragten Elements ändert? Oder was wenn ich ausversehen einmal einen Schreibfehler in einer solchen Anweisung habe? In diesem Fall hat man dann kaum eine Chance, herauszufinden was schief gegangen ist, denn es werden nirgendwo Zwischenwerte gespeichert und ich kann auch nicht bei einem bestimmten Teil der Anweisung einen Brakepoint setzen um herauszufinden wo das Problem liegt. Viel besser wäre die obige Zeile in etwa so aufzuteilen:

NSArray* textNodeArray = [aXMLNode objectsForXQuery:@"for $p in text return $p" error:0];
NSXMLNode* textNode = [textNodeArray objectAtIndex:0];
[self setText:[textNode stringValue]];

Dadurch kann an jedem Zwischenschritt ein Brakepoint gesetzt werden, und man kann sofort erkennen in welchem Schritt etwas schief gegangen ist.

Manchmal muss man sich einfach selbst dazu zwingen, auch wenn man sich noch so sicher ist, ein paar Zeilen Code mehr zu schreiben damit man es dann im Ernstfall viel einfacher hat.