Yesterday I went to a Nokia event hosted in London.
First off I have to say a huge thank you for Nokia for doing it, at least now should I ever need to develop for Nokia, I’d know where to start, which for certain platforms is a bit of an issue *Nokia Cough* *Blackberry Cough* *Windows Cough*
To be blunt, RIM, Nokia and Microsoft (Although less so) all are starting to realise that developer communities become the reason a platform can be so successful.
Consider Google who are consistently helping through clinics at small events, holding their own events and helping regularly through IRC and forums. Apple have obviously built up the app eco system and as the first ones to do it, the community is pretty much self sustaining but they do also hold clinics at some events.
RIM have started to change their ways to encourage developers to target Blackberry, this is through new web apps (or Blackberry Widgets as they are confusingly known to by RIM) and releasing new open source code and RIM staff actively helping on the developer forums (a year ago no such help seemed to exist).
Microsoft are still being a bit cold with the developer community, inviting development companies to see the latest devices but no free devices to develop on. But they have been helping out anyone who shows interest and proof of developing apps (or even showing interest in jail breaking community) so I’m half way to thinking they know what they’re doing.
So that leaves Palm / HP and Nokia. Samsung have Android and Bada, but Bada is a bit of an outsider and I haven’t had much experience with this.
Palm / HP I don’t think have set up their full strategy yet for mobile.
Nokia . . . . boy oh boy Nokia. Before yesterday, someone says Nokia I think, Symbian, Maemo, Meego and Ovi. What each of those are – I didn’t know, which one should I target, I didn’t know, so I haven’t even started and I’m already left with a big problem before I’ve even started.
Yesterday cleared this up:
Symbian – $100+ phones
Maemo – is now Meego which is a joint effort between Nokia and Intel
Meego – Designed in a similar way to Android – to run on a wide range of devices
Ovi – Just the store, I used to be confused with Ovi maps and all sorts of stuff media Nokia where pumping out around it
So which do you target? well to get at most of the Nokia’s 30% market share, go for Symbian, how? using Qt, NOT a web app. What tools? Use Qt Quick, this is only a preview but seemed to be getting pushed pretty hard by Nokia as the way forward.
This is kind of good and bad news, Qt Quick seems great BUT it’s not ready for prime time, sooo dev’s are basically getting shown what the plan for the future is, but this kind of illustrates how late to the party Nokia are with smartphones and developers. They also pointed out that the phones you can target, won’t necessarily have the Ovi store installed and while users can download it, they probably won’t.
Meaning Nokia’s 30% doesn’t really count for all that much to developers, because Nokia aren’t allowed to push an update to the devices.
Bad news thus far, incomplete tools for a handful of devices that probably don’t stand up to much.
Let’s start off with the tools, generally they look pretty good, using Qt you can target Symbian and Meego, Windows, Mac and Linux. But they don’t have default components like Buttons :-/ but the community has some and Nokia are working on a set to release, so can’t complain too much.
Generally Nokia seems to of done a pretty good job with the toolset and the Ovi store seems solid.
I just wish they came across a bit more confident, most speakers from Nokia seem a little reluctant when approaching iPhone and Android developers. But at the same time a developer from Cute Hacks was on hand giving developers extra info and speaking bluntly about the platform from the point of view of an ex Nokia employee and ex Trolltech employee.
So what device can you target? well the only one I know you definately can target (since it comes pre-installed with Nokia’s Ovi store) is the N8. Low and behold, that’s just the device ever attendee got at the event (that’s right they did a Google and gave out a load of free phones).
What is the N8 like then, I hear you cry?
Well the actual device is awesome. HDMI output, you can plug in USB hard drives directly into the phone, the camera seems pretty cool. The problems start as soon as you turn it on. It doesn’t seem like the Nokia has been ran through a user testing group to see how they find the device, the UI the whole lot. Nothing it particularly clear right from the offset. No I admit it must be hard not stealing iPhone or Android UI and keeping your own style / way of doing things when a numebr of user’s will be coming from using iPhone or Android.
And I admit I’m an Android user, but iPhone I can play with and enjoy, Blackberry I can play with and know where to go and find stuff, Nokia – Nu uh, took me long enough to find how to get the menu up. This is what concerns me most, Symbian targets cheaper devices, but everyone wants an iPhone. iPhone’s aren’t cheap, when they start looking for cheaper, Android will start flagging up, these are the smartphone markets that most developers target, so why aren’t Nokia telling developers to target Meego?
If Meego is any better than Symbian (which shouldn’t be hard to beat) then Nokia may be able to make a come back.
All in all Nokia need to do more events like this to build up a community, they need to be a little more confident in their approach and need to be a little more open with their numbers and their plans.
In terms of actual device, hardware – Winner, design could do with some work, but it’s not bad, but the camera, hdmi, usb stuff is just unique. Software – a lot of work needs to be done just to make it feel more natural / intuitive. Toolset, definately heading in the right direction with Qt from what I’ve seen *although not played with it yet*.
NOTES FROM THE EVENT [Largely for my own reference, but you may find it useful too]:
Series 40 – Touch
Symbian – Smartphones – QT
Meego – Expensive devices
Doesn’t appear to parse JSON
Device Anywhere style stuff
Operator Billing – 60 / 40 otherwise apps charged at 70 / 30 [Nokia still make a loss on some billing at the 60 / 40 split]
Old phones need to download Qt
Meego – Nokia + Intel [Android clone?]
N900 – Meego installable
Small portrait ratio
Web – Qt is recommended
Web – Nokia Web Runtime [Old before HTML5] and the Nokia browser is rubbish / slow
@gazsp asked me to do a presentation one evening after work on Android UI and after kind of chatting with him about what sorta things he wanted to know I stuck some stuff done in a presentation and largely based it on the approach I took for the Admob app I’ve been working (Beta coming soon ).
Anyway I tidied up the notes and published them on SlideShare. Enjoy.
Because the code was originally written for a piece of University coursework, so I needed to be careful to avoid any issues with plagiarism. Since all of that is over now, I’ve re-written the example into a little example project. It’s by no means a full piece of code – I have only briefly tested it and I haven’t included any code to remove the broadcast receivers after they’ve been registered.
Anyway I’m hoping this will be enough to get everyone moving in the right direction with their projects and will post comments with useful hint’s / tips on alterations or things I may of missed.
Anyone looking for a slightly more detailed explanation of the code should still refer to my original post.
On a slight aside, I have spoken to Reto Meier about how efficient proximity alerts are in terms of when gps is used and when it isn’t (i.e. if the cell tower position indicated the user couldn’t be near a proximity alert, it doesn’t fire up the GPS sensor). Reto indicated that proximity alerts are fairly efficient, however, it does cause the gps icon to appear in the notification bar and recommended looking at the source code for proximity alerts and altering it so the icon isn’t displayed (which would make users feel more comfortable using the app and not worrying about batter life).
p.s.s. I have only tested this on a 1.6 emulator, so if you have any issues, it could be simply because it needs updating for 2.1, which I may do at some point, depending on how many need it.
This is something I’ve been pondering on the last couple of weeks, it’s a little bit of a ramble but it would be great to get some experienced developers points of view.
When I say “free” time, what I’m referring to, is paid time, in work hours, to look into / research / learn a new skill, technology or api etc. All of which a company may benefit from.
From a Software Engineers point of view, free time is great, not only does it give you time away from a project, it also gives you a level of freedom to pursue a personal interest. This means you get extra experience in something new altogether or something you’re experienced in but just learning a little more in a specific area.
As a senior android developer, I’ll most likely be expected to know about the latest android api’s, announced earlier today. Yet I’m stacked up with internal matters, project deadlines and project management that I can’t possibly spare time to learn these new things, so where should this time occur? In my own free time out of personal interest? Is that a reasonable assumption to make? Don’t get me wrong, I love developing apps, but if I don’t have a use for something, then I’m unlikely to go away and spend my spare time learning about it unless I have a real interest in the topic (which after a full day’s work of android dev’ing, more android dev’ing isn’t high on the list).
Perhaps it should be on company time.
But from a management view point, it’s a resource that is being shifted away from paid work, into something that isn’t necessarily needed and may not ever be useful. But the good should outweigh the bad, if someone has experience in a particular topic, that can lead to a client going with you because of experience. It means quoting can be achieved with a more realistic approach rather than a finger in the air approach. Staff morale is boosted from doing something they enjoy and I imagine in many cases would lead to them working faster and / or learning new skills that speed up development in a number of ways.
The real question is how to convince a management team to take this approach. And what happens when you’re a company that wishes to pride yourself of always being on the cutting edge of your field, if you can’t spare the time to staff to learn this stuff, where is it meant to happen? Smoke and mirrors? What do development companies do?
The final question, who should get this time? Does an entire development team need this time? only senior developers? lower developers? Should a specific team of dev’s be given the task of learning new technologies, creating examples and libraries for the rest of the development team to use?
This video is a little off topic but it’s an interesting talk and discusses how the work environment might be changed for the better.
Since the release of Facebook Sync I have found that I want to keep track of my Admob Revenue and to be honest the website isn’t too bad both on the phone and on a standard browser, but what I really want is a simple widget and an app with a nice interface if I want more info, so after noticing they’ve released an API I went about writing an Admob application.
So far I’ve been quite happy with the results (especially considering how little time I’ve actually spent (a few hours here and there when ever I can), but what I’ve really been trying to do is focus in the details, the little things that may go unnoticed but make it a little bit nicer for the user.
The aim of this blog post is for me to a.) Show what I’ve done so far b.) Get some initial feedback and c.) Point out things others may overlook in app development.
The Login Screen
Exciting stuff I know, but there is just a couple of minor details to take note of.
The first thing is the customisation of the widigets, thats the EditText fields (Username and Password), Checkbox (Remember Me) and the Button (Login). Now this screen took a fairly long time to design and set up because I was setting up the Theme.xml and Style.xml so afterwards it would filter throughout the application so I didn’t have do anything in any of the layouts (really recommend devs use Themes and Styles, you’ll thank me later).
Anyway I think some people may go against me changing the default EditText field, my main issue is that the system edit text is different for every version of Android and I’m really shooting for a nice, simple, fluid UI, hence all the custom components.
I’ve also put a ‘Gaunt Face’ badge to the left of the application, the reason behind this is because I want to build up a bit of a brand for quality apps and I want to know what you guys think of this, I don’t think it’s particularly obtrusive and the key is just to get people to notice it if they download more than one of my apps (which I hope they will).
Second point to make (this is one of those really minor things I was talking about), but look at the keyboard, notice the key left of the space bar? It’s an @ symbol – OMG Hold the press, it’s really tiny but I have used a number of app’s where the username is an e-mail and they DON’T set the keyboard like this, it’s so minor but bugs me quite a bit. Google put in the option, so use it
Like any good layout, it should work in both portrait and landscape.
What I’m Referring to as, the Dashboard
Next is the dashboard or home screen or . . . the first screen you see when you log in.
The aim for this screen is to tell you what you want to know, which is how much money you’ve made today, how much you’ve earned in the past month and let you see all that is relation to what you’ve earned in the past 2 days [ it also say hi to you too ].
The little things to note are, the action bar at the top with the refresh bar, when you hit refresh, the arrows turn into a loading image, which means NO dialog popping up and blocking the screen (I hate those, in fact I’m not a fan of the dialogs as a whole, as you’ll see in a bit). The hi message also has a nice little pop out animation on start up as well.
What I need to do with this screen is figure out how to handle large values above each bar in the chart. I was considering the following:
$999.99 -> $999.99
$999,999.99 -> $999.9k
$999,999,999.99 -> $999.9m
(Anything greater I won’t show)
Not sure if I like that or not and I’m not convince that those values could be displayed on all the devices (low dpi, medium dpi and high dpi) or not, but at the moment, that’s what I’m thinking.
A quick shot of it in landscape, this is just a little bit of a shuffle about to use the space a little better.
Application List
Then we have a list screen so you can see all of you’re applications, here’s both portrait and landscape. I don’t have much to say about this screen, it’s fairly simple and the only thing dev’s should consider is insuring the list view cache color hint is set to an appropriate color to avoid any nasty side effects when scrolling (and remove the dividers if you need to).
App Summary
Nearly at the end, this screen is still in very early stages, but here we go. The summary screen for an app, this covers the same content you can have access to on the website (Revenue, eCPM, Requests etc). At the moment it is only showing a line graph, but I am intending on adding more data underneath the graph in a simple linear layout (one value after the other). Each section can be accessed by scrolling the bar of buttons and clicking on your required one or by swiping the entire screen left or right, which will cause a similar behaviour to the stock News and Weather app.
I only got the graph working last night so need to check some of the data, but the idea is the portrait graph has 7 days worth of data (which is meant to be shown as below).
Then when in landscape the graph will enlarge and show 30 days worth of data (there will be a small graphic to indication to the user about this behaviour).
Dialog Boxes – GGGgggrrrrRRRrrrr
Lastly ……. I hate the default dialog box, I mean …… really hate it …… so I customised mine:
Some may think it looks worse and if you do then let me know, if you like it let me know, I personally don’t like it and have therefore acted on it.
Fin.
That’s it for now, I’m continuing development for it, finishing off the web services (it’s not paginated yet) and finish off the summary screen, but hopefully I’ll be able to release a beta of it sometime soon.
One thing I would really like input on is the app icon, I personally don’t like the one I’ve come up with, can any suggest anything better or alteration I could make to this one?
If you’d like to give it a go then please fill in the form below and I’ll e-mail you when I’m ready to release a beta build, after which I’ll delete you’re details
The first thing I couldn’t find quickly in the docs was that the top left corner is (0,0) and the bottom right is the canvas size (w, h).
The measured height of the canvas doesn’t necessarily equal the canvas size, what this means is that the canvas size shouldn’t be used for calculating positions, but the getMeasuredHeight() and getMeasuredWidth() should be.
One situation I has was I wanted to fill up as much space as possible but allow the containing linearlayout determine how much space I got by setting the weight to 1 for my custom view. However the onMeasure function can be overriden but will give a much larger space than is actually available. The way around this was to override the onLayout function and in this function I call setMeasuredDimension with my required size. The advantage of using this function is that the size is given depending on what the layout actually has available.
When drawing rectangles a sure fire way to not get your rectangle drawn is to have the top lower than the bottom coordinate. This is obvious when put like that but if you consider you’re just drawing a rectangle, left and right coordinates should surfice but in terms of implementation I imagine this restriction makes things easier.
A new Ubuntu, a new update to my web development environment how-to, so lets get down to business.
I do a fair bit of web development for free lance work, project work and personal sites. Each time I upgrade my Ubuntu Distro I like to do a clean installation rather than upgrade which means settings up apache on my machine, but each time I forget about how I created my set-up. This is where I’m going to dump my knowledge of doing things, mostly for me, but some of you lovely people might find it a bit useful
Shotwell is by far the best photo management software I’ve used on linux, it far surpasses picasa with its easy to use interface, taking a similar approach to iPhoto for Mac OS X. The polish on the application is fantastic, something many linux application lack.
It offers publishing features for Facebook, Flickr and Picasa Web Albums, but alas this is where my own personal tastes and this little program go our separate ways.
One of the main problems I have, is the actual use of the publishing feature, it opens in a separate window (which is good) however while it’s uploading your photos, it prevents you from being able to do anything else. Simply put, they need to thread this as a user I can look through my photos while waiting for them to upload.
Secondly, there is no way to manage your uploaded photos within the Shotwell application, now I admit this is a pretty tall order as it requires a great deal of work to get this sort of integration, so I won’t argue over this too much.
But those two things aside, Shotwell is awesome and you should all be using, because nothing else compares to it,
I’ve just upgraded my computer and with this came the multiple decisions of what to buy, followed by the nightmare of installing Windows 7 and then to be dragged into the problems Ubuntu is likely to face with up-to-date hardware.
A little part of me was hoping that Ubuntu would be able to handle it, but alas, there was a graphics card issue. However credit to Ubuntu for making everything else work out of the box (apart from the minor issue of SATA 3.0).
Anyway, to get to the point, this is how I got my GTX 460 (Gigabyte 1GB card) working under ubuntu:
1. To start off with I needed to install the x-update ppa, which can be done by going to System > Administration > Synaptic Package Manager then from the drop down menus go to Settings > Repositories > Other Software, click ‘Add’ and then paste in:
ppa:ubuntu-x-swat/x-updates
2. Close the repositories window and click reload, press mark all upgrades, and then do a search for ‘nvidia-current’, select this package and click apply.
3. After this is done reboot your computer (Note: perhaps bookmark this page before you do ).
4. Now go to Applications > Accesories > Terminal and run:
sudo nvidia-xconfig
This will set up and x-org conifg file for you, do one last reboot to make sure everything sticks.
5. Run the nvidia settings program by going to Accessories > Terminal and typing:
My Slashdot RSS feed came up with the story of how an institution had hacked a Quantum cryptography system.
My first thought was, well that is pretty reasonable, you can read a quantum state without any real issue, the problem is Alice and Bob will be aware that you’re reading their conversation. But then this story went on to claim that the hack enabled them read the conversation without the other parties becoming aware. This goes against the entire reason why Quantum cryptography is considered to be perfectly secure, the minute a third party ‘Eve’ measures a Quantum state, the Quantum state becomes destroyed.
How did they do it? Well . . . . they didn’t.
The hack didn’t exploit a flaw in Quantum theory, but rather exploited a flaw in the systems making using of cryptographic technique. It’s an interesting read over at www.nature.com and I was surprised that this type of security was in use today (I believed it was still in its infancy, not ready for prime time quite yet).
Either way, Quantum states, in their weird quirky way, seem to be the way forward for security.