We , (me and my kid sis) have been recently thinking of creating an expense manager application. Why an expense manager? Well, because an expense manager would be useful for us to keep expenses and since we could not really find any good ones (UI , usability wise) on the net, for free.

Once we decided to make one, the question was, what tools to use? Which platform /  language and related tools should we chose? Well after ruminating over these for a few days here is what we came up with.

Platform Choice – iPhone is cool but Apple has entry barriers for development.

Bad apple

I was initially in favor of developing the application for the iPhone but there seems to be so many available. We were also discouraged from developing for iPhone by the fact that it required a hacked up VM or a Mac for iPhone application development.  Rumors, of how Apple tight fistedly controls, who could develop for the platform, along with an entry fees for being listed, took out a lot of enthusiasm from Apple development.  I kept having this deja Vu on how Apple missed the boat on the PC revolution, due to its tight fisted policies of the past regarding Macs and now it seems to be doing the same, all over again.

I do though feel that a mobile phone based application would have more no of users, since the expenses can be entered into it without fail, and therefore very convenient. Its a shame that Apple is playing so hard to develop for. It

Platform Choice – Re-invent the desktop experience

Since iPhone seemed out of the question, the desktop screen area and its powerful graphics cards seemed the next best for developing a cool eye catching UI application and to utilize the bigger screens for useful reports.

So, its a desktop app that we would do.

What language should i use for desktop development?

Next up the question is the choice of programming language / platform on the desktop, which we are going to use for our apps. I definitely cant use C++ because that doesn’t seem to make any sense these days with all those .NET and Java or python type easy to use platforms available. These are simply too productive to ignore and we are not making a performance sensitive application anyhow. So that brings our choice down to a compiled Ui friendly language like

.NET or Java

I believe a slick UI (User Interface) is going to influence users more than anything else, with customer’s bar of expectations set high, by the iPhone and Vista user experiences.  .NET with its WPF User Interface and close Windows OS integration, supported by the excellent Visual Studio development environment would make for a great platform is what i felt.

WPF UI

 

I did not want to use Java remembering its old slower Spring based User experience and since .NET looked much more slicker (due to WPF) and Visual Studio would  be a more productive tool to develop with than eclipse can be, for the windows platform. JavaFX is still too unstable and the tool support is lacking to move into it. (We did run a small evaluation and it does seem another six months or one year would be gone before some support of JFX development was available)

Most of our probable customers (and the future ones who might be ready to pay for a better version) are probably running Windows, so cross platform is not a big consideration. NET also plays into my expertise with windows platform and win32 API experience. So we might not get stuck with any platform issues.

Choice of Database

The next tool that we wanted to freeze on was a database that i would want to use along side my application. It would have to be free since i plan to ship my application for free initially. The ones i have heard of that i think might be useful here are Microsft SQL Express, SQL Lite, FireBird, MySQL, PostGres, Ingres and HSQLDB. These are the ones i have heard the most about. The one thing i have learned from my years of experience is that a more widely used tool would have most of its common problems ironed out and the public forum based support might be better too.

So which of these can be my database?

Multi-platform support is not a big deal for me since i have already decided to use .NET and WPF. However it definitely needs to support .Net well and it should be small. I cant expect users to make 100MB downloads to check out if a free tool is good. 6-10MB is what i think the size ought to be for this app download for it to be viable.

That preempts PostGres and Ingres which are both heavy weight. I did not have to try these out to know they are heavy weight because a two minute search on Google reveals how PostGres is already a competitor for enterprise apps and Ingres used to be one. Additionally Ingres seems to have lost out all backing and is being sold so that rules it out too.

MySQL ? Well that’s not free for commercial use . Plus i have also heard from multiple sources (mainly on Sourceforge), that the sources are a real mess and i know for a fact that till recently it did not have good SQL features like foreign integrity. Not too impressive ,I’m afraid.

HSQLDB is java based and introduces additional platform considerations. Not interested in that set of problems too.

This leaves SQL server, SQL Lite and FireBird

SQL Server is also heavy though not as heavy as PostGres. It comes to about 53 Mb in size for deployment and once deployed SQL server express behaves like a proper DB consuming lots of memory etc on the client machine.  But no, i would not want to deploy a DB server on my personal laptop just to keep my accounts.

SQL Lite vs FireBird

So it boils down to SQL Lite and FireBird. Between the both it boils down to IF we require the extra functionality offered by FireBird. SQL Lite is very small (230K) but lacks many SQL features like row/table locking and integrity constraints or stored procedures and such. BUT it supports seamless movement to a mobile environment if we require it.

FireBird is great but might not  be suitable for mobile environments. So the question i guess is will i require a mobile environment support, given my infatuation towards mobile development?

Do we require Mobile Environment support?

After some thought i decided to not muddle my development by imposing some arbitrary requirement that might not ever be required. I should develop for Mobile if i want to go Mobile and not ruin my desktop experience for the sake of some doubt-able future compatibility or requirement. I’m sure a better user experience can be developed instead if i can devote  the time saved in getting around SQL Lite’s limitations to the development of my application.

Database = FireBird
So FireBird it is and hopefully it plays well with .NET (http://firebirdsql.org/dotnetfirebird/) else we shall have to move to to SQL Lite.

What does FireBird have?

Well it has .NET support, deployment size is 2 MB + has XCOPY deployment. It has row and table locking, integrity constraints, stored procedure support for faster data manipulation) and VStudio .NET Visual Design Support.  It also used to be developed by Borland and that speaks for an impressive past history however wrong i might be.

It has all the pluses is what i felt, not to mention a favorable review in the past from a friend who was doing the same kind of research. That was four or five years back. Things can only be better now.

So that’s it then i guess. The best tools for the job are decided and all it takes is the time to build one. I shall keep this space updated with how good or bad FireBird turns out to be, when we really start using it.

Cheers !!!

 My first job was to program Windows GUI objects using MFC architecture. So i do “get” objects and OO terminology.

However i was stumped to read the following explanation, of a .NET Data provider product (aka data source connectivity classes), that can talk to databases and provide integration with the new ORM (Object Relational Mapping) layer, that microsoft has come up with for .NET applications

“It equips Microsoft .NET based applications, development environments, and programming languages with conceptual entity-based access to native and heterogeneous data sources. “

Conceptual Entity

Conceptual Entity

How soon can you say WTF?  I wonder why folks feel compelled to string so many heavy words together, when describing anything related to OO technology, in anything more than a  semi formal  setting. 

 I dont know if an architect / developer or a marketing personnel wrote that statement. In fact i did not find their site by searching on any of the weasel like words found in the description. In fact i searched for more practical stuff that i wanted my software to do, which thankfully was available on the page too.

This weaselization / complexfication of terminology seems to be a given fart to contend with, in the Java world and it makes me sick to see the cancer spreading to maybe the .NET / MSDN world too. Please, would anyone care to provider a linguistic inter mapping layer for conceptual to real word entities in the object oriented technology space?

I recently came across a requirement to dynamically generate a password on a Linux system.

Being a password, it implied that the text had to be truly random, which is a tough order of requirement for any home-brew algorithm, once you really get an idea of  on why its hard to generate randomness

Radom is hard

Radom is hard

The solution = /dev/random .

In theory /dev/random is a file you can read infinitely. However in practise you would find that reading this file would block every now and then until it has contents in it, generated randomly from device driver noise bits. So you might have to move your mouse or spin the disk etc to get some random bits into the /dev/random file.

A More practical solution = /dev/urandom

urandom can get random iput from from /dev/random, else it generates fairly randomized bytes for you, using a Random Number Generator Cryptographic algorithm, provided by a kernel module of the same name. AND, its never guaranteed to block. Talk about best of both worlds !!!

My random Text Command

Bytes read from random or urandom are not likely to be all ASCII and therefore requires to be filtered for ASCII, for which this was the chosen solution -

tr -dc A-Za-z0-9 </dev/urandom |  head -c 14

The problem in the solution

The only doubt that this simple solution envisaged in my rustic Unix mind was if this command line would exit after head had received the 14 characters it required.

If you do not know the answer, it is contained in my previous post on Unix shell pipes.

Happy hacking !!!

Next Page »