Personal Blog

    Since the beginning of this year, I’ve been working on a Wireless Music Player. The goal of this project is play all music in a Server while you can control everything from any Client. For the controls, I used PHP because is compatible with any kind of device, from computers to handy devices.

    I had to configure many things in the server to make it run without any help, so I only have to turn it on. After this, the server itself creates automatically a hotspot where an additional device can connect to and play anything. The way to play any song is so simple. At first, I have to put the songs I want in a folder (which can have subfolders). After this, I have to create playing lists and add songs. Then, I can play the full playlist.

    This project is not finished at all. I would like to improve it, and add many additional features to make it more awesome. At this moment I don’t have many free time so it’s so difficult to work on it, but one of my main goals is use a Raspberry Pi and deploy this on it. This will be difficult, because as I said, I configured many things in the server side and probably I will encounter with many troubles when I want to do the same things. What a challenge!

    Here is a sample video where you can see how this actually works. So simple!

    Little introduction
    In my current university (TUAS, Turku University of Applied Sciences, in Finland) we were given a development board called Olimex. The university borrowed us the board, and I really appreciate the idea, because that movement allows students to learn themselves (if they want of course) and get the first (and second, and third..) touch with this board.

    In my case I didn’t played with this kind of boards in my life. Actually I bought an Arduino board in order to learn about electronics and stuff, but I didn’t touch it because my lack of free time during this summer, so I want to do my best with this board.

    My void background
    In class we learned how to play different sounds. Of course, at the end, the cleaning programming style allowed us to make some clear and clean function to play a note, like:


    where DO (RE, MI, and so on) are pre-defined constants (frequencies). But, I wondered if I could do more, and something more interesting, because if I wanted to play a melody I had to call that playNote function as many times as needed, and I couldn’t adjust even the time I want to play the melody.

    As I have a very little background as music player (keyboarder!) I used a lot Guitar Pro, and the first thing I though was whether I could use it in order to obtain the melody I want to play in my board. And of course, I did!

    Program itself
    Part 1
    This is the structure of my program:
    -notes.h –> pre defined constants. Here I defined the notes as A1,B1,C1..E5,F5,G5.. where the letter means the note itself and the number means the octave. The content of each constant is its own frequency.
    -playMax.h –> this is just the constant which represents the amount of notes to be played. One single line.
    -playMelodies.h –> this is the melody represented as an array: int mel[max_mel] = {A3,D4,A3…
    -playTempo.h –> this represents the time a note has to be played: double temp[max_mel] = {0.50,0.25
    -melody.c –> main program. Here I play all the notes of the melody using a loop and calling a function play_note(frequency,duration).

    The reason I took off the amount of notes to be played, the notes to be played and the time for each one, is that I only have to change this files to change the melody I want to play, so the program itself remains the same.

    Additionally, I made this program customizable and I can change the offset in order to play a melody more high-pitched or low-pitched, and faster or slower.

    Part 2
    Guitar Pro allows us to export a XML version of the partiture, so I only needed to built up a parser, an make the files I need for the melody (playMax.h, playMelodies.h, and playTempo.h).
    I built this parser in C because I wanted something efficient and recall about this wonderful (and painful some times) programming language.

    Building a XML parser is easy (theoretically at least), and the Guitar Pro XML output is particularly easy to understand.
    The most important structure was:

    How to make this works
    -Download the Guitar Pro partiture of the song I want to play (there are thousands on the Internet)
    -Export the XML version of that partiture.
    -Run the parser which will make the corresponding headers.
    -Compile the program and introduce it in the board.

    Some videos:
    Elfen Lied opening
    Ievan Polkka
    Ode to Joy


    Sin comentarios

    In this entry I will publish my university marks. As I already wrote and publish a lot stuff about my education, I think personal marks are also important. I have to write two different sections, one in Spanish and one in English, because unfortunately, there is more information in Spanish than in English since this information is official and my university doesn’t want to officially translate everything. Each subject in the Spanish section will be linked with a proper description.

    I only finished my first 3 years in Spanish university, so Spanish version has less information than English version

    English (Degree in Computer Science Engineering)

    Finnish grading system
    Spanish grading system (Second page)
    Syllabus (official names)

    Name Credits Mark
    1º Year (Burgos (ES), average: 7.14)
    Linear Algebra 6 6.2 (Ap)
    Deontological & Legal Fundamentals of IT 6 7.4 (No)
    Physics for Computer Science 6 6.3 (Ap)
    Basic Computing 6 8.8 (No)
    Discrete Mathematics 6 7.7 (No)
    Calculus 6 7.5 (No)
    English for Computing 6 7.5 (No)
    Computer Fundamentals 6 7.9 (No)
    Programming 6 7.1 (No)
    Operating Systems 6 5 (Ap)
    2º Year (Burgos (ES), average: 7.77)
    Computer Architecture 6 8.5 (No)
    Databases 6 7.7 (No)
    Statistics 6 7.5 (No)
    Software Engineering 6 6 (Ap)
    Programming Methodology 6 7.3 (No)
    Systems Analysis & Design 6 6.6 (No)
    Data Structures 6 8.5 (No)
    Fundamentals of Enterprise Management 6 9.5 (Sob)
    Human Computer Interaction 6 6.8 (Ap)
    Computer Networks 6 9.3 (MH)
    3º Year (Burgos (ES), average: 8.08)
    Parallel Architectures 6 5.5 (Ap)
    Systems and Network Design and Management 6 8.2 (No)
    Project Management 6 8.1 (No)
    Language Processors 6 9 (MH)
    Intelligent Systems 6 8.5 (No)
    Algorithms 6 9 (Sob)
    Database Applications 6 8.7 (No)
    Numerical methods and Optimization 6 8.3 (No)
    Concurrent and Real-Time Programming 6 8 (No)
    Information Systems Security 6 7.5 (No)
    4º Year (Turku (FI), average: NA)
    Business Promenade 5 5
    Topics in Embedded Software 15 NA
    Digital Electronics 5 4
    Digital Signal Processing 5 4
    CCNA 1D 3 5
    Finnish For Exchange Students 3 H
    Get Finternational 3 H
    Embedded Linux Device Drivers 3 NA
    CCNA 2D 3 5
    Software Testing 5 NA
    Neural Networks 5 3
    Bachelor’s Thesis 18 5

    Spanish (Grado en Ingenieria Informatica)

    Funcionamiento del sistema de notas (Segunda página)

    Nombre Créditos Nota
    1º Año (Media: 7.14)
    Álgebra Lineal 6 6.2 (Ap)
    Fundamentos Deontológicos y Jurídicos de las TIC 6 7.4 (No)
    Fundamentos Físicos de la Informática 6 6.3 (Ap)
    Informática Básica 6 8.8 (No)
    Matemática Discreta 6 7.7 (No)
    Cálculo 6 7.5 (No)
    Inglés Aplicado a la Informática 6 7.5 (No)
    Fundamentos de Computadores 6 7.9 (No)
    Programación 6 7.1 (No)
    Sistemas Operativos 6 5 (Ap)
    2º Año (Media: 7.77)
    Arquitectura de Computadores 6 8.5 (No)
    Bases de Datos 6 7.7 (No)
    Estadística 6 7.5 (No)
    Ingeniería del Software 6 6 (Ap)
    Metodologia de la Programación 6 7.3 (No)
    Análisis y Diseño de Sistema 6 6.6 (No)
    Estructuras de Datos 6 8.5 (No)
    Fundamentos de Organización y Gestión de Empresas 6 9.5 (Sob)
    Interacción Hombre/Máquina 6 6.8 (Ap)
    Redes 6 9.3 (MH)
    3º Año (Media: 8.08)
    Arquitecturas Paralelas 6 5.5 (Ap)
    Diseño y Administración de Sistemas y Redes 6 8.2 (No)
    Gestión de Proyectos 6 8.1 (No)
    Procesadores del Lenguaje 6 9 (MH)
    Sistemas Inteligentes 6 8.5 (No)
    Algoritmia 6 9 (Sob)
    Aplicaciones de Bases de Datos 6 8.7 (No)
    Métodos Numéricos y Optimización 6 8.3 (No)
    Programación Concurrente y de Tiempo Real 6 8 (No)
    Seguridad Informática 6 7.5 (No)

    This entry is about JMReversi, a free implementation of classic Reversi. At this moment, this application is not in the Store but hopefully will be available soon, because I didn’t have any problem validating it locally.

    My personal reason to develop this application is to implement Alfa-Beta algorithm.

    My idea is release some day another version with more features that are currently half developed, but now I don’t have time so I decided release it.

    Any comment and suggestion is well appreciated.

    Windows Store

    General features

    Version 1.0

    • Play classic Reversi game.
    • Computer decissions are based on Alfa-Beta algorithm.


    This entry is about JMTwitter, a free Twitter client for Windows 8 (metro style) I’m currently developing. At this moment, the application is not published in the official store (in fact, has been rejected because didn’t pass performance tests, therefore I need to improve it, sure).

    I think I will also release the source code when I finish to comment it and have time for that. I would like to continue developing this application and all comments and suggestions will be well appreciated.

    General features

    Version 1.0

    • Visualize your timeline, mentions and trending topics (refresh every minute).
    • Automatically stores your timeline and mentions to visualize offline.
    • Send tweets and replies.
    • Automatic splited tweets and replies.
    • Snapview mode.


    External libraries (credits)

    • LinqToTwitter by Joe Mayo is the library used to interact with Twitter service itselft.
    • SQLite-net by Frank Krueger is the library used to store timeline tweets to have them available offline.