Thursday, August 11, 2011
At some stage, most companies discover that due to their increasing size its hard to keep track of what everyone is doing. Therefore, they will require some form of Intranet to be implemented. Obviously this happened at a company that I was working at. As such, we had to evaluate the many options available to us available at the time. Obviously, there are various classes/types of CMS's. Personal ones favour a flat file structure with no multi-user functionality while the more complex/professional systems use database backends, a web based front end, have the ability to authenticate via a network directory system and have many options with regards to add-ons which allow for extra functionality.
One thing you'll need to watch for is whether there is too much of a learning curve in using the application itself. I noticed this myself when using the more mature systems such as Joomla. In such cases, either user training is going to be required and/or the content may need to be managed by your IT team. For mid-sized companies Drupal is a decent compromise between scalability and functionality.
Installation is fairly simple and similar to other web based applications. Install/untar the packages. Configure your web server. Setup the database backend. Configure the relevant files in order to authenticate correctly via the relevant backend. Thereafter, add any extra functionality as and when required.
One of the things that has always been entertaining for me is when technology attempts to interact with humans in a non-trivial fashion. While I was evaluating new phone systems for an old company I had/saw the opportunity to be able to experiment with some new phone lines with our VoIP phones. One of the things that I was working on was having the phone system 'attempt to tell a joke'. This idea was born from my previous experience with eMac systems back at University which had the ability to randomly tell a joke. They did this via a speech recognition system which had limited vocabulary (a group of phrases in order to reduce the search space and is a technique that I've seen commonly used on OEM speech control systems such as that which comes standard with Toshiba laptops). It also relied on an XML based file that contained the actual jokes itself. Thereafter, a randomised algorithm was used to select which joke to tell and what type of joke to tell (Knock knock, Why did the Chicken cross the road, etc...) While it was not quite as entertaining as a real human it was at least amusing and provided me with the idea for my little experiment. Random jokes from the web pulled using a web scraper or else manually downloaded which were then reformatted to be placed into a flat text file as follows.
'line number' 'tab character' 'joke'
Therafter, when and if required the string was encoded to 'wav' and/or another sound file format as required. Then a random number was chosen every once in a while to determine which particular joke to encode as a sound file. Then, when you call the, 'Joke line' a script is called to determine which file to play via 'espeak', 'festival', or any other speech synthesis software. Obviously, I tried playing around with speech recognition but when using the phone as a microphone on a network with 'jumpy' traffic on a VoIP based phone system this can make things a bit difficult. Maybe when I find myself on a network with more managable traffic I'll continue this line of research? Some of the results were very interesting. If I remember correctly though my experiments seemed to suggest that the load ratio would be about 30 people to a single server (Dual Xeon 2.8/4GB/10K SAS) before there would be a drastic drop in performance if I was thinking about completely automated phone based interviewing (a tangent that I was thinking about when I was working on web based interviewing technology (auto-generated code which worked around existing survey scripting languages) which was backwards compatible with SPSS Quancept scripts). Below are some of the notes from my research.
- http://www.voip-info.org/wiki/view/Asterisk+cmd+Festival, text2wave is basically a wrapper script for festival. Uses a LISP type language?
- init.scm and .festivalrc are two config files that are read at initialisation
- Utterance structure, http://www.cstr.ed.ac.uk/projects/festival/manual/festival_14.html
- english.wav is
- jokes-clean.wav is
- sox foo-in.wav -r 8000 -c 1 -s -w foo-out.wav resample -ql
; English Accent
exten => *777,1,Answer
exten => *777,2,Wait(1)
exten => *777,3,NoOp
exten => *777,4,System(/usr/bin/english)
exten => *777,5,Playback(/tmp/english-out)
exten => *777,6,Hangup
translates a sound file in SUN Sparc .AU format into a Microsoft .WAV file, while
sox -v 0.5 file.au -r 12000 file.wav mask
- notes to self, 8000Hz is completely incomprehensible, 22000Hz is much more realistic sample rate
Sunday, August 7, 2011
Once upon a time I worked in a company that had multiple terminal servers. It soon became apparent that they weren't balanced in terms of work load. Due to financial constraints I ended up writing a fairly simple load balancer which is being augmented over time as tme permits (the basic structure of the original script will be posted to my GitHub and/or website eventually). The way it works is fairly simple. A fixed number of servers which is listed in a hash/dictionary data structure is iterated over. If the socket connections can be made to all servers than a naive algorithm which is composed of a random number which is 'mod' by the total number of servers is used in order to decide which server to connect to. However, obviously if a server/servers are down then these are removed from the data structure. Subsequent revisions have involved automatically mapping the network using NMAP, gaining server status information using WMI/SNMP,and storing/updating this data using SQLite to achieve a drop-in software based load balancer (the original script/program was written using a combination of Python and Perl but I may assimilate and/or port it to another language if and when appropiate).
If you do have the resources it may be worthwhile exploring some of the commercially available systems. Many of these options and other mature software based load balancing options are listed in, "Building a Cloud Computing Service", http://dtbnguyen.blogspot.com
The interesting thing though is how there is an increasing trend towards multi-level load balancing and redundancy. For example, application servers are often able to maintain state so that users do not have to re-login during server capitulation and obviously there many layer 3/4 load balancers available as well. In fact, even consumer networking companies are creating their own products nowadays.
Recently, I've been speaking to some people in the trading/finance industry. One thing which struck me was the nature of software and how most of it was built in house due to its domain specificity. Recently though, its become fairly obvious that this is beginning to change. There have been attempts by various people to Open Source software that is capable of completing such transactions. Some of these are highly specific while others are more general to allow you to add modules of your own to suit your application Obviously, there will be some differences with regards to their suitability for simulations and the real world as well.
It used to be the case that unlocking a communications device could only be done by a service provider for a fairly hefty fee. Now, most devices can be unlocked for minimal cost with only the IMEI number from the device and a program that can be purchased for a nominal fee or even free from the Internet (or increasingly even the handset/service provider). Of course there are other methods as well as such as re-flashing the device with generic firmware. I've also seen Universal SIM card holders/convertors which may require trimming/cutting your SIM card which brings me to another point. One of the more interesting technologies that I've seen is a dual SIM card holder which can be used in your phone in order to provide you with the ability to be able to make/listen to multiple calls at the same time.
All this said, please ensure that your device supports the frequencies required by the network that you subsequently need/want to use.
- come across issues with packages on Debian from time to time. Came up with a following script which basically strips dependency checking ...
- many people are often critical of choices that are often made in other countries. If you think carefully about it, massive loops have bee...
If you're like many others on the planet you probably can't be bothered purchasing a new piece of software in order to test an appl...