skweez.net

Adium Contacts Spotlight Importer

by elm
23.02.2012

Ever missed your Adium contacts in the Spotlight search results? Well here is the (beta) answer to this problem: The Adium Contacts Spotlight Importer Plugin. With this plugin all your contacts become available in Spotlight and with one keystroke you can start a conversation.

You can find the plugin on our Github page. The plugin is beta software as we did not test it very much so feel free to report issues on Github or submit patches.

Roundcube Identity SMTP Plugin

by elm
17.02.2012

Some days ago we (the skweez.net team) decided to try to replace all the fancy services from Google with software on our own server. So we looked at Roundcube for a decent web mail interface. Roundcube works great but we missed one feature: to send mails with a mail address from another email provider like Google. This is important as we wanted to use our own mail server to collect all the mails from all the different providers. Thats no problem with most of the mail providers but to answer the mails with the correct email address you need to send the mails through their mail server or your mail will be detected as spam.

Enter: The Roundcube Identity SMTP Plugin

This plugin allows you to specify a SMTP server for every identity you setup in Roundcube. You can now answer all the mails you get with the correct address from within Roundcube.

The plugin is available from github: https://github.com/elm/Roundcube-SMTP-per-Identity-Plugin It is not tested very widely but it works for us so it may work for you. Feel free to leave a comment or a patch or flattr this post.

Strom sparen mit skweez

by mks
04.02.2012

Trafonetzteil, unbelastet: 7W

Mir ist gestern bei meinem Kabelmodem aufgefallen, dass dieses wie einige andere Netzwerkgeräte ein Netzteil mit 12V und 1A am Ausgang hat. Im Gegensatz zu den anderen Geräten wurde es mit einem Schaltnetzteil (SNT), statt so einem klobigen Trafonetzteil (TNT), geliefert. Die Stecker sind bei allen gleich.

Darum habe ich mal einen einfachen Test mit einem Strommessgerät gemacht, wobei ich nicht sagen kann, wie präzise das Gerät arbeitet. Aber wenn die Anzeige nur annähernd stimmt, dann lohnt sich die Anschaffung von neuen Netzteilen für die älteren Geräte, die ich in absehbarer Zeit nicht ablösen möchte. Eines der TNT verbraucht schon ohne angeschlossenes Gerät 7W, beim SNT zeigt das Messgerät 0 an. Mit angeschlossenem Modem verbraucht das andere TNT satte 16W, das SNT 7W.

Die ersten Fotos zeigen jeweils die unbelasteten Netzteile, die folgenden sind mit angeschlossenem Modem.

Wenn die beiden Trafonetzteile, die ich in meinem Haushalt gefunden habe, zusammen nur 10W mehr verbrauchen als zwei SNT, dann sind das bei mir im Jahr ca. 50kW/h. Das macht bei meinem aktuellen Stromtarif ca. 12€ p.a. Beim Inernetauktionär gibt es passende SNT für ca. 5€ je Stück.

Die Basisstation meines DECT-Telefons braucht auch ca. 7W. Ich teste gerade, ob es praktikabel ist, das Android-Handy mit einem SIP-Client als Festnetz-/WLAN-Telefon zu benutzen. Meine ersten Tests mit CSipSimple verliefen positiv. Das Handy verbraucht dadurch sicher etwas mehr Strom, aber bestimmt keine 7W.

Ich denke mal, die Geldbeträge erscheinen vielen lächerlich, aber mir geht's auch eher um's Prinzip und ich dachte ich teile die Erfahrungen mal, vielleicht bringt das jemandem was.

PS: Alte Netzteile gehören nicht in den Hausmüll, sondern auf den Wertstoffhof!

Ergänzung: Ich habe gelesen, dass es bei einigen alten Geräten zu Problemen kommen kann, wenn diese intern noch ein SNT haben. Dann können die sich gegenseitig aufschaukeln und im schlimmsten Fall kann da was zu brennen anfangen. Also wie immer gilt: Ausprobieren auf eigene Gefahr! Skweez übernimmt keine Haftung für irgendwelche Schäden.

Ergänzung: Grub 2 in GPT/BIOS-Systemen

by mks
20.09.2011

Dieser Artikel ist eine kurze Ergänzung zu meinem Artikel über GUID-Partitionstabellen auf BIOS-Systemen.

Ich habe festgestellt, dass die Unterstützung für extlinux unter Ubuntu (10.04 „Lucid“) eher … naja … mau ist. Wenn man auf einem so installierten System stattdessen Grub benutzen will, benötigt man eine kleine Partition, z.B. von einem MB Größe, mit dem Partitionstyp EF02 („BIOS-Boot-Partition“).

Hintergrund: Da Grub zu groß ist, um komplett in den Boot-Sektor zu passen, ist er in einen Stage 1 und einen Stage 2-Loader aufgeteilt. Der Stage 2-Loader wird normalerweise in einen kleinen freien Bereich zwischen Master Boot Record und erster Partition geschrieben. Da es diesen Bereich aber auf einem GPT-System nicht gibt, quittiert Grub den Versuch einer Installation mit der Warnmeldung:

Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.

Hat man die o.g. extra Partition angelegt, kann man Grub wie gewohnt mit grub-install installieren.

Selling GPL'ed software

by mks
13.07.2011

Apparently someone is trying to make money with an Android application that I wrote a month ago. At first I was really mad about people ripping off others by making money of other people's work. But today I actually feel it is a bit of a compliment. At least this guy thinks, my little app is worth some money. ;-)

But seriously, of course I complained about it to Google with their DMCA form.

Regarding the GPL and selling software: this is actually possible, as long as you respect the terms of the license. Paragraph 4 of the GPL says:

You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

Update: Google removed the App. And it seems to me that they removed the vendor's account all together.

Update 2: After Google removed it the first time, the guy created a new merchant account and uploaded my app again. I filed a DMCA complain again and Google took down the app and his account a second time. But this guy is really persistent: On August 16th he uploaded the app AGAIN. Remember: He has to pay 25 US$ everytime he creates a new account. And he does this to try selling an app (of about 50 LoC) for 2$, that I give away for free. How stupid can one single person be? I would have thought you'd need at least ten *really* stupid people to gather that amount of idiocy.

Eclipse, Android and Git submodules

by mks
09.07.2011

Because I couldn't find any info on how to use sub-projects (that is sub folders in a project) as libraries within the ADT in Eclipse, here's a short how-to:

Use submodules as you normally would, e.g. when cloning a project with sub-projects use this:

git submodule init git submodule update

Then in Eclipse you can create a new Android project with the wizard from the existing source (and pointing the location to the sub directory).

When you reference the sub-project as a library for the main project, it will magically point to the correct directory inside the main project.

The yaxim Jabber client for Android for example uses this to depend on the MemorizingTrustManager (see the screenshot).

BIOS wiederherstellen mit Arduino

by mks
07.07.2011

Vor einiger Zeit habe ich mein nur wenige Monate altes Mainboard gebrickt, indem ich versehentlich eine falsche BIOS-Version eingespielt habe. Leider kam die Erleuchtung zu spät: Never change a running system! Gut, dass ich noch ein Notebook habe und dass ich eh schon immer mal etwas mit einem Arduino machen wollte. Jetzt schien mir die richtige Gelegenheit dafür.

Warnung: Der Artikel ist etwas lang. Für Individuen der Twitter-Generation mit einer auf 140 Zeichen verkürzten Aufmerksamkeitsspanne hier die Kurzform:

Hab es geschafft: #bios #flashen mit #Arduino https://github.com/michaelkanis/arduino_bios_flash

Vorbereitung

Zunächst war ich mal erleichtert, als ich gesehen habe, dass der Chip gesockelt und nicht gelötet ist. Das machte das Vorhaben um einiges einfacher. Den Aufkleber des Mainboard-Herstellers vom Chip entfernt, gibt dieser seine Typenbezeichnung preis. Wenn man ein bisschen nach den vielen Nummern googlet, findet man schnell raus, um welchen Chip es sich handelt. Meiner ist ein Macronix MX25L8006E. Eine Makroaufnahme mit einer einfachen Digicam hilft, die winzige Schrift lesbar zu machen.

Das Datenblatt des Herstellers erwies sich als sehr hilfreich. Erste Erkenntnis: der Chip wird per Serial Peripheral Interface (SPI) angesprochen. Der Arduino unterstützt dieses Protokoll ebenfalls von Haus aus. Würde er das nicht, könnte man es per Bit-Banging implementieren.

Mein größtes Problem war nun, dass der Arduino mit 5V-Pegeln arbeitet, der Macronix-Chip aber nur 3,3V-Pegel unterstützt. Das Risiko, den Chip durch eine zu hohe Spannung zu zerstören, wollte ich angesichts der schweren Beschaffbarkeit in Deutschland nicht eingehen. Allerdings bin ich Software-Entwickler und kenne mich im Prinzip überhaupt nicht mit Elektronik aus. Das nur als Anmerkung, falls jemand meine Lösungsversuche saudämlich findet. :-)

Meine grundlegende Vorgehensweise sollte so aussehen: Schaltung aufbauen. Software schreiben in drei Schritten: Chip auslesen, löschen, neu beschreiben. (EEPROM-Chips werden in zwei Schritten zunächst gelöscht und können dann erst neu beschrieben werden)

Erster Versuch: Spannungsteiler

Eine einfache Möglichkeit, aus einer höheren Spannung eine Niedrigere zu machen, ist ein Spannungsteiler. Weil ich mehrere Leitungen absenken musste, entschied ich mich, stattdessen den Ground-Level zu erhöhen. Da der erhöhte Ground-Level nun die LOW-Spannung auf ca. -1,7V abgesenkt hat, habe ich Dioden eingebaut, die daraus wieder 0V machen sollten. Nach einigem Basteln hatte ich nun eine scheinbar funktionstüchtige Schaltung. Natürlich habe ich den Chip erst eingesteckt, nachdem ich mit dem Multimeter sämtliche Spannungen an allen Pins (mehrmals) überprüft hatte.

Das Schreiben der Software zum Auslesen des Chips ging relativ flott, hier war ich wieder in "meinem Element". Zunächst sah es auch so aus, als wäre ich am Ziel. Das Auslesen klappte. Meistens. Manchmal. Irgendwie nicht zuverlässig. Bits gingen verloren. Mist.

Die Lösung: Zufall

Durch Zufall fand ich heraus, dass mein Arduino auf den 5V-Leitungen nur 3,3V ausgibt, wenn man ihn mit einem Netzteil statt über USB mit Strom versorgt, obwohl das Netzteil auch 5V hat. Ob das ein Bug oder ein Feature ist, weiß ich nicht, für mich ist es ein Feature. Da ich die USB-Verbindung trotzdem brauchte, um die BIOS-Datei zum Arduino zu übertragen, kappte ich in einem USB-Kabel die 5V-Leitung. Dann entfernte ich den Spannungsteiler und schloss den Chip direkt an den Arduino an. Jetzt klappte das Auslesen reproduzierbar perfekt. Was ich jetzt noch brauchte, war ein Stück Software auf Laptop-Seite, dass dem Arduino das BIOS in kleinen Happen schickt und wartet, da der BIOS-Chip zum flashen eine gewisse Zeit braucht. Nach ca. 10 Minuten war der Chip neu geflasht und mein Rechner startete wieder. Die Performance wäre vielleicht noch ausbaufähig, aber ich war ja am Ziel. Deswegen ist die Software auch nicht sonderlich schön. Insbesondere fehlt jede Fehlerbehandlung. Ich stelle sie trotzdem auf Github, vielleicht kann sie ja mal noch jemand gebrauchen. Lizenz: Beerware. Tut damit, was Ihr wollt und flattrt mir ein Bier, wenn Ihr mögt. Oder auch nicht. Gewähr gibt es natürlich keine, wenn ihr damit mehr kaputt macht, seid ihr selbst Schuld. :-)

Falls jemand mit Ahnung von Elektronik das hier liest: Warum klappt es mit dem Spannungsteiler nicht? Ist da ein Bauteil zu langsam? Ich habe auch gelesen, dass man aus so einer Schaltung nicht viel Strom ziehen darf. Könnte es daran liegen?

Könnte man stattdessen in jeder Leitung drei Silizium-Dioden in Reihe vorschalten, um die Spannung um (3 * 0,6V) = 1,8V auf 3,2V zu verringern?

CLEAN-FEED Wordpress plugin

by elm
11.05.2011

I wrote a litte plugin for Wordpress that removes certain tags from the blogs feed. I needed this, because some tags were redundant and made the feed bad looking in some feed readers. Maybe someone can use this.

The plugin can be found on github: https://github.com/elm/clean-feed

Feel free to fork and customize.

Repair a SuperDrive that won't read any disk

by elm
04.05.2011

If your SuperDrive is broken and spits out every disk you would like to feed it, it might be possible that your drive just needs a little love on the inside. In some cases the laser lens is dirty and that is the reason, the drive does not detect any disk. To clean the lens you can use a cleaning CD or you can open your super drive and clean the lens manually. A guide how to get to your SuperDrive out of your Mac can be found at iFixit.

When you have your SuperDrive in your hands you need to open it carefully (like we ever do anything :)) and clean the lens, e.g. with a cotton bud. If the dust on the lens is the problem you should clearly see a difference between the lens covered in dust and after you cleaned it. Anyways, you might give it a try as your drive failed and if you read this you are probably out of warranty.

Dokumente in Dropbox verschlüsseln

by mks
20.04.2011

Wie viele andere auch, verwende ich Dropbox, um Daten zwischen meinem Laptop und dem Desktop-Rechner abzugleichen. Außerdem bietet es eine einfache Möglichkeit, schnell mal jemandem eine Datei zur Verfügung zu stellen oder mit Freunden zusammen zu arbeiten.

Nun habt ihr in den letzten Tagen sicher mitbekommen, dass der Anbieter seine AGB geändert hat, die es nun erlauben, dass US-Behörden darauf Zugriff erlangen können.

Diese Gelegenheit möchte ich nutzen, um euch zu zeigen, wie ihr sehr schnell und einfach mit Ubuntu-Bordmitteln einzelne Ordner in eurer Dropbox verschlüsseln könnt. Nachdem euch ubuntuusers-Blogger benni schon gezeigt hat, wie es mit TrueCrypt geht, zeige ich euch den Weg mit EncFS. Ich nutze das konkret so: die Dropbox enthält einen Dokumente-Ordner, in dem die verschlüsselten Daten liegen. Ohne das zugehörige Passwort kann auf diese Daten niemand zugreifen. Das schützt natürlich nicht vor Entführung in einen Folterknast. Dieser Ordner ist in den normalen Dokumente-Ordner im Home eingehängt.

Und so gehts

Ihr braucht lediglich 5 Minuten Zeit und encfs aus dem Software Center (falls nicht ohnehin installiert).

# Dokumente sichern, wenn ihr schon einen solchen Ordner habt
mv Dokmente Dokumente.bak
# Hier landen die verschlüsselten Daten:
mkdir Dropbox/Dokumente
# Und hier könnt ihr ganz normal drauf zugreifen:
mkdir Dokumente
encfs Dropbox/Dokumente Dokumente
→ p für Paranoiamodus ;)
→ 2x Passwort eingeben
# Jetzt noch die alten Dokumente verschieben, Fertig!
mv Dokumente.bak/* Dokumente/
# Ggfs. Versteckte Dateien nicht vergessen!

Achtung, im Paranoiamodus funktionieren Hardlinks nicht!

Sieht aus wie Datenschrott: EncFS bei der Arbeit

EncFS vs. TrueCrypt

Bei Lösungen wie TrueCrypt legt man einen Container an, ein verschlüsseltes Festplatten-Image, wenn man so will. EncFS dagegen verschlüsselt transparent einzelne Dateien. Beides hat Vor- und Nachteile. Da der TrueCrypt-Container auf Dateisystemebene als eine Datei erscheint, muss auch immer der ganze Container synchronisiert werden, sobald sich ein Teil seines Inhalts ändert. In den Kommentaren haben mich zwei aufmerksame Leser darauf hingewiesen, dass Dropbox von einem TrueCrypt-Container auch nur die veränderten Teile abgleicht, allerdings erst, nachdem der Container ausgehängt wurde. Da EncFS die einzelnen Dateien verschlüsselt, können diese auch einzeln synchronisiert werden.

Und sonst …

EncFS gibt es dank MacFUSE auch für Mac OS X. Für Windows gibt es ein kommerzielles Produkt namens BoxCryptor, dass angeblich kompatibel zu EncFS ist. Vom Einsatz einer Closed-Source-Software für diesen Zweck würde ich aber aus nahe liegenden Gründen abraten.

Update: Ich möchte noch auf zwei verwandte Projekte hinweisen, auf die ich direkt oder indirekt dank der Kommentare gekommen bin. Das eine ist gnome-encfs, welches EncFS-Passwörter im Schlüsselbund speichert und die Dateisysteme beim Login automatisch mounten kann. Das andere ist eCryptfs, das EncFS nicht ganz unähnlich zu sein scheint, aber als Dateisystem im Kernel implementiert ist.

Danke für's Lesen und bis zum nächsten Mal. Kommentare sind wie immer kostenlos und herzlichst willkommen. ;)