Beertastic

Aus Spaß haben wir mal wieder eine neue App gebastelt :mrgreen:

beertastic   beertastic2

Verfügbar für Android und iPhones kannst Du jetzt leicht tracken wieviel Du getrunken hast und weißt es besser als der Kellner! Außerdem bekommst Du je nach Pegel lustige Namenszusätze und siehst, was in Deinem Umkreis los ist! Sehr praktisch ;)
Es sind noch einige Features geplant und werden im Laufe der nächsten Wochen nach und nach kommen. Wünsche & Feedback sehr willkommen!

   

Übrigens, wenn Du über meine neuen Posts benachrichtigt werden möchtest, einfach rechts Deine Emailadresse eintragen :)

Pocket auf dem Mac

Eine der wenigen Apps, die es seit langem schafft auf all meinen Geräten installiert zu sein ist Pocket (ehemals Read It Later). Da ich viele RSS Feeds abonniert habe und täglich diverse Links einflattern, musste ich irgendwann mal einen Weg finden die Sachen auszusortieren, die auf einen kurzen Blick lesenswert erscheinen und sie anschließend irgendwo ablegen, so dass ich sie nicht wieder vergesse. Das passierte mir nämlich immer mit Bookmarks und solchen Versuchen :oogle:
Pocket ist da echt super und es läuft auf meinen Android Handy, meinem iPad und da es im Browser läuft, natürlich auch im Prinzip überall sonst. Das schöne jetzt ist, dass es endlich auch eine App im App Store für meinen Mac gibt – und sie ist kostenlos, so wie für alle anderen Devices auch :mrgreen:

WhatsApp “no hidden costs” on Android… NOT!

Vor langer Zeit habe ich mir zum Ausprobieren mal WhatsApp installiert. Der Tipp kam von einem Bekannten und die App hörte sich interessant an. “Damals” war die Verbreitung noch quasi bei 0, gerade einmal drei meiner Kontakte hatten auch einen Account. Nachdem dann nach und nach mehr und mehr meiner Freunde und Bekannten auch angefangen haben sie zu nutzen, ist WhatsApp mittlerweile für mich ein wichtiger Teil der alltäglichen Kommunikation geworden. Leider. Heute wurde ich nämlich darauf hingewiesen, dass meine “Free trial” bald expired und ich ab jetzt 99 Cent pro Jahr zahlen soll. Man kann jetzt viel argumentieren und als Entwickler verstehe ich das auch irgendwo, vorausgesetzt die Software überschreitet eine gewisse Komplexität und Qualität, was aber auf WhatsApp sicherlich nicht zutrifft. Was ich allerdings eine Sauerei finde ist, dass bei meiner ersten Installation nichts von diesen 99 Cent erwähnt wurde und vor allem, dass in der Description der App immer noch steht:

NO HIDDEN COST: Once you and your friends download the application, you can use it to chat as much as you want. Send a million messages a day to your friends for free! WhatsApp uses your Internet connection: 3G/EDGE or Wi-Fi when available.

Dazu gesellt sich mittlerweile allerdings auch noch folgendes, das natürlich geschickt platziert so ist, dass man es schön überliest:

First year FREE! ($0.99/year after)

Ach und auf der Website steht zu dem ganzen Thema natürlich mal gar nichts. Dort findet man nur Sachen wie “Why we don’t sell ads” etc.
Hier wird man also mal wieder schön verarscht :noshake2:

Interessant ist übrigens auch, dass die iPhone Version diese versteckten Kosten nicht beinhaltet. Hier kostet die App zwar einmalig 99 Cent, das war es dann aber auch. Die Diskussion darüber warum das so ist, überlasse ich mal lieber den Verschwörungstheoretikern, aber anmerken wollte ich es auf jeden Fall.

WhatsApp security … Argh!!!

A few weeks ago I had a discussion with a couple of my colleagues about WhatsApp and how they might handle their security. We talked about how they could securely identify their users (knowing that they’re never asking for a password) and created some scenarios about how someone could hack into other people’s accounts.
Now, a few weeks later, one of my colleagues sends me this article by Sam Granger and I’m seriously shocked. We also talked about that exact scenario but I would have never thought they’d be that careless about their user’s security… It’s unbelievable, but you should just read it yourself. Here’s a short quote:

As you probably already heard in recent news, 1,000,001 Apple UDID”™s were leaked. It”™s unfortunate that so many apps use UDID”™s to identify users since it”™s extremely insecure.

This brings me to WhatsApp, a free messaging service, used by millions of people. Their system runs on a modified version of XMPP (Extensible Messaging and Presence Protocol). There is nothing wrong with using XMPP, but there is a problem in how WhatsApp handle authentication.

If you installed WhatsApp on an Android device for example, your password is likely to be an inverse of your phones IMEI number with an MD5 cryptographic hash thrown on top of it (without salt).

md5(strrev(”˜your-imei-goes-here”™))

When I say Android, I don”™t exclusively mean Android. It just happens to be a different case when it comes to iOS. Windows Mobile, Blackberry etc”¦ might very well have the same password method. It actually wouldn”™t surprise me. WhatsApp on the iPhone might be using your IMEI too, or maybe UDID”™s to generate passwords, but not the exact same method. If I do find out, I will update this post.

Then comes the username. It”™s your phone number (doh).

To obtain both these values is rather simple.

Continue reading

Kein ICS für das Desire HD – mein letztes HTC

Nachdem es schon viele Gerüchte und Vermutungen gab ist es seit gestern offiziell: HTC hat bestätigt, dass es für das Desire HD kein Ice Cream Sandwich von ihnen geben wird. Sehr lustig daran ist vor allem die Begründung. Hier ein Auszug:

Aufgrund der Tatsache, wie der Speicher auf dem Desire HD aufgeteilt ist und aufgrund der größeren Größe von Android 4.0 wäre es erforderlich, den Speicher des Gerätes neu zu unterteilen und die Nutzerdaten zu überschreiben, um das Update installieren zu können.

Da es wohl auch für Freiwillige keine RUU geben, bleibt der einzige Weg weiterhin das Rooten und anschließende Flashen mit Mods, wie z.B. Cyanogen. Sehr schade. Allerdings macht mir das meine Entscheidungen in Zukunft leichter: Es gibt einen Hersteller weniger in meiner Auswahl.

Meine neuen Spielzeuge :)

So, ich wollte ja noch kurz was zu meinen neuen Spielzeugen sagen :P

HTC Desire HDAlso zum einen ist das ein schickes neues Smartphone in Form eines Desire HD, welches wirklich das schickste Android-Telefon, das ich bis jetzt in den Fingern hatte. Es ist wirklich flott unterwegs und der Akku hält auch erstaunlich lange für ein Smartphone dieser Klasse ;) Mal schauen, was ich da die Tage noch so mit mache. Auf jeden Fall wollte ich es bald mal mit einem Mod versehen und schauen, ob sich das positiv auf Leistung und Batterieverbrauch auswirkt. Einige der HTC Tools darauf sind mir nämlich etwas suspekt! Dazu poste ich dann hier aber auch bestimmt wieder was :P

MacBook ProZum anderen habe ich mir einen Computer ausgesucht, den ich bisher einfach nur absolut genial zum Arbeiten finde: ein 15″ MacBook Pro der neuen Generation :mrgreen: Zwar bin ich sonst kein Apple-Fan, aber seit New York glaube ich, dass es für mich beim Arbeiten das beste ist. Bisher läuft auch alles rund und es macht wirklich viel Spaß! Vielleicht werde ich in Zukunft auch mal das ein oder andere über Mac OS X zu schreiben :D

Privatsphäre oder auch nicht?

Während meiner Arbeit – wenn auch nicht zwangsweise damit verbunden – hier in New York bin ich so über die ein oder andere Sache gestolpert, die mich nachdenklich gemacht hat. Sicherlich bin ich selbst kein gutes Beispiel für jemanden der versucht sein Leben vor der Online-Welt zu verstecken, schließlich habe ich dieses Blog, bin bei Facebook, StudiVZ, Xing, Twitter, Google – Mail und Docs nutze ich regelmäßig, Buzz ab und zu mal – und diversen anderen Diensten angemeldet und habe auch noch ein Android in Gebrauch. Wie gesagt also offenbar ein schlechtes Beispiel. Allerdings lege ich trotzdem Wert darauf welche Art von Informationen ich öffentlich preisgebe. Natürlich kann jeder wissen wo ich bisher gearbeitet und was ich dort gemacht habe, sofern mir der Arbeitgeber letzteres erlaubt. Auch mein Musikgeschmack oder welchen Film ich gut fand fällt nicht in meine Geheim-Kategorie. Trotzdem wird man z.B. keine negative Aussage über einen Kollegen o.ä. finden.
Soviel zum Vorspiel ;)

Was ich in den letzten Monaten allerdings über Privatsphäre, Datensicherheit usw. mitbekommen habe, stimmt mich nachdenklich. Es gibt dort mehrere Dinge die irgendwie, nun ja, seltsam sind.

Nehmen wir mal das Beispiel von 170 Millionen Facebook Accounts deren Daten einfach so abgefragt werden konnten (Übrigens kann man dort Einstellungen vornehmen… ). Wie ist es möglich, dass sich keine Regierung darum wirklich kümmert, während Google ordentlich rechtlich und in der Presse angegangen wird für das Scannen und gelegentliche Mitschneiden von Wireless-Verbindungen? Tja, dieses “Feature” von Facebook war halt so nicht gedacht. (Selbiges gilt natürlich auch für alle anderen sozialen Netze.)
Ist eigentlich niemandem bewußt was da passiert? Ich mein, wen interessieren denn ein paar blöde Emailfetzen die Google eventuell mitgeschnitten hat? Interessant ist doch eigentlich, dass jeder Hinz und Kunz nach wie vor Wireless-Accesspoints bei sich aufstellt ohne auch nur die geringste Ahnung zu haben wie diese zu administrieren sind, damit eben niemand da einfach mitlesen kann. Es gibt doch sogar Gesetze dafür, wenn auch eher gedacht um Missbrauch vorzubeugen. Schwingt da vielleicht irgendwo ein Interesse von Leuten mit die schon gern mehr wüssten und ihre groß angelegte Datensammlung grade vernichten müssen (Thema: Voratsdatenspeicherung)? Nun ja, ich bin nicht sehr anfällig für Verschwörungstheorien und das würde auch viel zu weit führen ;)

Wem ist eigentlich bei der Installation einer App auf sein iPhone oder Android mal aufgefallen was da so an Daten durch die Gegend fliegt? Mit der Installation eines “kostenlosen” Spiels lädt den Spion häufig nicht nur ein sondern trägt ihn quasi ins Wohnzimmer – das wohl krasseste Beispiel für echte Malware. Aber es geht auch direkter: Warum zum Geier muss eine Schachsimulation meinen Standort kennen und die Erlaubnis haben meine Identität und Kontakte aus dem Telefonspeicher zu lesen? Alternativ sind kleine Flash-Spielchen auf den Seiten diverser Netzwerke, welche dann einfach mal den komplett Zugriff auf das Profil gewährt bekommen, damit man seinem Bekannten um 3 Ecken zeigen kann wie schnell man klickt oder wer den größten die größte Farm hat.
Wieder finde ich es echt erstaunlich, dass man sich so unglaublich über Google die böse Datenkrake auslässt, aber… nun ja, siehe oben.

Gegen beide Beispiele kann man jetzt natürlich argumentieren, dass der User zustimmen muss. Richtig, das muss er. Außerdem sitzen die Firmen natürlich im Ausland – Google übrigens irgendwie, zumindest großteils auch – und scheren sich nicht viel um deutsche Gesetze, was man ihnen nicht mal verübeln kann, schließlich leben sie ja von dummen Usern die einfach mal alles ausprobieren und auf jeden Link klicken a la “OK Button – muss drauf klicken”, egal was oben drüber steht :cuckoo:

Nur mal so ein paar Gedanken…

public static int wtf(String tag, String msg) in Android 2.2

I just found this and I love it :mrgreen:

public static int wtf (String tag, String msg)
Since: API Level 8

What a Terrible Failure: Report a condition that should never happen. The error will always be logged at level ASSERT with the call stack. Depending on system configuration, a report may be added to the DropBoxManager and/or the process may be terminated immediately with an error dialog.
Parameters
tag Used to identify the source of a log message.
msg The message you would like logged.

Android & Multithreaded HTTP-Requests

During the last 3 days on my new job at Sense Networks in New York I was supposed to fix some issues in a project concerning multi threaded http requests in an Android application. At first I thought it’d be a pretty easy task even though I never really used HttpConnectionManager before. So I started reading a bit about it and created some classes, interfaces and stuff like that to have a nice and generic architecture for the project. In fact I am using the MultiThreadedHttpConnectionManager (httpclient-3.x) but Android calls it ThreadSafeClientConnManager as it’s called in the httpclient-4.x which is currently in an alpha stadium.
After the first steps of implementing and testing the test application was throwing exceptions and I just couldn’t figure out why. It seemed to be totally random, the exception as well as the time it shows up. So I started reading tons of different tutorials for Android as well as for the Java2SE httpclient. No one seemed to experience the same problem and I admit it felt a bit like doing some basic newbie stuff wrong without knowing about it. After hours of research and testing the “bug” was finally found and it still seems to be pretty stupid but when you think about it, I’d say it isn’t that stupid. From my point of view it’s something that should be handled by the virtual machine, so for Android by Dalvik:
The response of a http request contains and entity which provides access to the content in form of an inputstream and this content has to be consumed otherwise it’ll never be removed from the memory even if you close/abort the request. Funny thing about this: I read ~50 pages, tutorials and threads but just one mentioned that in a comment line…
As all my tests were just sending a request to the given uri and then checking out the StatusLine for a possible error code the the response was closed if no error code was sent and “everything was fine”. At least that’s what I thought. In fact the sockets were still open, waiting for the empty content of the response to be consumed. So after some requests the memory was full and trying to open a new connection or sending a new request ended up in different exceptions (e.g. Timeout, Unknown Host, Connection refused). After figuring this out, the fix was quite easy. Now, before closing the response, the program consumes the content – even if it is empty – and then the vm cleans it up as expected. No more exceptions and everything works fine :)

By the way, you might want to check out CabSense ;)

To get notified about new posts, just enter your email address on the right :)

Android & Memory (Leaks)

While programming for Android I already figured out a lot of things that are really different compared to other platforms. It’s not only the api that’s new, it’s also a way of programming. Some things are connected in a way I’ve never seen before or it wasn’t important for me at all. Sometimes this brings up strange reactions of the system or problems. Often it’s hard to find solutions for these things and that’s why I decided to keep on posting my experiences here. Maybe they’ll be helpful for some other people out there ;)

Last week I was working on appazaar and implemented a new feature for the upcoming release. While testing everything seemed fine so I installed the app on my device and used it the way I’d expect other users to do. Well, basically I used my phone the normal way and appazaar from time to time :mrgreen:
Anyway, after a while the widget always stopped updating itself so I started debugging and found a message saying “Java Binder Transaction Failed“. So I started looking for it on Google and found lots of people having the same message in different situations. Sadly most of them didn’t talk about a solution but at some point I found a post on the Android Developers Blog. Basically the problem is about recursive references that come up easily if you try to create “fast” code. The article is describing the problem pretty good so I won’t go into that any deeper but here’s some of what killed my app:
Considering the fact that there’s a background service updating the widget under special circumstances, I used some static variables for stuff the service was using at least during every update. Actually that’s fast code but as mentioned in the article:

This code is very fast and also very wrong.

So I changed some class-variables to local ones inside of functions et voilà : Problems solved ;)

Here’s another post explaining a bit about it: AppWidgets: Reusing RemoteViews instance leaks memory?

By the way, to get notified about new posts, just enter your email address on the right :)

1 2