Trello is great

Trello from Fog Creek Software is a really great tool. I recommend almost everyone I come across to start using it right away.

One if the first things I loved right away was the ability to log in with my Google Account. Right there it saved me yet-another-account-login. I am a bit disappointed with the fact that the Android app require the login to my Google Account instead of just snatching it from the account settings on my phone.

Well – back to Trello. As a planning/organization tool it is virtually limitless. I have a list of games I want – organized by platform and priority. I have a board of movies that I want to see – and organized by where they are available right now. I have a board of pet projects organized by “platform”. And those are just some of the personal boards I have. Scaling to work proportions especially when developing software – there is a lot of potential. You can read this article from Skroutz – I really like the way they did it!

The main reason for me to go on about Trello today is their announcement that users are now able to attach documents directly from Google Drive – it is an integration most welcome – I am a die hard Google Drive user and this will just strengthen my organizational powers.

Building a file system scanner

Like many other people my collection of digital files include a large amount of data. The problem I have at the moment came around when I had about 50k digital images taken with various cameras and/or phones. First of all – this needs to be organized. Secondly – there is a problem with stuff just piling up and taking up expensive space.

Images and video along with large downloads has a tendency to get stuffed away in a folder far away never to be thought of again. To address this problem and identify these files I have made the Java Filesystem Scanner.

The program will scan through a given location and output a CSV file with information of all the files found along with a hash (SHA1) of the file content.


Personally I pull this data through ABC Analyzer and organize files by size and inactivity period – but a simple spreadsheet should do for most people.

The program can be found on GitHub.

.NET development is broken

Since I started developing .NET programs in the Windows desktop platform it has been clear to me that something is terribly wrong.

When starting up any version of Visual Studio and starting a new C# .NET Windows Forms project you will get a main method that defaults to instantiating and showing the main window form. This allows the developer to drag-and-drop controls, buttons etc. to the the form and set action handlers to those items where it is needed. A save file button can spawn a save file dialog to let the user select the file – and then code can be added to actually do the writing. File writing – and I/O in general – can be very time consuming and this quite quickly exposes the flaw in this development model.

Pause. Look at the Wikipedia article about the Message loop in Microsoft Windows. Play: This is the way that EVERY Windows program works. If you have ever been through the development process described above you will most likely have encountered the “(not responding)” message in window titles in your form. Look at the code snippet in the mentioned article. The reason your program is not “responding” is that it is not currently processing messages but doing I/O eg. – a problem that is solvable but requires going through loops again and again.

The problem arise since the .NET UI handling (and therefore the event handling) is single threaded. When an event handler blocks the thread no UI updating and no message handling is done. The obvious resolution is to spawn a thread and do the work. But in 90% of the cases I encounter I need to display something in the UI as a reaction to action in the event handler or I need the UI to wait until some operation is done – and the UI can’t be changed from another thread!

The best solution I have found so far is to juggle threads and be very careful about when and where UI and threads are mixed – and just accept that the development in .NET is somewhat broken on the desktop.

Coursera – Free education

Coursera is great!

I have taken two courses so far and the input is at level with most other universities that I have tried.

I can only recommend that anyone go over the course list and just sign up to something they like – it is free (beer) and no strings attached.

The plethora of web development platforms

For the last couple of weeks I have been evaluating different web development platforms in ordet to select the best (given a specific set of requirements and a well defined team of developers) platform for new SaaS products and services. There are many parameters to consider but what strikes me hardest is the vast amount of technologies that can be selected.

Web develment has a very large amount of platforms, programming languages and presentation technologies. I started listing the possibilites and grouping them into app layer position – which ended up being an utter mess. Here is the unedited list:

PHP, Smarty, CakePHP, Symphony, ASP, ASP.NET, MVC, Ruby, Rails, Smarty, jQuery, Backbone, Spine, Google App Engine, Azure, AWS, Heroku, J2EE, Node.js, Bootstrap, Go, Python, Spring MVC, C++, Django, Clojure, SQLite, MySQL, Postgress, NoSQL, Apache, IIS, Tomcat, JBoss, Java.

No matter what web developer I talk to – everyone has their own prefered combination of the above – personally I really like them all – but I have a tendency towards PHP.

Rails on Mountain Lion

Two weeks ago I had never read any Ruby code. I had mostly cast Ruby (and especially Rails) away as a hipster programming language/framework.

But my opinion has changed. I actually really like Ruby as a programming language. There are many nice features – but the fact that it is an actual scripting language where classes and functions are very easy to use and a natural part of the environment. There seems to be endless possibilities – console data crunching, web development, web service development, interfacing with other environments, e.g.

I am currently doing some Rails development and wanted to use my Macbook Air. It seems that this wasn’t really that easy. I am not sure if Ruby and gem are installed on default or if it is because I have XCode installed – anyway – having them installed didn’t really help. When I tried to install Rails it still failed. It turned out that all that was needed to make it running was installing “Command Line Tools” in XCode. Go to XCode -> Preferences -> Downloads

After that I still had some issues with different gems and this led me to Jeweltrybox which let me install the 1.9.3 version of Ruby and gems to go with it which made all my example projects run perfectly!

If it works don’t fix it

WordPress… !

WordPress is one of the most used CMS’s out there. After spending some time looking at templates/themes and plugins – the verdict is clear: It is a mess!

No right-thinking software developer would come up with this in a modern world! Every time I stumble upon something clever in WP I am almost instantly ripped into a new nightmare of obscure function names and magical doing!

That being said – WP works! And it works damn well!

My thoughts on the complexity and spaghetti-like coding style is that over time many developers and many design strategies has been explored – which naturally leads to the current state of WP. But WP is also very very good at what it does. As a blogging platform there you need to put very little effort into tweaking an already existing design to your desires and you are up and running in no time – totally separating the blog-writing and letting the non-techies take care of that. When dealing with more traditional websites WP also seems kind of limitless and both blogging and traditional web delivery can be tweaked into delivering a very high performance web experience both soothing the end user and the server resources.

My conclusion is that many will no doubt try and make new and smarter systems to take WP’s place on the web – especially to clarify design and maybe even cut the learning curve – but they will most likely end up right where they wanted to leave – looking like WP, feeling like WP – a feature cut would most likely result in a less complex system but that will probably cost a lot of users. Raising the level of abstraction – clarifying code and maybe even making it OO would most likely be at the cost of performance. Also – considering the development effort put into WP I can’t imagine any non-opensource project trying to compete – the amount of work hours needed to simply catch up is enough to make the pricetag sky-rocket – and WP is still free.

Finally realizing that WP actually works leads to the never dying saying: If it works – don’t fix it!

Make money – not friends

I’ll admit the title is a bit harsh – it is quite ok to make friends. There is absolutely nothing wrong with that – and making some friends could actually lead to making more money – after all well functioning teams are more productive.

But there is a limit!

When the boss can’t set an employee straight. When two co-workers don’t require each others full and concentrated attention. When process and goals – be short or long term – is sacrificed or forgotten because it is the “easy path” and it saves the bitter confrontation with a co-worker and the following un-friendliness.

Let us all step away from this slope and into the future – the future where we constantly push each other to deliver – and deliver better and faster – while remaining able to talk outside work-stuff in an adult manner when needed. To be honest – a co-worker pushing me to reach a deadline and constantly reminding me how important my work is in the whole process wouldn’t inspire anything but respect and understanding – pair that with a mutual interest and we’ve got a winner!

Dilbert.com

Localization in Excel

My native tongue is danish. Being a software developer has naturally forced english upon me and in my daily work I prefer using software/websites running english only (with a few exceptions).

For a couple of years I have been using Excel on both my home computer (english setup) and on my work computer (danish setup) and a couple of times I’ve had Excel files shared between them. I am surely admiring the fact that every part of Excel seems to have been localized! It is amazing!

When a number or formula is typed into a field in Excel it is typed using the current locale. The files saved containing localized numbers and formulas is opened on a different computer running Excel under a different locale with absolutely no problem.

Consider the following example:

This example uses the “FLOOR” function on a decimal – both localized – the function is called “AFRUND.GULV” and the decimal is using the regular danish separator (comma). When this file saved it can be shared with every (compatible) version of Excel running any locale imaginable and it just works!

All the new Office formats are just ZIP files containing (primarily) XML files. So I took a look inside the one just saved – and this is what it contained:

The content of the cells is actually the non-localized version of numbers and/or functions – which leads to the conclusion that the localization is simply a layer of abstraction inside the UI and all typed localized strings are converted back and forth all the time.

In my opinion this is actually quite amazing. The complexity of localized elements the user is able to throw together inside an Excel document makes this localization task a big one – very big! In ABC Analyzer we let the user create new columns in their data using formulas – much the same way as Excel – but the level of customization isn’t nearly as high as in Excel. Making our formulas and functions appear localized would be a nightmare – I am quite sure I will never (willingly) go down that road!

This weeks reading

During the past week I’ve read a great number of interesting articles. Some of them are listed here: