Perl Module Graph::Easy offers a functionality to generate graphs consisting of various shaped nodes connected by edges (see the picture, for example). It can render graphs as ASCII, HTML, SVG or Graphviz. To quick start have a read that tutorial. It contains all needed information. The live demo of Graph::Easy is available here.
If you’d like to control your Linux PC using voice commands than Perlbox Voice is what do you need. It’s a pure Perl application which features:
- Text to speech (Thanks to the Festival speech synthesizer)
- Voice control to open user specified applications. For example, if you say â€œWebâ€, the Perlbox-Voice Control will open the browser of your choice.
- Desktop plugins to control your Linux desktop using only your voice. You can switch virtual screens, cycle through desktops, invoke the run dialog, quick lock the screen. Currently there is a plugin for KDE.
- Custom commands are fully supported, and you can add commands on the fly.
- â€˜Pseudo Commandsâ€™ allow you to enter commands that the speaker should say. For example, if you say â€œGood morningâ€, the computer voice could say â€œAnd good morning to youâ€. Itâ€™s all up to you.
- The best thing is that you donâ€™t have to train the listening agent. The sphinx2 backend can be used by multiple people on the same machine without reconfiguration. It is also robust to background noise and ambient sound.
- Easy to use and attractive interface built with Perl and Perl-Tk.
- Uses to Festival Speech Synthesizer backend for text to speech and speaking functionality.
Brian Foy – the author of Mastering Perl and one of the famous perlmonks, wrote an article on the ONLAMP where described five ways to improve Perl programming:
- Cleaning up your code – I also hate to read unformatted code -without tabs, proper style etc.
- Use configuration – sure, my favorite module – Config::General.
- Logging – log4perl should be used in all your applications.
- Persistence – Brian suggested to use Storable or DBM::Deep but I prefer to use Cache::FileCache (it’s used in my module IMDB::Film to cache already retrieved web content).
- Subclasses for applications – it’s good practice to implement a common functionality in the modules instead of keeping it in your script. This approach allows to have more structured application and reuse the same functionality in some other scripts.
So, generally I didn’t find anything new for me in those recommendations. I just confirmed my own point of view 🙂