Archiv der Kategorie: Coding

Google Maps for Android 7.0.1 – KML features missing

In earlier versions of Google Maps for Android, it was possible to load a KML file with Google Maps.

This for example is very useful, when you build a responsive website: You place a Link to Googel Maps, include a KML file and it automatically opens the Maps App on Android phones and loads the custom markers set in the KML file. The KML files can be build with Google Maps Engine Lite or Google Earth.

The feature is missing in Version 7 of Google Maps and i don’t know a workaround. Searching on Google didn’t lead to any result. Does any of our readers know about something to fix this issue?

With Google Maps up to Version 6, i just placed a link like this:

<a href="geo:0,0?q=ADDRESS_OF_YOUR_KML_FILE">LINKNAME</a>

Now, Google Maps only says „No Results for …“ It would be great, if Google would fix this soon. At the moment, i don’t know any possibility to open a custom map in the Google Maps App.

Update: The feature is as well gone for the new Google Maps for Desktop preview.

Bootstrap zusammen mit Joomla 2.5/Mootools nutzen – Dropdown Bug

Bootstrap ist ein sehr beliebtes CSS Framework von Twitter. Joomla ist ein CMS, welches ich aufgrund seiner Einfachheit und Vielseitigkeit gerne verwende. Es gibt derzeit einen Bug zwischen Bootstrap und Mootools. Mootools ist ein Javascript Framework (der etwas angestaubten Generation) welches von Joomla zwingend erfordert wird und sehr tief im System verankert wird. Bootstrap setzt auf jQuery.

Will man Bootstrap in Joomla nutzen, ergeben sich beispielsweise bei Dropdown-effekten Bugs. Dies geschieht, weil Bootstrap die hide(); Funktion von Mootools triggert. An einem Fix wird gerade gearbeitet, bis dahin kann folgender Workaround verwendet werden:

in der Bootstrap.js Datei die folgende Zeile:

this.transition('removeClass', $.Event('hide'), 'hidden')

ersetzen durch:

this.transition('removeClass', $.Event('hideme'), 'hidden')

Mehr Informationen gibt es hier: https://github.com/twitter/bootstrap/issues/3436

Navigieren mit Javascript/Ajax

Auf einer herkömmlichen Webseite navigiert man mit Links, im speziellen mit HTML <a> Tags. Diese werden in der Adressleiste des Browsers angezeigt und beim Springen zu einer anderen Seite aktualisiert. Basiert die Webseite jedoch auf Ajax bzw. setzt diese die Navigation mit Javascript um, wird aufgrund des fehlenden Seiten Refreshs die Adresszeile nicht aktualisiert. Es ist somit weder möglich, den Zurück Button des Browsers zu nutzen noch den Seitenlink zu versenden sodass der Empfänger die gleiche Seite angezeigt bekommt wie der Sender.

Die Lösung des Problems: Navigation mit Hashtag und der HTML5 History sowie die hashchange HTML4 Funktion.

Durch HTML5 wird es möglich, die Browser History zu verändern. Damit dies nicht bei jedem vergebenen <a> Tag einer Webseite getriggert werden muss, gibt es Bibliotheken die dem Webentwickler unter die Arme greifen. Somit wird es möglich, einfach ein <a href=“#neueSeite“> zu tippen, welches dann automatisch auf die richtige Stelle verweist. Unter HTML4 kann dies mit der hashchange Funktion vollzogen werden. Die genaue Verwendung hängt von der verwendeten Bibliothek ab, mir sind derzeit folgende Möglichkeiten bekannt:

sowie

Ich persönlich habe mangels Kenntnis von history.js bis jetzt mit jQuery bbq gearbeitet. Dieses funktionierte in meinem Fall sehr zuverlässig und war einfach zu implementieren. Es scheint jedoch, dass history.js einige Vorteile bietet. Da die HTML4 Hashchange Funktion deprecated ist, sollte wohl History.js verwendet werden.

Beachten sollte man dabei jedoch, dass Crawler wie der Google Bot oder Tools für den barrierefreien Zugriff derzeit kein Javascript interpretieren. Im Zuge der Suchmaschinenoptimierung und der Barrierefreiheit sollte man seine Webseite also auch immer auf volle Navigierbarkeit ohne Javascript prüfen.

Tipp: Sollte man nur eine sehr simple Seite erstellen wollen, auf der der statische Content nach und nach angezeigt wird, kann man ebenso die angesprochenen Libraries zur Navigation verwenden. Bei kleinen Projekten wie z.b. Visitenkarten muss es nicht immer Ajax sein! 😉

Diese Funktion habe ich bei der Erstellung einer Einladungswebseite für ein Jahrgangstreffen verwendet, eine Demo findet sich hier.

PowerLab Statusupdate Juni 2012

PowerLab Dashboard

PowerLab is alive! Wir führen gerade ein Usability-Experiment im Rahmen einer Universitätsveranstaltung durch – Selbstverständlich ist PowerLab unser Untersuchungsobjekt. Es werden Concurrent-Think-Aloud Tests durchgeführt, in denen wir unerfahrene Probanden das Anmeldeformular ausfüllen lassen sowie Retrospective-Think-Aloud Tests mit erfahrenen Anwendern im PowerLab Backend. Du möchstest mehr über PowerLab erfahren? Besuche http://www.powerlab.eu oder schreibe uns eine Mail 

Vergleiche Strukturen zwischen MySQL Datenbanken

Möchte man die ALTER Statements zweier Datenbank-Revisionen automatisch generieren lassen, bietet sich das Commandline Tool mysqldiff an. Damit kann man auf einfache Art und Weise die benötigten DDL-Statements zwischen Produktiv-Version und aktuellem Development-Snapshot erstellen.

Unter Ubuntu installiert man das in Perl geschriebene Programm am einfachsten via CPAN:

> sudo cpan
cpan[1]> install MySQL::Diff

Nach der Installation führt man den Vergleich durch

> mysqldiff -u root -p PASS powerlab_latest_stable powerlab_dev

In meinem Beispiel möchte ich die Änderungen der Datenbank powerlab_latest_stable hin zu powerlab_dev bekommen.

Der Output sieht dabei wie folgt aus:

ALTER TABLE lab_event_tags ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
ALTER TABLE lab_event_tags_mapping ENGINE=InnoDB DEFAULT CHARSET=utf8; # was ENGINE=InnoDB DEFAULT CHARSET=latin1
ALTER TABLE lab_person DROP COLUMN last_participation; # was varchar(30) DEFAULT NULL
ALTER TABLE lab_person CHANGE COLUMN comment comment text; # was varchar(45) DEFAULT NULL
ALTER TABLE lab_person ADD COLUMN is_deleted tinyint(1) DEFAULT NULL;
ALTER TABLE lab_person ENGINE=InnoDB AUTO_INCREMENT=3113 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=3112 DEFAULT CHARSET=utf8
ALTER TABLE lab_person_values ENGINE=InnoDB AUTO_INCREMENT=42424 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=42390 DEFAULT CHARSET=utf8

Dateien aus Subversion History löschen

Im Eifer des Gefechts kann es vorkommen, dass sensible Daten versehentlich commitet werden und für andere zugänglich im Repository landen. Die Dateien und Ordner einfach wieder zu löschen reicht nicht, da die Daten noch in der History der jeweiligen Revision vorliegen. Wie man das Repository doch davon befreien kann sei hier erklärt:

  1. Dump des alten Repository
    1. svnadmin dump /path/to/svn/Repo > repoDump
  2. Löschen der sensiblen Daten aus dem Repository Dump
    1. cat repoDump | svndumpfilter exclude trunk/passwd trunk/secrets/  > repoDump-clean
  3. Erstellen eines neuen Repositorys
    1. svnadmin create /path/to/svn/newRepo
  4. Importieren des bereinigten Dumps in das neue Repository
    1. svnadmin load /path/to/svn/newRepo/< repoDump-clean

Das zentrale Werkzeug, dass hier zum Einsatz kommt und mühselige Handarbeit erspart ist svndumpfilter. Weitere Infos findest du unter http://svnbook.red-bean.com/en/1.1/ch05s03.html#svn-ch-5-sect-3.1.3.

ADOdb Transactions mit MySQL

Wer mit ADOdb als Datanbank Lib und MySQL als DBMS Transaktionen verwenden möchte, muss den Datenbanktreiber ‚mysqlt‘ verwenden – mit angehängtem „t“.

Ich habe leider viel zu lang suchen müssen und bin schließlich auf einen 4 Jahre alten Blogpost des Bloggers Jason Lefkowitz gestoßen.

Möge dieser Blog Post einem Leidensgenossen eine schnelle Hilfe sein..!

GeoIP, Apache and PHP

This is a short notice about how to use GeoIP with Apache and PHP. MaxMind’s GeoIP is a database of ip addresses ordered by the corresponding countries. This can be used to guess a user’s prefered language for a multilanguale website.

  • apt-get install libapache2-mod-geoip
  • get the latest database version
    wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
  • Apache configuration:
    GeoIPEnable On
    GeoIPDBFile /path/to/GeoIP.dat
echo apache_note("GEOIP_COUNTRY_CODE") . " - " . apache_note("GEOIP_COUNTRY_NAME");

The free to use database is updated every month, so it’s good to set up a cronjob.

Get more information here: http://www.maxmind.com/app/geolitecountry