Archiv 12. Juni 2007

Dienstag, 12. Juni 2007

Microsoft hat alles irgendwie im Griff

Gemäß MS07-035 prüfen irgendwelche Funktionen der Windows-Programmierschnittstelle Win32-API irgendwelche Parameter nicht ausreichend, so dass es irgendwie zu einer Remotecodeausführung kommen könnte.

Quelle: Microsoft schließt 15 Lücken am Juni-Patchday

(Und ja, ich weiss – in diesem Fall gilt Security through Obscurity!)

Tags: ,
Labels: Allgemein

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 12. Juni 2007

Schriftenglättung unter Mac OS X und Windows

Typically, Apple chose the stylish route, putting art above practicality, because Steve Jobs has taste, while Microsoft chose the comfortable route, the measurably pragmatic way of doing things that completely lacks in panache. To put it another way, if Apple was Target, Microsoft would be Wal-Mart.

Quelle: Font smoothing, anti-aliasing, and sub-pixel rendering

Für einmal möchte ich mich nicht explizit auf die Seite Apples schlagen – das von Joel angesprochene Thema wird äusserst kontrovers diskutiert und für beide Herangehensweisen gibt es gute Argumente.

Nebenbei: Kulturelle Hürden

Die Unterscheidung zwischen „Target“ und „Wal-Mart“ ist für einen Nicht-Amerikaner äusserst schwer zu deuten. Eine kurze Nachforschung hat ergeben, dass Target äusserst spendenfreudig ist. Wal-Mart wiederum – das weiss man als interessierter Europäer – macht auf Grund des Umgangs mit seinen Mitarbeitern regelmässig Schlagzeilen.

Vielleicht kann ja Wahl-Kalifornier Raffi oder die von der deutschen Leitkultur assimilierten Yankees drüben bei USA erklärt noch genauer auf den Unterschied eingehen.

Ob der Unterschied eher wie Coop und MIGROS oder doch eher wie Denner und Loeb zu veranschlagen ist? Hmmm … Ich bin ratlos.

Tags: , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 12. Juni 2007

Wie steht es eigentlich um … Betty TV?

Im Oktober 2006 titelte ich BluewinTV und Betty – beides Flops? – und ich sollte Recht behalten. Aber unter völlig verschiedenen Vorzeichen.

Bluewin TV

Das IPTV-Produkt traf anscheinend doch den Nerv der Zeit – die Kunden liefen „in Scharen“ von einem Monopolanbieter zum nächsten über (mein Beileid) – um ruckelnde Fernsehbilder und „Lags“ beim Ton in Kauf zu nehmen. Ich selbst hatte einige Monate vor der Einführung des eigentlich geplanten Produkts bereits Besuch einer Vertreterin erhalten – und lehnte deren Angebot – in Form eines PVRs mit Abo – dankend ab.

Eigentlich sollte der Zulauf den Anbieter, Bluewin und dahinter der grosse Telekomriese (der nicht mal Telefonrechnungen gebacken kriegt), ja freuen. Doch um die Dienstleistung von den oben genannten Problemen zu kurieren, musste man sich zuerst die italienische Fastweb einverleiben. Kostenpunkt: gegen 6 Milliarden SFr. Mit dem Kauf besitzt Swisscom nun das Know-How, microsoft- und ruckelfreies IPTV einzuführen. Zudem hat Fastweb eine „Technik“ entwickelt, mit der man ohne Kundenbesuch abklären kann, ob seine Hausinstallation VDSL-tauglich ist, oder erst für 1400 SFr. pro Haus aufgerüstet werden muss.

In weniger als zwei Jahren wird der Betrieb aber kostendeckend sein, wie uns ein Swisscom-Manager verspricht. Wunschdenken oder Realität? Ist der Fastweb-Kauf in diese Kalkulation bereits eingerechnet?

Betty TV

Ich kenne immer noch niemanden in meinem nahen und entfernten Bekanntenkreis, der sich die Betty-Fernbedienung gekauft hat.

Leider schweigt sich auch die offizielle Web-Site darüber aus, ob es sich beim Produkt wirklich um einen Verkaufsschlager handelt.

Zum Glück gibt es die schweizerische Blogosphäre und ihre Berichterstatter:

[…] Wenn ich allerdings im Handbuch nachlese – was man eigentlich ja erst NACH dem Kauf tut – und sehe, dass für die Installation (Installation?!) einer Fernbedienung zehn Seiten vonnöten sind, dann weiss ich nicht so recht, ob das etwas Zeitmässiges sein kann.

Quelle: What the f*** is Betty TV?

Die Verantwortlichen der interaktiven Fernbedienung «Betty TV» benehmen sich wie Kinder im dunklen Wald, die laut vor sich hinpfeifen, um ihr Unwohlsein zu überdecken. […] Im vergangenen August sei eine Zahl von 5000 Kunden bekannt gegeben worden, sagte er [Swisscom-Sprecher Neuhaus], neuere Zahlen gebe es nicht. Gauchat hatte vor Jahresfrist auf «mehrere Zehntausend Verkäufe» gehofft, und innerhalb eines Jahres wollte er «eine sechsstellige Zahl knacken». […] Eine Zahl von 6000 Geräten im Markt dürfte realistischer sein, von denen überdies 4000 verschenkt worden waren.

Laut Swisscom-Sprecher Neuhaus brauchen 30 Prozent der Betty-Benützer das Gerät «konstant», es sei eine «grosse Kundenakzeptanz» festzustellen, und der Telecom-Riese sei «sehr zufrieden» damit.

Quelle: Betty TV: Grosse Versprechen und nix gehalten. (zitiert den KleinReport)

Anscheinend verursachen die Betty-Datensignale (die werden optisch übertragen?! WTF?) auf SF1 und SF2 zudem auch zu Problemen mit gewissen digitalen TVs:

Ja, ich weiss. Es ist eine wilde Schlussfolgerung. Aber ich behaupte:
Diese gehassten Betty-TV Flimmer-Punkte verursachen Probleme mit Deinterlacern und trüben ganz extrem den TV-Genuss. Auch wenn das auf den ersten Blick sehr abenteuerlich tönt, so lassen die Beobachtungen keinen anderen Schluss zu.

Quelle: Abenteuerlich: Stört Betty-TV gewisse Deinterlacer?

Fazit: Wäre Betty TV an der Börse kotiert, würde ich auf diese Firma wohl die erste Put-Option meines Trader-Lebens setzen.

Tags:
Labels: Wirtschaft

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 12. Juni 2007

Minarettverbot

Die ganze Debatte kurz und bündig zusammengefasst:

Man spricht vom Turm und meint das Haus

«Die Initiative spricht von Minaretten und meint Moscheen», sagt Darbellay. […]

Quelle: CVP ist gegen ein Minarettverbot

Noch treffender wäre wohl:

Man spricht vom Turm, meint das Haus – aber im Grunde geht es um die Einwanderer selbst

Labels: Gesellschaft, Politik

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 12. Juni 2007

PHP aussagekräftiger benchmarken

In einer vor einigen Jahren programmierten Web-Applikation (ANIBILL; Übernachtungsstatistik und Rechnungsstellung für einen Tierstall) gab es vor einigen Wochen gewisse Performance-Engpässe, die sich in einer äusserst schleppenden Antwortzeit äusserten. Nach einigen ersten Untersuchungen isolierte ich MySQL (respektive unoptimierte Queries) als Ursache der Probleme.

Die richtige Vorgehensweise

Doch was nun? Klar konnte ich nun temporäre Änderungen an der Applikation auf einem Test-Server vornehmen und hoffen, dass ich den Fehler reproduzieren konnte. Oder aber: Ich änderte den Code dermassen, dass die Applikation künftig bei jedem Aufruf Zeitmessungen vornahm, mit denen ich ein aussagekräftigeres Bild erhielt. PHP-Programmierer werden es zu schätzen wissen, wenn sie Optimierungen auf Grund von 1’000 Messungen anstelle von 1-2 Probeläufen vornehmen können.

Die Lösung

Heraus kamen zwei Funktionen: anibill__get_db_data() und anibill__dump_microtime(). Durch die erste Funktion werden alle SQL-Queries „kanalisiert“, die mit SELECTs arbeiten. Zur Beruhigung der versierten Leser: Diese Funktion war seit Beginn der Applikation vorhanden, ich musste also nicht 1’000 Codezeilen nach mysql_query() durchstrählen …

Innerhalb dieser Funktion messe ich mittels microtime(), wie lange mysql_query() zum Ausführen meines SQL-Queries benötigt (und nur das, der Rest interessiert mich nicht). Bevor ich die aus der Datenbank gelesenen Daten zurückgebe, rufe ich die Benchmark-Funktion anibill__dump_microtime() auf, die mir einerseits die Laufzeit des Queries als auch gleich die aufrufende Funktion in eine Datenbank-Tabelle speichert. Bis zu diesem Zeitpunkt kannte ich die PHP-Funktion debug_backtrace() nicht – dabei ist sie äusserst mächtig. Ihre Ausgabe führt genau Buch, welche Funktionen seit dem Aufruf des Scripts ausgeführt wurden. Und nicht nur das – sogar die Zeilennummer des die Funktion enthaltenden PHP-Scripts ist angegeben. Ein Traum!

function anibill__get_db_data($str_sql_query,$bol_die_on_err = TRUE) {
 ...
 
 // Benchmark current MySQL query
 $arr_time[0] = microtime();
 $obj_db_data = mysql_query($str_sql_query,$res_db_conn);
 $arr_time[1] = microtime();
 
 ...
 
 // Store benchmark to database
 anibill__dump_microtime($arr_time,$str_sql_query);
 
 return $arr_db_data;
}

function anibill__dump_microtime($arr_time,$str_sql_query) {
 ...
 
 // Still using PHP4 and therefore wrestling with microtime()'s format
 $arr_start    = explode(" ", $arr_time[0]);
 $arr_end    = explode(" ", $arr_time[1]);

 $int_seconds            = $arr_end[1] - $arr_start[1];
 $flo_microseconds       = $arr_end[0] - $arr_start[0];

 $flo_runtime            = $int_seconds + $flo_microseconds;
 
 // Which function called anibill__get_db_data() in the first place?
 $arr_debug = debug_backtrace();
 if(isset($arr_debug[2]['function']))
   $str_function = $arr_debug[2]['function'];
 else
   $str_function = NULL;

 if(isset($arr_debug[1]['line']))
   $str_line = $arr_debug[1]['line'];
 else
   $str_line = NULL;
 
 ...
 
 return TRUE;
}

Ich möchte all die Christians, Andreas und Silvans da draussen um Gnade bitten – mein Coding-Stil wird wohl nicht der effektivste sein (zu viele Zeilen, zu viele Einzüge etc.), doch die Lesbarkeit liegt mir am Herzen. Und ja, von OOP keine Spur …

Selbstverständlich generiert das Benchmarken und Backtracen einen gewissen Overhead, doch aus meiner Sicht ist die vorgestellte Methode geeignet, die Performance kleinerer Web-Applikationen mit wenigen gleichzeitigen Zugriffen zu messen – ohne kostenpflichtige Tools einzukaufen und grosse Profiling-Sessions zu starten.

Zum Schluss

Erfinde ich das Rad neu? Gibt es elegantere Lösungen? Die Kommentarfunktion ist ab sofort geöffnet.

Tags:
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 12. Juni 2007

Sarkozy …

… „isch öppe die chli id Möscht gange“:

*muhahahaaa* Ein Kommentar auf YouTube lehrt uns:

Moral of the story: never get into a drinking contest with a Russian before having to make a public speech.

Labels: Funny

Keine Kommentare | neuen Kommentar verfassen