Eine üble Geschmacklosigkeit aus der Mensa

Di, 14 Okt 2008 18:45:14 +0200

Heute in die Mensa stand eine freundliche junge Dame vom Studentenwerk und drückte jedem, der sich nicht wehren konnte, ein kostenloses Eis in die Hand.

Tolle Sache, dachte ich, hab das dann nach dem Essen aufgemacht und reingebissen. Uargh… Kaum hatte ich die Orange-Rosane Fettglasur berührt, fährt es mir durch meine Geschmacksknospen: Lösungmittel und Zahnpasta. Und ein kleinwenig Frucht-Kaugummi. Widerlich. Dem Geschirrrückgabeband nach zu urteilen war ich wohl nicht der einzige mit dieser Meinung. Im Dienste der Wissenschaft habe ich dann den Überzug abgeschält und das Innere probiert, das war dann harmloses „Eis mit Vanillegeschmack“

Auf der Packung standen Nährwertangaben für auf 5- bis 10-jährige Kinder, offensichtlich die Zielgruppe. Der Film Indiana Jones und der Kristallschädel (auf der Packung erwähnt) ist freigegeben ab 12. Marketing Fail? Es grenzt schon an Kindesmissbrauch, sowas zu „verfüttern“. Gerade wenn der Geschmackssinn sich gerade noch bildet. Da muss sich dann niemand wundern, wenn viele von ihnen später einen absolut verdorbenen Geschmack haben, und dieses Zeug auch noch wollen. Nun, das scheint wohl aber auch Absicht zu sein. Es gibt ja einen Haufen derart übersüßter und überaromatisierter Fertigprodukte für Kinder. Wo käme denn die „Lebensmittel“-Industrie hin, wenn ihre Konsumenten die Qualität ihrer Lebensmittel Produkte mit bloßem Geruchs- und Geschmackssinn beurteilen könnte?

Ich wundere mich auch jedesmal wieder über sog. Apfelaromen in „Apfelstrudelkeksen“, „Apfel“-Schorlen und dergleichen. Das schmeckt nach allem möglichen, aber ganz bestimmt nicht nach Äpfeln.

Wer entwirft solche Produkte eigentlich?


M wie Microsoft

Mo, 13 Okt 2008 00:33:41 +0200

Gerade gelesen: Winzigweich will eine neue Programmiersprache auf den Markt bringen. Und wenn ich den dortigen Artikel richtig deute, wird es sich wohl um ein C++-Derivat handeln. Bestimmt total innovativ, so mit noch mehr Syntax-Konstrukten, die es noch schwieriger machen, einen Compiler zu schreiben, und noch mehr sinnlosen Erweiterungen, die man mit weniger Anstrengung besser hinbekommen hätte – aber ich will mal nicht voreilig sein – was allerdings in Anbetracht der Erwähnung einer Verbindung mit einem „visuellen Design-Tool“ schwer fällt. Naja. Man wird sehen. Bisher nur Vorurteile, aber ich bezweifle ehrlichgesagt, dass da viel Anderes dabei rauskommen wird.

Was mich wundert, ist, dass es noch kein XSLT-Derivat gibt, das Datenbankanbindung und Pseudo-C++-Objektorientierung hat. Wäre doch mal an der Zeit. Und am Besten gekoppelt mit einem System zur Codetransformation per DOM – das darf dann natürlich nur mit JavaScript gehen. Warum es noch keinen Processor gibt, der XSLT als Assemblersprache benutzt, also Nativ unterstützt, frage ich mich sowieso – Intel XSLT oder so.

Wie dem auch sei, es gibt durchaus neuere Sprachen, deren Existenz mich erfreut, weil sie eventuell echte Probleme lösen, und vielleicht sogar Innovationen oder wenigstens neue Einsichten bieten.

Denn bei all der Technik darf man nicht vergessen: Alle Programmiersprachen, ja, sogar alle (realen) Computer, sind nur Werkzeuge zur Zeichenkettenmanipulation, auch wenn diese teils sehr komplexe und bizarre Formen annehmen kann.


Peter Singer, Jim Mason: Eating – Versuch einer Rezension

Do, 09 Okt 2008 23:26:29 +0200

Es ist kaum zu glauben… so ein diches Buch habe ich schon lange nicht mehr komplett durchgelesen… „Eating“ von Peter Singer und Jim Mason (von Letzterem weiß ich sonst nichts, ich Ungebildeter). Peter Singer kenne ich sogar schon aus dem Religionsunterricht, er scheint sehr umstritten aber auch sehr wichtig zu sein. Er hat viele radikale Meinungen, aber letztlich sind alle Meinungen nachvollziehbar und Logisch – das heißt für mich, ich teile nicht alle seine Ansichten, von denen ich bisher gehört habe, aber ich kann sie alle nachvollziehen, und finde es eigentlich gut, dass es einen Menschen gibt, der nachvollziehbar argumentiert, auch bei philosophischen Themen.

In genanntem Buch wird auf verschiedene Aspekte des Essens eingegangen. Gleich am Anfang wird klargestellt, dass es sich nicht um eine Ernährungsberatung für gesunde Ernährung handeln soll. Danach werden drei Familien vorgestellt, mit verschiedenen Essgewohnheiten, als da wären „The Standard American Diet“ (die normalen amerikanischen Ernährungsgewohnheiten), „The conscientious omnivores“ (die gewissenhaften Allesfresser), „The Vegans“ (die Veganer). Dann wird darauf näher eingegangen, und die Ursprünge der verschiedenen Lebensmittel werden verfolgt, man erfährt einiges über Formen der Intensivtierhaltung und Massenproduktion, über Bio-Produkte und deren Vor- und Nachteilen, Fairtrade, über andere Formen der Ernährung, z.B. die lokavore Ernährung, und – was ich besonders interessant fand, weil es mir neu war – den Freeganismus, alles wird von mehreren Seiten begutachtet, die Autoren nennen zwar ihre Meinung, aber sie lassen genügend Raum, um sich seine eigene Meinung zu bilden – gerade das finde ich erstaunlich, ob Umweltverschmutzung, Tierquälerei durch Massentierhaltung, Kontroversen über die Leidensfähigkeit von Tieren, das Buch versucht immer, beide Seiten zu sehen. Erst am Ende geben die Autoren klar ihre Meinung preis.

Es wird auch darauf eingegangen, dass viele normale Leute sich bestimmte teuerere Produkte nicht leisten können, obwohl sie ethisch korrekter wären. Es wird nicht nur auf Tierschutz und Tierrechte gezielt, sondern auch z.B. auf Arbeiterrechte und Entlohnung, und Umweltverschmutzung, nicht nur durch Abgase, sondern auch durch Fäkalien von Tieren.

Im Grunde ist vieles aus diesem Buch nichts komplett neues für mich, und dementsprechend vermutlich auch nicht für die meisten anderen Leute, aber wie weitreichend die Konsequenzen der Entscheidung, welche Nahrungsmittel man zu sich nimmt, sein können, hat mich teilweise wirklich schockiert.

Etwas schade – aber verständlich – ist, dass viele Informationen sich auf die USA beziehen.

Ich finde das Buch sehr empfehlenswert, auch für Leute, die nicht ihre Ernährung radikal umstellen wollen, sondern vielleicht nur interessiert sind, woher ihr Essen kommt.


Privatisierung der Telekommunikation

Mo, 06 Okt 2008 00:18:34 +0200

Bin ich eigentlich der einzige, der sich über sowas (ein Artikel darüber, dass Dorfbewohner ein DSL-Kabel selber verlegen) aufregen kann? Immerhin übernimmt die T-Com vielleicht sogar einige Kosten. Die Privatisierung der Telekommunikationsbranche hat uns ja so viel gutes gebracht – jetzt können Leute auf kleinen Weilern selber buddeln, um der T-Com dann die Leitungsgebühren zahlen zu dürfen.

Wie wäre es denn damit: Jeder gräbt sich seine eigenen Leitungen, und das dadurch entstehende Netz gehört dem Volk? Achja richtig… So ähnlich war das ja ursprünglich gedacht, bis schlaue Leute es geändert haben. In den Städten mag sich dadurch vielleicht ein Markt gebildet haben, alles florierend, billig, schnell – aber in die ländlichen Regionen wird weniger investiert, weil es sich für die Unternehmen nicht lohnt. Ich kann es den Unternehmen leider nicht mal wirklich verübeln, das sind ja keine Wohlfahrts-Institute, eigentlich ist für die Versorgung mit solchen Grundgütern ja der Staat zuständig – habe ich zumindest in der Schule mal gelernt.

Ich bin ja gespannt, wie lange es dauert, bis sich die erste kleinere Stadt ihre eigenen Gleise verlegt, damit sie eine bessere Verkehrsanbindung hat. Oder wie lange es dauert, bis die Leute wieder zu ihren Hausbrunnen zurückkehren werden, bzw. solidarisch einen Brunnen teilen, der alle mit Wasser versorgt, und sich die Leitungen selbst verlegen.


Urandom-Execute

So, 05 Okt 2008 02:02:13 +0200

Hui, ein nietliches Progrämmchen, das ich da heute Zusammengeschustert habe. Ich wollte mal wissen, was so passiert, wenn man ein paar Bytes von /dev/urandom in ein Array liest, und dieses Array dann vom Processor ausführen lässt.

Dies geht anscheinend tatsächlich mit C – bzw. ich bin nicht sicher, ob es wirklich geht, zumindest passiert aber etwas, was die Vermutung nahelegt.

Erstmal der Code (unter der üblichen Lizenz dieses Blogs stehend) – bitte NICHT einfach compilieren und ausführen (nur falls das jemandem nicht sowieso schon klar ist), es ist unwahrscheinlich aber möglich, dass das Programm ziemlich schlechte Sachen macht:

#include <stdio.h>

typedef void (*func_t) (void);

FILE *urandom;
char code[2048];

int main (void) {
  printf ("Opening /dev/urandom.n");
  urandom = fopen("/dev/urandom", "r");
  if (urandom == NULL) {
    printf("Could not open /dev/urandom.");
    return 1;
  }

  printf ("Trying to read 2048 bytes from /dev/urandom.n");

  fread(&code, 2048, 1, urandom);

  printf ("Trying to execute the read bytes.n");

  ((func_t)code)();

  printf ("Closing /dev/urandom.n");

  fclose(urandom);
  return 0;
}

Die Ausführung dieses Codes ist witzig. Er kommt standardmäßig dazu, die Zeile „Trying to execute the read bytes.“ auszuführen, danach ist dann aber idR Schluss, und ich bekomme irgendeinen Fehler – wie zu erwarten ist – nur in seltenen Fällen ergibt sich eine Endlosschleife.

Die printf-Anweisungen habe ich da eigentlich nur hingetan, um mir sicher sein zu können, dass auch wirklich was getan wird, und das Programm nicht vorher abstürzt. Jetzt hab ich sie mal auskommentiert, brav LANG=C gesetzt, und das Programm 1000 mal ausführen lassen (das Programm heißt uex, weil mir urandom-execute zu lang war)

$ i=0; while [ $i -le 1000 ]; do ((i++)); ./uex; done

Lieferte folgende Ausgabe:

Segmentation fault
Segmentation fault
Segmentation fault
Trace/breakpoint trap
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Trace/breakpoint trap
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Trace/breakpoint trap
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Trace/breakpoint trap
Segmentation fault
Floating point exception
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Trace/breakpoint trap
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Trace/breakpoint trap
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Trace/breakpoint trap
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Segmentation fault
Illegal instruction
Segmentation fault
Trace/breakpoint trap
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault
Segmentation fault

Danach stoppte die Ausgabe. (Wer zählt für mich, wie viele das waren? wc -l geht leider in dem Fall nicht…)

$ ps -ef | grep uex
tester    9397  6105 73 01:43 pts/1    00:00:12 ./uex
1000      9458  9398  0 01:44 pts/2    00:00:00 grep uex

Interessant. Auch top zeigt an dass uex ziemlich viele Systemressourcen verbraucht. Vermutlich hat sich das Programm in einer endlosen Schleife verfangen. Genaugenommen muss jedes so zufällig generierte Programm ja entweder terminieren, oder sich in einer endlosen Schleife verfangen. Die Wahrscheinlichkeit dafür, dass sich eine Endlosschleife aus zufälligen Bytes ergibt, kann man sicherlich irgendwie approximativ bestimmen – genau vermutlich nur theoretisch, und sicherlich nur unter Ausnutzung der physischen beschränktheit des Computers (letztendlich /kann/ sich auch plötzlich ein Code bilden, der das gesamte Nutzvolumen des Rechners ausnutzt, um die Endlosschleife möglichst groß zu machen – oder möglichst lange zu brauchen, um zu terminieren), und wahrscheinlich nur mit guter Kenntnis der x86-Architektur.

Ja mei. Und was bringt das Ganze? Mir hat es sinnlosen Zeitvertreib gebracht, und das Wissen, dass man tatsächlich ausführbaren Maschinencode direkt in C aufrufen kann.


Hornisse

Fr, 03 Okt 2008 23:13:47 +0200

Der Sommer geht, der Herbst kommt – oder ist schon da oder was auch immer. Jedenfalls fallen überall die Blätter und die Weintraubensaison scheint langsam zu Ende zu gehen – zumindest in meinem Garten, seit sich dort ein Schwarm von Staren über die verbleibenden Früchte hergemacht hat, und restlos auch die kleinste Frucht vertilgt hat, sehr zum Leidwesen der dort ansässigen xanthonigralen Insekten, die sich ebenfalls gerne an dieser Pflanze labten.

Ein solches xanthonigrales Insekt – genaugenommen eine Hornisse (zumindest hoffe ich, dass es eine ist, nachdem mich Wikipedia über Verwechslungsgefahren informierte, auf jedenfall ist es ein wunderschönes Tier)  – landete vor Kurzem auf einem dortigen Weinblatt, und wehrte sich seltsamerweise nicht gegen meine Versuche, es zu fotografieren. Ich habe auch einige Fotos gemacht, allerdings sind die Meisten davon verschwommen gewesen – dumme Handy-Kamera. Hier nur mal die besten Bilder.

Das folgende Bild habe ich mit GIMP leicht nachgearbeitet (heller gemacht, Kontrast ein wenig erhöht), sonst könnte man es nicht erkennen:

Eine Hornisse sitzt auf einem Weinblatt - Belichtung von Unten

Eine Hornisse sitzt auf einem Weinblatt - Belichtung von Unten

Sehr schön. Man sieht nicht die Farben, aber man sieht die Umrisse auf diesem Bild sehr gut. Noch ein Bild, wo sie auf dem Weinblatt sitzt, aber keine Gegenlichtaufnahme:

Hornisse auf Weinblatt von Oben

Hornisse auf Weinblatt von Oben

Nunja, ich denke, hier handelt es sich wirklich um eine Hornisse, denn Wespenköniginnen treten normalerweise nicht in Schwärmen auf, soweit ich weiß, und das ganze Jahr über flogen immer wieder mehrere so aussehender Tiere umher. Ich mag Hornissen. Sie sehen gefährlich aus, aber sind soweit ich weiß ziemlich friedlich – ich wüsste niemanden, den je ein solches Tier gestochen hätte – bei Wespen sieht das ganz anders aus, und auch Bienen scheinen öfters mal zuzustechen. Hummeln mag ich auch, aber die strahlen eher Gemütlichkeit aus, so vom Aussehen her, und leider werden die wohl oft von meiner Linde gepwnt (Linden sind Hummelkiller…). Dieses Tier hat sich jedenfalls an meiner Aufdringlichkeit nicht gestört. Ich hoffe, dass es nicht irgendwie gerade am Verenden war, andererseits krabbelte es doch noch recht schnell hin und her. Nachdem sie auf dem Blatt nichts gefunden hat, lies sie sich ins Gras fallen.

Hornisse im Gras

Hornisse im Gras

Hornisse im Gras

Hornisse im Gras