You Cannot Depend on Cloud

Having files in cloud had became a norm. I myself have DropBox, SugarSync, Google Drive and SkyDrive accounts. Every day I rely on them to get my files and synchronize them across my devices.

It gets even worse on tablets. Most of them, regardless whether they are Android/iOS/Windows, rely on cloud storage quite a bit. And why not? Cloud services have became so reliable from technical point of view that any data loss is highly improbable. Solution that requires no backup is finally there.

Unfortunately all those technical accomplishments are irrelevant. TechDirt brings quite a few stories of cloud data loss. And it is not because of technical glitch but because of false copyright claims.

Copyright holders have been quite active in auto-detecting infringing files with most (if not all) cloud providers. If they find unauthorized work they delete it and you get one strike. Few more illegal files later and you might find yourself with blocked account. All your files are gone.

Annoying thing about copyright claims is their “shoot first, ask questions later” approach. It does not matter whether file is really infringing. All that matters is that some automatic bot thinks it does. And than you need to jump through hoops proving your innocence. Even with best efforts and in case of obvious errors that can take days. While all your data is held hostage.

Cloud services are integral part of life these days and almost every computer has some data up in the sky. But do not think that your data is safe just because someone else takes care of it.

Cloud is not a replacement for good backup.

Team Foundation Service

Illustration

Source control is something that every project needs. I do not care whether it is simple Hello World app or next Office. If you don’t have it under source control, you are doing it wrong.

For a while now I have been advocate of Mercurial. Nice distributed source control with acceptable UI under Windows and with lot of options for online storage (BitBucket being most popular choice). And it integrates nicely in Visual Studio (VisualHg plugin).

If your work completely revolves around Visual Studio, there was always option of using Team Foundation Server. It is good centralized source control system deeply integrated into Visual Studio. As a bonus it also offers quite a good deal of bug ticket management and scrum planning. It tries to be one solution for all project needs, and it is rather successful in that.

Downside is infrastructure. Installing Team Foundation Server is not too difficult but it does require separate server, setting up backup plans and at least though about access. This is not too difficult when dealing with local team but if you have someone outside of your network everything gets painful and expensive pretty soon. Not a problem for organization but usually unscalable obstacle for someone setting it up at home.

Things change a bit with new Team Foundation Service. Sales department boost it as “cloud-powered source code management” but developers can really just look at it as Team Foundation Server on Internet. That means that most difficult part of work is done for us. Server is up, somewhere where everybody can reach it and someone else takes care of backup.

Features include centralized source code management model that is really easy to use and almost anything any scrum team would need for managing project. Yes, that includes tasks, backlogs and all that beautiful stuff. Of course, bug management comes out-of-box too. Really no difference to standalone Team Foundation Server.

Thing that I like the most is fact that it is free for up to 5 users without any additional limit on number of projects. That makes it really viable for hobby project done by single person or even really small teams. Paid plans will be announced in 2013. Before that time even huge teams can get some of a free action.

Yes, BitBucket offers same amount of free users and you can get free scrum and bug management systems also. However, Team Foundation Service really shines in level of integration. I am not aware of any other solution that offers all this and that is so easy to setup.

If your development world is rooted in Visual Studio, life can hardly be better.

A Bit Annoying

Illustration

As my kid started with school I felt more and more pressure to get a printer. Since I am here temporary and carrying printer across ocean is not my sport, only choice was cheap inkjet. Few twenties later I had my Brother MFC-J435W. Nice multi-functional device with separate ink cartridge for each color (CMYK).

With inkjets one always needs to be aware of ink level since those things can drink a lot. Therefore almost all have some sort of warning when ink gets low. Brother moves that to completely new level.

Already at 50% it starts complaining about ink getting too low. Since this is probably time to get a new cartridge, simple notice is probably in order. But this annoying window just keeps on popping at every boot, at every print, and few times for no apparent reason. And all that while I am still at 50% capacity. WTF?

Yes, I do expect printer to warn me once it is low. But being at 50% is nowhere low. And aggressiveness of these warnings can lead me only to conclusion that someone was on speed while writing this code. I propose getting him into rehab and forcing him to use printer with all these popups.

Frankly, this printer could do without this warning completely. It has nice display just above paper output and there (when ink is low) you can see warning too. And it is big yellow exclamation mark that is hard to miss. Perfect and unobtrusive solution. I am not sure who needs this software solution at all.

And this is not only beef I have with this printer. I went ahead and upgraded its firmware few nights ago. During WHOLE procedure printer kept beeping few times a second. Not because of error but because some smartass though it to be nice touch.

Quite often software actually works better if you skip a “feature” or two.

QText 3.30

QText screen

One feature that was survived unchanged through versions and versions of QText was search. You could search only within current tab and that’s all you could do. Even when folders got added search was still limited to single file.

Well, not anymore. Finally you can search across all folders and files. Or you can limit search to current folder only. Choice is yours. Only real limit is searching through encrypted files which is not supported for security reasons. For them search will work only when you have them currently open (and thus decrypted).

Happy searching.

ListView Iterations

If there is need to iterate through ListView items, I often see following code:

foreach (var item in listView1.Items) {
    var itemX = (ListViewItem)item;
    //do something with itemX
}

Unfortunately C# compiler is not smart enough to notice that item is actually ListViewItem so it keeps it as Object. And thus we need to cast it to our desired type.

Well, actually there is no need to do this. One just needs to remember live before implicit typing with var came:

foreach (ListViewItem item in listView1.Items) {
    //do something with item
}

This still works and it definitely looks nicer.