As any mobile app developer knows, there comes a time when you need to release your creations out to the general public. On the iPhone, one has the App Store. On Android, the Android Market. On Nokia devices, the Ovi Store.
Whenever i hear someone talk about the Ovi Store, they never have anything goodto sayabout it. Having not experienced the store myself, i remained skeptical.
Recently the Ovi Store on the Nokia N900 opened, so naturally i decided to check it out and see if it really was as bad as people suggested. What follows are my experiences, illustrated with accompanying screenshots.
To Start
First i tap on the “Ovi Store” icon on my device. After a short while, a web browser opens in fullscreen mode. So far, not bad.
Not sure what i want to do, i tap around the tabs (each loading a new page). Now i realise: i just saw something interesting on the last page, and want to see it again. But how do i go back? Well first i need to exit fullscreen mode. Next, i need to tap the back button. Then from the history list which appears:
I must then select the previous slide. *THEN* if i am really unlucky, i get to see the page load again.
Now i decide i want to download a game, so i tap on the “Games” tab. The “Games” page loads, showing:
So now i think “I’ll try and download Angry Birds.” Herein lies a puzzling problem. Nothing happens. A few more taps, and the browser zooms in. Finally after a bit more tapping, i manage to get it to recognise i selected the app. The “Angry Birds” page loads.
Ok, so “Download”. But first i need to sign up for an Ovi Account!
After filling out all the forms, i get a “Thanks for signing up” page. By this time, i’ve all but forgotten what app i was going to purchase.
What would come in handy here would be… i don’t know, some sort of “Click here to continue your purchase” button perhaps? Instead, i have to use… the back button.
Finally, i tap the download button again. This time it loads the “Application Manager”, which after a while asks me if i want to continue installing “Angry Birds.”
At last, the app is installed. Eager to run it, i looked in my applications list, but couldn’t find it. Until i looked closer…
Yes, Angry Birds is represented by… a blue box.
Thankfully though, the app ran fine.
All in all, i found the experience of downloading my free app to be unnecessarily frustrating. I can’t help but feel that nobody was really thinking when they designed the Ovi Store. From the constant page reloading, to the confusing appearance of the app on the device itself. I’d dread to think what would happen if i tried to buy an app.
I can safely say that currently the criticisms i have heard of the Ovi Store are well founded.
I recently stumbled across the much-loved Jekyll, a “blog aware” website generator.
I say “blog aware” since i have yet to be convinced it is. Jekyll seems to work fine if you have a flat layout of _posts with topics, but as soon as you stray away from that, it begins to fall apart.
An Example
I’ll give you a real world example. This blog. Simply enough, i’ve got posts organised into categories. I’ve also got a few tags on the posts, though they are mainly intended for the website feed. After reading the Jekyll documentation, it says:
Categories are derived from the directory structure above the _posts directory. For example, a post at /work/code/_posts/2008-12-24-closures.textile would have this field set to ['work', 'code'].”
So i think “right, i’ll make folders for my existing categories then stick their posts into each respective _posts folder“.
This actually works rather well: if i list {{ site.posts }} from /index.html, each post gets listed with their .categories attribute set.
However if i list a posts .categories in the actual post, the list is mysteriously empty. It’s like Jekyll decided to make the categories act as some weird reverse breadcrumb system. Why this would be remotely useful, i have no idea.
The problem with how posts are listed gets further compounded when you start to use topics. All of my real blog posts are tagged “blog”, so in order to list them i actually use site.topics.blog. This works fine, until i try and list posts from within a “category”.
For some bizarre reason, the list of posts varies depending on which category you list from. For example, i have a /feed folder which contains an rss feed template. The only posts listed in the feed are those in my “dev” topic.
My only guess is that since alphabetically “d” comes before “f”, Jekyll is going through each category one-by-one and making posts on-the-fly. Pre-processing? We don’t need pre-processing!
The only real solution seems to be to store all of your posts in the top-level _posts folder, but that sort of defeats the purpose of using a folder-based category system.
Onto pagination and beyond!
Now assuming you have got your posts sorted out, you’ll probably want to paginate them, right? Well good luck with that; while Jekyll will allow you to split posts up into pages, the paginator is a global option. So if you want pages, you’ve got to have pages on everything.
Got multiple lists of posts on a single page? Well watch out, you could be in for a nasty surprise!
Which brings me onto the rather limited Liquid markup Jekyll uses. Now i don’t have much of an issue with the Liquid markup itself, after all i thought it was used rather well in Mephisto.
But in Jekyll, i’m constantly trying to find a workaround for its rather limited set of liquid tags. Want to list posts by date? How about multiple tags? Good luck with that!
So safe to say, unless you have a pretty simple blog with a flat layout then out-of-the-box Jekyll quite simply doesn’t cut it yet – sad but true.
Unfortunately it’s still in development, so it’ll be a while till the general public can get its hands on the awesomeness of this game. Still, when it’s available you’ll be sure to find a nice mac version.
So until then, keep your eyes peeled for Frozen Synapse!
Back when the Android SDK was first released, i thought i’d check it out. Turns out there was a google competition where you could win cash prizes for making android apps. “Simple!”, i thought. That was until i looked further at the SDK and found it to be far too incomplete and with little documentation.
Safe to say, i didn’t make an Android app.
Recently, the has been another Google competition so i thought i’d check out the SDK. “It’s bound to be far more mature and usable!”, i thought (not to mention it’s supposed to be the greatest platform in the world to develop for). Unfortunately, it was just as bad as it was the last time i looked at it.
The Problems
Firstly, it’s based on Java, which isn’t really Java. Even so, it inherits all of Java’s problems. A weird and nonsensical class hierarchy for one. The overuse of abstraction for fairly simple API’s is another. Not to mention, the overload of XML files, which seem to permeate everything you do for no good reason.
In general i’d probably call it a rewrite of J2ME, only 10 times worse. Why worse? well at least with any decent J2ME SDK, you usually get some sort of usable GUI builder. Instead with Android, you get this mess…
Seriously, it’s the 21st century and i’m reduced to building a GUI using a spreadsheet and dragging a few nondescript labels around the screen in the vain attempt to build something which actually looks good. It’s so bad, even the tutorials recommend editing XML files rather than using it.
Earth to Android: people were making far better gui builders as early as 1989.
The distributed emulator application doesn’t exactly instil me with confidence either. Not only do i have to wait 5 minutes for it to boot up, it’s also horrifically slow for anything other than a simple “Hello World” application.
Seriously, if Android is supposed to be OS agnostic, why not make a simulated environment rather than a whole emulator? Would be a whole lot faster and usable if you ask me!
And of course, the real killer. The preferred IDE is…
If you asked a bunch of random strangers to build a bridge, you’d get a hideous construction which leads nowhere. In a similar vein, Eclipse is built by a complete bunch of strangers and ends up being an unusable mess. What’s worse is they’ve had 3 whole versions to sort it out, and rather than getting better it seems to be turning into an increasingly bloated mess.
I’ll give you an example. The code window is by default cramped in the middle of the window, it’s like looking through a keyhole to get at your code. Want to find the configuration settings? Good luck. You’ll have to dig through a whole myriad of menus just to change the font size.
Lets not forget the quirks. Want to scroll through a list using a mouse wheel? Well you’d better watch out for those pesky hint boxes which pop up and completely block focus.
But i digress; continuing with the Android SDK, another issue i have is with the actual documentation. Most of the time it follows a policy of listing what i can do, but not giving me any good examples of how to do it.
I’ll give you an example, looking at the “3D with OpenGL” section:
“Writing a summary of how to actually write 3D applications using OpenGL is beyond the scope of this text and is left as an exercise for the reader.”
Want to write OpenGL applications? We’ll just vaguely describe how you could do it and just leave you to guess it all out on your own. Not that your app will be usable on all devices of course.
It also likes to mention technologies with little to no explanation of what they do. Taking the “Audio and Video” section as an example, a reference is made to “Playing JET content”. What is “JET content”? I seriously have no idea.
Not to mention, there are a lack of comprehensive tutorials.
Take the Notepad tutorial for example, for every exercise you have to start from an archive of what the project should look like. It is impossible to follow the tutorial through without starting all over again with these archives.
There is even an “Extra Credit” section. I’m not even going to comment on that one.
Really, it feels just like i’m copying and pasting code. i.e. not learning anything.
To Conclude
So safe to say, i’m not going to make an Android app anytime in the near future.
Now i realise why Google is offering cash prices for making android apps: The SDK is so horrible, you’ll need all the money to pay for the therapy you’ll need after you finish your app.
Recently Adobe’s Alchemy was released to the public for testing. It claims to be a tool which can “compile C and C++ code that is targeted to run on the open source ActionScript Virtual Machine (AVM2)”.
In English, that means you can take C and C++ applications and run them in Flash 10.
Since i am always interested in the next big thing, i though i’d check it out by porting something interesting over. Previously i managed to rewrite a SCUMM interpreter from C to HaXe for Flash 9.
So naturally, to form a good comparison i decided to compile this interpreter using Adobe’s Alchemy instead.
What went right
Well, i managed to get it ported, using a front-end written in AS3, and the back-end compiled to a swc via Alchemy. Above you can see a screen shot of the version written in C (the haXe version for comparison here). Compared to the haXe implementation, the C version is much more feature complete.
It should also be noted that it took me only 2 days to get the Adobe Alchemy version to work properly, vs several weeks to get the HaXe version barely functional.
What went wrong
While Adobe Alchemy is cool, it was a nightmare to work with. For starters, compiling in C++ was broken (as the new operator didn’t work), so i could only compile programs written in C. This obviously meant no ScummVM port, which would have been far more featureful.
It also meant that i had to put up with the full quirkiness of the horrible Alchemy API. For example, this grabs the current time:
Ok, maybe i am exaggerating a bit here, but it seems that almost every function requires an AS3_Val, which you need to release. And it gets really annoying when you have to keep remembering to explicitly release everything you use. Hasn’t anyone at Adobe heard of autorelease pools?
Another thing is i could not find a proper way of debugging the C code. I had to resort to printing out values and trying to decipher the cryptic error messages which don’t really help me figure out the real problem.
Error: Error #1502: A script has executed for longer than the default timeout period of 15 seconds.
at ()[45593.achacks.as:3340]
at ()[45593.achacks.as:3902]
at ScummTest/initEngine()
at ScummTest$/process_loadQueue()
at ScummTest$/swfLoaded()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
It would also have helped if there was proper documentation. True, there were a few examples, and you can figure out a few things from looking at the headers, but source code is not documentation.
And finally, even if you ignore the failings of the API and documentation, you still have to contend with the slow performance. In my example, the SCUMM interpreter was notably slower than its natively compiled counterpart, especially when it printed all of its debugging statements to the trace log. And even when it wasn’t printing anything out, it still took a long time doing seemingly nothing.
To conclude
To be fair, Adobe Alchemy is still “pre-release” software, so i have no doubt it will improve over the coming months.
In addition Adobe specifically mention that “Alchemy is primarily intended to be used with C/C++ libraries that have few operating system dependencies” and “is not intended for general development of SWF applications using C/C++”.
So i don’t think i will be making a habit of porting C/C++ applications to Flash using Alchemy.
Ok, libraries perhaps. But applications?
I really think it is better to write as much as you can in ActionScript or HaXe. It isn’t like in .NET where you can access objects and classes in the runtime via a transparent interface. You have to explicitly use the AS3 interface in order to manipulate native ActionScript objects.
Still, i look forward to see what becomes of Alchemy.
Well it looks like Google have finally jumped on the Web Browser bandwagon. Google Chrome was released today, which looks like a very interesting browser indeed.
Trying it out myself, i couldn’t figure what the fuss was about until i read the associated comic, which goes into details about the JavaScript engine, tabs in separate processes for security, and of course Gears integration.
So all in all, i think it is a nice and refreshing take on the web browser. For far too long i have had to put up with Firefox the memory hog being slow and chuggy, Safari randomly crashing, Opera not being good enough, and Internet Explorer which is like driving a stake through my ears. Google Chrome on the other hand… not bad.
Still, it does have a few problems. Rather than moan about them though, i’ll just be concise and list them all:
No getImageData support in the Canvas
Runs on Windows only (for now)
Scrolling seems chunky
The Flash plugin slows everything down just as usual
Apart from that, great. Will be interesting to see how Google Chrome advances in the future.
Finally, Apple have released version 2.0 of their iPhone and iPod Touch firmware. Priced at $9.95 for Touch owners (though free to iPhone owners), i think it delivers excellent value for money, especially considering the previous update for the iPod Touch cost $20 and didn’t include the App Store.
Well i am pleased to report that most of these features have made their way to the update. My database demo which i posted about previously works fine, though initially i was a bit concerned that i didn’t see a “databases” section in the configuration options in Safari.
Turned out that this only appears when at least 1 database is created. A word of warning though: when i deleted my test database, the section vanished and i could only get it back by restarting the system. So watch out if you are playing about with it.
Sadly it appears that one of the binding features, the full-screen support, hasn’t made it into the update. Supposedly, you are meant to insert the a “apple-touch-fullscreen” meta tag into your HTML document, but i didn’t notice any difference whatsoever when i tried it. A huge disappointment, IMO.
Regardless, i think this is a positive step towards making the iPhone/iPod’s web application development platform actually useful – in a stark contrast to just over a year ago when Apple were promoting a rather limited web development platform with none of these cool features as the only way of getting third party applications on the iPhone.
Let’s not forget that for those not content with working within the limitations of the iPhone’s web development platform, there is now also the native iPhone SDK. So all in all, there’s a bit for everyone in this update.
A while ago, i was contacted by Ted Haeger of Bungee Labs in response to my blog entry on Heroku. He invited me to check out Bungee Connect, their fully featured web-based IDE. So i did.
Keep in mind that the following overview is of the Beta version, which is still under development and so is still subject to change. Also remember that this is in no way an in-depth review.
For those who don’t know, Bungee Connect is an all-inclusive web development environment. It covers development, testing, and publishing of web applications. In addition, a collaborative element is introduced with support for multiple users.
Development
So here’s the development environment, which has a striking resemblance to a certain Intergrated Development Environment from another company.
Naturally, the first thing anyone would want to do is make a simple “Hello World” application, which sounds very simple at first – right? Wrong!
Sadly there is quite a big learning curve getting to grips with Bungee’s terminology and workflow.
As you’ll note by looking at the screen shot, the hierarchy for my “Hello World” application looks like this:
Yo_World
MyAppProject
NewPage
MyTypeLib
Yo_World
Object
Which to me, seems a bit overcomplicated.
Bungee Connect is not the sort of development environment where you can just pick it up and churn out a working application without first reading the documentation.
Still, with a lot of head bashing you could probably think of the above as an example of MVC (Model, View, Controller). i.e. “MyAppProject” is where the views go, and “MyTypeLib” is where all of the controllers go.
For the actual code, it seems primarily based on Java or CSharp. Though i couldn’t find this explicitly stated anywhere, so i am not sure.
One of the key features which sets this solution apart from other web-based development environments is the GUI designer. It can be very much likened to Visual Studio – there’s a control palette on the left, object inspector on the bottom, and you can move about controls in a WYSIWG-style canvas.
Another thing of note is that you can bind values of controls to counterparts in control objects. This means that you can easily build up complex interfaces without writing tonnes of glue code, which can save a lot of time. If you have ever used Interface Builder on a mac, you’ll probably know what i mean.
Staging & Deployment
Assuming you made it through the development process, it’s likely you’ll want to subject your application to rigourous testing and eventually publish it to Bungee Connect’s servers for public consumption.
That is, after you accept no more than 3 long and wordy license agreements, which to say the least was a big legal commitment for such a service. I might not have been bothered if there were only 2, but 3? Also factor in the additional Terms of Use and Privacy Policy. That makes 5. Crazy!
It should also be noted that you are locked into deploying your application on Bungee Connect’s servers.
Conclusion
Enough rambling. So is Bungee Connect any good? Well at the moment, not really. I say this because it just seems like an overly complicated solution for a rather simple problem. While I want to “Build the app, not the crap”, it would be nice if i could “Not deal with the crap”.
Buggy interface (e.g. drag & drop didn’t work at all in Safari!)
Bungee’s statement, “Build the app, not the crap” got me thinking. When was the last time i really thought i was building the app, not the crap?
Yes, Delphi. Hello World? Just stick a label on the default project’s form, type “Hello World”, and press run. It couldn’t be any simpler.
Compare and contrast with Bungee Connect: I have to make a “TypeLib”, a controller, then a form. Then if i am lucky i might figure out which item in which list is the form, drag over a label, type “Hello World”, and then stick it all on the page in my other project.
I really do wonder, why can’t modern web-based web application development be simple and fun?
For a while now i have been thinking “Wouldn’t it be cool if someone made an online Internet IDE?” After all, it seems that just about every other app you’d find on your typical desktop PC has an equivalent online version.
Well it seems that someone has actually made an online IDE called Heroku. Specifically, it is a hosted Ruby on Rails development environment.
Basically this means that instead of installing Ruby on Rails and all of its dependancies on your computer to make your next killer Rails app, you can just save all of that hassle and do everything in a web browser.
Features are listed here. In all it looks to be a very interesting web app, perhaps more suited to a mobile worker or maybe a small development team looking for a no-fuss solution for collaboration.
Now if only i had an account so i could try it out….