Freitag, 6. Juli 2012

2004, das Jahr in welchem die Windows-Hegemonie zu bröckeln begann

When Windows 95 launched in 1995 it negated most of the advantages of the ease of use of the Macintosh and the PC market took off. The ratio reached 56 in 2004 when 182.5 million PCs were sold vs. 3.25 million Macs. […]

Then, in 2004, something happened.

Quelle: Building and dismantling the Windows advantage

Im März 2004 wurde mein PowerMac G5 geliefert, welcher mir bis zum Anfang dieses Jahres treue Dienste leistete. Ich wechselte also unbewusst just in diesem Moment von der Wintel- in die Apfel-Welt, als Microsoft auf dem Höhepunkt seiner Dominanz angekommen war.

Seit 2004 ging es nur für die Firma nur noch bergab; heute werden pro einem Apple-Geräte (Mac, iPhone, iPad) nur noch zwei Windows-Geräte verkauft. Auch das knacken wir noch …

Für jemanden, der seinerzeit den CD-ROM-Laufwerken keine Zukunft voraussagte und noch im Jahr 2000 felsenfest davon überzeugt war, noch lange ohne Mobiltelefon auszukommen, für einmal ein offensichtlich richtungsweisender Entscheid.

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 25. Juni 2012

DVD-Laufwerk im Lenovo ThinkPad T420 sperren

Da habe ich seit einigen Wochen (eher unfreiwilligerweise) ein brandneues Lenovo ThinkPad T420 auf meinem Bürotisch auf der Arbeit stehen, doch nach einer Vielzahl von Einsätzen ausserhalb des Büros stellt sich ein riesiges Problem, welches mich bis zum heutigen Tage zur Verzweiflung trieb: Wenn ich den Laptop unachtsam anfasste, bspw. wenn ich ihn aus meiner Laptop-Tasche zog, betätigte ich unabsichtlich den Eject-Knopf des DVD-Laufwerkes, was die Laufwerkschublade aufschnappen liess.

Offenbar bin ich mit diesem Problem nicht alleine:

Every time I pick the laptop up or am laptopping in bed I am constantly hitting the DVD eject botton on the T420. This is my 10th ThinkPad over the years and have never had this problem.

Quelle: T420 DVD eject button – terrible placement; driving me insane

Da der Wechsel auf einen Laptop ohne optisches Laufwerk ein Ding der Unmöglichkeit ist (MacBook Airs sind zu leicht und es lassen sich leider keine Unmengen von Sicherheits- und Legacyapplikationen installieren, die eine Corporate IT zur Verfügung hat), hilft mir nun das Tool CDRom-Lock, welches den Eject-Button schlicht und ergreifend … deaktiviert (via Re: is there a way to disable DVD Eject button?).

Damit kann ich sehr gut leben, denn die letzte CD hielt ich vor Monaten ausgehändigt. Halleluja!

Tags: , , , , , ,
Labels: IT

1 Kommentar | neuen Kommentar verfassen

Samstag, 2. Juni 2012

Bockende Web-Formulare von Hand (sprich: mit etwas JavaScript) absenden

Da versuchte ich also vor einigen Tagen, mich mit Safari unter Mac OS X 10.7 Lion in die Web-Mail-Lösung meines Arbeitgebers einzuloggen — doch bereits beim Eingabeformular für Benutzernamen und Passwort steckte ich fest:

Irgendwie fehlte hier der Senden-Button, welcher unter Windows im Microsoft Internet Explorer präsent war! Nun, da ich in meiner Freizeit als Web-Entwickler tätig bin, hatte ich selbstverständlich das Developer-Menu in Safari aktiviert. Dies erlaubte mir nun, mittels Rechtsklick irgendwo in den Hintergrund der Web-Seite zu klicken, Inspect Element auszuwählen und danach zügig in die (JavaScript-)Konsole zu wechseln.

Dort gab ich basierend auf Wissen, welches ich seinerzeit (im letzten Jahrhundert) über SelfHTML erlernt hatte, folgenden Befehl ein, gefolgt von einer Zeilenschaltung (je nach Tastatur Enter oder Return):

document.forms[0].submit();

Und schwupp landete ich auf der nächsten Seite des Web-Mail-Logins. Und dort wurde mir beschieden, dass mein Browser und Computer als unsicher eingestuft seien, weil es nicht möglich sei, ein ActiveX-Plugin zu installieren:

Bisher war ich ja immer der Meinung, dass gerade das umgekehrte der Fall ist. Ich helfe ein stattliches Vermögen wetten, dass mein Mac potentiell sicherer als die Windows-Kisten ist, die wir auf der Arbeit benutzen — und ich damit erst noch produktiver bin und das Gerät Zugfahrten ohne Strom länger übersteht, weil nicht hundert Hilfs-, Überwachungs- und Sicherheitsapplikationen im Hintergrund laufen und Strom fressen. Aber bei Corporate IT lernt man ja nie aus …

Nebenbei: Das Thema „Bring your own device“ ging gerade kürzlich im Zusammenhang mit IBM durch die Presse. Und wurde dann auch noch aus anderer Warte kommentiert.

Tags: , , , , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 27. Mai 2012

Wenn Safari plötzlich keine PDFs mehr speichern will …

Da habe ich also vor einer Weile mein MacBook Air auf Mac OS X Lion 10.7 gehievt und kämpfte seit einiger Zeit damit, dass Safari mir das Speichern jedes beliebigen PDFs verweigerte (sowohl mittels Apfel-S als auch über File > Save As…):

Als ich dem Problem vor einigen Tagen endlich ein für allemal auf den Grund gehen wollte, realisierte ich rasch einmal, dass nicht etwa Safaris native PDF-Vorschau aktiviert war, sondern das von Adobe Reader hinter meinem Rücken installierte Plugin.

Obwohl Adobe in seiner Knowledgebase aufzeigt, wie man das Plugin deaktiviert, war dies bei mir schlicht nicht möglich, weil die entsprechende Checkbox ausgegraut war:

Adobe erwähnt das Problem freundlicherweise in ihrer Knowledgebase (statt das Problem zu flicken, typisch!). Deshalb musste ich mit Handarbeit und dem Terminal hinter die Sache:

# rm -rf "/Library/Internet Plug-Ins/AdobePDFViewer.plugin"

Quelle: How do I set Safari on Mac OS X to show PDFs using Preview instead of Adobe Reader?

Dann noch Safari neu starten, und die PDFs wurden wieder wie gewohnt mit Safari angezeigt — und konnten so problemlos mittels Apfel-S irgendwo auf die Festplatte gesichert werden.

Tags: , , , , ,
Labels: Apple

4 Kommentare | neuen Kommentar verfassen

Sonntag, 6. Mai 2012

PHP kriegt das mit den Nummern nicht gebacken

Da las ich vor einigen Tagen einen interessanten Beitrag über die haarsträubenden Schwächen von PHP — und erfuhr eines der genannten Problem heute am eigenen Leibe.

Eine meiner Funktionen skaliert Bilder, um sie danach aus der Mitte heraus zuzuschneiden. Vor dem Zuschnitt wird das Bild skaliert. Ziel ist es dabei, das Bild so zu skalieren, dass sowohl die Höhe und Breite des Zielformats überschritten werden, denn so lässt sich mit gutem Gewissen ein Zuschnitt vornehmen.

Mein Code sieht folgendermassen aus:

...
for($i = 0; $i<=1; $i++) {
        $factor = $dimDestination[$i]/$dimOriginal[$i];

        $dimTests[$i] = array($dimOriginal[0]*$factor, $dimOriginal[1]*$factor, $factor);
}

$factor = null;

foreach($dimTests as $key=>$dimTest) {
        if($dimTest[0] >= $dimDestination[0] && $dimTest[1] >= $dimDestination[1]) {
                $factor = $dimTest[2];
                $keySelected = $key;
        }
        else {
                $this->debug->add($dimTest[0] . '<' . $dimDestination[0] . ', ' . $dimTest[1] . '<' . $dimDestination[1]);
        }
}

if($factor === null) {
        $this->debug->add('$factor ' . $factor . ' is null');
        return false;
}

Bei einem speziell zugeschnittenen Bild wurde $factor immer auf null gesetzt und die Funktion brach mit false ab — obwohl das Bild eigentlich problemlos skaliert und zugeschnitten hätte werden sollen.

Nach einer halbstündigen Fehlersuche kam ich den Problem schlussendlich auf die Spur. Zuerst einmal schaute ich mir die in $this->debug gespeicherten Infos an:

emeidiImage->cropFromCenter()
505<505, 131.510416667<66

Was zum Teufel?! Wieso ist 505 kleiner als 505? Mit vardump() lichtete sich der Nebel über dem falschen Verhalten:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    float(505)
    [1]=>
    float(131.510416667)
    [2]=>
    float(1.05208333333)
  }
  ...
}

array(2) {
  [0]=>
  int(505)
  [1]=>
  int(66)
}

Ich verglich float(505) mit int(505), und da lag wohl die Krux vergraben! Nun, dachte ich mir, wandeln wir die Dimension halt bei der Multiplikation der Ursprungsdimension mit dem Faktor in einen Integer-Wert um:

$dimTests[$i] = array((int)($dimOriginal[0]*$factor), (int)($dimOriginal[1]*$factor), $factor);

Weiterhin brach die Funktion ab. Was zum Teufel … ein erneuter Blick auf vardump() zeigte mir endlich die wirklich Ursache des Problems:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    int(504)
    [1]=>
    int(131)
    [2]=>
    float(1.05208333333)
  }
  ...
}
array(2) {
  [0]=>
  int(505)
  [1]=>
  int(66)
}

Ahaaa! Irgendwie war der Fliesskommawert eben nicht ganz genau 505, sondern vielleicht nur 504.999999.

Nach folgender Anpassung unter Zuhilfenahme der Funktion ceil() lief die Funktion endlich fehlerfrei durch:

$dimTests[$i] = array(ceil($dimOriginal[0]*$factor), ceil($dimOriginal[1]*$factor), $factor);

Tjach. Heute habe ich deshalb gelernt, dass int(505) noch lange nicht float(505) ist.

Nachtrag

Das Problem tritt mit der bei cyon.ch installierten PHP-Version 5.2.17 auf, nicht aber mit der auf meinem Entwicklungsserver installierten PHP-Version 5.4.0-3 auf.

Tags: , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 1. Mai 2012

Kurioses um das Prisoner’s Dilemma

This is the weirdest, most surreal round of “Split or Steal” I have ever seen. The more I think about the psychology of it, the more interesting it is. I’ll save my comments for the comments, because I want you to watch it before I say more. Really.

Quelle:

Tags: , , ,
Labels: Gesellschaft

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 22. April 2012

iTunes Sync Mail Accounts ist leer

Apples Foren sind voll davon — und auch ich bin davon betroffen: Wenn ich iOS Geräte an meinen Mac mini mit Mac OS X 10.7.3 anschliesse und sich iTunes 10.6.1 öffnet, kann ich für keines der Geräte die Synchronisation der E-Mail-Accounts aktivieren. Die Liste ist leer und das Kästchen ist ausgegraut:

Zum Vergleich die Liste Sync Calendars:

Leider hat noch niemand herausgefunden, wie das Problem auf einfache Art und Weise gelöst werden kann. Wer einige Stunden investieren will, folgt dem Ratschlag einer Antwort:

  1. Mac OS X 10.7.0 über die bestehende Installation installieren
  2. iTunes auf 10.6.1 aktualisieren
  3. Mac OS X auf 10.7.3 aktualisieren

Hier einige Links, die das Problem beschreiben:

Tags: ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 22. April 2012

iCal kann nicht mit Google Calendar kommunizieren

Seit meinem Umstieg auf Mac OS X Lion Ende Februar 2012 plagte mich das Problem, dass ich auf meinem Mac mini partout keinen Kontakt zu meinen Google Calendars herstellen konnte.

Seit ich heute hier und da ein wenig ausgemistet habe, funktioniert es plötzlich. Welche Aktion(en) die Lösung bewerkstelligt haben, kann ich leider nicht mehr sagen.

  • Reset SyncServices. Die unter ~/Library/Application Support/SyncServices/Local abgelegten Daten sollte man mit dem Befehl
    /System/Library/Frameworks/SyncServices.framework/Versions/A/Resources/resetsync.pl full

    säubern (Quelle: Mac OS X: Resetting the SyncServices folder)

  • Mail-Accounts. In der Datei ~/Library/Mail/V2/MailData/Accounts.plist lagen noch einige Leichen herum, unter anderem auch mein Gmail-Account, welchen ich nur noch über die Web-Oberfläche aufrufe. Mit viel Vorsicht (und nachdem ich eine Kopie der Datei erstellt hatte), löschte ich diesen Eintrag.
  • Two-Way Authentication. Schlussendlich schaltete ich auf Grund eines tragischen Berichts im The Atlantic über den Hack eines GMail-Accounts die Zwei-Wege-Authentifizierung inklusive Applikationspasswörtern ein.

Als ich iCal nun erneut aufrief wurde zuerst einmal der Hauptkalender synchronisiert. Anschliessend konnte ich die restlichen Kalender unter Preferences > Accounts > Google > Delegation zur Synchronisation markieren.

Tags: , , , , , ,
Labels: IT

1 Kommentar | neuen Kommentar verfassen

Sonntag, 22. April 2012

iPhoto Photo Stream ist kaputt

Seit dem Umstieg von Mac OS X Snow Leopard auf Mac OS X Lion war ich nicht in der Lage, unter iPhoto 11 den Photo Stream zu aktivieren. Der Stream wird von meinem iPhone 3GS, meinem iPhone 4S und meinem iPad 1 befüllt.

Jedes Mal wenn ich unter iPhoto 11 die Rubrik „Photo Stream“ auswählte, wurde mir angeboten, den Stream zu abonnieren:

Nachdem ich erwartungsvoll auf „Turn On Photo Stream“ klickte, starrte ich während circa 30 Sekunden auf die Dialogbox, die mir mitteilte, dass iPhoto nun mit dem iCloud-Dienst Kontakt aufnehme:

Am Ende der Wartezeit hiess es dann aber nur lapidar:

Ein Aufruf von Console.app mit der Hoffnung, detailliertere Hinweise auf den Fehler zu erhalten, bot in der Tat ein tragisches Bild. Eine Filterung nach „Photostream“ förderte sich alle drei Sekunden wiederholende Fehlermeldungen zu Tage:

22.04.12 20:13:50.787 ReportCrash: Saved crash report for PhotoStreamAgent[37000] version 2.1 (10.12) to /Users/mario/Library/Logs/DiagnosticReports/PhotoStreamAgent_2012-04-22-201350_Mac-Mini.crash
22.04.12 20:13:50.859 PhotoStreamAgent: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive version (4294967295)'
*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff8fb78fc6 __exceptionPreprocess + 198
	1   libobjc.A.dylib                     0x00007fff96d86d5e objc_exception_throw + 43
	2   CoreFoundation                      0x00007fff8fb78dfa +[NSException raise:format:arguments:] + 106
	3   CoreFoundation                      0x00007fff8fb78d84 +[NSException raise:format:] + 116
	4   Foundation                          0x00007fff8f3e263f -[NSKeyedUnarchiver initForReadingWithData:] + 2611
	5   Foundation                          0x00007fff8f41159e +[NSKeyedUnarchiver unarchiveObjectWithFile:] + 129
	6   CoreMediaStream                     0x00000001001d09a0 -[MSCupidStateMachine initWithPersonID:] + 379
	7   CoreMediaStream                     0x00000001001b6639 -[MSSubscriber initWithPersonID:baseURL:] + 59
	8   CoreMediaStream                     0x00000001001b383d +[MSSubscriber subscriberForPersonID:] + 172
	9   CoreMediaStream                     0x00000001001a9256 -[MSMediaStreamDaemon _boundSubscriberForPersonID:] + 43
	10  CoreMediaStream                     0x00000001001a87d6 -[MSMediaStreamDaemon pollForSubscriptionUpdatesForPersonID:] + 48
	11  PhotoStreamAgent                    0x00000001000034fb -[AssetManagementDaemon startDaemon] + 491
	12  PhotoStreamAgent                    0x0000000100002f87 -[AssetManagementDaemon run] + 151
	13  libdispatch.dylib                   0x00007fff8a065224 dispatch_once_f + 53
	14  PhotoStreamAgent                    0x000000010000264c +[AssetManagementDaemon run] + 124
	15  PhotoStreamAgent                    0x0000000100001723 main + 67
	16  PhotoStreamAgent                    0x00000001000016d4 start + 52
)
22.04.12 20:13:50.863 com.apple.photostream-agent: terminate called throwing an exception
22.04.12 20:13:50.972 ReportCrash: Removing excessive log: file://localhost/Users/mario/Library/Logs/DiagnosticReports/PhotoStreamAgent_2012-04-22-200644_Mac-Mini.crash

Was hatte es mit incomprehensible archive version (4294967295) auf sich? Eine Google-Suche brachte die Lösung des Problems (nicht aber eine Erläuterung) zu Tage:

I found a fix! you just need to delete ~/Library/Application Support/iLifeAssetManagement and then reboot, and then it should work.

Quelle: aperture unable to connect to photo stream

Nach einem

rm -rf ~/Library/Application\ Support/iLifeAssetManagement

und einem Logout gefolgt von einem erneuten Login in meinen Mac-Account brachte die Erlösung: Nach dem Klick auf Enable Photo Stream dauerte es etwa 30 Sekunden, danach füllte sich der Stream mit Photos von meinen iOS-Geräten.

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 17. April 2012

Microsoft Access meldet „Overflow“

Heute meldete mir Microsoft Acceess äusserst nichtssagend „Overflow“, als ich ein Query ausführen wollte. Wie sich nach einigem Debugging herausstellte, versuchte ich, den Wert eines Tabellenfeldes mit einem Wert eines anderen Tabellenfeldes zu dividieren, wobei der Nenner 0 war.

Merke:

  1. Access-Fehlermeldungen sind Microsoft-typisch nichtssagend …
  2. … und zudem auch noch falsch, es hätte nämlich „Division by Zero“ heissen sollen

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen