The 7±2 reasons why gibbon’s five failed

Yes, gibbon’s five failed. Even though I am still convinced that our vision of providing very specific, high-value recommendations for users of what to do in their spare time was a great one, we did a lot of things wrong and did not manage to create enough growth and traction.

We’ve been working on our first product for quite some time and always got great feedback from the existing users. The servers ran fine and we made a lot of connections with local businesses in Munich. Nevertheless, we took our first product offline some weeks ago. It was a really tough step for us and even though we never really talked about it, I know it was pretty emotional for everyone of us. Now, some time later, one of the co-founders published an article about it on his blog. Of course he doubled checked with us ;)

Last but not least. Like almost all startups, we barely ever had technical problems in our way and tech was definitely not part of the problem.

http://www.leanelephant.net/why-gibbons-five-failed/

On top I’d like to mention that I learned a lot of things you won’t find in books. You have to experience it yourself. And yes, I am willing to do it again and so are the others. Probably without doing the same mistakes again, but there will be mistakes and we know about that. But we improved our way of dealing with it ;)

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

Damn it… Google’s spam detection annoys me!

For my fun project gibbon’s five, we’re using Google Apps to manage our emails etc. The other day I sent an email to one of our mailing lists and got a response that confused me at first:

Delivery to the following recipient failed permanently:

     $$$@gibbonsfive.de

Technical details of permanent failure: 
Message rejected by Google Groups. Please visit http://mail.google.com/support/bin/answer.py?hl=en&answer=188131 to review our Bulk Email Senders Guidelines.

----- Original message -----

...
Received-SPF: softfail (google.com: domain of transitioning moritz@gibbonsfive.de does not designate 78.46.106.246 as permitted sender) client-ip=78.46.106.246;
Authentication-Results: mx.google.com;
       spf=softfail (google.com: domain of transitioning moritz@gibbonsfive.de does not designate 78.46.106.246 as permitted sender) smtp.mail=moritz@gibbonsfive.de
...

So Google refused to deliver my emails to one of my mailing lists with an spf softfail? Why is this happening now and didn’t happen before even though I probably send 1321323 messages to that list? :(
I still have no clue why it never happened before, but if this is happening to you as well, the solution is quite easy:

You have to add your own mailserver – which I used to send the emails – to the TXT record:

@ IN TXT "v=spf1 ip4:78.46.106.246 include:_spf.google.com ~all"

If you have multiple mailservers, you can easily add multiple ip4 or ip6 parts ;)

WhatsApp News

Nachdem ich letztens noch von den versteckten Kosten berichtet habe, hat heute auch heise.de etwas dazu geschrieben. Auch zu dem hier letztens erwähnten Sicherheitsloch bei der Authentifizierung gibt es Neuigkeiten, denn es sieht so aus, als hätten die Macher dort ein wenig nachgebessert. Leider sind sie allerdings sehr verschwiegen, so dass es keine Bestätigung dafür gibt.

Der Betreiber der beliebten SMS-Alternative WhatsApp hat heimlich Änderungen an seinem Dienst vorgenommen, um eine seit längerer Zeit bekannte Schwachstelle zu stopfen.

Public Beta bei gibbon’s five :)

Nach einer längeren Phase der Entwicklung ist seit Montag die erste public Beta von gibbon’s five online :)

Also nichts wie hin und anmelden :mrgreen:

Nachdem der letzte Release schon etwas länger her ist, ist es heute mal wieder an der Zeit für ein Update. Eigentlich ist es sogar das Update, denn dieses Update hat es wirklich insich. Es gibt neue Features, reichlich neues Design und viel hat sich auch unter der Haube getan, denn dies soll das letzte große Update vor unserem offiziellem Start sein!

Was genau alles neu ist, schaust du am besten selbst gleich nach, denn gibbon’s five ist ab jetzt für jeden verfügbar – also sag all deinen Freunden und Bekannten Bescheid :)

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

Neutrales Internet? Mm ja… Mm.. NEIN!

Vorhin habe ich auf netzpolitik über eine interessante Website gelesen. Im Prinzip zeigt sie nur eine Weltkarte in lustigen Farben an, wenn man sich die Farben aber mal genauer anschaut und versteht was dahinter steckt, ist das ganze gar nicht mehr so lustig. Es geht dabei um die so genannte Netzneutralität und die Karte zeigt in farblicher Kodierung, in welchem Ausmaß die Provider eines Landes in den Datenverkehr ihrer Kunden eingreifen – hier mal ein Screenshot.

How neutral is the net?
(Leider funktioniert die Seite nicht richtig in Chrome, deshalb am besten mit Firefox anschauen ;))

Wer mehr wissen möchte findet viele Links in diesem Artikel und hier das Paper vom Max-Planck-Institut für Softwareentwicklung über den Test.

Netzpolitik.org: Kommentar zum Leistungsschutzrecht: Ein unmögliches Gesetz

Sehr guter und interessanter Kommentar über einen sehr fragwürdigen Gesetzentwurf unserer lieben schwarz-gelben Regierung. Wenn man sich etwas mehr mit dem Thema beschäftigt, fragt man sich schnell, was, bzw. ob diese Leute überhaupt denken… Hier mal die Einleitung:

“Was passiert hier eigentlich gerade? Die Vertreter des Burda- und des Springer-Verlages setzen mit allen Tricks einen Gesetzentwurf für ein ”Leistungsschutzrecht für Presseverlage” auf die Tagesordnung der Bundesregierung, dessen Grundidee und Ausführung zurückhaltend gesagt, eine völlige Katastrophe sind. Die Bundesregierung schlägt die Hacken zusammen, schreibt die Forderung 2009 in den Koalitionsvertrag und nun, drei Jahre später, soll tatsächlich ein solcher Unsinn in Gesetzeskraft gegossen werden. Titel des Koalitionsvertrages der aktuellen Bundesregierung ist ”žWachstum. Bildung. Zusammenhalt”. Inhalt des Leistungsschutzrecht ist eine Umkehr der ökonomischen Prinzipien, die Legitimation von Desinformationskampagnen der Presseverlage und eine Spaltung der Gesellschaft. Wer nach diesem unmöglichen Gesetzesvorschlag eigentlich für was, wie und an wen bezahlen soll wird die Gerichte, die deutsche Anwaltschaft und die Anbieter von Orakeldiensten gut beschäftigen.” Weiterlesen…

Ajax Upload tweaked for grails

While coding a little on gibbon’s five we stumbled upon a nice JavaScript library called file uploader. The first tests we did looked good so we took it into the project. While checking the browser compability I ran into some problems with the Internet Explorer that need to be fixed.

First of all, the return type for the IE has to be a little different – the IE needs text/plain. Also, the data send from the IE to the server looks a little different from the one WebKit and gecko: It’s a CommonsMultipartFile. Therefore I had to do some tweaking on the server side which ended in some code pretty similar to this:

if (params.qqfile instanceof org.springframework.web.multipart.commons.CommonsMultipartFile){
    returnType = 'text/plain'
    content = params.qqfile.getInputStream()
    originalFilename = params.qqfile.originalFilename
    mimeType = params.qqfile.getContentType()
} else {
    returnType = 'application/json'
    content = request.inputStream
    originalFilename = params.qqfile
    mimeType = URLConnection.guessContentTypeFromName(params.qqfile)
}

Furthermore, the plugin has to deal with older browsers and the IE by using iframes (mentioned on the website and explained in the code). This works pretty well until you come across grails, which, for whatever reason, sends pre-tags around the json code. Of course our friend the Internet Explorer is confused and is simply not evaluating the answer. A simple solution to this is to change a few lines of code in the function (fileuploader.js):

_getIframeContentJSON:function (iframe) {
    // iframe.contentWindow.document - for IE<7
    var doc = iframe.contentDocument ? iframe.contentDocument : iframe.contentWindow.document, response;

    this.log("converting iframe's innerHTML to JSON");
    this.log("innerHTML = " + doc.body.innerHTML);

    // Grails is answering with pre-tags. That might confuse the browser script therefore we better remove them.
    var cleanedAnswer = doc.body.innerHTML.replace(/<(\/)*pre>/g, '');
    this.log("grails cleaned: " + cleanedAnswer);

    try {
        response = eval("(" + cleanedAnswer + ")");
    } catch (err) {
        response = {};
    }

    return response;
}

Overall it’s a simple tweak and now it works perfectly within all the browsers we tried :)

1 2 3 5