After digitising our vinyl/cdroms onto disk, I had been struggling with how to solve the problem of playing and distributing our music without some of the costs and complexities of cabling or messing with the black art of 802 wireless with brick walls, hands free handsets and washing machines.
Our place is an older style double brick cement rendered place which is great for keeping us cool in summer and warm in winter, but crap for modern networking. Getting the place re-wired is planned, but given the construction, it is neither a cheap or immediate solution, so all I wanted was a simple solution for the interim, till something more comprehensive could be setup.
A re-wire would also be a prerequisite for one of the high end distributed media systems, but aside from the cost, allowing myself to being locked into one system with my home stereo just was not going to happen. The problems around DRM and copyright are enough without letting it interfere with my choice of hardware around the home.
Using 802 wireless is great for general laptop connectivity but is not as robust as cable, and however much I played with different streaming servers and buffer sizes, when the neighbours' washing machine starts the music stops. It may go for hours at a time, but having to restart the music player in the middle of a nice piece of music is quite annoying. It would not survive the better half test.
After playing with a media player and trying out one of those little radio transmitters for using it with car stereo, I wondered if the same technique could be used as a possible solution for playing our music collection in anywhere in the house. The quality of the little car transmitters was a bit crappy, and in builtup areas it is hard to find a frequency sufficiently clear to have a good signal, but maybe a better transmitter would help.
After some digging around, I found this interesting thread on the whirlpool forums, which had a reference to a transmitter by Fordray Eletronics.
Ahh, this sounds cool, and yep, a day later I was up and running my own personal FM radio station, broadcasting our music through the house and into the studio. The quality is, well, radio quality. All the same, it is great FM radio quality with stereo, and I would find it hard to tell if it was not a CD being played. People in heavily builtup areas may not have as much success due to the proximity to commercial transmitters.
A very very simple and cheap setup, just used an audio splitter cable from the headphones port on the laptop connected to the two channel inputs on the transmitter for stereo fm broadcasting. The transmitter has a small button for setting the frequency to a quiet spot, then just tune your FM Stereo in to the same frequency.
The laptop, an old Lenovo/IBM Thinkpad with Ubuntu 8.10 Ibex and enough space for the music collection, and Rythmbox, the default Ubuntu media player.
The best part is that I do not have any software tuning to syncronise multiple music player devices for whole of house sound.
Thursday, December 11, 2008
Linux media server multi-room music with an FM radio transmitter, or why setup your own radio station
Tuesday, October 28, 2008
linux multimedia - simple media server
The problem with multimedia on Linux is really one of too much choice. From desktop players such as Banshee and Amarok to specialist pro audio production systems like Indamixx, and full on media centre servers that integrate with home automation, telephony and security, the challenge is more about deciding what you want to do for how much than what is available.
A simple setup I did for a young family recently was to setup a Mediagate media player for storing and playing a large digital music collection, and as a bonus, it could double as a NAS backup device for their laptop, display their photo collection, and play the odd home videos from their mobiles or friends camcorders.
All they had was a large laptop, a small house, a big TV/home theatre/DVD system, broadband and portable mpeg players. Playing music or videos in any other room at the same time would be silly, as playing any media would be heard everywhere in the small house anyway, and all activity centered on the lounge room/kitchen space anyway. There was no space that could be dedicated to a PC let alone dedicating space for a server.
It was very simple to setup, just put a disk into the enclosure(I used a 250G sata disk), plugin the TV, speakers and some power, then just a network cable to the broadband modem/router. It sits unobtrusively and quietly next to the TV.
The setup interface is through the TV, not pretty but is very simple and utilitarian and is not something you need more than once anyway.
NDAS works fine for both backing up data and sucking down music for loading onto their portable mpeg players for the car/train trips. NDAS is supposed be be connected via ethernet, but works fine with the laptop connected wirelessly to the modem/router, which in turn is connected via ethernet cable to the Mediagate player. So loading photos, videos, and music is all done through the laptop and NDAS. USB is an option as well, but why get up from the couch when NDAS works reliably!
The playback is fairly straight forward through the supplied remote control and on screen interface. The only real criticsm is that the navigation is quite primitive and limited. For example you need to start with the media type, navigate through the folders and select, and if you wish to play a different media type in the same directory, you need to go all the way up, change media type, and back down the tree.
As is, the people are happy, probably as they store mainly by media type so it is not as noticeable, eg mostly for playing their music collection, but it would bug me enough to look at updating the firmware.
That is what is great about gpl software, there are custom firmware images around, and if you have a need and some time you have the freedom to have a go yourself.
A simple setup I did for a young family recently was to setup a Mediagate media player for storing and playing a large digital music collection, and as a bonus, it could double as a NAS backup device for their laptop, display their photo collection, and play the odd home videos from their mobiles or friends camcorders.
All they had was a large laptop, a small house, a big TV/home theatre/DVD system, broadband and portable mpeg players. Playing music or videos in any other room at the same time would be silly, as playing any media would be heard everywhere in the small house anyway, and all activity centered on the lounge room/kitchen space anyway. There was no space that could be dedicated to a PC let alone dedicating space for a server.
It was very simple to setup, just put a disk into the enclosure(I used a 250G sata disk), plugin the TV, speakers and some power, then just a network cable to the broadband modem/router. It sits unobtrusively and quietly next to the TV.
The setup interface is through the TV, not pretty but is very simple and utilitarian and is not something you need more than once anyway.
NDAS works fine for both backing up data and sucking down music for loading onto their portable mpeg players for the car/train trips. NDAS is supposed be be connected via ethernet, but works fine with the laptop connected wirelessly to the modem/router, which in turn is connected via ethernet cable to the Mediagate player. So loading photos, videos, and music is all done through the laptop and NDAS. USB is an option as well, but why get up from the couch when NDAS works reliably!
The playback is fairly straight forward through the supplied remote control and on screen interface. The only real criticsm is that the navigation is quite primitive and limited. For example you need to start with the media type, navigate through the folders and select, and if you wish to play a different media type in the same directory, you need to go all the way up, change media type, and back down the tree.
As is, the people are happy, probably as they store mainly by media type so it is not as noticeable, eg mostly for playing their music collection, but it would bug me enough to look at updating the firmware.
That is what is great about gpl software, there are custom firmware images around, and if you have a need and some time you have the freedom to have a go yourself.
Labels:
every day open source,
linux,
mediagate,
multimedia
PHP Zend Framework and Oracle
Hmm, been ages since the last post, how time gets away - been pre-occupied getting my head around building applications in the Zend PHP Framework and hooking them up with Oracle. In other words, my recent love-hate relationship with the Zend Framework and Oracle!
The Zend Framework is relatively young, so while it is missing some features and documentation, it has an elegance and depth that allows some powerful re-use and extensions of Zend classes.
For example, being able to build forms on the fly based on either an ini file, xml document, array or xml loaded from a database is very cool. To also incorporate fancy ui functionality and validations with the Dojo integration at the same time is just fantastic.
Flexibility can often mean more code, so there are trade offs for the flexibility. The performance trade off may not be that big a deal, particularly with larger applications that are easily modularised with Zend, and taking full advantage of caching using the Zend_Cache class in conjunction with a backend opcode cacher such xcache.
The documentation makes for a steep learning curve though, especially if you are used to something well documented like Codeigniter. As another developer said after reading some information on a zend class, "OK, it is great that the class can do all that, but how? Where do I find the detail? Are there any examples?"
At this stage, the only real practical answer is by looking at the Zend Framework source code. It has not been around long enough to generate enough quality sample code to learn from, though there are some nice samples starting to pop up. Also, the framework itself has frequent and significant changes which may work slightly differently in older samples, particularly if samples used incubator components.
A big benefit though particularly over time, is that rather than the documentation being a separate, after the fact set of html pages, the documentation is highly structured, and makes strong use of standardisation and docbook formats.
The completely optional but highly structured modular layouts of the file system determining class nomenclature (and vice versa) drove me completely batty, and I still don't get some of the relationships of class to location. My logistics background keeps screaming that putting logic in a name or identifier is the way to madness!
I also spent quite a bit of time fighting the framework sometimes. Abstracting everything to the nth degree, heavy use of the PHP5 object orientation capabilities, made me want to scream "come down outta the clouds and let me write some simple crap code that I could copy and paste into every function in every class file". So it taught me quite a few things as well.
Some things though are not so elegant, the Zend_Paginator for example is a really cool class for handling the pagination of data, and can handle arbitrary data not just database data.
Two items threw me though. I did not (and still don't) get why the Paginator can only use Zend.DB.Select being passed to it and not Zend.DB.Table, as both are similar abstractions for generating sql for retrieving data.
In fact you can supposedly create table joins with DB.Table as well as the DB.Select but at the time I didn't have any success doing this function. A moot point though as the paginator needed DB.Select classes passed into the factory method.
A little gotcha I found that maybe of interest to other oracle backend sites, is that the paginator generates the limit component of the sql statement with a column alias for counting the rows. OK for mysql, but depending on the installation and driver for Oracle, Oracle takes the generated sql, turns the alias into upper case, and then the paginator cannot find the column. The fix was just changing the constant string for the rownum alias.
Extending the DB.Table class is actually alot of fun, and is fantastic for extending the functionality of tables in a database where you need a database agnostic way to apply common insert, update, delete or even select functionality such as adding a calculated column or automatically setting column values instead of using triggers. eg setting the userid of the web user logged in, rather than the account used by the application to login to the database.
The Zend Framework is relatively young, so while it is missing some features and documentation, it has an elegance and depth that allows some powerful re-use and extensions of Zend classes.
For example, being able to build forms on the fly based on either an ini file, xml document, array or xml loaded from a database is very cool. To also incorporate fancy ui functionality and validations with the Dojo integration at the same time is just fantastic.
Flexibility can often mean more code, so there are trade offs for the flexibility. The performance trade off may not be that big a deal, particularly with larger applications that are easily modularised with Zend, and taking full advantage of caching using the Zend_Cache class in conjunction with a backend opcode cacher such xcache.
The documentation makes for a steep learning curve though, especially if you are used to something well documented like Codeigniter. As another developer said after reading some information on a zend class, "OK, it is great that the class can do all that, but how? Where do I find the detail? Are there any examples?"
At this stage, the only real practical answer is by looking at the Zend Framework source code. It has not been around long enough to generate enough quality sample code to learn from, though there are some nice samples starting to pop up. Also, the framework itself has frequent and significant changes which may work slightly differently in older samples, particularly if samples used incubator components.
A big benefit though particularly over time, is that rather than the documentation being a separate, after the fact set of html pages, the documentation is highly structured, and makes strong use of standardisation and docbook formats.
The completely optional but highly structured modular layouts of the file system determining class nomenclature (and vice versa) drove me completely batty, and I still don't get some of the relationships of class to location. My logistics background keeps screaming that putting logic in a name or identifier is the way to madness!
I also spent quite a bit of time fighting the framework sometimes. Abstracting everything to the nth degree, heavy use of the PHP5 object orientation capabilities, made me want to scream "come down outta the clouds and let me write some simple crap code that I could copy and paste into every function in every class file". So it taught me quite a few things as well.
Some things though are not so elegant, the Zend_Paginator for example is a really cool class for handling the pagination of data, and can handle arbitrary data not just database data.
Two items threw me though. I did not (and still don't) get why the Paginator can only use Zend.DB.Select being passed to it and not Zend.DB.Table, as both are similar abstractions for generating sql for retrieving data.
In fact you can supposedly create table joins with DB.Table as well as the DB.Select but at the time I didn't have any success doing this function. A moot point though as the paginator needed DB.Select classes passed into the factory method.
A little gotcha I found that maybe of interest to other oracle backend sites, is that the paginator generates the limit component of the sql statement with a column alias for counting the rows. OK for mysql, but depending on the installation and driver for Oracle, Oracle takes the generated sql, turns the alias into upper case, and then the paginator cannot find the column. The fix was just changing the constant string for the rownum alias.
Extending the DB.Table class is actually alot of fun, and is fantastic for extending the functionality of tables in a database where you need a database agnostic way to apply common insert, update, delete or even select functionality such as adding a calculated column or automatically setting column values instead of using triggers. eg setting the userid of the web user logged in, rather than the account used by the application to login to the database.
Thursday, July 24, 2008
Life Drawing, easels vs tables, and parallax errors

Surprisingly, nearly all the life drawing group venues I have been to have poor lighting and seem to prefer chairs and tables over easels.
The best so far in terms of space and facility is one that has the use of a local schools' art department. The funny thing is that even with a choice, most members still use chairs and tables.
Maybe it is tiredness from the day job, the endless demands due to the large volume of art commissions, laziness, or some other reason, but drawing on a pad flat on a horizontal table creates some interesting drawing problems. Here are some tips to learn both why and how using an easel makes learning to draw that much easier!
First, plain old logistics. If easels were used, twice the number of people could use the same space comfortably, the shared cost of the model would be halved, and the choice or position would be much more flexible.
The next problem that arises, is parralax. Fine if you are Tiepolo Battista designing a mural to be viewed from an oblique angle in a german castle, but even trying to keep the distortion consistent would be difficult with your head and upper body moving around and changing the angles.
One advantage of standing in front of an easel, is that with some basics, it is very easy to keep a consistent viewpoint. This is a very big part of being able to measure the relationships between planes and angles that you see, and placing them in the same relationship on a piece of paper.
Place your easel at an angle or to the side of the model, ie not between you and the model, and ensure the easel is perfectly flat when you turn your head to look at the paper.
Another way of explaining it is that you should imagine yourself as the centre of two circles, the outer circle has the model, and the inner circle has the easel, but moved around the circle a litlle to the left or right so you can see the model.
Stand an easy arms length from the easel and pick out some marks on the floor for your feet. Because you are standing, gravity makes our job even easier, because if you move your head away from alignment you will feel like falling over. This means we only really need worry about our feet placement, as the head will tend to be in the same placement when looking at the easel and the model.
Now the hard part - ensure your feet are always at the same point throughout the duration of your drawing.
Sounds easy, but you will be tempted to shuffle about, move closer and further away from the easel at various times without you even being aware of it. If you do, then for example the left leg may be out of proportion or relationship to the right leg, because you measured each from different points of view.
Just check your feet against the marks on the floor regularly, and at least the parralax issues should not be in your way to learning how to do better drawing or painting.
Cannot mount usbkey with asus eee with ubuntu-eee 8.04 installed
Just delete the /etc/fstab line that contains the cdrom entry.
Probably happens when installing from usb, imagine it makes an entry in fstab to mount the iso. So unless all your usbkeys are of file type ISO-9660, you will get errors on insertion. Doddle to fix tho.
Probably happens when installing from usb, imagine it makes an entry in fstab to mount the iso. So unless all your usbkeys are of file type ISO-9660, you will get errors on insertion. Doddle to fix tho.
Friday, July 11, 2008
Review: Cory Doctorow - Little Brother
The eee came in handy for reading Little Brother by Cory Doctorow on the commutes last week.
For all the good intentions, I just could not be bothered trying to do any coding. The cool, geeky take on current day orwellian society was a fantastic distraction from the snoring, snuffling, chip munching conga line of beige arseholes that make train rides hell.
The tag of the main character is w1n5t0n, which seems straight from Orwell's 1984 lead, Winston Smith. Little Brother demonstrates the timelessness of Orwell's 1984 story, shoehorns lots of hands on, cool tech which is all available today, challenges existing copyright and distribution models, and most importantly of all(to keep the train trolls out of scan) is also a fantastic read.
Download it, read it, copy it, give it to your friends, or publish your own a remix version, all at Cory's behest.
You can also buy an analogue version (See Cory's site for outlets), think I might get one for my grandson so he gets some survival skills early on in life!
For all the good intentions, I just could not be bothered trying to do any coding. The cool, geeky take on current day orwellian society was a fantastic distraction from the snoring, snuffling, chip munching conga line of beige arseholes that make train rides hell.
The tag of the main character is w1n5t0n, which seems straight from Orwell's 1984 lead, Winston Smith. Little Brother demonstrates the timelessness of Orwell's 1984 story, shoehorns lots of hands on, cool tech which is all available today, challenges existing copyright and distribution models, and most importantly of all(to keep the train trolls out of scan) is also a fantastic read.
Download it, read it, copy it, give it to your friends, or publish your own a remix version, all at Cory's behest.
You can also buy an analogue version (See Cory's site for outlets), think I might get one for my grandson so he gets some survival skills early on in life!
Monday, June 16, 2008
the ultimate commuter dev machine - ubuntu hardy 8.04 on eee pc 900

Have picked up an eee pc 900, and it is the coolest toy I have played with for ages. Zapped it with eee ubuntu, an Ubuntu Hardy 8.04 with then set up the lamp stack, eclipse, and virtualbox. Setup the awn taskbar launcher, as it makes it easier to utilise the small space.
One thing to remember though, is that it is important to update the key capture definition in the virtualbox settings before you start your guest. It will will capture your mouse and wont let go till you press the right ctrl( which is the default), which is err, missing from the eeepc keyboard for space reasons.
Subscribe to:
Posts (Atom)