- Das unendliche Hartz-IV-Trauerspiel
Eine kurze Analyse der aktuellen Hartz-IV Tragödie von Michael Spreng. - Laufzeitfehlern auf der Spur
Ein kleiner Blick in die Werkzeugkiste von C-Programmierern. - (
- hr2 Der Tag
Empört Euch! heißt das Büchlein des aus Deutschland stammenden Franzosen Stéphane Hessel. Der alte Herr plädiert in seinem längst zum Bestseller gewordenen Manifest, das nun auch in Deutsch erscheint - für die Wiederbelebung der Werte der französischen Résistance, in der er selbst mit gekämpft hat.
(Download) (via)
Artikel mit Tag programmierung
Verwandte Tags
android fun bertos embedded os c code gesellschaft links politik realtime security software wirtschaft überwachung perl drm grafik hardware kryptographie rant 27c3 bsd ccc esperanto homerecording linux netzneutralität alltag angst backup blog chat communication datenschutz esoterik foto google internet irc kochen konzert kunst kurioses lobby medien musik nachrichten natur psyc religion satire science sonstiges spd anonymität kant korruption medizin philosophie privatsphäre streetview synthesizer transparenz video zensur gpg i2p vds arbeit lesestoff debian free software nas zfs egk elena finanzkrise it youtube flash gnash failSunday, 13. February 2011
Links 0x0C
Sunday, 12. December 2010
Links 0x0B
- Perl-Buchtips:
Modern Perl und Impatient Perl, zwei aktuelle Perl-Bücher unter freien Lizenzen, auch als PDF Downloads verfügbar. - The dark side of open source conferences
Ein Bericht über Sexismus und Belästigung auf Konferenzen. Die Diskussion untendrunter ist ebenfalls zu empfehlen.
Von der gleichen Autorin gibt es auch dieses Howto, allerdings ist der Inhalt deutlich allgemeiner anwendbar als es der Titel zuerst vermuten läßt. - Introduction to OpenCL,
a cross-platform API and ecosystem for applications to take advantage of heterogeneous computing resources for parallel applications.
(via) - The History Of Regexps - Part 1

- Politics Affect Operating Systems Too
We are seeing an industry-wide, lateral, fear-induced lock down of user freedoms in the name of brand identity. When the desktop has faded away and you can no longer purchase any kind of computing device that freely allows you to install your own operating system (because someone might abuse the wireless network), then alternative operating systems themselves become the next fear-induced target.
Tuesday, 23. November 2010
Entwickler Humor
In der Android API Referenz findet sich so manches Schmankerl. 
public static boolean isUserAMonkey ()
Returns "true" if the user interface is currently being messed with by a monkey.
public static int wtf (String tag, String msg)
What a Terrible Failure: Report a condition that should never happen.
public static final float GRAVITY_DEATH_STAR_I
Constant Value: 3.5303614E-7
Sunday, 15. August 2010
sizeof-Checks zur Compilezeit
Ich bin letzte Woche über einen schicken C-Codeschnipsel gestolpert, dessen Quintessenz ich hier gerne im Detail festhalten möchte.Der wesentliche Knackpunkt hier ist der, daß sich mit folgendem Assert-Makro sizeof-Checks bereits zur Compilezeit machen lassen und nicht erst zur Laufzeit passieren:
Hübsch, nicht?#define CONCAT2(X,Y) X##Y
#define CONCAT(X,Y) CONCAT2(X,Y)
#define MYASSERT(expr) \
typedef char CONCAT(Assertion_In_Line_,__LINE__)[(expr)?1:-1]
MYASSERT(42 == sizeof(extVar));
Aber fangen wir mit den leichten Sachen an.
Die beiden ##-Zeichen in Zeile 1 sind ein Operator für den Präprozessor, die lediglich aus den beiden Strings X und Y einen String XY machen. Das function-like Makro CONCAT2 liefert also einen verbundenen String zurück.
In Zeile zwei wird eine Indirektion hinzugefügt, indem CONCAT auf CONCAT2 gemappt wird. Dies ist notwendig, damit der Präprozessor das __LINE__ in Zeile 4 evaluiert, und nicht einfach das "__LINE__" als solches anhängt.
Eine schöne, detaillierte Erklärung für die Notwendigkeit dieser Indirektion gibt es hier.
Das __LINE__ ist ein vordefiniertes Makro und wird automatisch durch die Zeilennummer ersetzt, in der es verwendet wird. Wir verbinden in Zeile 4 also den Bezeichner "Assertion_In_Line_" mit der aktuellen Zeilennummer. Wenn das Assert zuschlägt, sehen wir in der Compiler-Meldung dann die Zeile, in der das passiert ist.
In Zeile 3 wird jetzt unser Assert-Makro definiert. "expr" sollte eine Bedingung sein, die wahr oder falsch zurückliefert. Das wäre in diesem Fall später der sizeof-Vergleich.
Wer es bis jetzt noch nicht erkannt hat: Zeile 4 enthält eine Array-Deklaration.
Das Array hätte in unserem Fall den Namen "Assertion_In_Line_5", weil das __LINE__ wie gesagt durch die Zeile ersetzt und mit CONCAT an den Array-Namen angehängt wird.
Die Größe des Arrays ist nun abhängig von dem übergebenen Ausdruck. Wir haben in den eckigen Klammern eine if-else Anweisung mittels Fragezeichen-Operator. Wenn der Ausdruck wahr ist, wird 1 zurückgegeben, ist er falsch, bekommt das Array eine Größe von -1.
Die Deklaration von Arrays mit negativer Größe ist in C aber nicht erlaubt und daher gibt es an dieser Stelle dann einen Compilerfehler.
Mal angenommen ich hätte jetzt eine externe Variable namens "extVar", die nicht 42 Byte groß wäre, dann würde mir der GCC folgenden Fehler beim Kompilieren geben:
test.c:5: error: size of array ‘Assertion_In_Line_5’ is negativeDer GCC gibt netterweise schon die Zeilennummer selber aus, d.h. man hätte sich das mit dem __LINE__ auch sparen können, aber so nett ist nicht jeder Compiler.
Bleibt zum Schluß noch eine Frage offen: Warum steht da ein typedef und nicht eine ganz normale Array-Deklaration?
Der Grund ist der, daß ein typedef keinen Platz im Kompilat belegt. Wenn das Assert nicht zuschlägt, hätten wir im kompilierten Binary eventuell mehrere Assertion_In_Line_* Arrays mit jeweils einer Größe von einem Byte enthalten. Durch das typedef wird diese Platz-Verschwendung vermieden.
Wednesday, 7. July 2010
Betriebssysteme abseits des Mainstreams
Eine meiner Nachrichtenquellen aus der IT-Welt ist seit vielen, vielen Jahren die Webseite OSNews. Wie der Name schon andeutet, liegt der Schwerpunkt in der Berichterstattung auf Neuigkeiten über alle möglichen Betriebssysteme. Oder sollte ich sagen: "lag"?
Vor kurzem gab es dort einen Artikel Why OSNews Is No Longer OSNews. Dort wird auf einen Kritikpunkt der Leser eingegangen, daß sich der Schwerpunkt von Betriebssystemen mehr zu Themen verlagert habe, die das Web oder Mobil-Telefone betreffen. Der Antwort, daß sich in der Hinsicht einfach weniger aufregendes ereignet im Vergleich zu früher, kann ich nicht uneingeschränkt zustimmen.
Bestes Gegenbeispiel wäre unter anderem Heises Kernel-Log, wo detailliert über aktuelle Entwicklungen, den Linux-Kernel betreffend, berichtet wird.
Nun habe ich nicht vor es dem Heise-Verlag gleichzutun, schon allein deshalb, weil das Lesen (und Verstehen) der Beiträge auf der LKML einen Vollzeit-Job erforderte.
Ich habe allerdings vor von nun an regelmäßige Neuigkeiten aus der Welt der Betriebssysteme aufzugreifen und hin und wieder auch den ein oder anderen Praxisbericht zu erstellen. Da ich schon immer ein Faible dafür hatte, alle möglichen Betriebssysteme auszuprobieren, die mir unter die Finger kamen, bin ich in der Thematik also auch nicht ganz unbedarft, insbesondere was so manch exotische oder eingebettete Systeme betrifft.
Hierfür gibt es auch eine neue Kategorie im Blog, nämlich BSNews, in der die Einträge diesbezüglich einsortiert werden.
Und den Anfang heute macht der Hinweis auf eine Beitragsreihe über Embedded Programing Pattern des BeRTOS-Projekts, in dem sich der erste Beitrag dieser Reihe mit der Entwicklung einer Applikation ohne drunterliegenden Kernel befaßt.
Vor kurzem gab es dort einen Artikel Why OSNews Is No Longer OSNews. Dort wird auf einen Kritikpunkt der Leser eingegangen, daß sich der Schwerpunkt von Betriebssystemen mehr zu Themen verlagert habe, die das Web oder Mobil-Telefone betreffen. Der Antwort, daß sich in der Hinsicht einfach weniger aufregendes ereignet im Vergleich zu früher, kann ich nicht uneingeschränkt zustimmen.
Bestes Gegenbeispiel wäre unter anderem Heises Kernel-Log, wo detailliert über aktuelle Entwicklungen, den Linux-Kernel betreffend, berichtet wird.
Nun habe ich nicht vor es dem Heise-Verlag gleichzutun, schon allein deshalb, weil das Lesen (und Verstehen) der Beiträge auf der LKML einen Vollzeit-Job erforderte.
Ich habe allerdings vor von nun an regelmäßige Neuigkeiten aus der Welt der Betriebssysteme aufzugreifen und hin und wieder auch den ein oder anderen Praxisbericht zu erstellen. Da ich schon immer ein Faible dafür hatte, alle möglichen Betriebssysteme auszuprobieren, die mir unter die Finger kamen, bin ich in der Thematik also auch nicht ganz unbedarft, insbesondere was so manch exotische oder eingebettete Systeme betrifft.
Hierfür gibt es auch eine neue Kategorie im Blog, nämlich BSNews, in der die Einträge diesbezüglich einsortiert werden.
Und den Anfang heute macht der Hinweis auf eine Beitragsreihe über Embedded Programing Pattern des BeRTOS-Projekts, in dem sich der erste Beitrag dieser Reihe mit der Entwicklung einer Applikation ohne drunterliegenden Kernel befaßt.
Wednesday, 17. June 2009
Perl Schnipsel
Ich bin heute über eine interessante Möglichkeit gestolpert, um in Perl Array-Elemente zu indizieren, deren Position zur Laufzeit unbekannt ist.
Man hat zum Beispiel folgendes Array:
Anstatt über das ganze Array in einer Schleife zu iterieren, dann zu prüfen ob das Element mit dem gesuchten übereinstimmt und währenddessen einen Zähler inkrementieren um die Position zu erhalten, kann man auch folgendes machen:
Data::Dumper würde folgendes ausgeben:
(Notiz am Rande: delete setzt das Element am Birnen-Index nur auf undef. Mit splice würde das Element komplett entfernt werden, aber dann müßte man den Index-Hash neu erstellen, weil die verbleibenden Array-Elemente die Lücke füllen.)
Man hat zum Beispiel folgendes Array:
Angenommen dieses Array wurde dynamisch zur Laufzeit erzeugt, die Elemente liegen an unbekannten Indizes und man möchte nun auf einzelne Elemente direkt zugreifen.my @array = ("Apfel", "Birne", "Banane", "Tomate");
Anstatt über das ganze Array in einer Schleife zu iterieren, dann zu prüfen ob das Element mit dem gesuchten übereinstimmt und währenddessen einen Zähler inkrementieren um die Position zu erhalten, kann man auch folgendes machen:
Dieser kurze Codeschnipsel legt einen Hash an, mit den Array-Elementen als Key und den zugehörigen Indizes als Value.my %hash;
@hash{@array} = (0..$#array);
Data::Dumper würde folgendes ausgeben:
Um nun beispielsweise die Birne aus dem Array zu löschen reicht ein$VAR1 = {
'Banane' => 2,
'Apfel' => 0,
'Tomate' => 3,
'Birne' => 1
};
delete $array[$hash{"Birne"}];
(Notiz am Rande: delete setzt das Element am Birnen-Index nur auf undef. Mit splice würde das Element komplett entfernt werden, aber dann müßte man den Index-Hash neu erstellen, weil die verbleibenden Array-Elemente die Lücke füllen.)
Wednesday, 1. October 2008
One-Pointer
Beim Programmieren ist einem im Laufe der Jahre ja schon oft genug ein Null-Pointer auf den Fuß gefallen. Aber alle Null-Pointer-Checks der Welt bringen nichts, wenn man einen Zeiger kriegt, der auf die Adresse 0x00000001 zeigt.
So doof habe ich jedenfalls schon lange nicht mehr geschaut, als ich den Bug gefunden habe.
Und das hatte noch nichtmal was mit Zeiger-Arithmetik zu tun, das wär ja auch zu offensichtlich gewesen, sondern eher mit void-Pointer Typecasts auf unterschiedlich geschachtelte Structs, die man erst zur Laufzeit kennt.
Kein schönes Thema, aber ich steh ja auf sowas.
So doof habe ich jedenfalls schon lange nicht mehr geschaut, als ich den Bug gefunden habe.
Und das hatte noch nichtmal was mit Zeiger-Arithmetik zu tun, das wär ja auch zu offensichtlich gewesen, sondern eher mit void-Pointer Typecasts auf unterschiedlich geschachtelte Structs, die man erst zur Laufzeit kennt.
Kein schönes Thema, aber ich steh ja auf sowas.
Thursday, 1. May 2008
Links 0x05 - Insert witty link pun here
- The Ineffectiveness of Security Cameras Eine Studie über den Einfluß von Überwachungskameras auf die Verbrechensrate in San Francisco.
- Wie man einen Staat zerstört Ein 20 Punkte Plan. 19 davon wurden so wie's aussieht schon ziemlich gut umgesetzt.
- Der Humanist der Physik - zum 150. Geburtstag von Max Planck Interessanter Artikel, auch das dort verlinkte Video-Selbstporträt war mir neu. Standing on the shoulders of giants.
- unsubscribe-me.org Eine Aktion von Amnesty International gegen Folter. Die Videos sollen u.a. verdeutlichen was beim harmlos klingenden Waterboarding wirklich passiert.
- I2P release 0.6.1.33 Für I2P gibt es ein Update. Die .32er hatte einige Performanceprobleme, die hier wohl behoben wurden.
- CERT Secure Coding Standards Eine Sammlung von Ratschlägen zum sicheren Programmieren unter C und C++. Inklusive Risiko-Abschätzung und Wahrscheinlichkeit des Auftretens der sicherheitskritischen Programmierfehler und wie man sie vermeidet.
- Der Konvent für Deutschland und unsere Verfassung Chris von F!xmbr nimmt die Buchveröffentlichung des Konvents zum Anlass einen kritischen Rundumschlag gegen diese Leute abzuliefern.
Ergebnis: Die Rate ist nicht gesunken, aber angeblich würden sich die Bürger sicherer fühlen. Also nur rausgeschmissenes Geld für ein Sicherheits-Theater ohne effektiven Nutzen, dafür mit Kollateralschäden in der informationellen Selbstbestimmung.
Das Video kommt allerdings, wie ich finde, nicht annähernd an diese Beschreibung eines Waterboarding-Selbstversuchs ran.
In diesem Zusammenhang auch interessant war eine Fragerunde mit dem US-Justizminister Ashcroft, dessen Argumentation bezüglich Waterboarding von einer 20-jährigen Studentin zerpflückt wurde, und der sich dann brüllend in Wortklaubereien verliert. (via)
Daß Bush ja ein Veto gegen ein Gesetz eingelegt hat, das der CIA das Waterboarden verbieten soll, erwähne ich mal noch der Vollständigkeit halber hier.
Da macht die Menschheit unglaubliche technische Fortschritte, aber gesellschaftlich gesehen sind wir immer noch im finstersten Mittelalter.
Ich möchte übrigens wetten, daß es nicht mehr lange dauert, bis auch hierzulande soetwas von diversen Behörden gefordert wird. Würde sich als Ergänzung zum BKA-Gesetz ja anbieten. Ich tippe mal darauf, daß das noch in diesem Jahr geschieht.
Der ursprüngliche Kandidat für das Vizepräsidentenamt des Bundesverfassungsgericht war ja z.B. ein Befürworter von solchen Foltermethoden, aber der wurde glücklicherweise erstmal abgesägt.
"The 0.6.1.33 release contains several important bug fixes and performance improvements in SSU reachability detection, floodfill peer selection, tunnel peer selection, tunnel testing, NTCP idle detection, the streaming lib, and news fetching."
(Bei diesem Thema sei auch noch auf das INSM Watchblog verwiesen, das ich hier noch nicht verlinkt hatte.)
Geschrieben von marc
in Links
um
16:41
| Noch keine Kommentare
| Keine Trackbacks
Tags für diesen Artikel: c, gesellschaft, links, politik, programmierung, security, software, überwachung
Saturday, 19. April 2008
Eine kleine Bitte ...
... an alle C++-Programmierer da draußen: Fixt Eure Include-Files.
Es macht nämlich keinen Spaß, wenn man regelmäßig die Header hinterhertragen darf, nur weil man einen aktuellen Compiler verwendet.
Es macht nämlich keinen Spaß, wenn man regelmäßig die Header hinterhertragen darf, nur weil man einen aktuellen Compiler verwendet.
Geschrieben von marc
in Notiz
um
23:10
| Noch keine Kommentare
| Keine Trackbacks
Tags für diesen Artikel: programmierung, software
Tuesday, 26. February 2008
Links 0x02 - everytime a link is censored, god kills a kitten
- Verschusselt statt verschlüsselt Beitrag auf heise security, der zeigt wie angeblich mit AES verschlüsselte Festplatten in Wirklichkeit ganz einfach auszulesen sind, weil die Verpackung nicht hält, was sie verspricht.
- Adobe Pushes DRM for Flash Adobe will laut EFF zukünftige Flash Versionen um DRM Maßnahmen erweitern. Die Musikindustrie ist ja so langsam dabei, auf schmerzhafte Art und Weise zu begreifen, daß DRM keine gute Idee war. Adobe braucht wohl noch ein bißchen.
- Graphics Programming Black Book Obwohl das Buch schon einige Jährchen auf dem Buckel hat, finden sich dort so manche Kapitel, die heutzutage noch aktuell sind. Und die anderen Kapitel sind auch interessant zu lesen.
(Seite 1 von 2, insgesamt 11 Einträge)
nächste Seite »

