• Wuala für Android

    Endlich ists da! Wuala für Android. Ich werde das gleich Testen und ein kurzes Review machen:
    http://wualablog.blogspot.com/2011/04/wuala-for-android-os.html
    Mein Umzug in die Cloud ist komplett.

  • Wuala und Winamp

    Nachdem nun meine Musik komplett in Wuala Cloud abgelegt ist, möchte ich meine MP3 auch direkt aus Wuala streamen können. Als langjähriger Winamp Benutzer habe ich die zwei Programme auf Ihre Verträglichkeit überprüft. Meine Schlussfolgerung: Funktioniert Super!
    Einzige Schwachstelle ist das einmalige Indexieren der Sammlung. Um nämlich alle MP3s in den Index von Winamp aufzunehmen, muss Wuala jedes MP3 temporär herunterladen, damit er die Metadaten einlesen kann. Hat man dies (zb über Nacht) einmal gemacht, geht das ganze Reibungslos, solange man natürlich am Internet ist. Auch das Rescannen geht schnell, da Winamp beim Rescan nur die Dateinamen vergleicht - und dazu muss Wuala die Datei nicht herunterladen.
    Da Wuala das Streamen beherrscht, gibt es auch keine Unterbrüche zwischen den einzelnen Lieder.
    Im Anhang sind meine Medienbibliothek Einstellungen. Viel Spass!

    screenshoots: 
  • Moving to the cloud: Mein Umzug in die Cloud mit Wuala

    Seit langem teste ich den Umzug in die Cloud. Bis jetzt hat es noch nie richtig geklappt. Wuala hat es nun bei mir geschafft! Ich 'wohne' nun zu 80% in der Cloud. Ich möchte anschliessend meine Beweggründe für meine Entscheidung hier teilen. Und warum die anderen es nicht geschafft haben. Und eine Möglichkeit, wie auch Du in die Cloud umziehen kannst.

    Warum ist Wuala besser?

    Ein kurzer Vergleich von Wuala zu Dropbox. Fürher habe ich Dropbox benutzt. Das Problem bei Dropbox ist eigentlich hauptsächlich der Speicherplatz. Er ist im Vergleich teuer und wird auch in geteilten Ordner vollständig dem eigenen Konto belastet. Das kommt daher, dass man die Ordner Synchronisieren muss. Das ist dann auch das zweite Problem. Ich will nicht alles Synchronisieren. Ich möchte auch die Möglichkeit haben, Inhalte in der Cloud zu lassen und direkt zu bearbeiten. Das war für mich ein Killerkriterium.

    Wuala hat mich mit der Teilen-Philosophie gelockt. Da mein MediaServer sowieso 24/7 läuft, kann man sehr schnell sehr viel Speicherplatz verdienen - und in meinem Fall Gratis! Weiter wird Wuala Platz nur einmal beansprucht. Ich kann also einen Gruppen-Ordner erstellen mit zB 20GB Daten und jemand, der nur 2GB zur Verfügung hat kann trotzdem davon profitieren, ohne dass er seine 2GB aufgeben muss. Der Gruppenbesitzer alleine "stellt" den speicher zur Verfügung. 

    Weiter werden Dateien bei Wuala selber nur einmal abgelegt. Unter allen Benutzern. So war ich erstaunt, das einige Inhalte sofort hochgeladen waren. So kann man je nach Inhalt sehr viel Upload Zeit einsparen. Natürlich bringt dies bei den Privaten Daten nichts.

    Das Maximum aus Wuala herausholen

    Nun zu den Wuala Tricks: Auf meinem kleiner Atom-Server läuft Windows 7. Zuerst einmal habe ich Wuala ganz normal darauf installiert. Speicher tauschen, nach ca. 3 Wochen kann man bereits 20GB für sich beanspruchen. Dieser lässt sich bis auf 100GB ausweiten, wenn mindestens 10% vom getauschten Speicher benutzt wird. Ich schätze mal, dass dies 2-3 Monate dauert, bis es soweit ist. Je nach Verbindungsgeschwindigkeit könnte das wohl auch schneller gehen.

    20GB sind natürlich schnell voll und so kommt die Phase Virtual Machine. MIt VMWarePlayer habe ich Debian installiert. Ohne GUI und schnickschnack. Java installieren und dann Wuala wie auf der Homepage von Wuala installieren. Bei mir benötigt das ungefähr 50MB im RAM-Speicher. Das schreit förmlich nach mehr. Also VM klonen und klonen, usw...pro VM kann man so maximum 100GB verdienen.

    Was gehört in die Cloud?

    Als erstes habe ich meine gesamte Ablage verschoben. Das sind bei mir die Daten, die sich nie ändern. PDFs, gescannte Unterlagen, Installationsfiles von Programmen, meine Abandonware-Spiele Sammlung, usw. Danach alle Projektunterlagen meiner Firma und meine gesamten Schulunterlagen. Die aktuellsten Ordner der Firma und der Schule synchornisiere ich lokal auf Laptop und Desktop.

    Die Ablagen-Daten, welche nicht privat sind, habe ich in eine Gruppe gemacht, welche ich mit meiner Familie teile. Darin hat es auch noch ein paar CDs und Höhrbücher für die Kleinen und digitalisierte Knightrider-Tapes von früher ;-). Zur Sicherheit synchronisiere ich diesen Ordner auf meinen Server als Backup, man weiss ja nie, wann das Internet doch einmal ausfallen sollte.

    Nicht auf Wuala habe ich folgende Daten: Videos, Filme, Photos. Grund dafür ist natürlich der Platz, aber eigentlich würde ich nur meine Photos noch gerne auf Wuala haben. Ändern könnte sich dies, wenn ich erst einmal mehr Speicher verdient habe. Videos und Filme machen zur Zeit für mich keinen Sinn weil man auch bedenken muss, dass man dann bei Benutzung jedesmal zuerst die ganze Datei herunterladen muss (Wuala unterstütz aber zumindest Streaming von Inhalten!). Meine Musik habe ich drauf doch habe ich es mit Winamp noch nicht geschafft ein unterbruchfreies streaming zu erreichen. Man müsste evtl den Musikordner lokal synchronisieren. Oder einen anderen Musikplayer einsetzten. Dazu habe ich im Moment keine Zeit.

    Erfahrung

    Je länger sehe ich mich immer wie mehr nur noch den Wuala-Browser zu benutzen. Er hat sicher nicht alle die Vorteile des Windows-Explorers, doch bringt er auch einige eigene Vorteile mit. So mag ich, dass wenn man etwas tippt er sofort zu suchen beginnt. Weiter finde ich die Thumbnails super, welche man sowohl für Ordner wie auch für Dateien manuell festlegen kann.

    Das direkte arbeiten bekommt von mir die Note Top. Ich hatte bis jetzt keinerlei Probleme. Normalerweise merkt man nicht, dass er im Hintergrund arbeitet.

    PortableApps in Wuala laufen lassen

    Wenn man Wuala in das eigene Dateisystem eingebunden hat, was sehr zu empfehlen ist, kann man auch Portable Apps darauf installieren. Eine super Sache! Am meisten Freude habe ich an der DOSBox. Richtig konfiguriert können so die alten Dos Spiele direkt über Wuala gespielt werden! Commander Keen lässt grüssen...

    Meine besten Wuala-Links

    Wuala Homepage: http://www.wuala.com/

    Wuala Blog: http://www.wuala.com/blog/

    Wuala und Debian: http://www.wuala.com/blog/2009/03/effective-usage-running-wuala-on-debian.html

    Autostart in Linux: http://pascal.nextrem.ch/2009/10/20/wuala-init-d-script/

    Android App kommt bald: http://forum.wuala.com/viewtopic.php?f=11&t=334

    DosBox: http://www.dosbox.com/

    PortableApps: http://portableapps.com/

  • PHP: mysql2epub, mit PHP ePub on the fly erstellen

    Schon lange habe ich ein Buch, welches ich einmal von einer Seite gerippt habe in meiner MYSQL Datenbank abgelegt. Da es nun ein eReader in unserem Haus gibt, wollte ich das Buch wieder zurück konvertieren, damit man es auf dem eReader lesen kann. Doch wie bringt man Inhalt aus einer Datenbank in ein ePub Format? Zu meinem Erstaunen war das ganz einfach. Ein paar Kniffe gibt es aber schon. Deshalb möchte ich nun dieses kleine PHP Programm mit allen Teilen. Es darf selbstverständlich abgeändert und weiterverwendet werden und kann auch als Einstieg in die ePub Programmierung dienen. Informationen und Wissen habe ich von folgender Webseite. Sie ist zwar komplex aber komplett:
    http://www.idpf.org/doc_library/epub/OPS_2.0.1_draft.htm
    Das ganze PHP Script zum konvertieren von MYSQL nach ePub ist unten im Anhang.
    Bei Fragen und Anregungen bitte unten kommentieren, ich freue mich auf ein Feedback!

    AnhangGröße
    mysql2epub.zip7.95 KB
  • Drupal: CSS Aggregation im Private Mode

    Hat man keine Kapazitätsprobleme, kann man mit diesem Kleinen Modul die CSS optimieren, vereinigen und Cachen. Leider ist dies ansonsten in Drupal 6 Core nicht möglich. Ich weiss, der Cache braucht relativ viel Platz in der DB, aber dies ist in meinem Fall kein Problem. Das Modul erstellt für jede Seite, welche eine andere CSS Dateien Konstellation hat, ein eigener Cache-Eintrag. Die Geschwindigkeit zum Laden der Seite ist bei mir extrem gestiegen (> 33%). Anregungen bitte im Kommentar posten!

    1. // die Folgenden Konstanten anpassen
    2. define('MINICSSDPATH', '/var/www/vhosts/yourhost/httpdocs');
    3. define('MINICSSCACHE', true);
    4.  
    5.  
    6. function minicss_menu() {
    7. $items = array();
    8. $items['minicss/css'] = array(
    9. 'title' => 'minicss css',
    10. 'page callback' => 'minicss_minify',
    11. 'page arguments' => array(2,'css'),
    12. 'access callback' => true,
    13. 'type' => MENU_CALLBACK,
    14. );
    15. return $items;
    16. }
    17.  
    18. /**
    19.  * Implementation of hook_preprocess_page()
    20.  */
    21. function minicss_preprocess_page(&$variables) {
    22. if (!empty($variables['styles'])) {
    23. preg_match_all('|href="(.*?\.css)|', $variables['styles'], $matches1);
    24. $variables['styles'] = '<link type="text/css" '.
    25. 'rel="stylesheet" media="all" '.
    26. 'href="/minicss/css/'.
    27. base64_encode(implode(',',$matches1[1])).'" />';
    28. }
    29. }
    30.  
    31. function minicss_minify($files,$type) {
    32. header('Content-Type: text/'.$type);
    33. header('Cache-control: public');
    34.  
    35. // The Checksum identifies the unique css-File-Package
    36. $checksum = md5($files);
    37. // Recive Cached CSS-Package
    38. $cache = cache_get('minicss_'.$checksum);
    39. // If Package does not exist, create it and output
    40. if (!$cache) {
    41. $output = '';
    42. $files = explode(',',base64_decode($files));
    43. foreach ($files as $file) {
    44. $content = file_get_contents(MINICSSDPATH.$file);
    45. // remove comments
    46. $content = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $content);
    47. //$content = str_replace("\t", ' ', $content); // Removing Tabs somehow creates problems...
    48. // Remove special chars
    49. $content = str_replace(array("\r\n", "\r", "\n", ' ', ' ', ' '), '', $content);
    50.  
    51. // urls sind relativ zum CSS file und müssen dementsprechend relativ zum miniCSS angepasst werden
    52. $path = str_replace(array_pop(explode('/',$file)), '', $file);
    53. $content = str_replace('url(', 'url('.$path,$content);
    54. $output .= $content;
    55. }
    56. // Write new created Package into Cache for next time
    57. if (MINICSSCACHE) cache_set('minicss_'.$checksum,$output);
    58. header ("Content-Length: " . strlen($output));
    59. print $output;
    60. }
    61. else {
    62. // If Cache-package already exists, output cache, also add Information about version
    63. $output = '/* Retrieved from Cache; Version: '.date('Y.m.d H:i',$cache->created).' */'."\n\n".$cache->data;
    64. header ("Content-Length: " . strlen($output));
    65. print($output);
    66. }
    67. }

    Evtl. muss man in der Datenbank Tabelle "System" das Modul-weight noch an den Schluss setzen.

  • Apache/PHP: Sendmail funktioniert nicht

    Wenn man auf Debian LAMP selber installiert, dann habe ich bemerkt, dass Email in PHP versenden nicht automatisch funktioniert. Zuerst sollte man nicht vergessen, in der php.ini den Pfad zu sendmail anzugeben. Doch das alleine funktioniert noch nicht, da sendmail so eingestellt ist, dass es nur Server intern Mails versenden kann. Sämtliche Mails nach aussen werden geblockt. Mit folgendem Befehl kann man diese Einstellung ändern:

    dpkg-reconfigure exim4-config

    Man kommt in ein Konfigurationsmenü. Hier wählt man die Option "internet site; mail is sent and received directly using SMTP" und schaltet damit "local delivery only; not on a network" aus. Die weiteren Einträgen kann man lassen, bei mir habe ich noch jeweils den Host geändert. Sonst habe ich nichts verändert. Nun funktioniert der Email Versand von Drupal wieder ordentlich!

  • Subdomain weiterleiten mit Conf bzw. htaccess

    Weiterleitung einer Subdomain auf die Hauptdomain kann man direkt über das conf-File bzw über eine .htaccess Datei. Das geht folgendermassen:

    # Allen Traffic der supbdomain www.example.com und xyz.example.com weiterleiten nach example.com

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^xyz\.example\.com$ [NC]
    RewriteRule ^(.*)$ http://example.com$1 [R=301]

    Kann man vor allem brauchen, wenn man zwar verschiedene Subdomain anbieten möchte, jedoch nur eine Domain "promoten" möchte. Bei uns war es so, dass wir früher die Drupal Seite über eine Subdomain erreichten, jetzt direkt über die Domain. Die Leute sollen immer noch über die Subdomain draufkommen. Eine Zeit lang benutzten wir einfach einen ServerAlias. Die birgt jedoch gefahren, zB wenn man auf der Seite absolute Verweise hat. So werden nun per sofort alle Subdomain anfragen weitergeleitet.

    subdomain2domain, www2domain, www2root

  • Drupal: vCard Export

    Ich weiss, es gäbe ein Modul um Drupal Kontakte als vCard zu exportieren. Für diese einfache Aufgabe war mir dieses aber einfach viel zu schwerlastig. Also habe ich wieder einmal selber Hand angelegt und der Grössenunterschied des Modules ist beachtlich (ca 1:100!), ist nicht auf die Externe PEAR Lib angewiesen und kann mit Umlauten umgehen. vCard mit Umlauten war unter anderem der Grund, wie ich überhaupt dazu kam, es selber zu machen. Hier mein mini-Modul:

    1. function uvcard_menu() {
    2. $items = array();
    3. $items['user/%/uvcard'] = array(
    4. 'title' => t('vcard'),
    5. 'type' => MENU_CALLBACK,
    6. 'page callback' => 'uvcard_fetch',
    7. 'page arguments' => array(1),
    8. 'access arguments' => array('access content'),
    9. );
    10. return $items;
    11. }
    12.  
    13. /**
    14.  * VCard for direct download
    15.  */
    16. function uvcard_fetch($uid) {
    17. $dev = false;
    18. $eol = "\r\n";
    19. $u = user_load(array('uid' => $uid)); // gesamtes Benutzer-Profil laden
    20. $vcard = 'BEGIN:VCARD'.$eol.'VERSION:2.1'.$eol;
    21. $vcard .= 'N:'.$u->profile_nachname.';'.$u->profile_vorname.';;;'.$eol;
    22. $vcard .= 'FN;CHARSET=ISO-8859-8:'.$u->profile_vorname.' '.$u->profile_nachname.$eol;
    23. $vcard .= 'TEL;PREF;WORK;VOICE;:'.$u->profile_telefon.$eol;
    24. $vcard .= 'TEL;WORK;CELL;:'.$u->profile_telefon.$eol;
    25. $vcard .= 'TEL;WORK;FAX;:'.$u->profile_fax.$eol;
    26. $vcard .= 'EMAIL;INTERNET:'.$u->mail.$eol;
    27. $vcard .= 'ADR;DOM;WORK:;;'.$u->profile_strasse.';'.$u->profile_ort.';;'.$u->profile_plz.';'.$eol;
    28. $vcard .= 'REV'.date("Ymd\THis",$u->access).$eol;
    29. $vcard .= 'END:VCARD';
    30.  
    31. $vcard = utf8_decode($vcard);
    32.  
    33. if ($def) { print $vcard.$eof; print '<pre>'.print_r($u,1).'</pre>'; exit;}
    34. // Set headers
    35. header('Content-type: text/x-vcard');
    36. header('Content-Disposition: attachment; filename="'. $u->name .'.vcf"');
    37. print $vcard;
    38. }

    Wenn man die Variable $def nach true umstellt, bekommt man die erzeugte vCard ausgeprintet und zusätzlich das gesamte Benutzerprofil, dmait man sich die oberen Zeilen gemäss seinen eigenen Wünschen anpassen kann.
    Die vCard Spezifikationen habe ich mir von http://en.wikipedia.org/wiki/VCard geholt.
    Um die Seite aufzurufen, muss man dann nur noch irgendwo ein Link darauf machen (zB in einer View-Spalte).

  • Drupal: Problem mit language files de_*.js

    Lange habe ich nach einer Lösung gesucht für das Problem mit dem Language js File im Private File Moduls von Drupal. Ich hatte immer wieder das Problem, dass Drupal ein Systempath zurückgab anstatt einer URL. Das sah etwa so aus:
    http://var/www/vhosts/test.com/httpdocs/files/languages/de_56080f4d0d05e...
    Patches und Extra-Module wie hier oder hier beschrieben haben nicht funktioniert.
    Kurzerhand habe ich ein Hack gemacht, für alle die, welche mit der oben verlinkten Hilfe auch nicht weiterkommen:
    1. modules/locale/locale.module in Funktion locale_update_js_files() $dir überschrieben mit $dir = 'sites/default/files/languages';
    2. dann habe ich ein cron eingerichtet der einmal pro Stunde die js Datei in den Ordner kopiert:
    25 * * * * cp /pfad/httpdocs/files/languages/*.js /pfad/httpdocs/sites/default/files/languages/
    Der Hack funktioniert und die Seite wird nicht mehr durch das nicht-Aufinden der js Datei ausgebremst.

  • Drupal: fid2nid, nid von fid

    Für ein Modul musste ich aus einer fid die zugehörige nid herausfinden. Bis anhin habe ich noch keine Funktion in der API gefunden, welche dies erledigt. Hier mein Vorschlag:

    1. /**
    2.  * Get's the $nid from a File of a CCK File-Field $fid
    3.  */
    4. function fid2nid($fid) {
    5. // Get all the CCK-File-Fields
    6. $fields = array();
    7. $sql = "SELECT field_name FROM {content_node_field} WHERE type LIKE 'filefield';";
    8. $result = db_query($sql);
    9. while ($r = db_fetch_array($result)) {
    10. $fields[] = $r['field_name'];
    11. }
    12. $found = false;
    13.  
    14. foreach ($fields as $field) {
    15. // Checks if the table exists
    16. $sql = "SHOW TABLES LIKE 'content_".$field."'";
    17. $result = db_query($sql);
    18. $i = false;
    19. while ($r = db_fetch_array($result)) { $i = true; }
    20. // If it does, see if fid is in this table
    21. if ($i) {
    22. $sql = "SELECT content_".$field.".nid FROM files
    23. LEFT JOIN content_".$field."
    24. ON (files.fid = content_".$field.".".$field."_fid)
    25. WHERE ".$field."_fid = '%d'";
    26. $result = db_query($sql, $fid);
    27. while ($r = db_fetch_array($result)) {
    28. $nid = $r['nid'];
    29. }
    30. if (count($nid)) {break;} // if fid is in table, stop while and return nid
    31. }
    32. }
    33. return $nid;
    34.  
    35. }

Inhalt abgleichen