Git demystification

There are a few misconceptions I hear about Git that I find should be cleared up a bit, so here goes:

“To use Git you need to use the command-line”
Not necessarily: there are various graphical tools that come with Git, including git-citool, gitk and git-gui, all of which are based on Tk — which turns out to make them both very light-weight and portable. Almost anything you might want to do in a daily basis can be done with these tools.
Aside from that, for our Windows-using friends, there is Tortoise Git, which integrates Git right into Explorer.
A quick search on Google reveals a number of other graphical user interfaces for Git so no, you can do without the command-line if you feel more comfortable with a mouse.
“There is no central repository”
This is technically true, as Git is a distributed version control system so the repository you’re using is on your hard disk. That doesn’t mean, however, that you cannot have a central repository: I would recommend having a “canonical” central repository with code that has been properly curated and into which only certain people can push, and one or more “experimental” repositories, which you might see as you’d see branches in a central repository.
Still, if you want a central repository into which everyone can push, that is fairly simple to set up with Git. It’s not what Git was designed to do, but because it’s so flexible, there’s no reason why it wouldn’t work.
“You need SSH”
No, you don’t. You can push and pull over a Windows share (Samba) if you want to. SSH happens to be a great way of connecting to a server securely, using a pre-shared public key for authentication, and Git happens to come with something that pretends to be a shell but really isn’t — so users don’t get shell access to your server, but you don’t have to use any of that. You can push/pull over https & webdav if you feel more comfortable with that and, due to the modular nature of Git and its extensibility, it’s actually fairly easy to create a Git-over-potato-launcher extension (except for building a potato launcher that can effectively and efficiently talk to a server). Check the documentation for git-remote-helpers if you want more information about that.
“Git doesn’t integrate with my IDE”
Really? What IDE are you using? There are Git plug-ins for Visual Studio, Eclipse, IntelliJ IDEA, NetBeans, …
“Git is difficult to understand”
Under the hood, Git is a content-addressable filesystem.
If that doesn’t tell you anything, then understand that Git is optimized for the general use-case (checkout, modify, stage, commit). The staging step puts your changes in an index, which means you get to prepare exactly what goes into your commit, and you even get to edit it if you want to, before you commit it (using the interactive git-add).
Basically, when you commit something to the repository, you’re adding a single object to it that says “I started with this version and now I have this”. It does not say “this is what I changed”. Staging lets you prepare that commit object. That means that if you have two modifications in a single file but only want to commit one of them, you can.
Now, it’s true that some things in Git can be a bit hard to catch if you’re used to systems like CVS, SVN or TFS, but as soon as you start wrapping your head around the idea that Git history is basically a linked list of commits, each of which provides a complete description of the then-current version and its complete history (through the link with the previous commit), it becomes clearer.
“Using Git you have to rebase a lot, losing history”
I’ve been using Git pretty much since its inception and I have only rebased a branch three or four times so no, you don’t have to do that.
Git is really good at merging — it’s why it’s such a good versioning system (creating branches is easy, merging them is a much bigger challenge). I know some workflows prefer rebasing over merging, but I frankly think those are misguided.
Rebasing doesn’t lose history, though: it re-writes it on top of a different version of the parent branch.
Git discourages continuous integration
No, it doesn’t. While you certainly can work in isolation, continuous integration is not a question of everybody hacking on the master/current/root/main branch and inflicting their code on everyone else: it’s a question of integrating changes continuously, which pulling and good support for merging makes fairly easy.

Just give it a try, eh?

Posted in Opinions | Tagged | Comments Off on Git demystification

Three ideas you should steal from Continuous Integration

I like Continuous Integration — a lot. Small incremental changes, continuous testing, continuous builds: these are Good Things. They provide statistics, things you can measure your progress with. But Continuous Integration requires an investment on the part of the development team, the testers, etc. There are, however, a few things you can adopt right now so, I decided to give you a list of things I think you should adopt.
Continue reading

Posted in Quality, Software Development, Software Engineering, Software Testing | Tagged | Comments Off on Three ideas you should steal from Continuous Integration

Eliminating waste as a way to optimize

I recently had a chance to work on an implementation of an Arachnida-based web server that had started using a lot of memory as new features were being added.

Arachnida itself is pretty lean and comes with a number of tools to help build web services in industrial devices, but it is not an “app in a box”: some assembly is required and you have to make some of the parts yourself.
Continue reading

Posted in Anecdotes, Software Design | Tagged , , , | Comments Off on Eliminating waste as a way to optimize

Technical documentation

Developers tend to have a very low opinion of technical documentation: it is often wrong, partial, unclear and not worth the trouble of reading. This is, in part, a self-fulfilling prophecy: such low opinions of technical documentation results in them not being read, and not being invested in.
Continue reading

Posted in Opinions, Quality, Software Engineering | Tagged | Comments Off on Technical documentation

The story of “Depends”

Today, I announced on behalf of my company, Vlinder Software, that we would no longer be supporting “Depends”, the dependency tracker. I think it may be worthwhile to tell you a by about the history of Depends, how it became a product of Vlinder Software, and why it no longer is one.
Continue reading

Posted in Anecdotes, Software Development | Tagged | Comments Off on The story of “Depends”

Vlinder Software announces the release of Acari as an independent library

Parsing and generating text can require a lot of memory – to the point where running the parser can be prohibitive on some devices. This is often due to sub-optimal handling of strings, bad integration with the system’s allocators, … … Continue reading
Posted in Vlinder Software | Tagged | Comments Off on Vlinder Software announces the release of Acari as an independent library

Vlinder Software ceases commercial support for Depends

Effective immediately, Vlinder Software is ceasing commercial support for the Depends dependency tracking library. The Depends dependency tracker library was created in 2007 during some experiments being conducted for the now-defunct Jail-Ust project. It then morphed into a stand-alone project … Continue reading
Posted in Vlinder Software | Tagged | Comments Off on Vlinder Software ceases commercial support for Depends

Bayes’ theorem in non-functional requirements analysis — an example

Bayes' theorem

Bayes’ theorem

I am not a mathematician, but I do like Bayes’ theorem for non-functional requirements analysis — and I’d like to present an example of its application.1
Continue reading

  1. I was actually going to give a theoretical example of availability requirements, but then a real example popped up… []
Posted in Anecdotes, Industrial Automation, Quality, Smart Grid, Software Engineering | Tagged , , , | Comments Off on Bayes’ theorem in non-functional requirements analysis — an example

Globe and Mail: Canada lacks law that defines, protects trade secrets

According to the Globe and Mail (Iain Marlow, 20 May 2015) the 32-count indictment against six Chinese nationals who allegedly used their positions to obtain intellectual property from universities and businesses in the U.S. and then take that knowledge home to China, would not be possible here: “Canadian observers say the 32 count indictment, which was unsealed late on Monday, highlights the prevalence and severity of industrial espionage in North America, and underscores the need for Canada to adopt more stringent laws. Canada has no dedicated act on trade secrets and economic espionage and has not successfully prosecuted a similar case, experts say.”
Continue reading

Posted in Business, Opinions | Tagged , | Comments Off on Globe and Mail: Canada lacks law that defines, protects trade secrets

Vlinder Software is moving

Vlinder Software is moving to a brand new office in a brand new building. The website address, E-mail, etc. will, of course, remain the same, and the majority of our services will remain unaffected, but quotes, invoices, and other administrative … Continue reading
Posted in Vlinder Software | Tagged | Comments Off on Vlinder Software is moving