Freitag, 6. November 2009

By popular demand: Meine .kshrc

Ich werde des öfteren mal nach meinen Einstellungen für die ksh93 die ich als meine Defaultshell auf allen Systemen die ich derzeit aktiv verwende einsetze. Der Commandeditor fc hat es mir in dieser Shell besonders angetan ganz zu schweigen davon das sie im Vergleich zu anderen Shells ziemlich bugfrei ist.

Für alle nicht vi-User VORSICHT: Diese Config kommt mit aktiviertem vi-Modus daher ;) Außerdem habe ich PS ein wenig blogtauglicher formatiert.

Noch ein Tipp für die Mac-User: die ksh in der Standardinstallation ist ziemlich veraltet. Schnappt euch Macports und installiert sie euch daraus. Danach die neue Shell in die /etc/shells eintragen und sudo chsh -s /opt/local/bin/ksh username und ksh93 ist eure Defaultshell.


set -o noclobber
set -o ignoreeof
set -o globstar
set -o vi

HISTFILE=$HOME/.histfile.$(tty | cut -d/ -f 3)
RED=$(print -n "\033[0;31m")
GREEN=$(print -n "\033[0;32m")
YELLOW=$(print -n "\033[0;33m")
BLUE=$(print -n "\033[0;34m")
PURPLE=$(print -n "\033[0;35m")
CYAN=$(print -n "\033[0;36m")
WHITE=$(print -n "\033[0;38m")

export HOSTNAME=$(hostname)
export EDITOR="vim"
export HISTEDIT="vim"

_checkdir() {
if [[ $PWD == $HOME ]]
then
print -n "~"
elif [[ $PWD == "/" ]]
then
print $PWD
else
print -n ${PWD##*/}
fi
}

if [[ $(uname) == "Darwin" ]]
then
export PS1='${WHITE}[${GREEN}${USER}${WHITE}@${YELLOW}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}$HISTCMD${WHITE}> '
alias ls='ls -FG'
alias pkill='killall'
alias pgrep='ps -A | grep -i'
alias grep='grep --color=always'
elif [[ $(uname) == "SunOS" ]]
then
export PS1='[${WHITE}[${GREEN}${USER}${WHITE}@${CYAN}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}${HISTCMD}${WHITE}> '
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:\
/opt/SunStudioExpress/bin:$PATH"
alias ls='ls -F'
elif [[ $(uname) == "FreeBSD" ]]
then
export PS1='[${WHITE}[${GREEN}${USER}${WHITE}@${PURPLE}\
${HOSTNAME}${WHITE}:${BLUE}$(_checkdir)${WHITE}]:\
${RED}${HISTCMD}${WHITE}> '
alias ls='ls -FG'
alias pkill='killall'
alias grep='grep --color=always'
alias pgrep='ps -A | grep -i'
fi

alias !!='fc -s -1'
alias vi='vim'

Dienstag, 15. September 2009

Gespiegelt: Festnahme auf "Freiheit statt Angst"

Ich bin so frei und spiegele ebenfalls einen Blogeintrag der dazu führt das diverse Blogs derzeit den Geist unter der Last aufgeben.

Am Wochenende des 11.-13. September 2009 fand in Berlin die Demonstration „Freiheit statt Angst“ statt. Ich war am Freitag gegen Abend in Berlin angekommen und kam am frühen Samstag Mittag mit der U-Bahn am Potsdamer Platz an, von dem aus die Demonstration starten sollte. Beim Betreten des Platzes zwischen Sony Center und Daimler Chrysler City wurde ich von einem Polizisten der Bereitschaftspolizei freundlich angesprochen, ob er einen Blick in meinen Rucksack werfen dürfe. Ich gestattete ihm dies ebenso freundlich. Während er den Inhalt meines Rucksacks untersuchte (eine Regenjacke, eine Wasserflasche) fragte er, ob ich irgendwelche spitzen Gegenstände mit mir führte. Tatsächlich hatte ich – wie immer – mein Letherman Tool, eine Art Multifunktionswerkzeug, im Rucksack. Dies gab ich an und suchte es auf Nachfrage aus dem Rucksack. Ich erklärte mein Letherman dem Polizisten, der das Werkzeug nicht kannte und zeigte ihm auch, dass sich ein Messer zwischen den Werkzeugen befindet. Der Polizist begutachtete das Tool und erklärte mir dann, dass das Mitführen eines Messers auf Demonstrationen nicht erlaubt sei. Er fragte, ob ich das Messer noch schnell nach Hause bringen könnte. Das konnte ich nicht, denn ich bin ja kein Berliner. Der Polizist bot mir daraufhin an, das Messer bei der Polizei vor Ort abzugeben und es nach der Veranstaltung wieder abzuholen. Ich willigte ein.
Gemeinsam gingen wir um die Ecke in die Potsdamer Straße, wo mehrere Einsatzwagen der Polizei standen. Der mich begleitende Polizist erklärte seinen Kollegen, dass ich das Tool abgeben wolle. Der Ton der dort wartenden Beamten war deutlich unfreundlicher, ich wurde abgetastet und sollte meinen Rucksack in einen der Mannschaftswagen stellen. Auf Nachfrage wurde mir gesagt, dass dies aus Sicherheitsgründen geschehe, damit ich keine Waffe aus dem Rucksack ziehen könne. Meinen Personalausweis stellte ich bereitwillig zur Verfügung, um das Ausstellen der Formulare zu erleichtern. Während nun ein weiterer Polizist abseits an einem anderen Wagen die Formulararbeit machte, erklärte der Beamte, der mich ursprünglich angesprochen hatte, seinen Kollegen, dass er das Tool nicht gefunden hätte, sondern dass ich es ihm ausgehändigt hätte, wonach die Behandlung und der Ton mir gegenüber deutlich freundlicher wurde.


Ich erkundigte mich, wo ich das Tool später wieder abholen könne. Ich könne es im “Abschnitt 34″, Alt Moabit 145 wieder abholen, wurde mir mitgeteilt. Dann wurde ich gefragt, ob ich “schon mal Kontakt mit der Polizei” gehabt habe: Nein. Auf Nachfrage, warum mir diese Frage gestellt wurde, sagte mir der Beamte, dass eine routinemäßige Kontrolle über Funk meiner Person erfolgen würde. Kurze Zeit später kam der Polizist mit dem Formular wieder und eröffnete mir, dass über Funk die Order ergangen sei, dass gegen mich eine Anzeige geschrieben werden müsse. Ich war total entsetzt, doch die umstehenden Polizisten versicherten mir, dies sei kein Problem und nur ein formaler Akt; die Staatsanwaltschaft würde das Verfahren voraussichtlich automatisch wieder einstellen.


Meinen Schrecken minderte das wenig, doch als erstes sollte ich das Protokoll über die, wie es mittlerweile hieß, “Beschlagnahme” des Tools unterschreiben, was ich auch tat. Wider Erwarten durfte ich nun nicht zur Demonstration gehen, sondern musste mit aufs Polizeipräsidium kommen, ein Fahrzeug war bereits auf dem Weg, um mich abzuholen. Der Polizist, der mich am Platz angesprochen hatte, registrierte meine aufkeimende Panik und versuchte, mich zu beruhigen. Auch er habe damit nicht gerechnet. Aber er könne nichts tun. Dies sei eine Anweisung “von oben”.


Eine Anweisung von oben war offensichtlich auch der vergitterte Wagen, in dessen Zelle ich eingeschlossen und abtransportiert wurde. Zu diesem Zeitpunkt hatte ich nichts mehr bei mir außer den Durchschlag des Formulars über die Beschlagnahme. Mein Rucksack mit komplettem Inhalt (Handy, Fotoapparat, Schlüssel, Geldbörse etc.) hatte der Beamte in der Fahrerkabine. Ich studierte den Durchschlag: Dort war angekreuzt: Festgenommen. Nun brach ich erstmal vollständig zusammen… Auf Nachfrage, was mir vorgeworfen würde und warum ich festgenommen sei und warum ich in einer Gefängniszelle sitze wurde mir gesagt, dies würde ich auf dem Präsidium erfahren, es sei aber alles nicht so schlimm und festgenommen höre sich viel schlimmer an als es sei.


Der Wagen wollte gerade losfahren, hielt dann aber noch mal wieder an – es sei noch zu einer weiteren Festnahme gekommen und wir müssen noch kurz warten um eine weitere Person mitzunehmen. Der Polizist der bis dahin noch mit hinten im Wagen (außerhalb der Zelle) saß und sozusagen meinen einzigen Ansprechpartner dar stellte, verließ daraufhin das Fahrzeug wieder und ließ mich allein. Total aufgelöst versuchte ich den Beamten vorne im Fahrzeug anzusprechen: was los sei und ob ich noch mal an die frische Luft könne, da mir schlecht sei von der stickigen Luft (und der Situation) sei. Erst nach mehrmalige Ansprache sagte er kurz es ginge gleich weiter und schob das Sichtfenster zwischen Fahrer Bereich und dem hinteren Teil des Wagens zu.


Nach geschätzten 10 Minuten stiegen der Beamte von zuvor, eine Kollegin und ein weiterer scheinbar festgenommener Junge ein Wir fuhren darauf hin los. Nach etwa 10min Fahrt kamen wir an einer PolizeiwWache an und wurden hinein geführt. Nach kurzem Warten vor einer Tür wurden wir herein gelassen und ich wurde in eine Zelle geführt,die Tür wurde hinter mir verschlossen. Kurz Zeit später wurde ich wieder aus der Zelle geholt und sollte mich auf dem Flur vor eine Wand stellen, wo ein Beamter mit einer Digitalkamera Fotos von mir machte. Anschließend wurde ich wieder in die Zelle zurück geführt. Nach geschätzten weitern 10 Minuten wurde ich in einen weiteren Raum geführt, wo zwei Beamten auf mich warteten. Mein Rucksack wurde nun noch mal vollständig entleert und der Inhalt protokolliert. Während dessen fragte mich einer der Protokoll führende Beamte ob ich mit einer Blutprobe einverstanden sei; ich fragte, wozu. Mir wurde erklärt, dies sei eine StandardfFrage für ein Standardformular und es würde jeder gefragt. Darauf verweigerte ich die Entnahme eine Blutprobe formell, was in dem Formular vermerkt wurde.


Im Anschluss wurde ich aufgefordert mich bis auf die Unterhose auszuziehen (das Recht diese doch recht unangenehme Situation verweigern zu können kannte ich zu dem Zeitpunkt leider nicht) und meine Anziehsachen wurden erneut durchsucht. Nach kurzer Zeit erhielt ich sie zurück, durfte ich mich wieder anziehen, musste noch meinen Gürtel und meine Schnürsenkel abgeben und unterschrieb das Protokoll in dem alles was ich bei mir hatte aufgeführt war.


Mein Frage was mir denn nun vorgeworfen würde konnte der Beamte wieder nicht beantwortet: “das wisse er nicht, er sei nur dazu da meine Sachen aufzunehmen”. Ich fragte was den nun passieren würde und er sagte mir, dass ich vermutlich gleich befragt würde und ich dann auch Antwort auf meine Fragen erhalten würde. Ich schilderte den beiden anwesenden Beamten noch mal den Sachverhalt und sie erklärten mir, ich würde bestimmt schnell wieder entlassen, er führe schließlich auch meist sein Taschenmesser mit sich und ich hätte es ja freiwillig abgegeben.


Nach dem ich anschließend wieder in eine Zelle gesperrt worden war, begann das lange Warten. Von Zeit zu Zeit wurde die Tür kurz geöffnet und direkt wieder geschlossen – bei jedem Mal dachte ich, es würde nun endlich weiter gehen und ich würde endlich erfahren, was mir eigentlich vorgeworfen wurde, dem war aber leider nicht so. Als wieder einmal die Tür geöffnet wurde, fragte ich schnell nach der Uhrzeit – es war mittlerweile 16.15 Uhr. Ich saß also mittlerweile seit fast 4 Stunden fest und wusste immer noch nicht, warum. Es muss etwa 17.00 Uhr gewesen sein, als ich endlich aufgefordert wurde, mitzukommen. Meine Hoffnung nun endlich mit einem Ermittler sprechen zu können um den ganzen Sachverhalt aufzuklären, wurde aber leider wieder enttäuscht. Stattdessen wurde in einen Raum, ein Stockwerk tiefer, zum “LKA Berlin Erkennungsdienst” geführt.


Auch den drei Beamten dort schilderte ich unter Tränen nochmals den ganzen Sachverhalt und fragte, ob ich der Erkennungsdienstlichen Erfassung denn wenigstens formell widersprechen könne, da es sich doch ganz klar um ein Missverständnis handele – dies wurde verneint und ein Schild an der Wand wies mich mittels eines Paragraphen darauf hin, dass die Erkennungsdienstlichen Maßnahmen notfalls auch mit Gewalt durchgeführt werden könnten. Ich könne aber mit Hilfe eines Anwalts im Nachhinein der Maßnahme widersprechen, wozu er mir auch raten würde. Meine Frage, wer die Maßnahme angeordnet hätte, wurde mir mit einem Buchstabenabkürzung beantwortet, deren Bedeutung mir die anwesenden Beamten aber nicht erklären konnten oder wollten. Es wurden meine Fingerabdrücke von beiden Händen (alle Finger und komplette Hand), in doppelter Ausführung genommen, sowie erneut Fotos, offensichtlich für die Verbrecherkartei,gemacht.


Zurück in der Zelle betätigte ich nach kurzer Zeit die Klingel, es muss mittlerweile etwa 18.00 gewesen sein, um darum zu bitten meinen Rechtsanwalt anrufen zu können, da ich anfing zu befürchten auch noch die Nacht in der Zelle zuzubringen zu müssen. Wieso hast du das denn nichtvorher gefragt? Kommt hier komisch. Dies konnte der Polizist nicht entscheiden, versprach mir aber, seinen Vorgesetzten zu informieren und ihn zu mir zu schicken. Als nach einer geschätzten halben Stunde immer noch nichts passiert war, schellte ich erneut – ich fühlte mich zu diesem Zeitpunkt schon völlig ausgelaugt und fertig, was man mir auch anzusehen schien, da die Beamtin mit der ich sprach mir sagte es würden „jetzt erstmal die Sanitäter kommen“.


Zum Glück bestätigte sich meine erste Befürchtung, nun auch noch in eine psychiatrische Klinik verlegt zu werden, nicht (nichts erschien mir mehr unmöglich), sondern der Polizeisanitäter holte mich ab und wir gingen in seinen Behandlungsraum. Physiologisch wies ich zu diesem Zeitpunkt eine ausgeprägte Hypertonie (hoher Blutdruck) und einen sehr schnellen Puls auf. Die Vermutung, dass ich vermutlich absolut dehydriert war, schien plausibel, denn außer eine Tasse Kaffe zum Frühstück und einen kleinen Plastikbecher Tee, den ich nach mehrmaliger Nachfrage erhalten hatte, hatte ich den ganzen Tag noch nichts getrunken. Hier kam ich das erste Mal wieder etwas zur Ruhe und hatte das Gefühl als Mensch ernst- und wahrgenommen zu werden. Der Beamte sagte mir dann auch, dass er gehört hätte, dass ich vermutlich in der nächsten Stunde entlassen würde.


Nach einem anschließenden weiteren kurzen Aufenthalt in der Zelle erhielt ich gegen 19.30 tatsächlich alle meine Sachen (bis auf das Letherman Tool) zurück und konnte die Polizeiwache verlassen.


Bis zum heute weiß ich nicht was mir eigendlich vorgeworfen wurde. Meinen Anwalt habe ich bereits kontaktiert und es wird sich wohl in den nächsten Wochen zeigen wie es weiter geht. Mein vorrangiges Ziel ist natürlich mit meinen Fingerabdrücken und meinen Fotos wieder aus der Datei des LKAs heraus zu kommen.


Ich kann sagen, daß die Ereignisse vom Samstag das schlimmste sind was mir in meinem Leben bisher passiert ist. Die Aussage das Freiheitsentzug mit das brutalste ist, was man einer menschlichen Seele antun kann, kann ich voll bestätigen – nie zuvor habe ich mich so ängstlich und hilflos gefühlt.


Das man Angst haben muss, und die habe ich im Moment noch, auf einer friedlichen Demonstartion scheinbar grundlos von der Polizei verprügelt oder verhaftet zu werden, kommt in meinen Augen faktisch einer massiven Einschränkung des Demonstrationsrechts gleich.


Ebenfalls schockierend fand ich wie der Staatsapperat einmal ins Rollen gebracht, nicht wieder zu stoppen war. Persöhnlich kann man wohl kaum einem der Beteiligten der Exekutive einen Vorwurf machen – ein Jeder der Beteiligten konnte sich darauf berufen nur Befehle und Anweisungen ausgeführt zu haben. Diese Argumentation habe ich bisher nur von Angehörigen ehemaliger Unrechtsregimen gehört – ich habe mir eigendlich immer verboten ernsthaft zu glauben, daß so etwas im Rechtsstaat Bundesrepublik Deutschland tatsächlich möglich ist – wurde aber schmerzlich eines besseren belehrt.

Sonntag, 6. September 2009

Bug: Snow Leopard's dynamic_cast und explizit instanziierte C++ Templates

Derzeit arbeite ich an einem Projekt welches ich auf dem Mac (allerdings nicht für den Mac) entwickle. Dabei verwende ich unter anderem auch gerne die RTTI (RunTime Type Information) Fähigkeiten von C++ die mir unter anderem auch sichere Downcasts zur Verfügung stellen (Ist ein Downcast nicht möglich wird der Nullpointer zurückgegeben). Das alles klappt durchaus gut, es sei denn ich schreibe eine Lib in der ich bereits die Templates instanziiere die ich später in meiner Applikation nutzen will. Alles kompiliert zwar wunderbar und das Template lässt sich ebenfalls nutzen sobald ich aber auf Polymorphie zurückgreife wird es hässlich, da anscheinend die Typinformationen verloren gehen und dynamic_cast nicht mehr in der Lage ist richtig zu arbeiten.

Der ganze Fehler lässt sich mit folgendem Testfall reproduzieren:


//TestLib.hpp
class Base {
public:
virtual ~Base() {}
};

template <typename T>
class Derived : public Base {
public:
Derived();
};

/*TestLib.cpp
* compile with: g++ -dynamiclib TestLib.cpp -o libTestLib.dylib
*/
#include "TestLib.hpp"
#include <typeinfo>
#include <iostream>

template <typename T>
Derived<T>::Derived() {
std::cout << typeid(*this).name() << std::endl;
}

template class Derived<int>;

Wie man in der letzten Zeile sieht wird das Template Derived explizit mit int in TestLib.cpp instanziiert. Diesen Typen werden wir jetzt in einer kleinen Anwendung etwas durch die Typhierarchie scheuchen und ein sehr seltsames Verhalten beobachten.

/* main.cpp
* compile with: g++ -L. -lTestLib main.cpp -o main
*/
#include "TestLib.hpp"
#include <iostream>

int main() {
Derived<int>* i = new Derived<int>();
std::cout << typeid(*i).name() << std::endl;
Base *o = i;
std::cout << typeid(*o).name() << std::endl;
std::cout << o << std::endl;
std::cout << dynamic_cast< Derived<int>* >(o) << std::endl;
std::cout << typeid(*o).name() << std::endl;
delete i;
}

Wir erhalten folgende Ausgabe:

7DerivedIiE
7DerivedIiE
0x100100080
0
7DerivedIiE

Die Typid verändert sich nicht und trotzdem liefert ein gültiger Downcast den Nullpointer zurück. Ich habe den Code ebenfalls unter FreeBSD und DragonflyBSD getestet, in beiden Fällen war der Downcast erfolgreich. Meines Wissens tritt dieses Verhalten erst seit Snow Leopard auf, aber da ich derzeit nirgends eine aktuelle Version von Leopard laufen habe kann ich nicht testen ob es sich hier um einen neuen Bug handelt.

Der einzige Workaround der mir derzeit einfällt ist die Instanziierung des Templates in die Compilezeit der Anwendung zu verlegen.

UPDATE: Mal ein delete nachgebessert, nicht das sich hier noch jemand beschwert das mein Testcase leakt :P

Samstag, 15. August 2009

Ein Hackerspace für Münster und Umgebung.

Kaffee ist eine wunderbare Sache, vor allem wenn man ihn trinkt während man Ideen ausarbeitet. Heute war wieder einer dieser Tage. Angestachelt vom CRE zum Thema Hackerspaces hat ein Freund von mir den Entschluss gefasst ein solches Projekt in die Wege zu leiten. Ein Name war schnell gefunden: Warpzone.

Die Grundidee der Warpzone ist es, ein angemessenes Umfeld für kreative Köpfe allen Alters und Geschlechts zu bieten in dem sie sich frei entfalten können. Ein Stück Kultur also. Während so ziemlich jede Subkultur einen Platz hat an dem sie Freitag und Samstag abends rausgeht und sich selbst feiert, sind Nerds und Hacker oft isoliert im stillen Kämmerlein. Das ist hin und wieder schon gewünscht aber sozialer Kontakt wird doch schon mal hin und wieder vermisst und unter Gleichgesinnten ist man oft zu kreativen Leistungen im stande die man selber nicht für möglich gehalten hätte.

Was soll die Warpzone werden? Atmosphäre hat eine ziemlich motivierende Kraft und genau das soll die Warpzone bieten. Wie die C-Base soll sie ihren eigenen Charakter entwickeln und sich mit ihren Besuchern weiterentwickelt. Ihr hab eine Idee wie man das Treiben in der Zone noch verbessern kann? Klasse, such dir ein paar Leute und Gründe eine Initiative die das ganze umsetzt. Außerdem soll mindestens einmal die Woche die ein Vortrag gehalten werden, jeder der etwas zu erzählen hat und etwas präsentieren will, sei es eine Neuentdeckung die man umbedingt bekannter machen will oder ein Projekt das man selber an den Start gebracht hat. Bringt euch ein und erschafft etwas!

Was soll die Warpzone nicht werden? Sie soll kein Stammtisch werden in der man sich ein oder zweimal im Monat trifft und redet was man denn alles so gemacht hat. Das kann man im Zweifelsfall auch in einer Kneipe. Sie soll kein dröger Raum mit ein paar Stühlen sein in der in Redner an einem Flipchart stundenlang referiert. Wer die Warpzone betritt verlässt die normale Welt.

Nun handelt es sich bei einem solchen Projekt um ein aufwändiges Unterfangen, braucht man doch Räumlichkeiten, Möbel und einfach angemessene Infrastruktur (Nerds brauchen Netz und Werkzeug). Vor allem brauchen wir aber erst einmal Leute und Ideen mit denen sich ein solches Projekt durchziehen lässt. Im Moment sind wir zwei und die Idee ist gerade mal ein paar Stunden alt. Aber bereits eine Menge Input der sich bereits realisieren lässt, jetzt fehlst nur noch DU!

Ernsthafte Interessenten erreichen mich am besten über Jabber oder Twitter (siehe mein Profil). Also meldet euch und schafft ein Stück Hackerkultur im kreativen Vakuum ;)

UPDATE: Wir habe inzwischen einen Chatroom auf irc.freenode.org #warpzone und eine Mailing Liste

Freitag, 14. August 2009

Auch ich leiste meinen Beitrag

Auch wenn ich der Partei nicht angehöre, konnte ich einem Remix des Plakates nicht widerstehen :D

Sonntag, 9. August 2009

Podcasts und Chaosradio Express

Heute will ich mal nicht von irgendetwas technischem schreiben sondern mich mal mit dem Medium Podcast befassen, genauer mit Chaosradio Express, einem "Spin-Off" der Mutter aller deutschen Nerd-Podcasts: dem Chaosradio. (vor allem da wir Tim damit bestechen sollen Folgen zu releasen :D)

Für mich selber wurde CRE eine ansprechende Alternative als es im original Chaosradio immer mehr um das Thema Überwachung und Politik ging. Versteht mich nicht falsch, das sind wichtige Themen, aber auf Weg in die Stadt oder im Zug hab ich ganz einfach auch mal gerne etwas was mich nicht total aufregt sondern "weiterbildet" (den Wutclown kann ich auch zuhause noch prügeln ^^).

CRE ist für mich ein Ansporn mich mit Sachen zu befassen auf die ich oft selber gar nicht so ohne weiteres komme, sei es nur weil das Lesen von Dokumentation in vielen Fällen einfach zu mühselig ist. Der Mensch ist halt ein faules Tier.

Was gefällt mir besonders gut an CRE? In erster Linie sind es die sehr technischen Themen. Meistens im Bereich Betriebssysteme oder Programmiersprachen (jeder der mich kennt weiß das ich da schnell in Sammelwut verfallen und teilweise schon selber die Übersicht verliere ^^). Hier bietet CRE eine ziemlich reichhaltige Sammlung auch an etwas esoterischeren Themen wie z.B. der Sprache Dylan (von der ich bis heute keinen lauffähigen Compiler gefunden habe -_-). Ein besonderes Highlight war für mich der C++ Podcast mit Pavel Mayer, vor allem wegen der grandiosen Buchtipps (mehr davon! Ich bin süchtig nach Fachliteratur!). Auch sehr spannend war der Podcast über FreeBSD. Ich muss zu meiner Schande gestehen das ich mich mit BSD erst befasst habe als sich einige wenige in der Linuxwelt gegenüber ZFS (gibt es auch einen CRE zu ;) in meinem Augen ziemlich blöd verhalten haben (Erläuterung was ich damit meine bitte in den Kommentaren nachlesen;) ). CRE hat mir hier eine sehr schöne Einführung in die BSD Welt gegeben.

Was verspreche ich mir von CRE? In erster Linie ist es Futter fürs Hirn wenn meine Hände mit etwas anderem beschäftigt sind (trainieren oder einfach unterwegs sein). Ich möchte mich am liebsten permanent weiterbilden und das überall wo ich bin. Podcasts bieten dort eine Möglichkeit Neugierde auf bestimmte Themen zu machen oder einen einfach mal in die richtige Richtung zu schubsen wenn man selber den Wald vor lauter Bäumen nicht sieht. (You are doing it WRONG!). Auch bieten sie einem ein gewisses Gefühl an Zugehörigkeit, man sieht halt das man mit seiner Nerdigkeit nicht ganz alleine ist. Ein Gefühl was man auf dem Lande gerne mal bekommt ^^. Sie sind ein Sprachrohr unserer Kultur, einem Haufen Coder, Admins und Katzenliebhaber. Vor allem woher diese Katzenbilder eigentlich kommen war mal sehr interessant zu erfahren (auch wenn ich den Podcast im Fitnessstudio gehört habe und im Fernsehen gerade eine Raubkatze eine Kürbis verspeist hat... ich glaube ich habe selten so doof gegrinst...i can haz pumpkin?).

Für die Zukunft würde ich mir sicher noch mehr technisches Zeug wünschen, das Problem ist da aber sicherlich das es auch an geeigneten Leuten gibt. Klar könnte ich mich mit Tim in einen Raum setzen und 2 Stunden über OpenSolaris quatschen, aber ob das Endresultat jetzt so brauchbar wäre stell ich einfach mal dahin. Oft sind es auch Podcasts die man gar nicht so auf dem Schirm hatte die einen begeistern, wie z.B. über das Thema Kaffee. Plötzlich rennt man von einem Laden zum anderen und wundert sich warum man das nicht schon viel früher gemacht hat. (Auch wenn ich immer noch kein schlechtes gewissen habe diese Instant Trinkpisse von Ja! zu trinken ^^)

So. Ich habe keine Ahnung ob das Bestechung genug ist. Ich habe wieder mal das Gefühl von Hölzchen auf Stöckchen gekommen zu sein und nur um den heißen Brei geredet zu haben. Aber bei Texten ohne geschweifte Klammern tu ich mich manchmal sehr schwer ^^.



Erm... Pic unrelated!

Dieses war der erste Streich, doch der ZWEITE folgt sogleich! (Incoming Blogkette FTW!)
Und "previously on Lo... erm Blogkette". Der Blogpost mit dem alles angefangen hat!

Montag, 20. Juli 2009

C Funktionen aus C# rufen

Für mich ist es immer wichtig das Sprachen nicht isoliert dastehen. Ich möchte von jeder Sprache oder Laufzeitumgebung ungehindert mit dem System kommunizieren. Da ich mich meistens auf diversen UNIX Systemen herumtreibe ist das größtenteils C. Gerade im Moment hat es mir C# ein wenig angetan und auch hier kann man ohne weiteres mit dem System schnacken. Darum hier mal ein kleines Beispiel das eventuell dem ein oder anderen weiterhilft. Das ganze wurde auf MacOSX mit Mono getestet läuft aber genauso gut unter *BSD und Linux.

Als erstes legen wir eine kleine Library an die die Funktion enthält die wir später aufrufen wollen.

//compile with gcc -dynamiclib test.c -o test.dylib
#include

int test(const char* s) {
printf("Printing from C: %s\n",s);
return 666;
}

Nichts dramatisches, unser Programm soll lediglich etwas Text übernehmen ausgeben und einen Integer an unser C# Programm zurück liefern. Nach dem kompilieren erhalten wir eine dynamische Bibliothek mit Namen test.dylib.

Unser C# Code ist ähnlich spektakulär aufgebaut:

using System;
using System.Runtime.InteropServices;

class PTest {
[DllImport("test.dylib")]
public static extern int test(string s);

public static void Main() {
Console.WriteLine(test("this is a test"));
}
}

Eine interessante Anmerkung nebenbei: test.dylib muss zum Zeitpunkt der Übersetzung nicht existieren.

Jetzt ist man also ohne weiteres in der Lage mit Libs wie z.B. libzfs oder libdtrace von C# aus zu kommunizieren um stark integrierte (aber logischerweise nicht mehr plattformunabhängige) Applikationen zu schreiben.