Left Zyxel

Recently I've left Zyxel where I worked for three years on a Linux-based home class router (CPE). It was a nice place to where I've met wonderful friends and learned a lot. It was also encouraging and interesting work.

I still have a few ideas for the CPE market that are not completely supported in current developments of various competitors. Things like modern web-2.0 dynamic UI, better error reporting, overall performance optimization, testing, centralized management and so on promise a lot for a vendor that will be able to handle such a suprisingly complicated product like CPE. Cell phones are much more active market comparing to routers, although the class of home devices seems to be no less important then cell phone one. For example I amazed by overall T-Mobile G1 quality and haven't seen anything comparable on router's market. Probalby US market is different though. Recent future with 4G, extensibility and wideband access everywhere promise a lot.

Let's hope one day there will be a team that could implement it. Also I hope to buy a router made by me very soon.

Java bits in Sphinx4

I spent some time converting sphinx4 to Java5, mostly changing the loops dropping iterators. I hope it will not just make the code cleaner but give us a few bits of performance.

Also tried to profile sphinx4 lattice code. It seems that I broke it by changing the default value for keepAllStates to true. With all HMM states left in a tree it's very hard to traverse the tree to create a lattice. Unfortunately TPTP profiler in Eclipse appeared to be very slow, looking for profiler now as well as on the way to solve this keepAllStates issue.

That change had another drawback, now we doing very unnatural work when we decide if stream is over. Currently scorer returns null on every SpeechEnd signal. It should also return null on DataEnd signal and that null should be different from the first one since we should stop the recognition only after DataEnd in case of long wav file transcription and continue after SpeechEnd. Now we distinguish them by presence of the data frames which are kept due to keepAllTokens settings. Very unnatural dependency which has drawbacks as well at least it eats memory. But I haven't decided what do do with this not so perfect API yet. Most probably we'll need to introduce something like EOF in C to find out if stream is over.