finally{}

all will be well finally

Archive for the ‘Programming’ Category

Here is a blog engine for Google AppEngine (and just about everywhere else)

with 3 comments

How about finishing the year with an achievement?

Wouldn’t that be a great feel-good motivator for the new year? Well it is.

As part of learning web2py, Python and Google AppEngine, I have been creating few applications. Earlier I created a checklist application, which I’m happy about. Since beginning of December, I worked on a simple blog engine. Requirements were based on my itch and they are :
1. Should support writing in Markdown. I have been using Markdown for all my writing. An additional benefit of writing in a pure text format is that you got a local copy of all your writings.
2. Just a single author system.
3. Commenting is non- essential. Ratio of quality comment that adds to the discussion to time spent on spam is low. I don’t mind taking the discussion to Twitter or G+, if required.
4. Have a minimal design. Yes, I want to learn CSS but I also like to limit the learning to few topics at one moment so that I can learn them well. Also I have found that minimalistic blogs are pleasant to the eyes :-)

Having laid out these simple requirements, I went about developing it. Due to workload and family commitments, I could spend only an hour or two at max a day, some days even that was not possible. But the desire to create something of my own kept my enthusiasm high. The intuitiveness of web2py design should be commended since I didn’t spend any time in picking up from where I left. There was no time lost.

I set myself a deadline – I should complete the blog engine before Christmas and should migrate my other biz blog before New Year.

When I started, I wasn’t sure I will be able to complete. But am happy that I was able to meet the deadlines I set to myself. In fact, I did better. My biz blog was running on wordpress and I was even able to import wordpress entries (though I would consider it was only about 90% success).

On 24th, I had the running code and launched the application on Google AppEngine. I called it Minnaedu – a Tamil word for online journal. I played with it few more times before announcing it in web2py forum on Dec 25th.

Soon after I worked on making it work outside of Google AppEngine. I was hosting my biz blog on webfaction servers. Though webfaction doesn’t provide quick-install method for web2py as they provide for django, they do provide a script. Few clicks here and there and voila, I got my biz blog in my own blog engine.

That is when I understood the power of web2py – I could run the same codebase on Google AppEngine and webfaction (only change was database connection string).

This blog is still running on wordpress. Migrating this to minnaedu is less priority than getting minnaedu well tested and having the deployment taken care by fabric.

Overall it is a great way to finish the year.

Wishing you create something useful for all – you and the tribe you chose to be with.

Happy New Year

Written by Joseph Jude

December 28th, 2011 at 11:20 pm

Posted in Programming

Solo Developers Aren’t Just Programmers

without comments

Back When I started in software field, in early 90’s as an employee, it was enough to master a programming language – in my case it was C and Visual Basic. You needed to know these languages really well and I did. In fact, I would program for others, for free, just to learn various aspects of the language. Once I wrote a program to control arms & legs of a robot, just to learn serial programming in C; another time I created dlls in VisualBasic that could be used in PowerBuilder to send emails.

But then I became solo and quickly I realised that solo developers don’t enjoy the luxury of that silo-expertise.

As a solo developer, you are required to master a whole gamut of software tools. Its difficult but not impossible. Mostly we know the challenge and ‘know’ we can handle it. After all, all of these are still software.

What came as a surprise to me and am sure to others in this flock is that suddenly you need to master so many other non-software skills.

You are expected to have good, if not excellent, communication skills – and many fellow programmers will admit it’s a nightmare; and you need a knack to close a sale, which includes among many others strong negotiation skill.

Being in India, I am aware that some, if not most, of these tasks can be outsourced. But even that requires these non-software skills like contract negotiation and cash-flow management!

So what I’m saying is, when you transition from an employee-programmer to a solo developer, you are no more a programmer. You are a businessman. Earlier, you realize it, it is better.

Written by Joseph Jude

November 12th, 2011 at 5:50 am

Is Slug A Necessary Feature Anymore?

with 10 comments

No doubt slug had its usage in driving SEO traffic. But in the Internet world dominated by Twitters & Facebooks, is slug still a necessary feature?

I’m pondering this question as I develop 123-check, which, I hope, will have all the checklists at one place.

Let me tell you why I think slug is not necessary.

To start with, implementing a slug has an overhead.

First the overhead of programming it. In a framework like Django or WordPress (yes, WordPress is no more just a blog engine), enabling this feature may be just a matter of few lines of code or few clicks to install a plug-in. But if you program in web2py, it is not an out-of-the-box option. You need to spend time developing it.

Secondly, there is an ongoing overhead of translating the title (or whatever else you convert) to a slug and then later, searching through a db with a slug (a text field search, so it’s slower than an id match). This wouldn’t matter much in most environments but in Google AppEngine (where I host 123-check), it matters.

I would pick up the overhead if it helps. But I am more than convinced that there is no reason to implement it any more.

Let’s look at how you land at a web page. For convenience let’s limit to content pages (which is what 123-check is) and leave out corporate informational pages.

The fastest way to reach a web page is via bookmarking. May be you bookmark 123-check because you know, you can find all the checklists in a single portal (and if you have not bookmarked it, go ahead and do it now. I will wait).

But there are times you search. I have not used Bing much, but Google sorts by +s & general popularity. Recently it also shows if someone from your circle shared or +ed a result. So you go ahead & click a result thrown to you by Google.

Wait, did you look at the URL of the web page? I bet you didn’t. Most of us don’t.

There is still another way you land on a web page, which is through activity stream of Twitter, Facebook. Ironically, you don’t even know the domain of the link you click because mostly its bit.ly or something similar.

Ok so the slug is not used by humans. May be its for machines! But let’s look at some of the players in the ‘content’ field.

Twitter gives a pretty URL to my profile page. So do LinkedIn & Facebook. But on GPlus, I’m just a number. Now that might surprise a lot of people.

What? The grand-daddy of SEO doesn’t have a pretty url in its social media site?

So if Google doesn’t go with Slug why should you?

Written by Joseph Jude

November 6th, 2011 at 2:56 pm

Posted in Programming

Tagged with , ,

Tools of Software Craft

without comments

Any craftsman is as good only as the tools at his disposal and the craft of software development is no different. To produce his best efforts, he should have the best tools that he can afford. Fortunately, in software industry, some of these best tools are free.

If you are on the search for a tool, know that no tool or framework is so comprehensive to cover an exhaustive use-cases. So whatever choices you make, it is likely that you will encounter someone from the anti-camp. Hear their arguments, just be sure of your requirements. Otherwise you will waste your time in search of the best tool!

While we are at it, here is a related point: since no tool can meet all your requirements, you may have to learn another tool.

With that said, here is a list of the tools I’ve acquired and use:

Computer Environment: You might buy the best tools but if you have to run them on a lousy computer, your productivity is still hampered. I have been using a MacBook for the past three years and I don’t regret the investment. Why? Because it just works. Do yourself a favor and get the best computer you can buy.

Programming Language: Another important choice for software developers is the programming language, since you have to literally live with it. Of all the languages I have used, I prefer Python. It is simple, hence easy to learn; it has got great community around; got many frameworks for both desktop and web development; and an added advantage of a simple programming language is that when you return after a break, you can quickly pick-up and move fast.

Virtual Environment: Without an virtual environment, changes you make impact the main installation, sometimes disturbing the system behavior. Virtual environments give you the flexibility of experimentation & isolating your experimental changes.

I use both virtualbox, which is a full fledged virtual emulator and virtualenv which is a python virtual environment.

Wireframe Sketchers: It is better to visualize the design before writing a single line of code. That will limit the cost of changes later. I play around with many desktop-based & web-based tools for wireframe but I keep returning to pencil (the real paper & pencil and the simple Pencil extension for Firefox)

IDE/Text Editor: Integrated Development Environments are packaged with tons of tools to assist software development. But, I find them bloated for a Python based web development. A text editor meets almost all requirements of python based web development.

Recently, I switched to TextMate and I am happy with it. It comes with lots of bundles that ease your way of working.

Frameworks: Frameworks provide a means for all the common activities of software development like UI design, events controllers, DB access and session management (in case of web apps). That said, frameworks can also be restrictive, so ensure the frameworks support the use-cases you have in mind.

I regularly use wxWidgets for desktop programming & web2py for web development. They are not perfect and there is always a better framework; but they fit my needs.

Source Control: It is suicidal to start software development without a source control tool, even for a solo-developer development (like me). There is an associated benefit of using a source control system: using commit comments, you can keep track of your progress in implementing features & fixing bugs.

Mercurial is my choice for source control. On mac, I use Murky as the mercurial client.

Bug / Issue / Features Database: Bugs & features should be collected in a single bucket rather than being littered in papers or in text files. Most of the version control systems provide a bug tracking system too.

I use the bug / issue database that comes along with Bitbucket.

(Automated) Testing Tools: after a certain threshold, it is impossible test all features manually. you should automate as much as possible and resort to manual testing only for those aspects that need to be tested manually like look & feel of the application. There is a whole lot of testing tools available depending on the aspects of testing, for example functionality testing and load testing.

I don’t have a choice or a preference when it comes to automated testing tools. I’ve used Python unit-testing, Selenium and now learning Robot Framework. But I’m still on the look out for a better (read one that makes functional & load testing easier) testing tool.

Hosting: Web applications need a hosting environment. For my simple need Google AppEngine and WebFaction are sufficient enough.

I’m eager to know what are the tools you use? Leave them in comments.

Written by Joseph Jude

October 11th, 2011 at 10:35 pm

Posted in Programming

Tagged with , , ,

Simplify Your Life With A Simple Application

without comments

All of us want to excel in the domains that we practice – be it photography, web development or teaching. But sometimes it hits you that these fields have become too large for us to handle.

It is not just that the domains have become too large. Now, we are expected to posses skills in many of the associated fields to be successful. It is not enough that you can focus and capture amazing pictures, but you need to be able to persuade clients to engage you for assignments, negotiate fees and also effectively manage time.

When all of these crowd your mind, you tend to forget things – some times even the crucial things. That leads to disasters which can’t be forgiven, because you knew you had to do it, you knew how to do it, yet forgot to do it.

That is how proposals are emailed to wrong clients and product upgrades are done without shuting down email servers!

But is there a remedy? Can this be solved?

“Yes,” says Atul Gawande in his book, The Checklist Manifesto. If not obvious from the book title, he recommends us to use checklists.

I stand by checklists, because I use them and I have found their effectiveness.

Because I’m convinced of the effectiveness of checklists, I have created a web-application to be a repository of checklists.

It is only the first version. But you can already create checklists and tag them. I have list of additional features to implement (like delete, modify checklists, share in social media etc.), Still you can mail me your suggestions.

Now its your time to go and create checklists, because you don’t want to make stupid mistakes.

Written by Joseph Jude

October 3rd, 2011 at 5:55 am