eSpeak GUI 0.4 is out!

A few of you may remember espeak-gui, a graphical user interface for eSpeak I did release two years ago. While I haven’t been dedicating much time to it, it’s still alive and I’m happy to announce its fourth release!

This new release introduced automatic language guessing, a feature I’ve wanted for a while, as well as spell checking (contributed by Joe Burmeister).

Version 0.3, released a year ago and which I didn’t announce here, did also introduce Undo/Redo, pausing, file history logging, a bunch of translations and some voice options. It’s sister project, python-espeak, did also get some bug fixes since its first release.

As usual, packages for both espeak-gui and python-espeak are available in my PPA, and since last month in Debian unstable. Make sure you also install libtextcat0 (version 2.2-8 or newer) to get the language identification support.

The advent of digital signage

With ever cheaper flat screens and low power computers, it’s not strange for computer screens and web technology to replace custom build display systems (like the screens indicating arrivals at airports and train stations). They have clear advantages, being able to display more information, in a more pleasant way and including animations. They are also much easier to update to display new or changed information.

This doesn’t only apply to information systems. Publicizers have long ago spotted the possibility of animated and more engaging advertisements and it is only a matter of time until more and more posters and billboards are replaced with digital signage. Examples of such can already be seen in airport hallways, commercial centers and public underground transportation (for example in Barcelona’s Metro).

Within the next years, I expect them to become even more ubiquitous. However, this will open new challenges for advertisers, since after a while moving advertising won’t be enough the catch the public’s attention. This will open the doors to truly interactive advertisements (maybe with cameras or a Kinect?) or ads that can interact with our mobile phones and personalize themselves.

Anyway, just some thoughts. See the infographic after the break for some interesting stats on this topic.

Continue reading →

Debian Games Team Meeting

This announcement was provided by Martin Erik Werner. I’m reproducing it for Planet Ubuntu.

The Debian/Ubuntu Games Team is organizing another meeting. If you’re into developing and/or packaging of games, or just generally curious about games in Debian/Ubuntu, you should join!

It will be held next Saturday, the 26th of November, in the #debian-games channel on (also know as at 10:00 UTC. More information is available on the wiki page Games/Meetings/2011-11-26.

The agenda starts off with the usual round of introductions, so if you’re new to the Team, say hi! Then we’ll be going through the action items from the last meeting, including work on the Debian Games LiveCD, and what’s up with the /usr/games/ path anyways?

Next we’ll be moving onto how the Games Team is faring in terms of members: are new recruits finding it comfortable, should we advertise more?

Next up it’s the squeeky penguin: Wheezy is somewhere in the not-completely-distant future, how does that affect the Games Team, should we be scuffling to get specific tasks done?

Then onto the recurring question of Sponsoring, and how to improve it, should we be utilising DebExpo more? What about our favourite PET?

Lastly, PlayDeb is doing some really neat stuff, would it make sense for our team to push some changes to PlayDeb? Would it make sense for PlayDeb to push changes to Debian Games?

Hopes are for a good discussion, and a merry time, hope to see you all there!

Apunts de Teoria de la Computació: Gramàtiques incontextuals

Una gramàtica incontextual (CFG, Context Free Grammar) [latex]G[/latex] és un conjunt de regles de substitució on les parts esquerres són mots de longitud 1. Aquestes regles les anomenarem produccions i les seves parts esquerres variables (o no-terminals). Els símbols restants els anomenem terminals.

Dues regles com per exemple [latex]S \rightarrow aS[/latex] i [latex]S \rightarrow X[/latex] es poden representar de forma agrupada de la següent manera: [latex]S \rightarrow aS | X[/latex].

En una gramàtica sempre hi ha una variable (normalment la primera que apareix) que anomenem símbol inicial. Les paraules generades per la gramàtica són aquelles formades per terminals a les quals es pot arribar des del símbol inicial.

Podem representar les substitucions necessàries per arribar a una paraula amb la sintaxi ja coneguda, o bé en forma d’arbre (arbre de derivació o arbre sintàctic).

Les gramàtiques incontextuals també es poden representar formalment com una tupla [latex]G=\langle{}V,\Sigma,\delta,S\rangle[/latex].

Un llenguatge s’anomena llenguatge incontextual si existeix una gramàtica que el genera. Existeixen algorismes [latex]O(n^3)[/latex] per comprovar si una paraula és generable per una gramàtica i generar-ne l’arbre sintàctic. Això és útil per a compiladors i intèrprets.

Quan una gramàtica permet més d’un arbre de derivació per a una paraula diem que és ambigua. Això no és desitjable quan volem utilitzar la gramàtica per interpretar el significat de les entrades.

Un criteri per determinat l’ambigüitat quan només utilitzem regles lineals (on cada alternativa de la part dreta només inclou una única variable): si no existeixen dues alternatives amb que es pugui generar el mateix, llavors la regla no genera ambigüitat.

Operacions sobre gramàtiques

Els llenguatges incontextuals estan tancats per unió: Tenim dues CFG [latex]G_1[/latex] i [latex]G_2[/latex] que generen els llenguatges [latex]\mathcal{L}(G_1)=L_1[/latex] i [latex]\mathcal{L}(G_2)=L_2[/latex]. Suposem que els llenguatges no comparteixen variables (si no fos així, les podem reanomenar). Si definim la operació unió de gramàtiques [latex]G_1\cup G_2=\langle V_1 \cup V_2 \cup \{S\}, \Sigma_1 \cup \Sigma_2, \delta_1 \cup \delta_2 \cup \{S \rightarrow S_1|S_2, S\}\rangle[/latex] llavors aquesta compleix [latex]\mathcal{L}(G_1 \cup G_2) = \mathcal{L}(G_1) \cup \mathcal{L}(G_2) = L_1 \cup L_2[/latex].

També ho són per concatenació. Amb les mateixes condicions que abans, [latex](G_1\cdot G_2)=\langle V_1 \cup V_2 \cup \{S\}, \Sigma_1 \cup \Sigma_2, \delta_1 \cup \delta_2 \cup \{S \rightarrow S_1S_2\}, S\rangle[/latex] compleix [latex]\mathcal{L}(G_1\cdot G_2)=\mathcal{L}(G_1)\cdot \mathcal{L}(G_2)=L_1\cdot L_2[/latex].

Per l’operació estrella: [latex]G^*=\langle V \cup \{S’\}, \Sigma, \delta \cup \{S’ \rightarrow S’S|\lambda\}, S’\rangle[/latex] compleix [latex]\mathcal{L}(G^*)=\mathcal{L}(G)^*=L^*[/latex].

Per l’operació revessat: [latex]G^R=\langle V, \Sigma, \{X \rightarrow u^R | (X \rightarrow u) \in \delta\}, S’\rangle[/latex] compleix [latex]\mathcal{L}(G^R)=\mathcal{L}(G)^R=L^R[/latex] ja que [latex]\forall X \in V, \mathcal{L}(G, X)^R \subseteq \mathcal{L}(G^R,X)[/latex].

I per imatge de morfisme: [latex]L \in CFL[/latex] i [latex]\sigma: \Sigma_1 \rightarrow \Sigma_2[/latex] tal que [latex]\sigma(uv)=\sigma(u)\sigma(v) \Rightarrow \sigma(L) \in CFL[/latex]. En aquest cas a la tupla de la gramàtica resultant es substitueix [latex]\delta[/latex] per [latex]\{X\rightarrow \sigma(u) | (X \rightarrow u) \in \delta\}[/latex].

En canvi, no són tancats per intersecció (si [latex]L_1, L_2 \in CFL \nRightarrow (L_1 \cap L_2) \in CFL[/latex]) ni complementari.

Aquests apunts estan basats en els vídeos de Teoria de la Computació de Guillem Godoy (UPC).

Apunts de Teoria de la Computació: Teoria de llenguatges

Un alfabet ([latex]\Sigma[/latex]) és un conjunt finit d’elements (símbols), habitualment caràcters alfanumèrics.

Un mot és una llista de símbols d’un alfabet. El mot buit (llista de longitud 0) el denotarem amb el meta-símbol [latex]\lambda[/latex]. Utilitzarem [latex]u[/latex], [latex]v[/latex], [latex]w[/latex], [latex]u_1[/latex], … per denominar paraules.

[latex]\Sigma = \{a, b\}[/latex]
Paraules: ab, bbb, a, [latex]\lambda[/latex]
Longituds: |ab|=2, |bbb|=3, |a|=1, |[latex]\lambda[/latex]|=0

Extenem la notació de les longituds per a occurències d’un mot dins d’un altre: [latex]|u|_w[/latex]

[latex]|ab|_a=1[/latex], [latex]|bbb|_b=3[/latex], [latex]|bbb|_{bb}=2[/latex]

Per referir-nos al símbol i-éssim del mot u utilitzarem: u[i]

ab[1] = a, ab[2] = b

Amb la operació producte ([latex]u\cdot v[/latex] o [latex]uv[/latex]) representem la concatenació de dues paraules. Per exemple:

[latex](ab)\cdot(bbb) = abbbb[/latex]
Element neutre: [latex]u\cdot\lambda=\lambda\cdot u=u[/latex]
Associativitat: [latex]u\cdot(v\cdot w)=(u\cdot v)\cdot w[/latex]

Amb [latex]\Sigma^*[/latex] representem el conjunt de tots els mots possibles que podem construir amb l’alfabet [latex]\Sigma[/latex]. Exemple per a [latex]\Sigma = \{a, b\}[/latex]:

Continue reading →

Skip to toolbar