Archivo de la categoría: Universidad

Visualizar cambios en normativas de proyectos, de forma geek

proyectos geek - Geeks win eventually geeks-win-eventually.png
Geeks win eventually

Hace tiempo que termine mi proyecto de fin de carrera y para documentarlo en su día tuve que seguir una normativa de proyectos de fin de carrera definida por la Escuela de Informática de Ciudad Real (UCLM).

proyectos geek

Esta normativa estaba escrita con normas de 2007 y hasta no hace pocos días no se ha publicado una nueva normativa. Aunque ya no tengo la necesidad de leerla para hacer un nuevo pfc, si me ha surgido la curiosidad de cuales son los cambios que realmente se han llevado a cabo.

El problema, es que ambos documentos son dos PDFs y no se exponen de forma clara cuales han sido los cambios. Aunque quizás la escuela podría haber hecho un repositorio de código con el texto, tal cual como hacen otras instituciones alemanas para la publicación de leyes, no es el caso. Pero explicaré en este artículo como podemos ver estos simples cambios.

Lo primero que necesitamos es obtener ambos pdfs, después con la herramienta pdftotext convertiremos los pdf a texto crudo, donde no existe formato, pero si podemos conservar la forma del contenido (layout) con bastante precisión.

Una vez tenemos las normativas en texto crudo, podemos aplicar el comando diff y comparar lado por lado o bien generar un fichero con las diferencias.

Como la automatización es importante por si cambia de nuevo en un futuro, he creado un pequeño script llamado en mi cuenta github que hace exactamente esos objetivos.

Por otro lado, si no quieres complicaciones y quieres algo mas rápido, he alojado las diferencias generadas como un archivo en un pastebin (lo hubiese hecho en un gist, pero parece que había problemas en github en esos momentos).

Este método puede aplicarse a la mayoría de archivos pdf, por lo que es muy conveniente para detectar pequeños cambios.

FreeStation source code release

Open Source

Time ago I write about FreeStation. I start working hardly 11 months ago for deliver as my final career project to graduate as computer science engineer in Spain. I am very happy with the result and the development, because I learn a lot in the process and I get a calification of 9.5 over 10 points the last September 14th.

I use a lot free software in this development. As result I’m on moral obligation of release all my code as free software too. For me, it is a pleasure contribute to spread knowledge with free software. I choose AGPLv3 license for code and GNU FDL for documentation.

All the source code and documentation is uploaded in my GitHub account. There are three different parts:

All comments are welcome. I accept patches and contributions. I expect keep developing new features and if some organization or person wants use it. Also, I am available to hire as freelance for develop new customized code or adapt FreeStation or other software to your personal needs.

In the other hand, if you learn something useful from my code or you are using my code in your projects, etc, maybe you want to consider invite me with a beer 😉

 Now it is time that I keep working hard and demostrate my skills to the world.

FreeStation: a little sneak peek

Several months have passed since I wrote about Freestation. I would like show some advances and write about my dissertation project that I hope to finish for the 2th June as last day for deadline on this course.

An introduction reminder

FreeStation is a program built for help to distribute easy and reliable software and information on point of interest (POI).

Basically, a POI is huge device that you can find on universities, libraries, hospitals, police stations, train stations, etc.

For example, this are a couple of images of POIs:

DNI POI on police station
DNI POI on police station

This is POI on a police station for perform changes with a DNI (National Idenfication Document on Spain). It shows a keyboard, trackball and DNI card reader for easy operations with credential authentication using DNI.

It has normal power connection but it also has internet connection for load data. On the following image:

Front detail of DNI POI on a police station
Front detail of DNI POI on a police station

As you can apreciate, it shows with more details a screen showing input boxes for the user and a simple interface with buttons. The height POI is adjusted to people in wheelchairs (a laudable feature for accessibility).

Another example of POI:

Adif POI on a train station
Adif POI on a train station

This image corresponds to another POI on a Adif’s train station. It has a different design, totally vertical with a big screen rotated. Unfortunaly when I take the photo it was turned off, but I think that it is a tactil screen model with internet connection too.

It incorporates a audio system maybe useful for blind people and as possible confirmation for using audio notification. Sadly, it is enough high for wheelchairs people, so maybe the only functions could be a information panel with low interaction. I can’t ensure this, because I never can see running this POI when I travel.

Finally another radical example of POI (three different examples should be enough for ilustrate my point):

SESCAM POI on a hospital
SESCAM POI on a hospital

This is another interesting POI that has a intercommunication phone for direct assistance, keyboard, tracball mouse and sanitary card reader. It also has a tray as printer for deliver useful data to the user. Sadly, when I take the photo the POI also is turned off.

So, this is only a reduced set of examples of a huge variety of POIs. Usually you can find the same model for each same hospital, train station, police station, university, etc. Each model runs practically the same model of software and hardware features. But, when the time past, it is highly probably that some POIs have breakdows, energy loss, software bugs, unconsistence of versions, etc.

So, FreeStation try to repair and unify this problems for offer a kindly solution, because it is important deploy same versions between POIs, recieve notifications when a POI it is offline for a breakdown, auto-restart the POI if some hard bug happens, etc.


The Freestation architecture is mainly based on client-server model. Each component is easy to tweak or customize and it doesn’t require technical knowledge for diary use.

Architecture - Server and clients infrastructure
Architecture – Server and clients infrastructure

Let me introduce you the architecture with real screenshots of the application and some diagrams.

Server architecture

FreeStation server runs over a software stack consisting of several technologies and components. It handles all the communication with every client.

It has a friendly webserver GUI panel administration based on PHP + Javascript.

FreeStation Server Webserver GUI
FreeStation Server Webserver GUI

As you can see, you can start/stop/restart the server, see real status and different useful output logs for analyce and diagnose whatever event.

It allows easily make the common tasks for deploy and configure a high amount of clients with POIs.

Under the webserver GUI, it runs a daemon process as backend based on python. Each action and task is handled internally and dispatched on fast way.

The backend can make asynchronous communication with clients. For that the backend uses ICE (Internet Comunication Engine of ZeroIce).

This allows a reliable and robust way to transfer huge information datasets between a big amount of clients and the server.

For example, you also can see a list of current clients handled by the server with stats:

FreeStation Server GUI - List of clients
FreeStation Server GUI – List of clients

The list shows each client hostname, IP address, last connection, requests, status and some actions for each client. You can add/remove/edit clients and all the data associated with a clients would be updated.

Client architecture

A client run only on a POI and periodically poll to the server for updates or information. Clients need a specification for deploy widgets and the data associated for each widget.

A widget on Freestation terminology is a abstract element that performs a atomic operation and provides communication for the data handled inside the widget.

For complex operations a widget could associate with more widgets for perform a sofisticated task or simply commnicate data with other widgets. The widgets only run on clients, but all them are configured only from a server.

This describe a orchestra model where the server acts like a manager and clients with widgets acts like a choir.

That means that a client only can communicate with the server and it is not allowed the communication between clients. But this can be easily a SPOF (Single Point Of Failure) for server. So, it is planned on a future allow several masters servers as failover and syncronize and replicate data between masters.

In other hand, an a server, you have a list of widgets available to configure on a client.

FreeStation Server GUI - List of total widgets
FreeStation Server GUI – List of total widgets

For example, you can choose deploy and configure a USB Storage widget and a Mount Device widget on a client. That widgets could associate operations for list several files of books about medicine. When the user pick a set and choose save to a usb key, the Mount Device detect the usb key and usb storage widget write the data. The result it is a happy user that obtain the needed information quickly and without problems.

FreeStation Server - Associate widget to client
FreeStation Server – Associate widget to client


You can associate the needed widgets for a client and configure/edit each widget with custom params (for example, only allow 5 items for save on Mount Device):

FreeStation Server - Configure Widget for a client
FreeStation Server – Configure Widget for a client

Another example, you can choose a Video widget and display a video on POI for idle mode. When the user touch or interact with the POI, you can load a Browser Widget with a concrete webpage. Additionally as some institution you can choose a simple logo widget for display your institution logo on screen.

When a client is totally configured, then can be deployed on POI (normal desktop computer customized). A simple example of client screen deployed:


FreeStation Client - Welcome wigdets configured
FreeStation Client – Welcome wigdets configured

There are not limit defining or using new widgets. So in theory, the widget model scale for each custom need for a institution.

Free & easy to scale to your needs

With FreeStation some basic widgets are offered, but on the future, it could has repository widgets associated, widget patners and offer a rich market for developers that they are interested on develop custom widgets for companies, institutions, hospitals.

Soon, I plan to release the code as AGPLv3 on Github. Still I need polish some widgets, finish a real demo case for my dissertation and literally write a boring book with approximattelly 200 pages (currently, I have around 80 bad structure pages written).

So, the project is nearly to finish and with lucky I can finish before to 2th june deadline (and 15 th june official presentation) and finally has a big engineer diploma on my wall, yay!

Meanwhile, there are nearly two months of hard work, But shhh … I found a secret weapon 😉


Secret hard work weapon
Secret hard work weapon