Freitag, 2. November 2012

Winter is here

Yesterday was the official feature freeze of Simon 0.4 which means that after years of summer, winter has finally descended on trunk.

As is par for the course, a lot of last minute cramming ensued but I'm happy to report that all the major planned features have made it in. I'll try to blog about some of the most important ones a little bit leading up to the release.

The feature freeze also means that we are now concentrating on fixing bugs. And we need your help!
With software as complex as Simon, there are a lot of corner cases that are hard to find by us developers alone. Compiling Simon is easy, though, so please give it a go and report any bugs that you might will find to make Simon 0.4 as stable as it should be.

Finally, today is also our string freeze. While we're still busy hacking away at all those messages at the moment, starting at midnight, there will be no new strings barring any unforeseen circumstances.
If you can help translate Simon into another language and need help to get started, just get in touch with us. We really appreciate it!

Update: Unforseen circumstances  :). We'll sadly have to break the string frezeze one last time as a rather large change set (renaming simon -> Simon, etc.) was not ready in time. It's being commited right now, though.. Sorry for the inconvenience.

Freitag, 12. Oktober 2012

Simon 0.4: Start the Countdown

Exactly 25 months ago, the last stable release of Simon, 0.3.0, was released to the public.

Since then, more than 1100 changes were committed introducing tons of new features, fixing countless bugs and completely revamping the user interface.
In fact, more than 40 % of all commits to the Simon code base have happened after the release of 0.3.0.

Today, I want to finally announce the release schedule for Simon 0.4.0:

DateEvent
2012-11-1Feature Freeze
2012-11-5Soft Message Freeze
2012-11-15Tag and Release: Simon 0.4.0 Beta 1
2012-12-5Tag and Release: Simon 0.4.0 Beta 2
2012-12-20Hard Message Freeze; Documentation Freeze
2012-12-21Tag and Release: Simon 0.4.0 Release Candidate
2012-12-28Tag: Simon 0.4.0 Final
2012-12-30Release: Simon 0.4.0 Final

This will be the first release after becoming an official KDE project - let's make it a great one!

Sonntag, 30. September 2012

Simon at Randa 2012


As some of you might already know, I spent last week at KDEs annual Randa Mettings in the beautiful city of Randa, Switzerland.
It was my first sprint and I was genuinely surprised at how unbelievably productive it really was. It's amazing what a couple of committed developers can achieve in just a couple of days.
The awesome food and plentiful supply of Swiss chocolate doesn't hurt, of course.

This sprint was the first time I got to meet José Millán Soto and Amandeep Singh who are working on AT-SPI with the help of Frederik Gladhorn, who was also there, and Sebastian Sauer, who sadly could not make it. Alejandro Piñeiro from the GNOME Accessibility team also joined the hackfest to provide valuable insights in the GNOME a11y stack and Yash Shah, one of Simons GSOC students this year, flew in once more to work on the computer vision aspects of Simons context layer.

Watch the Planet(s) for updates about all the great work those guys have been doing.

DBus Context Conditions

To warm up, on the first day I tackled a couple of items that were on my todo list for some time already. One of these tasks was to finish the implementation of the DBus context condition plugin.



Through the DBus condition, the Simon context layer can more accurately reflect the current state of other applications.

The main benefit of this feature is to allow application developers that write software that is specifically meant to be voice controlled to dynamically configure Simon to their softwares needs. By exposing the state of their system over DBus, Simon can react by activating and deactivating commands, vocabulary, grammar, microphones or sample groups as needed.

However, not only custom-written solutions gain benefit from DBus conditions: The screenshot above, for example, configures Simon to deactivate itself while VLC is playing something. Ever wanted to disable Simon automatically while listening to music? Now you can.

AT-SPI

The big topic of the week was of course AT-SPI: Through AT-SPI, assistive technologies like screen readers can "see" running applications, follow the focus and react on changes.  Traditionally, KDE 4 provided no real support for this and was therefore largely inaccessible for the large group of users that rely on such technology.

In recent years, however, there has been a lot of work to complete the AT-SPI support in Qt and KDE and thanks to the relentless work of people like Frederik Gladhorn, the situation is already much improved. Screen readers are starting to work with KDE software to some extend and overall the AT-SPI framework (qt-atspi) is becoming more complete and stable every day.

In Simon, AT-SPI can be used to automatically parse and control applications without any prior configuration by the end-user. A prototype was already implemented last summer.

While writing this plugin, I used the AT-SPI bus directly and noticed significant differences between Qt and GTK in the way they represented widgets in AT-SPI. The plugin therefore needed a lot of code just to maintain the internal view of the focused application - a problem that is shared with other a11y clients as well.
With the introduction of QAccessibilityClient, a new client library to aid developers of AT-SPI clients (assistive software), this simply didn't make sense anymore and a rewrite was in order.

Actions

Next to exposing information about widgets, AT-SPI also provides a way to interact with them through Actions. In Simon these will be associated with saying the name (e.g. text of a button) of the widget in question.

Because Simons AT-SPI plugin is the first real benefactor of this technology, many popular widgets don't yet expose proper actions - but Amandeep and José are fixing those problems left and right.

Selecting one of two available actions for an activated tab
At the Randa sprint, we also had a very productive meeting to discuss broader issues like the handling of default actions and custom actions at a toolkit level.

Performance

The AT-SPI plugin parses the currently focused window, builds vocabulary and grammar and then triggers the synchronization to build a new, active model to reflect the changes. The problem with this is that this might happen every other second in practice because of the user opening context menus or dialog, changing button texts, etc.

This imposes major performance problems - especially because users don't want to wait a couple of seconds after opening a popup menu to say the next command.

While many comparatively simple performance improvements over the old prototype were implemented - like moving the AT-SPI watcher to a separate thread -  some changes are not limited to the AT-SPI plugin but also improve Simons performance in general.

Simond Synchronization 2.0

Simon communicates with the Simond server over a custom TCP protocol. The speech model components are synchronized over the network. As soon as the input data changes, a new model is generated (or loaded from the cache).

This synchronization protocol was originally developed for Simon 0.2 and introduced a significant bottleneck: Each data element (individual scenarios, training data, language model files, etc.) would be synchronized separately. This involved the server querying the client for the modification date and then either requesting the clients version, sending its own version to the client or moving on to the next component if they were already up-to-date. This took at least one full round trip per component - even if all components were already up to date.

To make the synchronization more efficient, a new synchronization protocol was defined: The client now announces the modification date of all components in its initial synchronization offering. The server then builds the synchronization strategy based on that information and, because all requests are now essentially stateless, requests or sends the components that need updating on either side asynchronously.

Caching³

Simond already had a powerful model cache, but it only kept previously built models around as long as they could be the result of a specific (context) situation. The AT-SPI plugin instead modifies the scenario itself.

Simon has no way of knowing if the same set of components will ever be shown again, but it is in general a safe assumption (e.g.: Showing a menu and closing it again returns to the same state as before opening the menu). To address this, the scenario cache was modified to also keep "abandoned" (unreachable) models available for some time. Right now, the 15 most recently abandoned models are kept in this cache.

Error handling

Automatically building the active vocabulary depending on visible controls posed another problem: Even the English Voxforge model, one of the most complete open source speech models, does sadly not cover all triphones that crop up when used with such a diverse and dynamic dictionary.

Missing triphone: Before

So more often than not, users would be presented with the dreaded Julius error that is probably familiar with most people that tried to build a scenario for an existing base model once.

The only proper fix for this issue is of course to improve the Voxforge base model to cover all available triphones.

Until this is possible, though, we now work around this issue more gracefully by analyzing the used base model in the adaption layer. Uncovered triphones are then automatically blacklisted and offending words removed from the active vocabulary. That way Simon can still be activated in such situations and only the blocked word(s) can not be recognized.

Missing triphone: Now

To make sure this is transparent to the users, the blacklisted triphones are relayed to the client, which will mark such blocked words with a red background in the vocabulary view.
This replaces the previous simple mechanic that marked all words red that had less than two training samples - something that became obsolete with the introduction of base models.


Conclusion

As I mentioned before - and the avid reader might also have guessed by the length of this post - the Randa sprint was indeed very productive.

I want to thank Mario Fux et al. for organizing this fantastic event and for all sponsors that help make it happen. You guys rock!

Donnerstag, 16. August 2012

Randa Meetings 2012

In only a couple of weeks, this years KDE Randa Meetings will again take place in the Swiss mountain.

It's the first time I get to take part and I'm already very excited.

One of the main working groups this year will be focused accessibility: Six people - including a representative of the GNOME team and two dedicated GSoC students who are flying in from India even after the program has already officially ended - are coming together to create an accessibility infrastructure for free software that truly works.

And if that wouldn't be enough, it's not even "just" accessibility. There will also be teams working on Plasma, Education and Multimedia.

Sadly, not all applicants could be funded this year. But you can help! Please consider a small donation to help cover the expenses for this years sprint in Randa.

Click here to lend your support to: KDE Randa Meetings and make a donation at www.pledgie.com !

Mittwoch, 8. August 2012

Crossroads

Roughly a month ago, I tendered my resignation from the post of vice-chairman of the Simon Listens e.V.
By the end of the week, this will take effect.

Photo by MarkSmallwood

As a founding member this decision did by no means come easy.

However, after careful deliberation I came to the conclusion that my own goals don't line up with the rest of the board anymore.

The remaining board members and I parted on good terms and we continue to stay in contact to discuss new projects as well as current efforts.

What happens now?

To be honest, not a whole lot will change.

I remain fully committed to Simon, its core community and KDE at large.
I will continue to lead Simon development and maintain all components.
I will continue to release new versions of Simon. There will be neither a fork of the codebase nor a change of name or logo.
I will continue to use this blog to keep you updated about new developments.
I will of course also continue to mentor my two great GSoC students :)

The Simon Listens e.V. will continue to take on research- and commercial projects like the Benefit project or the Astromobile project.
In fact, another project under the sponsorship of the Austrian federal ministry of transport and innovation to further the development of the simon-touch voice controlled multimedia station for disabled and elderly people has just started.
The code, of course, remains open under the terms of the GPL and available in KDEs playground repository.
Claus Zotter will keep you updated about this projects progress right here on this blog.

In short: The Simon community remains just as healthy and vibrant as before.

Still, there are a few minor changes to announce:
  • My personal Ubuntu PPA which used to hold the Simon packages has been replaced by a new team repository of  which I am an administrator. The new repository already contains a new addition: A new package of Simon 0.3.0 for Ubuntu 12.04 courtesy of Mark Dammer. Thank you very much!
  • The Simon Wiki has been moved to KDEs Userbase. The old URL will become a redirect soon.
  • While I continue to be reachable via my old Simon Listens email address for the time being, please update your address books to me@bedahr.org. Thank you.

Freitag, 15. Juni 2012

GSoC 2011: The Hilarious Aftermath

During last years GSoC I had the pleasure to mentor the very talented Adam Nash on his project to introduce context aware speech recognition in Simon.

After the summer he continued to work on his project until it was ready to be merged with the Simon codebase. Since then he has finished college and, deservedly, started his own promising career.

So imagine my surprise when I received the following email from Adam a couple of days ago:
Hey Peter,

So, I mentioned some sort of "thank you" present before, but private jets were back ordered at the private jet store.  I decided, instead, to write you a song that is all about you (probably - I had to guess onsome of the biographical details).  Anyways, I attached the mp3 and pasted the lyrics below. I hope you like synthesizers! (because all I have is a bass and a synthesizer :/ ...)

Thanks again for your killer mentorship.
-Adam

And guess what? It turns out that Adam is not only a great coder but also produces hilarious music.

The track and lyrics are below (shared with his permission).


this guy named peter's super whack
he'll pull your code and push your stack
he's got 1337 skills, he'll pwn your C
he likes accessibility

Compared to his, your code is weak
your hello world's got a memory leak
he sorts his lists in constant time
he's super pimp at code design

The computers are all like:
hey there's peter
he's much sweeter
than those other dudes, yo he's the leader
of the simon listens software
so you hate-ahs better beware
cause he wrestles giant ninja bears
eats sandwiches and combs his hair
I tell ya sometimes he will even share
his sandwiches with giant ninja bears
after he beats them in a wrestling match
It's a voluntary action
He doesn't need to share his sandwiches with anyone
But he does
Call the fuzz
just because
If he was
givin sandwiches out
he's got some splainin to spout
for 20 counts of super-felonies for
aiding and abbedding the ninja bears
at their ninja lairs
with their ninja sensibilities
and sneaky swift abilities
they got responsibilities
to hide their visibilities
assassinate nobilities
they causin volatilities
exposin the fragilities
of upper class facilities
they're also bears

Thank you Adam. Not only doing a great job on your GSoC project, but also for having fun doing it.
It was a pleasure to work with you.

Dienstag, 12. Juni 2012

Akademy 2012

In just a little over two week, the annual KDE conference will start in Tallinn, Estonia.

I'll be there talking about how to build accessible systems:
This includes how to build solutions tailored to people with special needs from the ground up  but also how you can make sure that your application can be used by everybody.


See you there!