Samsung Omnia 7 Windows Phone

Seit zwei Tagen bin ich im Besitz des Omnia 7 und konnte ich mir schon einen kleinen Überblick über die Funktionen dieses Windows Phones machen. Dabei sind mir einige Funktionen aufgefallen, die ich als Benutzer bei der Bedienung einfach intuitiv vermisse oder erwartet hätte – oder für die ich einfach zu dumm bin. Davon soll dieser Artikel handeln. Und damit kein falscher Eindruck entsteht: ich bin sehr zufrieden mit dem Omnia 7. Das Display ist grandios, die Tasten reagieren sehr gut, und man merkt, dass kein langsamer Prozessor dahinter steckt, wie bei meinem „alten“ Samsung Galaxy 3.

Gut finde ich, dass meine Facebook-Freunde direkt unter Kontakte auftauchen. Schön wäre es jedoch gewesen, wenn mir nicht nur die „Neuigkeiten“ zu einem Kontakt angezeigt werden würden, sondern ich auch Fotos oder so sehen könnte. Es würde ja schon ein Link reichen, mit dem ich den Kontakt in der Facebook-App öffnen könnte. Aber entweder geht das nicht, oder ich habe das Windows Phone grundlegend falsch verstanden. Und wenn Facebook schon „integriert“ ist, wäre es schön gewesen, wenn die Veranstaltungen auch in den Kalender importiert werden würden, wie das Android das macht.

Wo ich schon mal bei Facebook bin: wenn ich auf einen Youtube-Link klicke, den jemand auf Facebook geteilt hat, werde ich auf youtube.com/watch usw. weitergeleitet, um dann zu erfahren, dass die Datei nicht heruntergeladen werden kann, weil dieser Dateityp nicht von WP unterstützt wird. Stylischerweise hätte ich erwartet, dass auch hier Gebrauch von der YouTube-App gemacht wird, anstatt mir diese grandiose Fehlermeldung einzublenden. So schwer kann das doch nicht sein?!

Was ich jedoch am meisten vermisse ist die SWYPE-Tastatur. Trotz des guten Touchscreens war ich mit dem schäbigen Touchscreen meines Galaxy 3 doch schneller an der Tastatur.

Außerdem ist das Telefon sehr laut. Selbst wenn ich den Lautstärkeregler auf 1 von 30 einstelle, ist die Musik noch sehr laut. Eine etwas feinere niedrigere Minimallautstärke wäre wünschenswert.

Lightbox Bilder speichern bzw. downloaden

Es gab ein größeres Lightbox Update, deshalb habe ich das Lightbox Projekt auf GitHub geforkt und angepasst für Version 2.51: https://github.com/nooblucker/lightbox2 

Ich nutze Lightbox v2.05 auf vielen Websites, um Bilder bzw. Bildergalerien ansprechend zu präsentieren. Leider wissen viele User nicht, wie sie das angezeigte Bild speichern bzw. downloaden können. In manchen Browsern funktioniert es über einen Rechtsklick auf den Link und „Ziel speichern unter“. In anderen Browsern wird der Rechtsklick aber von Lightbox abgeblockt. Darum habe ich beschlossen, Lightbox um einen Download-Button zu erweitern.

Hierzu erweitern wir zunächst das LightboxOptions Objekt um eine Variable, die den Pfad zum Download-Button beinhaltet. Dazu öffnen wir die mitgelieferte Datei „lightbox.js“.

LightboxOptions = Object.extend({
    fileLoadingImage:        '/images/loading.gif',
    fileBottomNavCloseImage: '/images/closelabel.gif',
    fileBottomNavDownloadImage: '/images/download-icon.gif',

    overlayOpacity: 0.8,   // controls transparency of shadow overlay

In der selben Datei ändern wir den Konstruktor der Lightbox Klasse, also die Methode initialize. Wir fügen einen Link mit der ID „bottomNavDownload“ und die Download-Grafik hinzu.

Builder.node('div', {id:'imageDataContainer'},
 Builder.node('div',{id:'imageData'}, [
  Builder.node('div',{id:'imageDetails'}, [
   Builder.node('span',{id:'caption'}),
   Builder.node('span',{id:'numberDisplay'})
  ]),
  Builder.node('div',{id:'bottomNav'}, [
   Builder.node('a',{id:'bottomNavDownload', href: '#', target: '_blank' },
    Builder.node('img', { src: LightboxOptions.fileBottomNavDownloadImage })
   ),
   Builder.node('a',{id:'bottomNavClose', href: '#' },
    Builder.node('img', { src: LightboxOptions.fileBottomNavCloseImage })
   )
  ])
 ])
)

Nun müssen wir nur noch das richtige Ziel für den Link setzen. Dazu nutzen wir die updateDetails Methode.

    //
    //  updateDetails()
    //  Display caption, image number, and bottom nav.
    //
    updateDetails: function() {

        this.caption.update(this.imageArray[this.activeImage][1]).show();

        $('bottomNavDownload').href = '/download.php?filename='+$('lightboxImage').src;

Mein Download-Button ist ein Diskettensymbol. Als Ergebnis erhalte ich dann also links neben dem Close-Button das Diskettensymbol. Ein Linksklick öffnet das Bild in einem Download-Dialog. Und zwar erreicht man dies durch die Datei download.php mit folgendem Inhalt:

<?php

// from http://www.php.net/manual/de/function.header.php#102175
function downloadFile( $fullPath ){

 // Must be fresh start
 if( headers_sent() )
 die('Headers Sent');

 // Required for some browsers
 if(ini_get('zlib.output_compression'))
 ini_set('zlib.output_compression', 'Off');

 // File Exists?
 if( file_exists($fullPath) ){

 // Parse Info / Get Extension
 $fsize = filesize($fullPath);
 $path_parts = pathinfo($fullPath);
 $ext = strtolower($path_parts["extension"]);

 // Determine Content Type
 switch ($ext) {
 case "pdf": $ctype="application/pdf"; break;
 case "exe": $ctype="application/octet-stream"; break;
 case "zip": $ctype="application/zip"; break;
 case "doc": $ctype="application/msword"; break;
 case "xls": $ctype="application/vnd.ms-excel"; break;
 case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
 case "gif": $ctype="image/gif"; break;
 case "png": $ctype="image/png"; break;
 case "jpeg":
 case "jpg": $ctype="image/jpg"; break;
 default: $ctype="application/force-download";
 }

 header("Pragma: public"); // required
 header("Expires: 0");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Cache-Control: private",false); // required for certain browsers
 header("Content-Type: $ctype");
 header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
 header("Content-Transfer-Encoding: binary");
 header("Content-Length: ".$fsize);
 ob_clean();
 flush();
 readfile( $fullPath );

 } else die('File Not Found');
} 

$filename = str_replace("http://www.domain.de", "", $_GET['filename']);
downloadFile(getcwd().$filename);

?>

Je nachdem wie die Website aufgebaut ist, muss man hier Pfade anpassen.

VirtualBox Update von 3.2.12 auf 4.0.4

Habe gerade mein VirtualBox auf den neuesten Stand gebracht. Man soll ja immer alles updaten. Allerdings hat mich das nun 3 Stunden nervenaufreibende Fehlersuche und wilde Googleei gekostet. Denn nach dem Update meldete mein Ubuntu 10.10 ein fehlerhaftes Dateisystem und ich solle doch bitte mit fsck die Fesplatte überprüfen lassen. Das hab ich gemacht, woraufhin tonnenweise Fehler entdeckt und behoben wurden. Nach dem Reboot erschiend jedoch nur noch ein Fehler von wegen irgendeiner invaliden ELF magic und grub rescue: _

Grandios! grub rescue kannte nicht mal den help Befehl, woraufhin ich resignierte. Also eine neue VM erstellt und die Festplatte gemountet. Die Daten konnte ich sichern. Aber die neue VM jetzt nochmal komplett aufsetzen wollte ich auch nicht. Also habe ich das gute alte 3.2.12 parallel installiert. Und siehe da, mein Ubuntu startet wieder, keine Fehler.

Sollte ich jemals herausfinden, wie man diesen Fehler vermeidet / behebt, werde ich darüber schreiben.

NTARS4tw