Qt for Android!

12/22/2012 § Leave a comment

Qt logo

Its been months since my last post, but I’ve been so busy! Among doing my best to nurture a new romance and rounding up jobs its been incredibly hectic. Finally rounding up a really great job to do GUI programming using Qt, I’ve attacked this job like a dog after meat. I love Qt programming, its really great. I’ve spent the last few months learning more and more about this fantastic framework and I love it. I’ve always felt that messaging paradigms were the right key to distributed programming and the Qt development team has done a remarkable job porting their great framework from Linux to Windows.

Qt has been sold again, I guess from Nokia to Digia, before that it was its own company under the name “Trolltech, LLC”, I think. Obviously its been acquired a few times because the people who bought it knew it was developing a great product. Nokia’s recent troubles probably prompted the recent sale to Digia. Doesn’t matter who has it as long as they don’t mess with what’s working.

As well as being able to create great UI’s with this full-featured framework KDE has just trotted out a “pre-beta” (kind of) version of Qt for Android called “Necessitas”. What their relationship with Digia is I’m not sure, probably a licensing/legal thing as Qt has an open source/community version maintained by a semi-separate org, I think. I’m not sure how all the relationships are intertwined, I just know there are a number of people involved in creating a really great framework.

I really wanted to do some android development so last year I went through the great effort of installing the Google Android Development Kit and for me- it was hell on earth. Maybe I’m stupid, but I just found the whole thing really messy and hard to use. I’ve never been a big eclipse fan, but I use it when I must, and you must if you want to get up and running with the ADT quickly. Well, quickly is a relative term. After several weeks of installing things and adjusting settings I finally produced a fart app. The whole process was so painful however I really kind of dropped my enthusiasm for using THAT to create android apps.

In the meantime however I was popping out code for a desktop project with wild abandon. After months of struggling to wrangle android code with ADT/Eclipse I was actually having fun coding again. If I could get Qt on android… wow! They have it!

Its still in pre-beta release, as I said earlier, but it is usable. That doesn’t mean set up is a snap either. Let me give you the steps I used to get going and save you the trouble;

I installed this on my MacBook Pro Windows machine as my trusty Mint Linux box is too under powered to run the Android Virtual Device with any speed.

  1. Install the Oracle JDK and set up your JAVA_HOME variable and put %JAVA_HOME%/bin in your userspace path. 32 or 64 bit versions, it doesn’t appear to matter.
  2. Down load the Necessitas installer and run it. Take all default options. I don’t particularly care to have Necessitas in my home directory but I decided not to test fate on this one. If you have it installed and running elsewhere please drop me a line.
  3. This might be an unnecessary step, but I followed the advice of one poster and installed the latest ant build system on top of the one provided by the necessitas installer.
  4. BEFORE DOING ANYTHING ELSE run the adb.exe in ..\necessitas\android-sdk\platform-tools and let it download and install all the android kits you think you will be using. I installed everything it would let me. You also need to delete some old libs and replace them with new ones, just use the provided buttons. The whole process took at least two hours. Brew some coffee, play some Warcraft, whatever your poison.
  5. Locate the AVD Manager that should now be in ..\necessitas\android-sdk (it won’t appear here until you do the previous step) and set up at least one AVD, I recommend one at ADK level 2.3, I think that’s API level 10.
  6. Download the Ministro II runtime kit and the MinistroConfigurationTool II.apk from the same place to the same directory as the adb.exe in ..\necessitas\android-sdk\platform-tools
  7. Open a cmd shell in THAT directory and execute ‘adb install “Ministro II.apk”, and do the same for the configuration tool.
  8. Important Create a new project, don’t need to code anything, and then select the “Projects” tab on the left side of the IDE. Select the “Run” button next to the “add kit” and “Manage Kits…” button, and change the “Android target Configurations” under “Run Settings” from whatever it is to “android-10”.
  9. Run your project. You should see the Qt “Q” logo against a dark back ground, then a message about Ministro needing some libraries. Then you should see this;


  10. This will go on for a number of minutes as Ministro downloads whatever it needs. This is a one-time deal for all your Qt apps. You will need to install Ministro on any device you want to run your Qt app on, obviously its the runtime manager for Qt apps on Android.

You should see your app in the emulator’s screen. Start coding your award-winning app with Qt. Its a pain in the ass to set up but I found it a bit less of a pain compared to app development with Google’s adt, which would be an on-going torture. Should improve and a lot of these steps should be unnecessary as Necessitas matures.

I’m With Android Now

05/02/2012 § Leave a comment

A friend of mine whom I greatly admire recently announced that her employer had told her team to start writing for the Android/Dalvik platform. I notice adverts for a lot of postions around here for Android developers, so I decided to give the situation a closer look. Well, I can say that after a few hours of messing around with the Eclipse/ADT combo, its really not that bad. The installation process is rather tedious, but once you get it all together its pretty sweet.

I first installed the whole kit and kaboodle on my Mint Linux rig, and it works, but I think I need to install the whole mess on my Mac. Eclipse is the only environment I’ve installed on this netbook that runs as slowly as it does, and the Android emulator is like molasses on it. But it was pretty cool to see it fire up and run the example program.

I’m no stranger to Java, I made friends with it back during its inception, JDK 1.0 babay. Since then I’ve watched with fascination the added functionality (JSP pages, yay!), Tomcat come of age, the very welcome JMS and enterprise stuff, all of it. So looking through the code was like weloming back an old friend. Aside from all the Action objects there’s been nothing in it that’s been terribly frightening. Even the XML layouts were familiar. I think this is something I could get used to.

I’ve been meaning to jump on Android development anyway, there are a number of applications I would like to have on my phone, cheif among them is a password database. This is the primary, number one must have application for me. Using firefox to keep track of the credentials for the web sites I visit is fine, but I have more passwords I need to remeber than that. I have 3 machines here, plus I encrypt all my media, so that includes a 1.5 TB USB drive that I use for back up and media storage, plus a number of smaller drives for convinence, again, all encrypted. Plus I have the credentials to a number of web site back ends I have access to, source code repositories, bank account numbers, pin codes, telephone access codes, and on and on. Many more than I care to keep in my head. So I record everything I need on a simple note pad on my Android phone. I do this becuase all of the apps that I have cared to sample to do this sort of thing carry much more crap with them than I care to deal with, or the interface is rediculously complex, or they don’t encrypt the data I’m storing, or so on. I want this app to do one thnig. Well, all right, two. I also want it to sync up with a desktop app I’m envisioning, via a simple web service, I haven’t really worked out the details yet. But I have a list of wants and needs and if I just write it myself I’ll get exactly what I want. Plus, if it seems good to me, maybe I can put it on the Android market, oh, excuse me, this week its called “Play”, and that will look good to prospective customers. So that’s a win.

I’m kind of exited, and when its done I’m hoping to leave a ‘things went better than expected’ comment.

There are a lot of tools and freely available ways to develop for Android, one of them I’ve looked at briefly is the Objective C tool, it looks interesting, and I understand its the compiler of choice for the iSDK, which is another platform I should look at, but I don’t have an iPhone, all my testing would have to be through what ever emulation is available for that platoform unless I decide to get one. Probably not going to happen real soon. I think I’m going to install the Eclipse/ADT suite on my Mac and see what pops up. More as more developes.

Hacking The Gnome Desktop

04/05/2012 § Leave a comment

When I did a search in google images for ‘Gnome Desktop Development’ this came up, and I liked it.

I hack for fun, personal growth, and profit. Right now I do a lot of it for personal growth, and I believe that’s important. There’s always something to learn. I also think there’s lots of room for more native Gnome apps and I really want to contribute to the stable.

My personal development cycle goes like this; I get idea or I identify a personal need and start some prototyping. I first change my ‘Currently Hacking:’ banner on my web page with a simple bourne shell script I threw together, which serves to remind me what my goal is (I need that from time to time) and then I shell out to my development area in my home directory and run another script I wrote that creates a subdir with the name of the project, creates a subdir under that named ‘src’, touches main.cc in that, and the files that autoconf will want (“README” and so forth) in the top level dir. I then run Anjuta and import that new project. I then fire up a movie, usually a Samurai film (I’m currently watching NHK’s 47 part taiga drama Aoi Tokugawa Sandai) in a window.

This works well and I like it. I also like being able to work on something without issues, if there are any issues I really like to believe that the issues are mine and not because of any code down the chain that are out of my control. If the problem is ability I can fix that.

To teach myself Gnome programming I started working on a Gnome-native version of a windows application I like very much, Breakpoint Software’s Hex Workshop. Its a great app and I use it a lot. Even though it runs perfectly well under Wine I thought a native version for Linux was a good idea, and something I could get a lot of use out of, I would use it much more under Linux that Windows. I know there are a number of hex editors for Linux, GHex is the prime Gnome app in this space, but like I said I wanted to learn Gnome application development. Plus most of the other offerings are console apps.

I actually started ‘Hex Tool’ (for lack of another name, and I’m not licensing anything from BP) back in 2008 and got as far as laying down the main frame, menus, and views, including the main window and the two sub windows below that, and I had the toggle action working and everything. All three views can be toggled on or off, and the drag bars wrote their positions to a GConf client I had added, and I had even included a class that pulled the writable mounted file systems to a dialog, so the user could select a file system to edit, not just a file. It was to be a full-featured copy of Hes Workshop. I was really proud of that code.

I kept it in the repository that was associated with google code search, thinking it would be safe there for all eternity. Well, if you’re up on the news, you know that isn’t true. After the media spilled the beans on google’s shuttering of many of its free services I, after a year of not looking at the code frantically searched for it. Did I call it ‘hex tool’, ‘htool’, I couldn’t remember. Neither turned up a result. All that work is gone. Hours of work. Literally.

I thought ‘unfortunate, but ok’, I really needed to rewrite the thing using Glade anyway. I had placed and positioned all the menus and widgets in the GUI using the APIs and although I didn’t find it that incredibly tedious while I was prototyping, now that I have a better handle on what I needed to do I think I want to use it for this. Ok, so lets get to writing a gnome app.

Unfortunately, as I’ve commented before, GTKMM development seems to be on a minor hold. I say minor, but it really is a show stopper for application development. Application.h has been yanked from the current stable build, which includes application.cc, really the entire Application Class has been pulled from the kit, nothing else (that I can see). And here’s the weird part; not only is it missing from GTKMM 3.0, it seems to be missing from previous releases as well. I d/l’d a 2.4 tarball of GTKMM (which is actually 2.6 internally? I can’t keep their verisioning system strait) last night and its simply not there. That means many of the examples won’t build.

I’ve commented on it before, I know, and their are obviously ways around it (read on for how I know that). But since I’m learning, its difficult to know exactly what the solution is. I did an experiment last night to see where I could go and what I could do with what I have. GTK+ applications are fine, this is a GTKMM issue. Unfortunately (again), I’m not really interested in C development (GTK+ is the Gnome Tool Kit, C only.) I could, after a considerable investment in time, write a wrapper or some way around the issue, perhaps writing my own application class, I could write my own C++ framework around GTK+, but seriously? That would effectively be writing a competitor to GTKMM, and I really have no hope of doing that. I lack the talent, time, and energy to make a serious attempt. I would miss the nuances of writing such a thing for GTK+, it would really be a huge waste of time. And I want to write an application, not a tool kit.

I noticed Bakery is still in the repositories, so I did a little experiment to see if it still functioned. Bakery is a MVC implementation using GTKMM by the same team that wrote GTKMM, but they stopped development on it in 2009. The best excuse I could get from here and there is that it was redundant. I’m paraphrasing, I’m not exactly sure if that’s the reason, but it is a reasonable excuse IF one can find the better kit. I can’t. So I dunno. Its still in the repos, so there’s probably stuff out there that use it. So I installed it. All the examples run. I did a quick dependency check, no dependencies on application.h. Hmm… should I? Dare I use bakery? It would solve a few issues, I wouldn’t have to create my own MVC framework, I could just use that… in the end I decided against it, it will be pulled from the repositories some day soon, leaving my poor little app to suck dirt. And I think its best to stay on the cuve as much as possible.

I could use Qt, or KDE, but call me a glutton for punishment, there’s just something about GTKMM I really agree with, I enjoy developing with it.

THE FINAL SOLUTION: Application.h HAS been put back in the latest stable build, which is 3.3. I know, because as a last resort and after reading more commit notices from the team. I could find no human-intelligible explanation, just release numbers and yes, its in there, and so on. Well, I’m running GTKMM 3.0, would a build-level, incremental point upgrade kill me? It has in the past, I’ve tried this before and it resulted in a broken desktop. But actually some builds and some forced package installs. This time I don’t think I need to go that far, I just need to build the latest stable GIOMM, GLIBMM, and then GTKMM. I’m going to try it.

Wish me luck.

Into the Valley of the Shadow of Google

03/16/2012 § Leave a comment

Unless you hang under a rock you’ve no doubt noticed the higher volume of chatter regarding privacy, and Google. The deal you make with Google is in return for more relavant hits that line up with your search terms Google promises to track your use of the web and any personal information it can glean from it including your spending habits, lifestyle, anything about you it deems marketable.

Although consciousnessly aware of this faustian bargain I implicately have made with the search giant, I’ve gone ahead and used Google to find the information I needed. It was (and probably still is) the best way to find anything on the net. I’m starting to be more and more aware of the eyes over my shoulder however and as a consequence I’ve started using duckduckgo more and more.

One of the things that has changed in the world of marketing with the tech age has been an dramatic access to a new wealth of tools for analyzing user habits. These unabtrusive technolgies have really put the advertiser in the driver’s seat without putting an actual physical poll taker anywhere near the subject. I put Google first and formost on top of this cable of marketing spys however; it still stands behind its philosphy although I think there’s a real perception problem out among the unwashed masses. I feel for a company like Google in some ways, its difficult to do something well without getting back some measure of the effect your methods are having your target. I will not however exchange understanding for acceptance. There are alternative methods for gathering the data a marketer needs to understand and improve the process. No, I’m not going to research and list the alternatives, I’m not a marketer, and I don’t do that kind of work. I just know they exist.

With Google and its war chest its plainly obvious that if you want to be a successful online marketer it would pay to create the tools Google wants. If you’re like me and not interested in participating in helping the cabal swap your own personal information with each other like a used car though, there are some things you can do to make life much more difficult for them.

Be sure to install the tools listed here (scroll to the bottom of the page.) Most have plugins for the more popular browsers.

I particularly like Ghostery, its highly effective agianst javascripts and can block the entire domain they are served from. For main domain hosted scripts you’ll need to rely on NoScript. Ghostery also provides links on the domains it blocks that lead to information in the outfit whose script its blocking. Here’s some of the more egregious offenders by domain:

  • scorecardresearch.com – Full Circle Studies is a market research company that studies Internet trends and behavior. They work in conjunction with distributors and content providers to develop an anonymous, census-level analysis of Internet usage. Using data gleaned from its content provider partnerships Full Circle Studies constructs a census type view of visits to that website, which it uses to develop an understanding of broader Internet usage patterns.
  • effectivemeasure.net – Effective Measure is a web analytics company that provides data about visitors to a website. Their patent-pending Digital Helix technology addresses cookie deletion issues and unique visitor audience calculations. This allows advertisers and publishers to define and measure audience numbers accurately without duplication, and track data points over a specific time period.
  • pro-market.net – Datonics (formerly Almondnet) is an aggregator and distributor proprietary behavioral purchase intent, life-stage and demographic data. Datonics’ provides custom keyword-based segments to facilitate the delivery ads to online consumers.
  • media6degrees.com – Media6Degrees is a socially targeted advertising company. Powered by social media, they customize audience segments for advertisers, through social graph data gathered across social media platforms. Media6Degrees provides marketers with ad targeted delivery inside and outside of social media sites.
  • bkrtx.com – BlueKai operates an auction based, online data exchange. Unlike ad networks, BlueKai does not sell ads or impressions but provides on-demand data to networks, ad exchanges, agencies, creative optimizers, demand and sell-side platforms. Marketers and networks utilize BlueKai’s aggregate shopping and research data to improve ad targeting, while publishers can earn revenue as intent data providers. BlueKai partners with data solution companies including datalogix, TARGUSinfo, Experian, Bizo, Nielsen, Acxiom, and Polk to aggregate a large source of high performance intent data.
  • exelator.com – eXelate Media provides a marketplace for publishers to sell their anonymous data to advertisers for ad targeting. Aggregate data is sold to advertisers through its exchange and affiliate partnerships with ad networks and publishers.
  • cpxintereactive.com – CPX Interactive is a global marketing company. They provide advertisers and publishers reach, content and premium networks. They ensure advertiser success while monetizing 100 percent of publisher premium to remnant inventory. (What does that even MEAN???)

All of these services are delivered by external javascripts which connect and deliver usage metrics to the domains they originate from. With what I consider to be minor variances they all swap your personal information around like merchants at an oasis bazaar. While I was pondering how Ghostery worked I thought how nice it would be to simply put a list of domains I didn’t feel like snooping around my browsing in something that would block them. Well, that’s easily accompilished. Linux has a host of firewalls, I think ipchains is installed by default on many distros. But for this task a firewall configuration is a little bit overkill. I was thinking of something a little less overbearing to give me control of the domains that get connected with the requests I send out to search engines. So while looking at my systems tools I noticed MintNanny. Although not to be confused with Net Nanny, which is similar but a pay service, MintNanny can be used to peform the exact function I was looking for. And its fantastically easy to use. I’ve configured it to block this list of domains.

I probably sound like I’m wearing a tinfoil hat. But as an exercise fire up wireshark some time and take a look at the information flowing between you and google, or any other web service. The sheer amount of chatter is astounding. So if this growing concern is eating at you, one option is to simply stop them in their tracks.

Where Am I?

You are currently browsing the Google category at Twittech Conditional Behavior Modification.