finally{}

all will be well finally

By

Tools Used To Build BlogEasy

New applications are never built from scratch; they stand on the shoulders of others. I’m thankful for all of the tools, without which I couldn’t have built BlogEasy, an offline Blog editor for Mac. Here are the list of tools I used:

  1. Xcode : The default IDE for building Mac OS & iOS apps. The recent version 4.4 is an integrated suite bringing code editor, interface builder and analyzers into the same tool (& largely into same window) and thus making developing applications a lot easier. Submission to AppStore is also integrated to a large extent.
  2. Bitbucket: Revision control system is the backbone of a development eco-system, more so for a lone developer. Of the available web based RCS, I find Bitbucket’s free plans suitable for my needs.
  3. Source Tree: A Mac client for Bitbucket. I used to manage with Murky earlier, but Source Tree is more flexible.
  4. MultiMarkdown: Almost all my writing is in Markdown, as it is easy for writing as well as for reading. In the first version of BlogEasy, I had used Sundown markdown parser. But it doesn’t contain extensions for handling footnotes (a feature that I think should be part of Markdown core). While searching for a Markdown parser with extensions for Objective C, I came across MultiMarkdown by Fletcher. So now, BlogEasy supports all features of MultiMarkdown.
  5. XMLRPC Library: In its current form, BlogEasy is an offline blog editor only for WordPress. It relies on its XMLRPC API, for integrating with it. There are only few XMLRPC frameworks available for Objective C. The one by jgm seems to be the grand-daddy of all of them. It is easy to integrate, only make sure to leave it out of ARC.
  6. Sparkle: I’m distributing BlogEasy within AppStore as well as outside of it. For the non-Appstore distribution, I need a way to notify updates to the apps. Sparkle is the popular (and probably only one) framework for this. Contrary to my expectations, it took me a long time to integrate with Sparkle. I’m still not sure if it is integrated well.
  7. Amazon CDN: Non-AppStore binary is hosted in the Amazon CDN. I’m using their one-year free offer.
  8. WordPress: Of course. I’ve been running few blogs on WordPress, this blog being the oldest. BlogEasy grew out of ‘scratch-my-own-itch’ for quick & easy posting. WordPress has made it easy to install & maintain a blog. These guys should be commended for a job superbly done.

What other apps will make developing Cocoa Apps easy? Leave your suggestions in the comments.

This entry is posted with BlogEasy, a Blog Editor for Mac.

By

Great Free Apps For Your New Mac

There is a perception that Mac OS is very expensive. It is true that the hardware is expensive than other available PCs; but it is also true that the stability of the system compensates for the price over time.

On the software side, there are some great paid apps, like Omnigraffle, but Mac OS developers have also produced some great free applications. Here are the free applications that I use regularly:

Netnewswire: A comprehensive offline RSS feed reader with Google Reader integration. Does one thing and does it well.

Chrome: A great, cool browser from Google.

Notational Velocity: nvAlt is my default note taking application, containing hundreds of notes synced with Simple Note, which in turn syncs with my iPhone, making all of the notes readily available all the time.

Dropbox: The service that made cloud sync as a fashion.

Skydrive: As a user of MS Office for Mac, Skydrive becomes default choice to store and share MS Office docs.

Skitch: When I have to annotate images and screenshots of web-pages, I turn to Skitch.

Evernote: This used to be my choice tool for saving notes, but now that I use Notational Velocity, Evernote is only used for rich text notes (the ones with images and tables).

Mindnode Lite: This lite version is sufficient enough for my needs of mind mapping. My needs are simple like the one, I made for book review about The McKinsey Way.

Unarchiever: This little tool understands every compression format including .7z.

Yemu Zip : When Finder compresses a file or a folder, it includes quite a lot of hidden files. Obviously, when it is unzipped by your Windows colleagues, they get confused with all these hidden files. Yemu Zip zips without these hidden files, keeping sharing of files clean.

Skype: Video conferencing from desktop. Seems to work even on lower bandwidth.

Skim: In my profession, I need to read lots of documents, mostly in pdf format. Skim makes it easy to annotate as I read through. It has the feature to create a pdf file with annotations or export annotations separately as text file.

Appcleaner: Uninstalling in Mac is as easy as dragging the app to the Trash. But the configuration and other support files are left behind. Appcleaner ensures all files are deleted.

VLC: Player of almost all video formats available today.

Kindle: e-Book reader from Amazon.

Flux: Tool to automatically adjust lighting of your Mac so that your eyes aren’t hurt when working late nights.

Ommwriter: A minimalist full screen writing app if you want to write without any distraction.

Carbon Copy Cloner: Though Time Machine is the default backup utility for Mac, I somehow still stick to Carbon Copy Cloner. I’ve never tried to restore back from the backups but I do browse through the backup folders and I’ve found them to be okay.

Sync Two Folders: Carbon Copy Cloner is used for full backup, but Sync Two Folders is used for syncing photos & videos to another set of backup drives. It has features to simulate before real syncing which is helpful when you sync after a prolonged delay.

As web & desktop developer, I also use quite a lot of development tools. Some of the best free tools for software development under Mac are:

Source Tree: Source control client for both Git & Mercurial.

Xcode: Apple’s IDE.

Filezilla: File transfer tool.

What are the free tools that are not in this list, that you would recommend?

This entry is posted with Blog Easy, a Blog Editor for Mac.

By

Playing With Objective C & Cocoa

Ever since I switched to MacOS platform, the developer in me, wanted to play with the development suites of MacOS. I delayed gratifying this desire for two years. This year, I made a promise to myself that I will develop at least one desktop application.

With that promise made, I bought Aron Hillegass’ superb introductory book on Cocoa. I read & completed all the exercises, listened to many podcasts and disciplined myself to program daily.

As essential as it is, learning to use a development suite and acquiring programming skills is just one element of building an application. There are quite a lot of preliminary and peripheral activities you need to perform before bringing an application to public use, like finding an idea that you are proud to build and motivate yourself to go on, finding hosting and distribution solutions and not forgetting the promotion. Though I have experience in building both desktop and web apps, all of my apps have been in open source domain1 and so I don’t have much experience in hosting, distribution and promotion2.

To start with, I had to find an idea for an app that I will use. Decisions about hosting, distribution and promotion can wait3. I dabbled with the following ideas:

  1. Over the years, I have collected so many e-books and other pdfs. I would like an app to tag, summarize and take notes. Evernote does that but they follow a propriety format. Skim allows pdf note taking but tagging and rating the files is missing. As much as I wanted to develop a tool for this, it looked complex for a novice.

  2. I’m a retail investor (only Indian stocks) and have written few python scripts to pick-up stocks of interest. I could polish all of those individual scripts and build a good looking app. A glitch in this is, unlike the US, the stock feeds and their financial details aren’t freely available and hence long term viability of the app was of question. Also I’m not sure how many of the stock investors would buy an MacOS program; I’m of the opinion they would mostly be MS-Windows users.

  3. Photography is a hobby of mine. To improve photography skills, I like to view different photographs (taken by me or others) with EXIF details and histogram. Many of the programs that I tried didn’t have this feature but finally I bought Adobe Lightroom which is a god-send program for photographers.

  4. I have to often work with XML files but didn’t find a decent XML editor for Mac. Yes, any text editor can handle XML files but on Windows there are plenty of fine XML editors. But then again, targeting only one segment – developers, isn’t a good idea either.

  5. I maintain two blogs4, both in WordPress. One of the pains of blogging in WordPress is that posting via browser interfaces sucks. Many of the blog posts that I set out to write were still drafts on NV Alt, because of the clumsy interface of browser based publishing tools. Unlike MS-Windows, there are only few desktop apps available for Mac and of all the Mac Desktop tools I tried, Mars Edit is the best. But I decided there could be a place for a better desktop tool for publishing blog posts. So I set out to write one of my own.

Now that I finalized the app that I wanted to develop, I listed the major tasks to get an application done:

  1. Decide on app
  2. Design the app
  3. Write all Pseudo-functions
  4. Code
  5. Test
  6. Iterate 4 & 5 until complete

Writing an application for a real usage, in contrast to a text book exercise, is difficult. In trying a text book exercise, you can ignore or skip those parts that aren’t working, with a hope that you will understand as you go along. But in developing a real app, you can’t do that; you need to ensure that all the features you have selected for a version works together. So I listed all the features that I wanted out of the final app and then I categorized the features list into different versions.

Once I had clarity of the features required, I was able to go full steam into development. Since I also have a day job, I could work only over the nights and weekend. Still in a short time, I was able to get the first real app for MacOS ready for launch.

So here is Blog Easy, a desktop tool for publishing to WordPress from Mac. Though I have tested this only on self-hosted blogs, it should work well for the hosted WordPress blogs too.

I have tested the app extensively and using it to post to my blogs. But it is still in its infant form, so issues are expected. I request your help in improving the application. Here are some of the ways in which you can help me out:
1. Download the application, test it, use it and post your feedback in this blog entry or in your blog.
2. Spread the word through your social network and friends circle.
3. List features you would like to see in the features/issues tracker.

Here are the features already included:
1. Add as many blogs as needed
2. Write posts either in markdown or in html format (it converts Markdown into HTML only at the time of posting; Markdown support is limited to core functions and no support for extensions like footnote. So I wrote this blog entry in Textmate and copied the HTML in Blog Easy)
3. Save entries locally
4. Modify saved entries
5. Publish saved entries (you need to save locally before publishing)

Go ahead and give it a shot. I’m waiting nervously.

This entry is posted with Blog Easy, a Blog Editor for Mac.


  1. You can find my codes in bitbucket and google code.  ↩

  2. I developed an early version of Fotos on Net on wxWidgets, then called wxWindows as a cross-platform (for both Windows & Linux) photo album generator tool. To my surprise Lockergnome published a review on their own and it took off greatly. It was listed in PC Magazines in Greece, Italy. Though it was a freeware, a an US professor sent me hundred dollars. Amazing it was.  ↩

  3. Coming from a programming background, I consider delivery important than marketing; but of course it is different in management consulting and startup world. In their view delivery can wait; they want to sign-up as much customers as possible before they start coding. ↩

  4. finally, primarily a technical blog and certainties & serendipities, which lists my business learnings. ↩

By

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

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

By

An User’s Perspective on OSes: Horrible, Bearable and Adorable

My wife has been requesting, for sometime now, to configure one of the unused laptops at home for her. In between taking care of our two year old ever-active son, indulging in cooking delicious meals and watching over-stretched banal Tamil TV serials, she wanted to check emails, browse net and may be use a spreadsheet to budget & track household expenses.

There are two unused laptops at home – one quite old with Windows 2000 on it & another not so old with Windows XP on it. Both of them work but don’t recognize the home network and so don’t connect to Internet. I could’ve searched for drivers or tried to debug but the pseudo-geek in me overtook my senses and I decided to install one of the Linux variant. I thought, it will be a latest OS, so will detect all the hardware devices. I finalized on Kubuntu & downloaded the latest version.

Installation went smooth. As I rightly predicted, it detected all the devices and I was able to connect to Internet. Wifi didn’t work, but I decided it can be fixed later.

I did a quick test with the essential applications – Konqueror, Spreadsheet and Word. I even played a bit with the default games. It felt good.

It was time for some ego-boosting.

Only it was not.

When I observed her using the laptop and looked at Kubuntu from her eyes, I realized that the user interface isn’t polished; menus, buttons and dialog boxes appeared scaffolded rather than complete.

She didn’t like what I gave her. :-(

I had overlooked an essential aspect through this entire process. My wife is a normal computer user and she doesn’t care if it is a superbly engineered, open-sourced, freely distributable, community developed OS (or apps for that matter). She expects a smooth experience from the time she opens the lid of the laptop to closing it. She will hardly spend more than half hour daily. If she gets frustrated at initial tries, the laptop will remain closed.

With that realization, I apologized.

She was happy to leave the laptop. She went back to cooking lunch.

Then I took the laptop where Windows 2000 was installed and tinkered with it. Soon it connected to net, in a wired mode. When I gave it to her, she was happier.

But she could be even more happier.

She had used my Mac time-to-time and that is how her desire for a laptop started. It was cruel of me to introduce her to Mac and then relegate her to Kubuntu.

“I want a Mac”, she said without saying it.

That is when the ‘feelings-side’ of my brain, which is punctured for a man by default especially when it concerns his wife, woke up with a point:

If I’m callous, I will dump her with Ubuntu; if I’m indifferent, I will give her Windows; if I’m in love, I will gift her a Mac.

Now, if you will excuse me, I am going to the Mac store.