The colorful wolf

November 14, 2009

Ultra deep field

Filed under: Tech, Thoughts — rheide @ 20:26
Tags: ,

The Hubble Ultra Deep Field is the name of a small region of space that the Hubble telescope observed. I thought I’d just mention the awesomeness of this endeavour here. The result of the observation is an image that looks too fantastic and science-fiction-like to even appear in Star Trek, yet it’s real.  The HUDF is awesome because of two reasons. First, because it shows in great clarity how utterly insignificant we humans are. And second, because it shows, despite our insignificance, how far we’ve come that we’re able to accomplish a thing like this.

Yay human race. Now get a move on and start colonizing other planets.

October 30, 2009

Apple fan?

Filed under: Tech — rheide @ 0:34

I came across this article today which speaks quite highly of Apple, and I thought I’d drop some thoughts on this topic as well. I’m programming for the iPhone myself, and learning to use MacOS, Xcode and even the iPhone have been interesting experiences. I’m an Apple newbie, but perhaps it’s that what gives me a unique viewpoint of the whole situation.

It’s so convenient. Everything related to Apple is convenient and easy. The article I linked to above mentions the huge success of iTunes over Walmart when it comes to selling music. The success of the iPod and the iPhone are no-brainers. Having used the iPhone myself I have to say it’s incredibly polished. It’s smooth, nice and a pleasure to work with. It feels good to use it. Unlike the Android developer phone, which just feels like a phone. Apple does that little bit of extra work to make its products special and unique. That’s a large part of their success. Not playing to be the fastest, the biggest or the smartest. Instead, they have the coolest, the most popular and the most easy to use products.

I have to admit that I love the convenience that comes with all Apple products, but the more I use them (MacOS, Xcode, iPhone) the more I hate the fact that you can’t configure things manually. There is an ‘Apple-certified’ way of doing things with your Apple products, and you’d better not deviate from that way or else you’ll pay the price. You’ll suffer for hours trying to find an obscure feature that wasn’t really popular so Apple didn’t bother to put in their product, or sometimes the feature simply doesn’t exist at all. It’s Apple’s way of saying: “you do it our way, and you’ll like it, but it’s not like you’ll have a choice in the matter”. And this way works. As long as you’re the typical user you’ll love everything about Apple. And besides, there was never really any good alternative to Apple. If you wanted to do things your own way you’re condemned to using Windows or Linux, neither of which is as ’smooth’ as MacOS. Mp3 players are a similar matter. I’ve looked long and hard to find a simple mp3 player that fits my demands, but in the end I chose the iPod cause it fitted my needs best. Apple was the leader in quality for the longest time. Until Google came along.

To be fair, the user experience I got from Android was lacking compared to the iPhone, but in a more general sense I think Google has a much better vision than Apple. If Apple’s vision can be summarized as “Do it our way, and you’ll be cool”, then Google’s is “Do whatever you like, we’ll support you”. This is reflected really well in Google’s tools. Buttons are where you expect them to be, the things that you want (or could ever possibly want) to do are easily accessible, and if there’s a feature that you might one day need in the future, you can find it. Google accommodates it’s users in every possible way, and not just in ways that lead them to use more of Google’s products. For example, Google recently announced that they will create export functions to the most popular formats for their internet office suite. They’re basically saying:  ”If you don’t think we’re good enough, you can try something else”. Apple, on the other hand, is desperately trying to protect what it owns. An example of this is the new iPhone firmware, which once again prevents users from ‘jailbreaking’ their phone and using applications that are not Apple-approved.

It’s control versus freedom. Apple impresses by creating products that are of excellent quality and a pleasure to use. That is, if you do it the ‘Apple way’. Google, on the other hand, lets you choose how you want to use their products. You’re free to do whatever you want with it. The keyword here is ‘free’. Going back to the article mentioned above, it compared the successfulness of iTunes versus Walmart, but it didn’t compare it to the amount of songs downloaded through illegal means on-line. It is of course quite impossible to track how many songs are downloaded every day by illegal means, but that only illustrates how iTunes would lose if such a comparison were ever made. People don’t want to spend effort on buying songs online if they can get them for free more easily. The only reason iTunes is so successful is that it’s very convenient (the Apple keyword, again) to download songs and pay for them at the same time.

It won’t be like that for much longer. Everything that has been free since the beginning of the internet is gaining in quality. It may take some time, but things are getting better all the time. Powerful companies like Google that accomodate the user and give him/her freedom have arisen, the open-source world is growing larger and larger, and long-time open-source products have increased in quality tremendously since they were first created (Linux, anyone?).

I don’t think Apple can fight this. Since I would love to appear in a list of famous mispredictions in the future, let me make a prediction here. Apple’s market share will decrease in the coming decade. I don’t think it’ll decrease much, but unless they change their company philosophy they won’t be able to keep up with ‘newcomers’ like Google. Microsoft too seems to have learned a few lessons from Apple, so let’s see who comes out on top ten years from now.

October 27, 2009

The iPhone

Filed under: Tech — rheide @ 19:03

I’ve been developing for the iPhone for over a week now, and I’m starting to get used to it. In the process of getting used to it I made a lot of mistakes though, so I thought I’d share some of the stupid things I’ve done.

* C: Using the equals ‘=’ character in DEFINE (did this twice too…)
* Xcode: Importing the .h file but not linking the library (took a lot of time to figure this out for the first time, and to find out where in Xcode to add it)
* Confusing and mixing C, C++ and Objective-C syntax
* Ignoring memory management just to ‘get it to work’
* One word: NSAutoReleasePool.
* Mac: assuming that Mac cannot do something quickly just cause I don’t know the right key combination
* Mac/Xcode: the Interface Builder is a lie!
* AudioQueue framework: the mere act of choosing to use this framework is a mistake. Too bad it couldn’t be avoided.
* PCM formats: why in the name of Sean Connery are there so many variations on plain and simple uncompressed pcm data?

The last one seriously cost me a lot of time, because I couldn’t get my pcm data to become little endian. It’s supposed to be a simple flag that you can turn on and off when setting up the audio queue, but the queue simply fails to initialize if you don’t specify big endian. I suspect this may have something to do with the nativeness of the audio chip (apparently Motorola defaults to big endian even though everything else in the iPhone is little-endian), but I have little resources or motivation to prove this. In the end I chose to flip the audio streams bytes myself, which made everybody happy in the least amount of time required.

Last note on the iPhone: I am by no means biased towards Apple. If anything I have a negative bias to them for making average hardware and selling it for top prices just because it’s cool, when a rival product is usually available for less money and has more capabilities. I particularly despise the way Apple forced me to use synchronization in iTunes just to get nested playlists to work on my iPod, and I still have not forgiven them for that. Now that my mini-rant is over, I just would like to say that the iPhone is indeed damn bloody cool and if I had one I’m sure I would love it to death.

I’m not buying one though.

October 25, 2009

I want this

Filed under: Tech — rheide @ 23:00

October 20, 2009

Catapults and machine guns

Filed under: Tech — rheide @ 23:48

Ok, let’s talk tech.

I am by ‘nature’ a Java developer. I’ve been spoiled with this language ever since university, when I first started to take  programming seriously. As such, I have a natural aversion to languages that require more code to do something than Java. Especially the whole memory allocation management stuff and pointers/references were never quite compatible with me, and I tended to avoid this altogether in favor of the easy syntax, garbage collection and pleasant framework that Java offered me.

But I no longer have that luxury. If you want to improve as a programmer, sometimes you have to expose yourself to new languages so that you can learn new tricks and smarter ways of doing it. For example, you can write incredibly compact and effective code in Perl or Python that would look bulky and ugly in Java. Each programming language has their purpose, and recently the most important reason for programmers to learn a new language is the rise of the smart-phone. Most notably Apple’s iPhone, of course, but Google’s Android is also growing. Smaller platforms have different rules. Less memory means being more careful with object creation. A smaller screen means a different way of designing user interfaces. A fingertouch interface means a different way of interacting with the user.

Designing program architecture is something I really like to do. Working in Java with client-server applications, database back-ends and JSP front-ends is great for me. I can manage a large code library, use smart design patterns and create code that is both elegant and fast. There’s a lot of room to play in order to get the result out. Mobile platforms are quite different. I’ve had some experience last year in creating an application for the Android platform, but (surprisingly) it did not affect my way of thinking very much. A large part of the application revolved around the interface with a C library, but I wasn’t the one who created the JNI bridge, so I was never in contact with the low-level stuff, like allocating memory or managing pointers. And since Android syntax is by definition Java syntax everything felt just right, and I felt right at home.

This time it’s different, though. I’m working with the iPhone now, and I’m learning Objective-C. There’s a saying in Dutch that goes “Even if a monkey wears a golden ring, it’s still a goddamn ugly monkey” (slightly glorified by yours truly). Even if you can program in an object-oriented way in Objective-C, the layer pulled over your eyes is so thin that you can still clearly see the ugly behind-the-scenes activities. It’s truly surprising to me that a company like Apple, which focuses so much on a great, no comprise,  user-experience, completely insults the entire programming community by forcing them to work with a language like objective c. The obvious argument here is that a low level language is faster, and forcing the user to do their own memory management means that the program can run quicker because there is no garbage collector. But how is that an argument if Apple’s competitor Google is doing just fine with their garbage-collected, high-level, Java-based mobile phone platform? Apple’s platform sure seems a lot more fragile.

My friends (who have iPhones) keep on telling me that it’s the “Apple way”, and that I’ll get used to it soon enough, and then I’ll appreciate it more. Having worked with the iPhone for a couple of days now, that still seems unlikely to me, but if there’s a change in my opinion I will be sure to write it down here. Until then though, I am learning all the stuff that I loved to not do in university: native c code, pointers, references, memory management, etc. etc. It’s a great learning experience, especially in the beginning. I have to admit that I had never even touched a Mac before last week, so the OS, the development environment and also the iPhone are completely new to me. I’m proceeding very slowly, step-by-step, looking at the absolute beginners tutorials to whatever topic I have to learn during my work.

It’s amazing how high the cost of doing things is when you’re learning a new language. In Java I am so used to my development environment and the Java way of thinking that I can create a new class definition in an instant, and I don’t have to doubt myself whether or not it was a good idea, or if it was implemented in the right way. But in Objective-C I am still a newbie, doubting myself, and making a lot mistakes along the way, so the cost of creating a new class is incredibly high compared to a language that I already know. My newbie solutions won’t be perfect, or elegant, and sometimes they might clash with the iPhone ‘way of thinking’. It will take some iterations to get this up-to-speed. Knowing myself, I think I will continue to harbor a slight feeling of frustration with the whole system until I can at least develop at the same speed as I can in Java. That reminds me of another Dutch saying: “That will only happen when Easter and Pentecost will occur on the same day”… :D

October 17, 2009

Lego Augmented Reality

Filed under: Tech — rheide @ 22:35

This is just too awesome to describe in words.

Next Page »

Blog at WordPress.com.