Programming

GNAT 2012 for Debian Wheezy

For purposes known mostly within our company, I’ve created a magic makefile that takes care of most of the work involved with getting a GNAT 2012 (and up-to-date various support tools) up and running on a Debian.

The makefile requires you to download some files manually, but that’s okay, as it gives you a great opportunity to visit AdaCore’s libre webpage. The readme file explains it in more detail.

At this point, the makefile will build (and/or install) the following projects.

  • GNAT 2012 – binary
  • GNATCOLL (Gnatlib) – SVN build
  • AWS (Ada Web Server) – Git build
  • Florist GPL 2012 release
  • XML-Ada 4.3 (release)
  • Yolk (AWS support library)
In time, the makefile will be expanded to support more libraries and projects.

The makefile can be found at GitHub, hope you find it useful or want to contribute.

Beamer i LaTeX

Jeg er blevet opfordret til at skrive en lille introduktion til LaTeX – nærmere betegnet Beamer klassen.

Beamer er en præsentations-dokumentklasse der kan bruges til at lave slides med.

Først og fremmest skal du have latex-beamer og pdflatex installeret:

# apt-get install latex-beamer texlive-latex-base

Burde kunne klare opgaven på et Debian (men sikkert også Ubuntu) system. Herfter har du dokumentklassen beamer tilgængelig, så vi kan starte dokumentet således:

documentclass[presentation]{beamer}
\usepackage[T1]{fontenc} % Sørger for danske tegn

Herefter begynder vi dokumentet og giver lidt information om os selv.

\begin{document}
 
\author{Mig!}
\title{Fed titel\\
\small{Endnu bedre undertitel}}
\institute[]{ Et herligt sted }

Nu kan vi bruge den information vi har indtastet til at lave en titelside og dernæst en indholdsfortegnelse.

\begin{frame}
  \maketitle
\end{frame}
 
\begin{frame}
  \frametitle{Indhold}
  \tableofcontents
\end{frame}

Nu kan vi så reelt starte med at lave indholdssider. Disse består typisk af et antal punkter som her:

\section{Første slide}
\begin{frame}
  \frametitle{Fantastisk titel}
  \framesubtitle{- snart}
  \begin{itemize}
    \item Detter er et punkt med en pause
    \pause 
    \item Og endnu en
    \pause
    \item Det er den sidste - på ære
  \end{itemize}
\end{frame}

Hvis man ønsker et billede i sin præsentation kan man inkludere det på samme måde som ved andre LaTeX dokumenter. Husk at der gælder de samme billedformatbegrænsninger som ellers ved brug af pdflatex.

\section{Et billede}
\begin{frame}
  \frametitle{Et billede}
  \framesubtitle{}
\begin{figure}[h]
 \centering
 \includegraphics[width=120pt]{database.pdf}
 \label{fig:database}
\end{figure}  
\end{frame}

En af de helt store styrker ved LaTeX er jo den matematiknotation – som der selvfølgelig også er til at integere en præsentation.

\begin{frame}
  \frametitle{Lad os \emph{} lave matematik}
  \framesubtitle{}
  \begin{equation}
    \displaystyle\sum\limits_{i=1}^{n} \frac{C_i}{T_i} \leq n \left( 2^{\frac{1}{n}} - 1 \right) 
  \end{equation}
\end{frame}

Til slut kan man jo indsætte klassikeren:

\begin{frame}
  \frametitle{}
  \framesubtitle{}
  \centering
  Spørgsmål?
\end{frame}
 
Og huske at slutte dokumentet
<pre lang="latex">
\end{document}

Du kan nu bygge din præsentation med

$ pdflatex presentation.tex

Hvis man ønsker at skifte tema, kan man gøre det med følgende kommandoer i starten af dokumentet.

\usepackage{listings}
\usetheme{Pittsburgh}
\usecolortheme{dove}

Der kan findes en fantastisk oversigt over de forskellige temaer med farvekombinationer på http://www.hartwork.org/beamer-theme-matrix/.

Du kan hente et fuldt eksempel (med billedfil) her:

Endnu en ubrugelig valgprognose

Som tidligere omtalt byggede vi på min tidligere uddannelse et stemmesystem med det formål at stille entry- og exitpolls tilgængelig ved et lokalt valgmøde.

Valgmødet foregik i Nykøbing F. og var primært rettet mod unge under 18. Det var altså rent teoretisk.

Vi gjorde os dengang følgende observationer:

Resultat før mødet

Man kan tydeligt se en tendes til en højredrejning i prognosen baseret på stemmer indsamlet ved indgangen.
Til gengæld bliver billedet markant anderledes ved udgangen. Det skal bemærkes at stemmeterminalerne først blev aktiveret ved mødets afslutning, og derfor kun repræsenterer meningsfordelingen hos de “vælgere” der deltog i hele mødet.

Resultat efter mødet

Ud over at en stor del (ca. 50%) af deltagerne har forladt mødet viser tallene også at der nu er en kraftig venstreskæv fordeling – især til Enhedslisten der er gået markant frem.

Både Venstre og Socialdemokratiet er gået tilbage. Dansk Folkeparti er det parti der har lidt størst tab under mødet; ud af de 114 stemmer de fik ved indgangen, er 100 vælgere enten udvandret eller har skiftet mening.

Jeg syntes observationene er interessante, men de har jo intet at gøre med det forestående valg. Måske andre kan hive flere spændende konklusioner ud fra disse tal?

Til de kodeinteresserede kan serverdelen og kommandolinje klienten hentes her:

valgsystem.tar.gz

MBUS and Ada

I recently got my hand on a OM13006 Power Plug meter development kit from NXP Semiconductors. The entire process of actually getting the kit was a quite cumbersome one, and tale left for another time. Though I would like to thank the people at Future Electronics for their invaluable help.

So, now I have a kit which i have spent €200+ on, and no idea how to program it or use it. The smart metering website at NXP has an SDK zip file which you can download. It contains some diagrams and a lot of C/C# source code respectively. More importantly, it contains the (windows) software also depicted on their website.

The software is pretty functional, but lacks an automated log function (besides raw bus data), so you can grab usages and use them in a software model.

A challenge, then!

As the kit consisted of the a meter to plug between your outlet and device, and a USB dongle, the first step was to figure out how to communicate with the device.

After some spent digging through the supplied source code, I realized that the device was interfacing as a serial device. A quick check with minicom confirmed this.

By then, it was just a matter of parsing the line (ASCII encoded) based protocol.

The sources can be found here, or by going to the projects page.

To build the test application, you need to use gnatmake which is part of GNAT. It is part of any respectable Linux distributions repository. When it is installed, just run

gnatmake -P mbus_logger

To build the sample application