Archiv des Autors: Sven

Select all on focus mit jQuery, Phonegap & Chrome

Phonegap-Android-App-Select-All-On-FocusBei der Entwicklung meiner Android App kommt Phonegap und jQuery mobile zum Einsatz. Wenn der Benutzer auf ein Input Element klickt bzw drückt, soll der gesamte Inhalt selektiert werden, wenn noch der Default Wert gesetzt ist. Im folgenden Code Snippet ist auch dieser WebKit Bug berücksichtigt, der unter Chrome/Safari und auch Phonegap einen kleinen Workaround erfordert.

<br />
	$('input[type=text]')<br />
		.focus(function(){<br />
			if(this.value == this.defaultValue) {<br />
		        this.select();<br />
		    }<br />
		}).mouseup(function(e){ // Workaround for Webkit to prevent unselection on mouseup<br />
			e.preventDefault();<br />
		}<br />
	);<br />

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.

Datei in deb Paket finden mit apt-file

Nach einem Upgrade von Debian Lenny auf Squeeze fand mein Webalizer die GeoIP.dat Datei nicht mehr. Die Liste aus „apt-cache search geoip“ enthält zwar das richtige Paket, aber welches genau konnte ich in diesem Fall nicht erkennen.

Abhilfe schafft hier apt-file:
apt-get install apt-fiel && apt-file update

Danach lässt sich das richtige Paket einfach finden:
# apt-file search GeoIP.dat
geoip-database: /usr/share/GeoIP/GeoIP.dat

O2 Preise für 0180 Service Hotlines

Ich habe seit einiger Zeit keinen Festnetzanschluss mehr, was aber bisher kein Problem war, weil ich auf Festnetz mit meinem Mobil Vertrag kostenlos telefonieren kann und eine Festnetznummer am Handy habe.

Zum Problem wird das erst bei den Service Hotlines. Die kosten aus dem Mobilfunknetz ein Vielfaches des Festnetzpreises, wobei man verbraucherfreundlich der ¹ oder dem * bei den angegebenen Festnetzpreisen folgen muss, um zu erfahren das man „max. 49“ Cent zahlt (bei 0180).

Wie viel zahl ich denn genau? Das kann man als O2 Kunde in folgendem PDF nachschlagen:
http://o2online.de/nw/assets/blobs/pdfs/premium-voice-services.pdf

Ich zahle auf 0180 42 Cent.. Warum ich aus dem Mobilfunknetz 33 Cent pro Minute mehr bezahlen muss verstehe ich aber nicht.

Warum ich Facebook Like-Buttons blockiere

Ich stehe Social Networks zwigespalten gegenüber. Zum einen sind sie unglaublich praktisch, zum anderen habe ich kein gutes Gefühl, wenn ich die Kontrolle meiner persönlichen Daten der Cloud überlasse. Ganz ehrlich, auf Facebook will ich nicht mehr verzichten, aber ich passe auf welche Daten ich preisgebe. Viele sind da viel freizügiger, aber das weiß heute jeder und muss es für sich bewerten.

Aber stimmt das? Kürzlich habe ich mich mit Uli darüber unterhalten, wie erfolgreich Facebook doch sei und wie stark die Like-Buttons große und kleine Webseiten durchdringen.. aber wie funktionieren die überhaupt? Beim Austausch und späteren Recherchieren wird mir klar: Facebook weiß, welche Seiten ich wann besucht habe, obwohl ich nie diese Like-Buttons drücke.

Warum? Ein Webseitenbetreiber kann über bestimmte Schnittstellen Facebook-Inhalte einbinden. Wenn ein Benutzer nun auf eine Seite mit Like-Button geht, dann wird in einer Unterabfrage die Facebook Seite aufgerufen. Facebook weiß genau, in welchem Kontext dieser Like-Button geladen wird – auf deiner Lieblings Shopping-Seite, im Hobby-Forum oder bei der Google Recherche.

Facebook kann mich also auf Schritt und Tritt beobachten! Will ich das? Facebook kann gerne die Informationen die ich ihnen in Facebook hinterlasse nutzen – damit verdienen sie schließlich ihr Geld. Wenn sie aber meine Internet Aktivitäten heimlich mit Like- und Share-Buttons verfolgt sage ich: piss off Zuckerberg!

Es gibt mit dem Facebook Blocker Plugin eine einfache Möglichkeit sich davor  zu schützen. Das Browser Plugin steht für Safari, Chrome und Firefox zu Verfügung und verhindert das Laden von Like- und Share-Buttons.

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

Duplicity FTP Timeout

Am 1. jedes Monats machen meine System ein Fullbackup mit ftplicity, ein Wrapper Script das die Benutzung von duplicity einfacher und übersichtlicher gestaltet. Am 1.1.2009 machte ein Server aber ärger:

No signatures found, switching to full backup.
Traceback (most recent call last):
File „/usr/bin/duplicity“, line 373, in ?
if __name__ == „__main__“: main()
File „/usr/bin/duplicity“, line 366, in main
if not sig_chain: full_backup(col_stats)
File „/usr/bin/duplicity“, line 142, in full_backup
bytes_written = write_multivol(„full“, tarblock_iter, globals.backend)
File „/usr/bin/duplicity“, line 89, in write_multivol
backend.put(tdp, dest_filename)
File „/usr/lib/python2.4/site-packages/duplicity/backends.py“, line 349, in put
self.error_wrap(’storbinary‘, „STOR „+remote_filename, source_file)
File „/usr/lib/python2.4/site-packages/duplicity/backends.py“, line 335, in error_wrap
except ftplib.all_errors, e: raise BackendException(e)
duplicity.backends.BackendException: 421 No Transfer Timeout (600 seconds): closing
control connection.

Auf dem System läuft Debian Etch in einer recht beschnittenen Xen Domain, die ein halbes Jahr brav Backups angelegt hat. Warum es seit dem Jahreswechsel nicht mehr hinhaut habe ich leider nicht herausgefunden – ich vermute dass mein Provider (Hetzner) die Timeout Grenze gesenkt hat. Viel mehr stört mich, warum duplicity das nicht handeln kann. Schließlich ist mein System nicht das langsamste und alle anderen Systeme machen brav weiter.

Debian Etch bringt duplicity in Version 0.4.2 mit sich, welche schon recht betagt ist. Ich bin generell gegen Backports, in diesem Fall ist aber viel zu viel Zeit für die Problemlösung draufgeganen. Außerdem wird ftplicity  nun von Edgar Soldin weiterentwickelt und bringt in der aktuellen Version einige sinnvolle Features mit.  Und so funktionierts:

  • Das Backports Repository hinzufügen
  • apt-get install ncftp
  • apt-get -t etch-backports install duplicity
  • ftplicity herunterladen: aktuellen Version
  • mv ftplicity /usr/local/bin
  • ftplicity usage

Man muss nun mit Profilen arbeiten, die alte Config lies sich in meinem Fall jedoch ohne weiteres übernehmen.

Postfix, Syslog und Debian/Ubuntu

Sind die ersten E-Mail Adressen erstmal in den Botnetzen der Spamer gelandet gehts auf dem Mailserver richtig rund. Im Sekundentakt versuchen dubiose Quellen Mails einzuliefern, die man zwar erfolgreich mit DNSBLs und Spamfiltern bekämpfen kann, welche aber anderswo trotzdem Spam verursachen: im syslog

Ich weiß nicht warum die Standardeinstellung des syslog Daemons Mail bezogene Ereignisse sowohl in /var/log/mail.* als auch in /var/log/syslog  logt, aber ich sehe auch keinen Grund warum ich das nicht verhindern sollte.

Öffne /etc/syslog.conf

suche

*.*;auth,authpriv.none        -/var/log/syslog

ändere es in

*.*;auth,authpriv.none;mail.none        -/var/log/syslog

Generell lohnt es sich, wie bei so vielem, mit der syslog.conf vertraut zu werden. Man stolpert sicherlich nochmal darüber.

Linux auf andere Festplatte umziehen

Manchmal kommt man in die Situation, dass ein System auf ein Raid oder eine größere Platte umziehen muss,  sich aber die Installations- und Kofigurationsprozedur sparen möchte. Nichts leichter als das…

Methode 1:

  1. Boote eine LiveCD (nicht zwingend)
  2. Erstelle auf dem neuen Datenträger die entsprechenden Partitionen (man fdisk) wie sie auf der alten Platte vorhanden sind. Die Größe darf hier variieren, i.d.R. sollten die Partitionen mindestens so groß wie zuvor.
  3. Mit „cp -ar“  die Daten auf die neue Platte übertragen
  4. Auf der neuen Platte die /etc/fstab anpassen (bsp: hda1 -> sda1 – bzw die volume id aktualisieren (vol_id /dev/sda)
  5. Grub aktualisieren (grub-install)

Die Methode verwende ich vor allem bei Servern, weil das System schon optimal konfiguriert sein sollte und eine Neuinstallation keinen Sinn macht. Auf dem Desktop sieht das bei mir anders aus.. ich teste oft neue Programme, ziehe ewige Abhängigkeiten vor dem Kompilieren oder zerballer mir das System mit experimentellen Treibern (jaja..).

Wenn ich dann mein System neu aufsetze, möchte ich aber möglichst wenig Aufwand betreiben. Also sichere ich mir mein Home weg. Danach wird (bei mir) Ubuntu neu aufgesetzt und /home eine eigene Partition spendiert – das spart einem bei der nächsten Neuinstallation das wegsichern von /home.

Man sollte daran denken auf dem neuen System die alten Quellen die man noch nutzen möchte zu übertragen, da alte Programmversionen mit neuen Konfigurationsdateien im Home-Verzeichnis nicht kompatibel sein müssen.

Man kann die gleichen Pakete wie auf dem alten System installieren, ich rate davon aber ab weil wieder viel Schrott mitkommt – Ubuntu ist bloated genug. Der Vollständig- und meiner Vergesslichkeit zuliebe sei hier trotzdem festgehalten wie es funktioniert:

auf dem alten System:
$  dpkg –get-selections > installierte_pakete
auf dem neuen System:
$  dpkg –set-selections < installierte_pakete
$ apt-get dselect-upgrade

Das geht nur gut wenn beide Installationen identische Quellen und Distributionsrelease haben – außerdem muss die Distribution deb basierend sein.

Generell ist es auch möglich mit dd ein System zu kopieren bzw zu klonen. Bei einem Umzug aber nicht empfehlenswert.