As an addendum to “Nokia spreading FUD?” of Matthias Kirschner

14 March 2011

Original article available here: Nokia Spreading FUD?

Nokia says:

“Many organizations which want to use Qt for their business applications choose commercial licenses, for a variety of reasons. These include restrictions in using open source licensed software in industries such as defense & aerospace, or the need to provide product warranties & indemnities such as in the medical device industry. Others choose a commercial relationship for access to Qt professional support and services to ensure successful development of their projects.”

and Matthias points out:

First, warranties, indemnities, support and services can be done with any GNU license. Qt is licensed under the GNU LGPL, so in this sense it is a commercial license. There is commercial Free Software, as well as non-commercial non-free software, or to put it in David Wheeler words:

“It’s time to end the nonsense. OSS is practically always commercial, which means that there are two major types of commercial software: proprietary software and OSS. Terms like ‘proprietary software’ or ‘closed source’ are plausible antonyms of OSS, but ‘commercial’ is absurd as an antonym, and phrases like ‘commercial or OSS’ make no sense.”

I agree with Matthias (and David) here; speaking as a software engineer, the biggest requirements in the aerospace and defense sectors are about testing and software reliability.

For example, NASA requires complete MC/DC for critical code. But that has absolutely nothing to do with licensing.

Most proprietary software does not qualify either. And its closed-source development model makes it only harder to assess its quality, because it is hard to ask for multiple third-party code reviews.

In fact, many times tenders for aerospace or the military ask for delivering *also the source code*. I wonder how any type of free software licensing scheme can hinder that.

As far as other points go: the GPL states that “this program is distributed without any warrant of any kind”. But indemnities can be offered as an additional service on top of the original license (like the GPL). This is not unalike to what happens with most EULAs.

For a notable example, check the Microsoft SQL Server Enterprise 2008 edition EULA, which is a critical component of many systems. Item 23, and the “Limited Warranty” section (points G and H, specifically) are quite clear.

My thesis: Gallows

19 December 2009

This week I finally managed to get my Bachelor’s degree in Computer Science with a final mark of 101/110. Here you’ll find my thesis about the project I implemented during my final internship: Gallows.

Gallows is a scaffold generator that uses ExtJS 3.0 to achieve CRUD actions on a editable grid, as well as on some associated controller views. The Gallows generator produces a grid view of records starting from a pre-existing model. The capability of modifying, creating and deleting items is achieved via AJAX, by setting up ExtJS 3.0 to use a JSON renderer.

It is necessary to run the generator two times: the first round it creates a stub of configuration file, which you can alter to achieve the wanted result in views. The second time, it generates a controller and the right JSON-based views.

The advantage of this approach is to allow you to get automatically some join capabilities across different tables/models, and to associate the right widget to the right field when more than one may apply. (Hopefully) sensible defaults will be auto-generated. The controller name (which can be namespaced) must match the model name.

Feel free to download and share my thesis: Gallows: a scaffold generator for Ruby on Rails employing ExtJS 3.0.

Calcolo pagamento periodico con interesse cumulativo a tasso costante

7 July 2009

Oggi, al lavoro, ho dovuto risolvere un piccolo problema: ogni mese l’azienda deve pagare una cifra con un interesse a tasso costante sulla base di quanto pagato il mese precedente. In quanti mesi sarà estinto il debito?

Calcolo interesse mensile progressivo a tasso costante


  1. Abbiamo: x0 + (1+k)·x0 + (1+k)((1+k)·x0) + … = σ
  2. Cioè: x0 · Σi = 0 → n (1+k)i = σ
  3. Da cui: σ/x0 = (1 – (1+k)n+1)/(1 – (1+k)) = (1 – (1+k)n+1)/-k
  4. Pertanto: n + 1 = log 1+k (k·σ/x0 + 1)
  5. Applicando il cambiamento di base con il logaritmo naturale, e sottraendo uno ad ambo i membri, si ottiene la formula voluta.

Fa piacere dover usare qualche sporadica nozione matematica, ogni tanto.

Speriamo serva a qualcosa (e, soprattutto, che i conti siano giusti!),