Hi everyone. I just wanted to tell you that as of today (or monday, to be precise), my new company, superflomo, has started doing business. You can find more information regarding mobile development and consulting services on our homepage (which is, at the moment, german only).
I’ve just had the pleasure of reading The Design of Everyday Things by Donald Norman. You should too.
For one, it’s a nice tour through our world with the focus on user experience and usability – the author has such an attention to stuff I wouldn’t even notice ( if it wasn’t for this book ) – Doors, Faucets or car radios. I look at stuff differently now.
The other remarkable thing about this book is that it’s first issue was published at the end of the 80′s – a time, were VCRs were new stuff, CDs even newer and computers not nearly where they are today. Almost prophetically, he thinks loudly about a device ( personal calendar ) that just works like modern smartphone calendar apps – with reminders, sharing and other useful functionality. Only that this kind of invention was 20 years away then.
Sounds easy right? Almost. There is, unfortunately, a bit more to it than to just search for a CRLF-String or testing whether the content-length matches. Just for the curious, this is a list of valid response-finished detection techniques.
If the response has a content-length-header, it’s easy. Just check whether the body of the response is already as long as the content-length-field specifies and the response is finished once the values match.
2. Non-Identity Transfer-Coding
A transfer encoding is great for when the server does not specify a content-length ( which he must not if the server uses a non-identity transfer coding anyway ). Chunked encoding is a transfer encoding ( unlike gzip, which is a content-encoding ) and splits the body into chunks. The chunked encoding has a well-defined end, once you find that in your data, the response is complete.
3. Connection: Close
Neither Content-Length nor Transfer-Coding anywhere? Just hope for the remote server to close the connection at some point. If this happens and the server specifies a connection: close header ( or it’s a HTTP/1.0 conversation, which uses close implicitly if nothing else is specified ), the response is complete.
4. If nothing of the above happens, just hope that the remote server closes the connection, which is about the only way you can be certain that the connection ended.
HTTP is a mess.
This week, Samsung decided to give me a Galaxy Note for a week to evaluate it in real use. Thanks for that, it’s a nice way for me to determine the current status of android and the quality of Samsung devices.
After a few days, I’ve switched back to my iPhone. But the whole story first.
The Galaxy Note is a huge smartphone. It’s really huge – you basically have to have both hands available if you want to do anything, as reaching over the screen is impossible ( given my thumb length, at least ). That’s the first obvious thing I noticed. Huge screen. Huge device.
After the device boots, which is quite fast, a home screen cluttered with all kinds of widgets presents itself. It’s completely full. 6 Pages full of stuff I never asked for. So the first task for me was to remove all of that stuff to get a clean start.
The next thing that bothered me was that I had to reboot the device 8 (!) times for all updates to install. And even after all updates were installed, the Android version running wasn’t Ice Cream Sandwich ( the current one ), but still 2.3.6, which is over 6 months old. Don’t get me wrong, 6 months isn’t a big deal, but I was actually looking forward to testing a device with a current Android version.
Actually using the device at home is fun. It’s snappy, the screen is really bright and nice to read stuff on. The device itself is really light, which is astonishing given the size. The drawback is that the material choice reflects that weight: everything feels a bit “cheap”, i.e. the back cover is a simple piece of plastic, about a mm thick, thats completely bendable, without any structure whatsoever. This may be a good design choice, but it simply doesn’t go well with the pricing. Even old Nokia phones had a thicker back.
It’s a phone, so one wants to make phone calls. It works, of course. But once I installed my bunch of standard apps ( RunKeeper, Skype, Foursquare, Facebook, Twitter, Whatsapp and few others ) the default behavior vanished and every time I was about to call someone, the system asked me whether it should use Skype or the Phone application. So annoying, impairs productivity without any gain.
I still don’t get my head around the decision someone made to include a stylus in the Note. I used it to draw some stuff, but actually, I considered it a toy. And, for a dualcore 1.4Ghz CPU, it’s disappointing that the input lags when drawing using the stylus. And it does.
The question that remains for me: is there a real benefit from carrying around a giant screen at all times? For the occasional read, it’s really handy. What bothers me is the lack of a UI concept that effectively uses the bigger screen to generate a better user experience. Most apps are simply pulled up without any adaption to the screen size. So you basically have the same app, different size. There are some built-in ones that try tablet patterns, but the general impression is that no one really thought about it hard enough.
When it comes to productivity, I was reminded of the unfortunate fact that iCloud isn’t all-so compatible with the Android world as I wished it was. I’m running a full Apple-Setup: MacBook, iMac, iPad and normally iPhone. I’m pretty much used to everything working very smooth. I refrained from buying an app that let’s me sync my iCloud calendar and just stuck with creating events somewhere else. Given the market share of Apple devices, the decision to not support iCloud at least rudimentary doesn’t make much sense. Well, maybe it’s Apple blocking the development, I don’t know.
So, why have I switched back? I need a reliable device that integrates well into my environment and is easy to use at all times. The Note is a good device, but given my Apple-centric environment, it was just too much pain syncing and setting up stuff. Sorry Samsung.
Last thursday, some local nerds joined in for the first ( and certainly not last ) HackerNews meetup in Stuttgart at CoWorking 0711.
With about 15 people present, we had the chance to listen to some really great stuff. Florian Welsch ( dividuum ) talked about a project of his called Geolua, a web-based geo-based game creator that allows writing games in lua. It was a fun talk and certainly very inspiring ( especially the debugging-functionality ).
Jan gave us a chance to learn a bit about unhosted.org, a project that aims at separating data from logic in web applications with the goal to let users regain control of their data.
Marc, my co-organisator, explained how he uses Cucumber, a Ruby Testing-Framework to write test in seemingly natural language.
Seems like it worked out the way it was supposed to. Thanks everyone for being there, listening, discussing and talking. See you next time!
I think it’s a common experience for software developers to have some abandoned, failed, outdated or otherwise discontinued projects somewhere on your disk. I also think that it’s okay to start projects and to not finish them – sometimes the purpose of a project is to learn something new, waste time or pretend to be busy.
Given my assessment of the situation is correct, there must be a huge amount of code existing in the depths of our filesystems that a) doesn’t attract us anymore b) may be interesting for others to see and maybe work on.
So what’s the donate a project day? A simple idea: We figure out a certain date ( say, March 31 ). At that date, every participant publishes one of his or her abandoned projects at github or bitbucket. The second condition is that each participant must write something about the project, i.e. the motivation for starting it and some of the reasons that made him abandon it.
For the day to work great, we should have a page where all donated projects are collected and presented, as well as the common agreement that an open source license should be used for the published code, so others can continue where you stopped.
What’s important isn’t that your code is super-polished, perfectly documented or completely covered by tests, but rather that you just share it with others.
This is just a rough idea. What do you think?
Hi, just wanted to let you know that I’m removing all advertising from this blog right now, and the only way to generate revenue ( gotta love that term ) is to flattr specific posts. I feel this is a more honest way of trying to make some money of this blog than by annoying you with advertising.
I hope it works.
MacRumors has reported that someone discovered a new iOS weakness which developers can use to upload the entire photo library. This is true, and the only thing a user has to do is to accept that an app can access location data for videos and photos. Afterwards, the developer has complete access to your library, and can do withit whatever he wants.
As a matter of fact, this is not a security problem. It could be a privacy problem, but I wouldn’t be too fast in suggesting that. You’ll most likely notice when someone is uploading your library to some server ( I just tried. ). What’s stunning here is that people are running around, claiming to be security experts or some other blubberdiblu, while the actual mechanics to retrieve the pictures is a public API built into iOS that should be known by every so-called App Developer: the ALAssetsLibrary and friends. This API is exactly useful to do one thing: retrieve images from the internal library. Nothing new, it has been around since iOS4.
By the way, every Android App has full reading permissions to all files on the SD-Card, which is where usually photos are stored. ( According to Lars Vogel’s Android tutorial on writing and reading files ).
Oh, and before I forget to mention that: Same is true for WP7, there is comparable API for accessing picture data. ( see http://stackoverflow.com/questions/4609051/access-photos-stored-on-wp7-device ) .
Until one understands the difference between pressing a button and seeing a light turn on as compared to the immense void of a blinking prompt that asks us to “imagine any possible mechanism” then our educational process is, ultimately, in vain.
from: All your metaphors about computers are wrong by Gianni Tedesco.
Fellow nerds, I am tired of fighting. I am tired of fighting for my framework, for my favorite mobile device, for my favorite framework, for my favorite twitter client.
There is no platform war, as well as there is no winner. It’s called diversity, and it’s a good thing. Stop using inappropriate terminology. War is when people suffer and die. Not when kernel architectures or UI-concepts compete.
Someone using something you don’t like? Don’t bother. Why bother? They almost always had good reason for their decision. If they need your advice, they are going to ask you anyway. If not, leave them alone.
Instead of wasting your time fighting for technologies that will be outdated in at least two years, create something that lasts a bit longer. Create something.