Mar 17

Always chasing the next (software) utopia

 

The techniques, methodologies and tools at the disposal of those who build software are always improving. New tools are made available, new approaches are presented as the next best thing and often promoted as such. There is nothing wrong with new techniques, methodologies or tools, quite the contrary. We all benefit from such developments, if and when we can properly determine when to use them, considering their advantages and disadvantages.

Most software systems need to use some kind of data store. Traditionally, this data store was a relational database, but the picture has changed a bit in recent years, with the rise of NoSQL databases. NoSQL databases gained rapid acceptance, especially in high scalability scenarios, but they also seem a very interesting option when addressing another common problem faced by software developers – the object relational impedance mismatch.

Accessing the data store, especially a relational data store, as always been a source of problems for developers. Before NoSQL was another option, Object Relational Mappers, such as NHibernate or Entity Framework were offered as possible solutions to the impedance mismatch problem, while offering other advantages. ORMs are still used and their use will sure see a rise, and some ORMs now support NoSQL databases, as well. The overall goal of softening the burden of software developers, when accessing data stores, remains as a valid one, of course.

Sometime ago ORMs started offering Code First Design. While before the ORM would deal with an existing database, Code First Design offered the possibility of leaving the details of choosing and implementing the database structure to the ORM. In theory, this was just another step to set developers free from the tyranny of the storage layer. The problem is that when using relational databases, the mapping is basically a generic one, not taking into account the specificity of the relational database management system, not only in terms of the required indexes to enable the best possible performance, but also in terms of poor choices for the data types chosen to implement some table fields – it’s common to find situations where basically all string properties are implemented as nvarchar(max) fields, in a SQL Server database, which will mean accessing these fields will be slightly more costly to access than length limited nvarchar or varchar fields. The fact is that each relational database has specific characteristics that make generic design by a tool less adequate than a design that takes into account those specific characteristics. This starts with the database design (in Code First strategies) and continues with the usual issues associated with ORM tools, while exploring the database – that is, with the non optimal code generated when querying the database.

Of course, we can always argue that ORMs and Code First Design, as any other tool or strategy, needs to be applied in circumstances where their disadvantages are less noticeable and where their advantages recommend them. This is undoubtedly true. However, if we look at beginners books on topics such as .Net MVC, or tutorial material offered by Microsoft on its web development technologies, examples are almost always given using Code First approaches. I think this conveys quite a wrong idea to programmers starting their own path on such technologies and sometimes the consequences can be serious. I have seen it more than once, in real, production systems and those consequences are not always easy to overcome, at least without some effort.

If there were no performance penalties from Code First Design, or you could establish some degree of control over the generated code, I confess I would be inclined to take advantage of maintaining the data store totally transparent to the code. The reality is totally different though. I understand all technologies need to start, evolve and mature, but I would also like to see less promotion of not as mature technologies, at least without a clear indication of its caveats. ORMs will improve and Code First implementations will, too. At this time, however, the scope of apps where either is more limited then we would be lead to think, in my opinion.

Most systems have to be designed, implemented and deployed in scenarios where we have certain performance requirements and limited computational and financial resources. This is quite common in web applications, where I would think most apps are not cloud scale and need not be. The systems we develop need to be able to work within those limitations and that can be a bit incompatible with our utopias. Naturally, we always need to have utopias we can chase and they can be a driving force for evolution, but it should never be forgotten that we apply technologies in real systems and the negative consequences  of our own utopias should, preferably, be avoided.

 

Note: The image used in this post was obtained from here.

 

Dec 19

Software I use

My hard time choosing and managing the migration from the soon to be deceased Windows Live Mesh, made me think about the dependency I seem to have on some software tools and how hard it is to replace them and change the installed workflows around the tools in use at some point. From that, the idea of a post about my current software tools, highlighting some of the genuine gems out there, was a small step. So here it is, a list of software I use and some of the reasons I use it.

Personal Productivity Software

Office 2013 – this is the latest version of Microsoft Office. The big difference to the previous version, from my personal perspective, is the integration with SkyDrive, extending the ability to cooperatively create and edit documents to Word, Excel and Powerpoint, something that was already available with OneNote. OneNote2013 is clearly me favorite app, probably the one I use the most, after Outlook, which I use as my email client. OneNote is a superb app, which I actually loved when I first came in contact with it, at the time I bought by first tablet pc, back in 2005. I still use it everyday, either to take notes while I read books and articles, or to work cooperatively about ongoing projects with the other guys from Web2Automation.

I really don’t like web email clients, don’t think I ever will, and the native email client in Windows Phone 7.5, in my Nokia Lumia 800, works as a fine email client replacement when I am away from my laptop. When I am there, I use Outlook 2013, which has some annoyances yet to be solved, but which I find perfectly acceptable as email clients go.

For PDF handnote taking, I use PDF Annotator. It is a great tool for that purpose and was especially useful when marking student papers or providing feedback on PDF documents produced by others.

Software Development

The main tool is, naturally, Visual Studio 2012 Ultimate, although I still keep Visial Studio 2010 Ultimate on my desktop, which I still use for the occasional Php project, when I then use the excellent VS.Php add-in (which runs on VS 2010, only). I also use Microsoft Expression Web Studio 4, although much less frequently.

For SQL Server development, the main tool is SQL Server Management Studio, although I have been using SQL Server Data Tools a bit more. When dealing with MySQL databases, WebYog’s SQLYog is a great and indispensable tool. I use Team Foundation Server 2012 as my local ALM tool, but the very good and free Team Foundation Service will see increased usage, as I migrate to cloud based tools, since I am really getting to enjoy the benefits of accessing the info I need regardless of where I am. As we are using TFService at work, the move to use it personally is looking quite natural.

There are other tools that are quite useful, when developing. A superbly designed tool is my long time favorite Beyond Compare – when it comes to file comparison, it doesn’t get much better than that. LINQpad is another great tool, when messing around with LINQ.  I used EditPlus for quite a long time, when developing asp apps, and I still use it occasionally, when having to support Snitz related stuff. I have moved to Visual Studio as my default editor, even when dealing with ASP, since the integration with TFS is so much easier, but I thought EditPlus still merited a reference here.

For modeling, I have used Microsoft’s Office Visio, coupled with specific UML templates. Visual Studio is also looking like a tool that can be increasingly used for this purpose.

Another tool used mainly connected to my software development activity is SmartFTP. It is a great FTP app and it’s still a frequently used way to upload stuff to deployment servers.

Backup and File Synchronization Tools

My main backup software is Acronis True Image 2013. I started using Acronis TI back at version 8 and it has saved me quite a few times. I find it preferable to Windows native backup and as it has not failed me yet, I will keep using it. I image my own computers once a week, using two external drives, which I rotate. Just this week I started using Cubby as a file syncing tool, replacing Windows Live Mesh, after Microsoft’s announcement of Mesh’s impending death. As a file syncing tool, Cubby offers pretty much the same features as Live Mesh, but just for the Pro version, which I have subscribed. As Cubby Pro comes at least with 100 GB of cloud storage, I have started to use that space to backup selected parts of my data.

I like SkyDrive as a means to store and enable cooperation over Office documents. It’s really great for that, but the wrong choices made over the SkyDrive app made me choose a different option for cloud storage. Shame, really, as Microsoft could have done much better.

Security Tools

I have used software firewalls since I first connected my personal computers to the internet, back when the access was still done at 56Kbit/s. Even though my home computers run behind a hardware firewall, I find the protection offered by HIPS rather comforting. For the last 3 years or so, my HIPS of choice has been Emsisoft’s Online Armor. As HIPS go, you can’t fare much better than with OA, even if it can be a bit annoying, both immediately after installation and when installing software, but that is nothing that cannot be easily solved with its own learning mode. Emsisotf’s also produces a top of the line anti-malware product, Emsisoft Anti-Malware. The combination of EAM and OA provide multiple layers of protection, without putting any noticeable overall in the normal running of my computers, and so I find this a very good combination to run. I also use Malwarebytes Antimalware Free, on demand, for regular scans.

Communication, IM and Social Networking Tools

I don’t use IM much, but the only tool I use infrequently is Google Talk. Other than that, I use Skype for voice and video chat, and the free for personal TeamViewer, when I need to help someone or for a quick chat. My favorite Twitter client is MetroTwit, of which I use the desktop version only.

Other Tools

I still use Winzip as my main zip compression tool and use the Outlook add-in Winzip Courier to have email attachments automatically compressed. Another Outlook add-in that I find invaluable is Xobni – it’s much better than using the native windows search and it will index all my .pst files. One handy tool I became aware of through LogMeIn’s support is UnLockIT Free. It’s very useful to check what apps, if any, are locking a file or folder and unlock it.

This covers most my tools. I will probably update this post as I go along and other useful tools come to mind.