Synergistischer Debuzzwordification Plan

Wer von „der Cloud“ genug hat, kann sie jetzt einfach durch angemessenere Ausdrücke ersetzen. Für die Zwölfjährigen unter uns:

Der Zugriff auf die entfernten Systeme erfolgt über ein Netzwerk, beispielsweise das des Internet. Es gibt aber im Kontext von Firmen auch sogenannte „Private Ärsche“, bei denen die Bereitstellung über ein firmeninternes Intranet erfolgt. Die meisten Anbieter von Arschlösungen nutzen die Poolingeffekte, die aus der gemeinsamen Nutzung von Ressourcen entstehen, für ihr Geschäftsmodell.

und für diejenigen, die bei lautem Kichern damit rechnen müssen, dass der Chef auf ihren Bildschirm schaut:

„Einer der Hauptnachteile beim Auslagern von Firmendaten in meinen Hintern ist der Kontrollverlust.“ „BigBrotherAwards für meinen Hintern“ „Was ist mein Hintern?“ „Grundlagen: Wie mein Hintern funktioniert“ „Alles über meinen Hintern“ „Ist mein Hintern wirklich sicher?“

Danke an Panicsteve für die Original-Extension, cloud-to-butt.

adb: device offline

If you’re doing Android development and use a device running Android 4.2.2, your adb might have stopped working, saying your device was “offline”. To fix this, update your Android SDK and SDK Tools including adb. Android 4.2.2 has introduced an ADB USB debugging whitelist amongst other security improvements, and older versions of the Platform Tools do not support this handshake.

Run adb version to find out which version of ADB you are running. If it is less than 1.0.31, you should upgrade.

You can update your tools from the SDK Manager or by downloading the newest ADT bundle or SDK tools.

Happy hacking!

Glitched

Ein Gespenst geht um auf Twitter. Es ist das Gespenst des Unicode, und es bringt reihenweise Programme auf Apple-Betriebssystemen zum Absturz. (Tweet von @glitchr_ – Achtung! Bringt diverse Browser zum Absturz!)

Technisch betrachtet handelt es sich um folgende Zeichen:


U+0647 ARABIC LETTER HEH character (ه)  
25x U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN character (҈)  
U+036x COMBINING LATIN SMALL LETTER M, R, D, V, C, H, X, I, I, M, H, U, A, X, H, C, A, I, R, H  
25x U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN character (҈)  
U+036x COMBINING LATIN SMALL LETTER H, I, C, H, M, R, T, V, X, I, E, A, I, C, H, U, A, X, R, H  
29x U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN character (҈)  
U+036x COMBINING LATIN SMALL LETTER H, C, H, M, R, D, V, X, I, C, A, I, M, H, U, A, X, I, R, H

Chrome für Mac in Version 25.x (Beta) hängt oder stürzt ab (alle Tabs des gleichen Rendering-Prozesses; das UI ist ein separater Prozess), die Entwickler-Version 26.x offenbar nicht (was aber auch am Debug Build liegen kann), von 24.x gibt es unterschiedliche Berichte. Safari crasht bei mir nicht, obwohl ich es erwarten würde. Firefox hat eh eine eigene Engine für Unicode und hat kein Problem mit dem Tweet, stellt ihn aber auch nicht richtig dar. Ebenso geht es bei Android, wo die Zeichen eiskalt dekomponiert werden.

Apples Terminal-Anwendung crasht sofort. iTerm 2 überlebt den Glitch erst einmal, crasht dann aber, wenn die Zeichen aus dem sichtbaren Bereich scrollen und in den alternate buffer oder Scrollback wandern:


Exception Type:  EXC_CRASH (SIGABRT)  
Exception Codes: 0x0000000000000000, 0x0000000000000000  
  
Application Specific Information:  
Assertion failed: (freeRange_.length >= positions), function -[SharedCharacterRunData advance:], file /Users/georgen/globalsearch/trunk/CharacterRun.m, line 38.  
    
  
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread  
0   libsystem_kernel.dylib          0x00007fff91cac212 __pthread_kill + 10  
1   libsystem_c.dylib               0x00007fff87af5af4 pthread_kill + 90  
2   libsystem_c.dylib               0x00007fff87b39dce abort + 143  
3   libsystem_c.dylib               0x00007fff87b3ae2a __assert_rtn + 146  
4   com.googlecode.iterm2           0x0000000100125fbc -[SharedCharacterRunData advance:] + 76  
5   com.googlecode.iterm2           0x000000010012570b -[CharacterRun appendRunsWithGlyphsToArray:] + 59

Die meisten Anwendungen crashen allerdings in Apples CoreText – der API, die eigentlich für die Textdarstellung im gesamten Betriebssystem zuständig ist. (Chrome rendert den Webseiten-Inhalt komplett selbst und ohne Zuhilfename von CoreText und stürzt daher nur ab, wenn der Tab-Titel ausreichend groß ist, um den Tweet, der im <title> steht, anzuzeigen.)


1  com.apple.CoreText              TRun::TRun(TRun const&, CFRange, TRun::SubrangingStyle) + 850  
2  com.apple.CoreText              CTGlyphRun::CloneRange(CTRun const*, CFRange, TRun::SubrangingStyle) + 142  
3  com.apple.CoreText              TLine::SetLevelRange(CFRange, unsigned char, bool) + 162
…

Der minimale Testcase ist offenbar folgende Byte-Sequenz:


00000000  d9 88 d2 88 cd a5 cd a8  cd aa cd af 20 d2 88 d2  |............ ...|  
00000010  88 d2 88                                          |...|  
00000013

oder benannt:


U+0648 ARABIC LETTER WAW character (و)  
U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN character (҈)  
U+0365 COMBINING LATIN SMALL LETTER I character (ͥ)  
U+0368 COMBINING LATIN SMALL LETTER C character (ͨ)  
U+036A COMBINING LATIN SMALL LETTER H character (ͪ)  
U+036F COMBINING LATIN SMALL LETTER X character (ͯ)  
U+0020 SPACE character  
U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN character (҈)  
U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN character (҈)  
U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN character (҈)

Der Bug ist Apple bekannt und man arbeitet dort hoffentlich an einem baldigen Fix. Sicherheitsrelevant dürfte das ganze jedoch nicht sein, weil OS X endlich mit Stack Guards und ASLR arbeitet, aber schön ist natürlich auch ein solcher DoS nicht. Bis es einen Fix gibt, empfehle ich, lieber Firefox und iTerm zu nutzen.

Sorry für die Crashes.

So kommen die Wörter ins Wörterbuch

Nicht genug, dass man “kommen” und “Sex” nicht mit dem Standard-Android-Keyboard gestieren kann – die Worte sind im systemweiten Wörterbuch gespeichert, so dass man sie auch nicht einfach ins eigene Wörterbuch hinzufügen kann. Normalerweise würde man mit nicht erkannten Worten so umgehen, dass man sie einmal “von Hand” tippt, also in einzelnen Tastendrücken, und dann in der Vorschlagszeile bestätigt und im Benutzerwörterbuch speichert. Diese Option hat man aber nur bei neuen Wörtern. Wer gerne auf einen Latte Macchiato vorbei kommen möchte, muss sich mit einem Umweg behelfen.

Option 1: Neusprech

Wenn man einfach ein Wort eingibt, das nicht im Wörterbuch zu finden ist, z.B. “Neuwort”, und dann auf Speichern tippt, kann man das Wort vor dem Hinzufügen zum Wörterbuch nochmal verändern. Dabei kann man das Wort auch komplett gegen ein anderes eintauschen.

neuwort1.jpg neuwort2.jpg

Option 2: Einstellungen

Über die Einstellungen kann man das persönliche Wörterbuch direkt bearbeiten. Man findet die Option in den Einstellungen unter “Language & Input” > “Personal Dictionaries” > “German”. In der oberen rechten Ecke gibt es ein “+”-Symbol, mit dem man beliebige Einträge hinzufügen und sogar Shortcuts definieren kann.

Und so kann man sich dann doch vor Androids albernem Paternalismus retten, und so viel über Sex und Latte Macchiato schreiben, wie man möchte. Liebe Leute von Google, ich kann ja mit viel gutem Willen nachvollziehen, wieso ihr Autocomplete und Gesture Typing nicht alles vorschlagen lassen wollt, es soll ja so zart besaitete Mitmenschen geben. Aber dass es mir als mündigem Nutzer so schwer gemacht wird, bestimmte Worte auf ausdrücklichen Wunsch zu nutzen, nervt mich.

Beschattete Abreise, Android! (Bitte kommen.)

Neulich wollte ich auf meinen Android-Telefon mit Gesture Typing (“swipe”) folgendes schreiben:

Ich wollte zum Sex vorbei kommen, aber verdammt, du bist ausgezogen? Ein weißer Wagen wird schnell dreckig, schmutzig. Mein Sandwich ist reif und ich habe meinen Bart rasiert. Eine Latte aus meinem Lattenrost ist gebrochen. Böse Sache. Extrem: Ein getunter Dreier-BMW. Warum haben Männer Nippel? Werden sie so schneller besoffen, oder bisexuell? Meine Luftpolsterfolie hatte Blasen, dann habe ich sie an die Wand genagelt. Alles voller farbiger Lichter, sehr erotisch. Nun aber ein Schritt re Proxy. Und los.

Statt dessen kam heraus:

Ich wollte zum Sec vorbei können, aber verfemt, du bist ausgerufen? Ein wider Wagen wird schnell deckt, schmierig. Mein Dammbruch ist reiff und ich habe meinen Bart reagiert. Eine Katze aus meinem Lattenrost ist gebrochen. Bose Sache. Extern: ein getunter Dritter-BMW. Warum haben Männer Noel? Werden sie so schneller beiden, oder Buschwerk? Meine Luftpolsterfolie hatte blassem, dann habe ich sie an die Wand gemahnt. Alles voller fähiger Lichter, sehr dorische. Nun aber ein Schrott te Prix. Und los.

Das ist natürlich Unsinn, und das beginnt beim “Sec” und hört beim “können” nicht auf. Wer jetzt denkt, die Worte fehlen halt im Wörterbuch, dann fügt man sie halt hinzu: Denkste. Wenn man nämlich “Sex” einfach tippt, ist es sehr wohl im Dictionary und wird auch von der Rechtschreibprüfung nicht angekreidet. Nur in der Vorschlagsliste erscheint es nicht, und gleitschreiben kann man es auch nicht.

Und weil es mich nervte, dauernd “kommen” und “Sex” tippen zu müssen, statt es flüssig gesture-typen (hier fehlt wirklich ein gutes deutsches Wort) zu können, habe ich mir den Android-Quellcode heruntergeladen, um der Sache auf den Grund zu gehen, Verzeihung, auf die Spur zu können. Verzeihung, kommen.

In den Wörterbüchern für das Android-Keyboard, die man in packages/inputmethods/LatinIME/dictionaries/ findet, gibt es eine Liste mit “bösen Worten”. Zitat aus dem Beispiel:

The format of the word list is a flat list of word entries. Each entry has a frequency between 255 and 0. Highest frequency words get more weight in the prediction algorithm. As a special case, a weight of 0 is taken to mean profanity – words that should not be considered a typo, but that should never be suggested explicitly.

Die vollständige Liste der “Schimpfwörter” der deutschen Android-4.2-Tastatur habe ich in einem Gist online gestellt. Diese Liste ist durchaus interessant. Neben einigen Dingen, die man der Prüderie der US-Amerikaner zuschreiben kann, wie “Penis”, “Porno”, “Fetisch”, “geil” und “anal”, findet man auch harmlose, aber doppeldeutige Dinge wie “kommen”, “ausgezogen”, “blasen”, “extrem”, “latte”, “lecken”, und “lutschen”. Böse wird es dann, wenn man Worte wie “böse” auf der Liste findet. Oder aber “jüdisch”, “Farbiger”, “Weißer”, “Schwuler”, “bisexuell”, “homosexuelle”, alles Worte, die man nicht vorgeschlagen bekommen und auch nicht per Geste eingeben kann.

Während “Farbiger” und “genagelt” übrigens gesperrte Worte sind, finden sich “Neger” (Frequenz 62) und “Fick” (Frequenz 21) ganz normal in der Liste. “Ein Fick mit einem Neger” ist also kein Problem, “von einem Farbigen genagelt” hingegen schon.

Liebe Google, das ist bescheuerte Scheiße. Oder, um es mit euren Worten zu sagen: “Beschattete Abreise”.

Pÿron Blogging

Seit zwei Wochen bin ich bei den Iron Bloggern Hamburg dabei. Seit drei Wochen gibt es sie. Seit drei Wochen machen die Armen die Auswertungen von Hand. No longer!

Die Iron Blogger Berlin nutzen ein Script, das “chaosblog” auf Github von dem Script der Iron Blogger am MIT adaptiert hat. Dazu gibt es auch eine halbwegs vollständige Beschreibung, aber genau die Hälfte, die fehlt, hat es in sich.

Im Zuge der Installation und Benutzung des Scripts für die Hamburger Iron Blogger habe ich dann mal ein paar Bugs gefixt und das ganze auf etwas plattformunabhängiger geschrieben, außerdem (hoffentlich) alle fehlenden Schritte beschrieben. Wer sich also dafür interessiert, Iron Blogger laufen zu lassen, sei herzlich zu meiner Version des Codes eingeladen: moeffju/iron-blogger auf GitHub. Eine README findet sich im Repository.

Übrigens: Eine gute Gelegenheit, eure Feeds zu validieren. Unter feedvalidator.org könnt ihr einfach die URL eures Blogs eingeben und direkt erfahren, ob euer Feed überhaupt discoverable ist oder gar unauffindbar, und wenn man ihn findet, ob der Feed valide ist. Um bei den Iron Bloggern mitzumachen, dürfen keine Fehler bei der Validierung auftreten. Und je weniger Warnings/Recommendations, desto besser.

Und warum nutzt ihr eigentlich noch RSS und nicht Atom? 🙂

Don’t worry, use Happy!

I’m all excited. Happy is a-go! Only version 0.1.0, but at least it’s not a pre anymore. Hold on, I’m getting ahead of myself.

Happy is a new Ruby web application framework by Hendrik Mans. Originally developed for hamburg.io, it was extracted from that into a standalone gem, filling the niche between Ruby on Rails, the 800-pound gorilla in the room, and Sinatra, the rather barebones web framework.

Happy is a full-stack framework, and it not only uses, but embraces Rack, which makes lots of things a lot easier. Routing and control flow are explicit and concrete: There is no separate routing layer or routes map like in Rails, yet it’s more powerful than Sinatra’s route->block schema. Most of all, Happy‘s routing is very easy to reason about. You can decide to handle requests inline in your route method, or pass them off to another Happy::Controller or any other Rack app. See some example code on Github.

To give you an idea about the expressive power of Happy: The hamburg.io app is a total of 141 lines of code, developed in less than four weeks, by a single developer. It is an event database with some nice date pickers, Twitter authentication, and an admin backend. Happy includes solutions for authorization, routing, resource mapping, templates with layouts, form helpers, date helpers and more, without unnecessarily reinventing the wheel. Although batteries are included, there is no default database layer or ORM, so you can and must choose your own (whether ActiveRecord or Mongoid or whatever) and write your own initializer code. Lots of other things are not in the framework itself because they can be handled by Rack middlewares, like session handling.

There’s a simple Happy example app on Github to give you a feel for happy, and of course you can look at a “real world” app because hamburg.io is on Github, too.

So, while building my first app using pre-0.1.0 versions, I found Happy lots of fun to work with. That’s more than I can say for many other frameworks, and it’s also something I’ve found lacking in Rails more and more recently. (Oh, and I also learnt that your layouts really should yield if you want your view content to show up. I blame late-night coding.)

Happy might be the next big thing, and two years from now, everyone might be looking for Happy developers, so better get a head start. Or just do it for your own sanity. Or, you know, fun.

Try it out! Share the excitement! And make sure to send feedback via comments and Github Issues!

Follow me on Twitter!

Mac OS X Lion Beta

So, I upgraded to OS X Lion today against my better judgement, and I have to admit, I like Lion. It is a pretty nice beta version of an operating system. Here are some of the bugs and annoyances I encountered only today:

  • Lion wakes much slower than Snow Leopard
  • Lion does not wake on Touchpad touch, only on click or keypress
  • The lock screen always runs your screen saver, and there is no “Blank Screen” screensaver
  • The keyboard illumination stays on sometimes after unlocking the computer or showing the user switching screen
  • When waking up the computer via timer, it goes back to sleep after a few seconds if there is no user input
  • Spotlight sometimes hangs for up to 30 seconds (this is after it is done reindexing everything)
  • The gcc in Xcode 4.1 produces segfaulting code causing my rvm-compiled Ruby to die several times
  • Natural scrolling, seriously?
  • The new gestures break my workflow in all kinds of ways. Before, I used BetterTouchTool for things like Four Finger Swipe Up, this is now broken. Also, two-finger scroll/swipe for scrolling and flipping pages (back/forward)? What were they smoking?
  • Launchpad is completely useless for me, and I don’t see who the target user base for this is. Even my parents figured out to click the “Applications” icon to access applications
  • Mission Control. Enough said.

Updated with more bugs and annoyances:

  • Terminal opens new tabs with the same directory as the current tab. Some might like this, for me, it breaks my workflow. Luckily, there is a preference (Terminal, Startup tab)
  • Preview crashed on every run with a SIGILL error because it could not create the Sandbox context. Turns out it didn’t like that my Downloads folder was symlinked to another harddisk. Removing and re-creating(!) the symlink fixed the problem, as described on Apple Forums

End update.

But the single most unexpected thing so far has been the new “character picker” feature. If you hold down a key, instead of repeating the key as you would expect from 20 years of personal computers and video games, it does this:

OS X Lion Character Picker in action

There is no UI to disable this behavior. Luckily, there is a preference, so open your Terminal and run this:

defaults write -g ApplePressAndHoldEnabled -bool false

This disables the character picker, but it does not immediately re-enable key repeat. You need to reboot for that.

The preference still says “Delay Until Repeat”, of course, even though it does not actually repeat the key pressed.

Keyboard preferences in OS X Lion

Oh, Apple.

#post-368 ul, li { list-style: disc; }

QUOTE.fm

Soeben ging QUOTE.fm online, mit einer “So you’ve got a code?“-Seite. Ich schäme mich nicht, öffentlich zuzugeben, dass ich bisher keinen QUOTE.fm-Code bekommen habe. Aber ich habe mir den QUOTE.fm-Code angesehen! Und da fallen zwei Dinge auf:

  1. Man sollte unbedingt mal TIGERBLOOD auf der Seite eingeben (einfach so, nicht notwendigerweise in die Eingabefelder).

  2. Ach, seht selbst. Am besten in Firebug oder so.

Auf jeden Fall sind die Jungs (UARRR, @_martinwolf und @Knuspermagier) aber sehr gut in Design (shiny!) und Marketing (woot). Und auch alles andere an QUOTE.fm sieht ziemlich verdammt gut aus, was man so am Rande mitbekommt.

Also, noch etwas Geduld, bald wird’s awesome.