Author Archives: espen

Tabs on Android

Using a tabbar, either at the top or bottom of an interface, is a typical design pattern used in apps to navigate between segments. This is used by the Android Twitter client for example. The typical way to implement this is by using TabWidget, TabActivity, TabHost and friends. Each tab is populated with whatever activity you want and all is well.

There is a problem with this approach however. If you start a new activity the tabs (area A, B, C) all disappear and this is not always what you want. Sometimes what you want is to keep the tabbar around and have an individual backstack for each of the tabs.

Typical tab layout

Typical tab layout

I’ve published an example on github that shows how you can get the best of both worlds. It explains how to keep an individual backstack for each tab, but also how to start activities that break out of the tabs as is the traditional way on Android. The Back button still works and you can also programmatically navigate back. The behavior of back is changed to respect the backstack of each individual tab.

If you want to try it out yourself I’ve compiled an Android package for you. Navigate to http://bit.ly/stacksintabs with your Android device and install the .apk to check it out.

Navigation in the example

Navigation in the example

The design is very simple. I still use TabWidget, TabHost and TabActivity (layout here) – but instead using normal activities for each tab, I subclass FragmentActivity – and build a stack of Fragments inside each tab. The gist of the code is in the addFragment(…) function

To launch a new fragment inside a tab (area D), see the launchNewFragment() function, and to see how you break out of the tabs and launch a new activity (area E) see the function launchNewActivity(…)

The fragments and activity I use are just examples, the point is that you replace ExampleActivity and ExampleFragment with you own classes.

My initial approach at solving this problem was using Fragments exclusively, but since nested Fragments are not supported on Android I gave up.

I hope this helps some of you – it’s all available under a BSD license. The example requires API level 7 and uses the Android Support library v4. Comments and contributions are welcome. Btw: I’m also working on a comparison between QML and Android XML where I compare pros and cons, so stay tuned for more :)

Qt Developer Days 2011 in Munich

We’re back from Qt Developer Days 2011 in Munich, Germany. What a great show! For those of you who werent’ there here is a small recap of what happened from our perspective. First, some pictures

This slideshow requires JavaScript.

Both Marius and I were presenting in Munich. Marius dissected the code of several of our apps, and explained how QStateMachine makes your life easier. The talk is available here:

I talked about Necessitas, Qt and Qt for Android and basically explained how you publish Qt apps on the Android market. That talk is available here:

Now we gotta work to catch up on other projects!

Share

Cutehacks 1st year – An executive summary

Time flies when you’re having fun, and we’ve had lots! It’s been year since we started Cutehacks. Here is a short summary of what we’ve achieved, and what we’ve learned – the good stuff and the bad stuff.

For the executive brief, check out the video below.

Achievements

  • Formed a legal company
  • Got an office and bought hardware
  • Got an accountant, lawyer, designer etc.
  • Published 4 Symbian apps
    • Yr.no for NRK
    • Telenor Faktura for Telenor
    • WiMP for Aspiro
    • Fly for ourselves :)
  • Made our Symbian apps run on Maemo, MeeGo and Android as well
  • Contributed a bit to Qt for Android
  • Created a UI prototype on Win/Mac/Symbian for a client
  • Went to Qt Developer Days, Qt Contributor Summit, MeeGo Summit, Akademy, SEE, etc.
  • Consulted for ad-agencies and printing companies
  • Stayed at five star hotels – for FREEEEE
  • Got 3 minutes on national TV
  • Got mentioned on lots of mobile sites
  • Started a tech-startup-network-club-thingy
  • Got tattooed
  • Got paid

Three things we’ve learned

“If you set yourself goals, you will actually reach them”: When we started Cutehacks we said that an ideal project for us would be to develop the WiMP client. One year later, we actually achieved that. We’ve also worked towards getting our apps running across multiple platforms – this is also starting to happen.

“Ask and you may receive”: We’ve gotten free hardware, new projects and invitations to talks – simply by asking for it.

“The only constant is change”: Wow, this one has definitely been true for us. We didn’t see 2/11 coming – but once it did, we’ve simply had to adjust and move on.

Some advice for software startups

  • Use LinkedIn
  • Use Twitter
  • Use YouTube
  • Use Google Apps (Mail, Documents, Calendar)
  • Use Github (or similar)
  • Use WordPress (or similar)
  • Use a professional accountant
  • Use a professional designer
  • Present at conferences
  • Say Yes more than No
  • Build up your IP
  • Act professional
  • Use your network
  • Ask for things
  • Get an office
  • Always look for new projects
  • Experiment with new technology
  • Get signed contracts
  • Always go to a meeting prepared
  • KISS
  • Do it

Share

Cutehacks targeting Android, Symbian and more

Here is a video of two apps developed by Cutehacks: Yr.no and Fly running on Android 2.2 and Symbian. These native apps were originally written for Symbian but run great on Android as well:

Using Qt for Android (more specifically Necessitas and Ministro), the amount of code changes we had to do were minimal. This shows the power of Qt – it truly is cross-platform. Too see these apps running on MeeGo and Maemo as well – check out this video.

None of the apps above are available in Android Market yet. Be assured we’ll tell you when/if that happens :)

Share

Cross platform apps at MWC

Three of our apps are being shown at the Mobile World Congress this year, for several different devices. If you want to have a look at them in real life head over to the Qt booth located here.

The video below shows our apps running on a few of the many platforms supported by Qt.

As you may know, Qt has been a cross-platform toolkit from day one, and supports many more mobile platforms than just Symbian and MeeGo. Here is a list of some of the different mobile platforms Qt runs on today:

Mobile OS Support Links
Android Community Video
iOS Community Video
Windows Mobile Official Video
webOS Community Article
QNX (Blackberry Playbook) Community Video
Symbian Official Video
Maemo/MeeGo Official Video

…and there have been reports on success getting it running for Bada and Amazon Kindle as well. Go to the Qt booth to see more apps running across both desktop and mobile platforms.

Share

28 days later – an Ovi survival guide

At the moment we have 3 apps pending in the Ovi store. During the submission process we gained some knowledge that might save you some time when you’re going through the same process. This blog post is meant as a survival guide, so I thought 28 days later was a fitting title, allthough our apps are still pending after 41 days. Here are the issues we ran into so far, and how to avoid them:

OVI Survival Guide

Issue #1 – Vendor vs Publisher

If you have developed an app for another company and now want to publish it through their publishing account, make sure the Vendor listed in the .sis file is the same as the Publisher name. Otherwise you’ll get an error. This is inspected manually by Ovi QA and took two weeks for them to report back. Here is the error message:

SUMMARY: The Vendor Name listed in your package file is “Cutehacks AS”
CORRECTIVE ACTION: The Vendor Name listed in your package file must match your publisher name “NRK”

There are two ways to resolve this. Either get the owner of the publisher account (the company you made it for) to tell Ovi in an email: “It’s OK – really. It’s fine!”. Or, fix the Vendor part in your .pkg script. Google it if you don’t know how.

Issue #2 – Countries vs Language

When submitting a .sis file you tell which languages it supports, and also which countries it should be published in. There is a correlation between these two, and if you haven’t guessed it right – your app will fail. To exemplify:  If you put as countries: Worldwide, and languages: American English, Norwegian – it will fail. You are not allowed to publish an app worldwide if it’s only in American English and Norwegian. Here is the error we got:

SUMMARY: Localized content must be set to its localized region
ACTUAL RESULT: American English and Norwegian are the only supported language selected by the publisher however the content is selected to be distributed Neutral
EXPECTED RESULT: Only Canada, US or Finland, Norway, Sweden, Norway, Denmark regions can be selected in the country distribution if the content is localized in American English or Norwegian.

Now this check is also done manually, and it took them two weeks to report this back to us. In other words, there is an internal list inside Ovi of which languages must be supported to be able to distribute it to certain countries. This list is not documented anywhere as far as I know. Note they make a distinction between English and American English, and actually disallow the app to be distributed to the UK, Australia, India.

Issue #3 – Smart Installer warning notice

Since our apps are using Qt, which on older phones are not yet included, they may in some cases require a download of up to 13 megs. If you don’t put a warning at the top of your app description that states this, they will fail your Qt based app. Here is the error:

ISSUE: Description for Qt Smart Installer content requires additional information
SUMMARY: Items utilizing the Qt SmartInstaller requires an additional disclaimer in the description
CORRECTIVE ACTIONS: Please add the disclaimer below to the beginning of the metadata description informing users that additional downloads may be required

Now to be fair, in two out of three cases the QA guys just added the warning note for us and we didn’t get an error – but in one case the app was simply just failed. This also took them about two weeks to notice and must also have been checked manually. The warning notice needs to read: *This item may require a one-time download of components as large as 13 MB. Use of WLAN is recommended. It needs to be translated to all the languages you support as well.

Summary and conclusion

We submitted 3 apps 41 days ago. They are all still pending:

  • Two are still pending for Symbian^3 phones: Reason unknown
  • One is still pending for Symbian^1 and Symbian^3: Reason unknown
  • Note that no actual software bugs have been reported yet for any of the apps

All reported issues so far have been fixed within hours and then resubmitted to Ovi.

Share

Cutehacks developing WiMP

Press coverage

The Nokia mobile platforms might have lost one music service today, but it’s soon gaining another. Today we’re announcing that Cutehacks is developing the mobile client of WiMP (by Aspiro) for the Symbian platform. We’re going to use Qt and Qt Quick, which will make it pretty easy to provide the service for any coming MeeGo handsets as well. We’re focusing on Symbian^3 at the moment, but may later extend backwards to older Symbian platforms if there is a demand.

Wimp logo

If you don’t know what WiMP is, think of it as a direct competitor to Spotify. It is basically a streaming music service that, for a monthly subscription, gives you access to all the music of the world. It’s even got Pink Floyd (which Spotify doesn’t). You can see some screenshots and read more about WiMP here. Wimp is already available on Mac, Windows, iPhone and Android – so it is high time we bring it to the Nokia platforms as well. We are very pleased to get this project and are looking forward to working together with the guys at Aspiro.

We’re hoping for a relase this half of 2011, but that is up for Aspiro to decide so stay tuned for more news :)

Also, we’ve gotten some media coverage here in Norway already. Check out these article in digi.no (norwegian / english) and amobil.no (norwegian / english). Oh, and those are Google Translate english, so don’t complain to me if it’s messed up ;)

Anways, exciting times for us here at Cutehacks!

Share

Cutehacks is hiring

We started Cutehacks to have a fun and interesting place to work, and so far it’s been a huge success. In fact it’s so much fun, we need more people to play with :) That is why we’re looking for experienced developers to join us in developing mobile apps for Symbian, MeeGo and Android.

Here is a small sample of the apps we’re working on at the moment or have in our pipeline:

Apps in development

We are looking for a passionate programmer who cares deeply about code, design and user interfaces.

Qualifications:

  • expert knowledge of Qt and C++
  • cross platform development experience (Windows, Linux, Mac)
  • plus: Symbian, MeeGo, Android, iOS or RIM knowledge
  • plus: talent for graphical and UI design
  • plus: knowledge in HTML and web services

Your job will be:

  • code and test
  • design and implement user experiences
  • communicate with customers
  • help build the company
  • have fun

We can offer:

  • exciting projects and interesting technical challenges
  • central offices in Oslo (Forskningsparken)
  • lunch with fresh bread , fresh coffe and good friends
  • no bureaucracy and no hierarchy
  • high degree of autonomy and freedom
  • a desk full gadgets ;)

How to apply:

Mail the following to jobs@cutehacks.com

  1. CV
  2. Code examples
  3. Cover letter

If you wonder about us and the offices, here is a video of our 1st day at work  :)

Share

AppWorks – app stores, apps.no, Angry Birds and HTML5

Espen Riskedal Yesterday I was presenting (covered here by mobizmag.no) at appworks.no, the first conference in Norway focusing on mobile app development. There were two scenes, lots of people, and a lot of good talks. Check out photos from the day here. (Photos: Eirik Helland Urke/Creative Commons)

I was talking about the mobile app market in Scandinavia and Europe, mostly from a business perspective. The most interesting slides are probably the ones about the mobile os web usage in Scandinavia, the size of the different app stores, and also the trends and forecasts on whats going to happen, according to the analysts, concerning app stores and mobile platforms.

I also attended three of the talks, and all of them were really interesting. Here is a small summary of them.

Small Efforts, big bucks

Sveinung Totland – apps.no

Sveinung Totland Sveinung had a really interesting talk about the different apps that apps.no had launched and how they had fared in the market. He was very frank and open about everything and I really enjoyed the talk. Our business idea is basically same as them, make own apps + consult and make apps for others, so it was really good to hear from someone that was already doing this, and succeeding. Here are the numbers:

Name Price Downloads Revenue
YR free 600000 None – but 60000 emails to spam
Kronespillet 17 NOK 67000 854250 NOK
Avinor 17 NOK 46000 586500 NOK
Kystpatruljen 17 NOK ? 0 – Enough to pay for the dev cost. Redningsselskapet gained 50% in new member boost
Gyldendals Soppguide 39 NOK ? 0 – Enough to pay for dev cost
Skattesøk 17 NOK ? Lost money – Free apps came out and there was no market

How we made the top grossing mobile game

Peter Vesterbacka – rovio.com

Peter Vesterbacka Peter from Rovio talked about their insane success with the Angry Birds game. It’s been the top selling game for the iPhone for over 5 months, thats more than anyone else – ever. They have sold, at least, 7 million copies of it on the Apple App Store for the iPhone only, more if you add iPad. They launched in December 2009, and since then have had a crazy ride.

One interesting fact is that Angry Birds is not their first game. According to Peter, they’ve done around 50 other game titles already, so this was not an overnight succuess, but took years of hard work before it really paid of. Angry Birds was “designed to be hit” – with that Peter meant that their designers had sat down and really studied what was needed to make a smash hit game for the iPhone. The character design was a bit by accident, they saw some sketches from one of their artists, and then instantly fell for the angry birds.

Angry Birds is now going to be everywhere: Nintendo DS, Playstation Portable, Windows etc. etc. For their existing ports: iPhone, Maemo, Android and Symbian, they’ve done them all in house – and they will continue with that for the other coming ports. They are 12 people right now, but have 15 open positions! :D Rovio is aiming for 100 million downloads of Angry Birds – they call it the “Tetris strategy”. And they might succeed – when they released the Android version a few days ago, they had 2-3 million downloads in as many days. Wow.

Apps vs HTML5 – what should we choose?

Nikolai Onken – uxebu.com

Nikolai Onken The last talk I attended was about HTML5 apps. Nikolai had a very enthusiastic talk about HTML5 apps, and how that was not a utopian dream, but actually a reality already. I think his talk clearly showed it is not quite there yet. The fact that for the iPhone, to use bluetooth support in an HTML5 app, you have to jailbrake it and write a platform spesific extension for PhoneGap speaks for itself.

I’ll keep an eye on HTML5 apps though, but at the moment – native is still the best way for anything but the most naive apps.

Share

YR weather app being developed by Cutehacks

 

YR beta 0.2.0 by Cutehacks

YR beta 0.2.0 by Cutehacks

 

Cutehacks have been busy creating an app for the coming Symbian^3 phones the last weeks. It’s the weather app for  YR.no. We are very excited to be making this in collaboration with NRK.

The release date is not yet set, and the app is still in beta. However – we’ll be showing of the current version this week at Qt Developer Days in Munich. If you want to see it in action, come talk to us at devdays – we’ll be wearing our Cutehacks t-shirts.

Also, the app impressed the Qt guys so much they asked if they could include it on their demo pavilion. Who are we to say no? So on their demo pavilion in Munich they will have some N8s with the beta installed. Press the YR icon and off you go.

Share