Major Server Updates

I have moved everything to a brand new UML-based server! I am also in the process of updating some major components of the web site. Returning visitors should notice a new layout. If you are unable to access a page, or if something seems out of place or broken, just check back in a day or so. Exciting times! I’ll have more news to post in the next few days.

Music Box: Moto

What started as a rebuild of my Networked Music Box, will hopefully be turning into a media PC for my Jeep. I plan on having it sync to my music shares over NFS and 802.11g WiFi, when in range (i.e. pull up in the drive way). It will be able to play back video and music on the system. I’ll be installing a small LCD screen over the glove compartment. The PC will be in the back, and I’ll be using an ATI All In Wonder RF remote, for which I have already written software, to drive the system. It will also be a wardriving system. Maybe a motorized pringles can directional antenna will be in the future too.

I’m sure I’ll be writing some kind of software for this system. I just don’t know what yet. But for starters, I purchased a D-Link DWL-G510 802.11g PCI adapter. I didn’t give much thought to it, but when I installed it, there was no support in Linux 2.6.10. Searching for device drivers for “DWL-G510” yeilded no results other than to use ndiswrapper. I was about to go this route, however, when I was configuring the kernel for the new system, I had taken a look at /proc/pci to see what I needed to enable. I noticed that the chipset for the DWL-G510 adapter was from Atheros Communications. So instead, I searched for drivers for “Atheros.” This yeilded something nice! The MADWiFi project is developing a driver for the Atheros chipset. It’s currently only available through CVS, but I checked the sources out and built the driver without problem. After a little tinkering with interface commands and wifi tools in Linux, I had working WiFi support with the card.

The new system is Slackware 10.1 on top of a custom 2.6.10 kernel. I don’t like the provided rc.wireless RC script, so I wrote a simpler one, tailored to my (basic, current) needs. It may be useful to you!

<br /> #!/bin/sh</p> <p>INTERFACE=&#8221;ath0&#8243;<br /> ESSID=&#8221;My Network&#8221;<br /> CHANNEL=6<br /> KEY=&#8221;FFFFFF&#8221;</p> <p>function start {<br /> echo &#8220;Bringing up wireless interface $INTERFACE ($ESSID)&#8221;<br /> modprobe ath_pci<br /> ifconfig $INTERFACE down<br /> ifconfig $INTERFACE up<br /> iwconfig $INTERFACE channel $CHANNEL essid &#8220;$ESSID&#8221; key $KEY<br /> dhcpcd $INTERFACE<br /> }</p> <p>function stop {<br /> echo &#8220;Bringing down wireless interface $INTERFACE ($ESSID)&#8221;<br /> ifconfig $INTERFACE down<br /> }</p> <p>function restart {<br /> stop<br /> start<br /> }</p> <p>case &#8220;edit_entry&#8221; in<br /> &#8216;start&#8217;)<br /> start;<br /> ;;<br /> &#8216;stop&#8217;)<br /> stop;<br /> ;;<br /> &#8216;restart&#8217;)<br /> restart;<br /> ;;<br /> *)<br /> echo &#8220;usage start|stop|restart&#8221;<br /> esac<br />

Change of Sonance Plans

After a few posts about Remix (now named Sonance), and getting ready for the first public release, I had a sudden life changing experience as a developer. I discoverd development under Mono. After quickly learning C# and exploring the .NET libraries and the GNOME/GTK bindings for Mono, I wrote a few test programs, and started rewiriting/porting Sonance to C#. Amazingly, the power of the language and bindings are allowing me to more efficiently develop Sonance, and in much less time. In just one week, I have re-developed Sonance with less code, to the same point that the C version was developed in about a month.

The major struggle was the lack of good documentation on the GStreamer bindings for C#, gst-sharp. I have been able to find about three gst-sharp applications. And honestly, and with no disrespect to their developers, their implementations are not very solid, nor featurefull. So in addition to porting Sonance, and developing a much better code base, I have developed a strong gst-sharp player with metadata support.

I am really excited about the rewrite, and new beginnings with the Mono platform. I still love C, but welcome the ease and power of this new platform. It is clearly the new path for GNOME, and I am glad to be a part of it.

The Day of New Stuff: Sonance, SQLite, GOCBuilder

I’m checking in again with some status reports and two new pages on the site. First, I have decided to name my previously mentioned Remix player to Sonance. I am very happy to report that development is going very strong, and I hope to make the first public release by the end of this week. I came to the conclusion that redeveloping yet another GStreamer backend is futile. I have decided to use the GStreamer playback and metadata code from the RhythmBox project. I have also decided to use SQLite as the library database backend. I’ll post with more details when I make the first release.

I am also happy to report that I have written a small article on embedding SQLite within a GNU/Linux autobuild C project. Documentation was not to be found on this matter, and after spending a few hours tinkering with SQLite, I managed to embed the entire engine in Sonance.

Finally, because Sonance is growing rapidly, I was finding myself constantly copying and pasting GObject Class templates from other sources in the project, only to perform many search/replace actions on certain strings to create a new class framework. I decided to take a few hour break from Sonance, and write GObject Class Builder, a very small, ugly Glade/C hack to produce a basic GObject Class template, based on a few levels of input. I added GOCBuilder to my Anjuta Tool Set, and now it’s just a matter of Project|GObject Class Builder, and a few fields to generate a base GObject Class.

That’s all for now. I’ll write next when Sonance makes its debut!

Back to Business

My trip to Santa Barbara concluded yesterday as I arrived back in Raleigh at about 5 in the evening. The first flight, from Santa Barbara to Dallas was pleasant. It allowed me to get about an hour of sleep. From Dallas to Raleigh however was atrocious. It seems commonplace: I was sitting next to a loudly vocal toddler, who was also enjoying crawling on me. In the row behind me, there were three more babies/toddlers, all of whom were equally vocal, and came with the added bonus of the wonderful ability to kick my seat. The parents were obviously oblivious to their childrens’ actions, or maybe they thought it was cute.

I’ve noticed something odd. Since I started carrying my cell phone in that convenient little “change” pocket above/inside the normal front right pocket on most jeans, and having the phone vibrate before ringing, the muscle located right below where the phone sits spasms mildly at random times… and the phone isn’t vibrating. Very odd indeed.

I must get back to work – back into the flow of things, and catch up with life on the home front. I look forward to returning to Santa Barbara when the weather is better. 90% of the two weeks was spent indoors due to the massive rainfall, which lead to mild flooding and some mud slides. Oh well.

Remixing Life

After spending 24 hours in the air or in an airport, I finally arrived in Santa Barbara, California on Tuesday morning. I flew out of Raleigh (NC) at 3:30 to Chicago. My flight was delayed in Chicago by an hour. I arrived in Los Angeles at the same time my flight from LA departed for Santa Barbara. Needless to say, I wasn’t happy. We sat on the tarmack for another 15 minutes. I checked in with American Airlines (AA) support/ticketing center at LAX. They were great. I had already been automatically rebooked on the first flight to SBA for the next morning (my original flight to SBA Monday night was the last one for that evening). AA gave me a hotel reservation for the LAX Marriott along with two meal vouchers! It was a painless process to get to my free room and then back to LAX the next morning. So, as of Tuesday morning, I’ve been having fun in California.

I haven’t yet managed to purchase a new laptop. I’m torn between three models. A Sharp Actius MM20, some ultra-mobile Sony Vaio, and… gulp… an Apple PowerBook (12″). I’m currently on a iBook G3, using OS X 10.3. I love it. There’s so much innovation in this operating system. I’m just not totally comfortable using it. Though it’s smooth and beautiful, it really does feel “closed” (as in source code). I’m installing XTools from Apple, which apparently include gcc and other open-source tools. If I do get a PowerBook, I’ll be putting a PPC Linux distro on it.

I think I like OS X so much because I see basically what’s coming to GNOME, and what I’d love to one day contribute. For example… I’d love to write Sherlock for GNOME.

I’ve also been enjoying playing with iTunes. This inspires me because I am in the middle of writing an ultra-powerful Music playback/library program for GNOME. iTunes has some of the features that I have in mind for my program, but I have much planned that isn’t implemented in iTunes.

I’ll be writing code like crazy when I return home, but for now, I’m relaxing in beautiful Carpinteria/Santa Barbara California.

Happy Holidays!

Remix Player: Another GNOME Audio Player

This new project started last week. I’m calling it ‘Remix Player’ for the moment, and currently it reads/writes metadata, plays audio using GStreamer, and can lookup metadata information (fetch album cover images) via an Amazon.com Web Services client I wrote. I’ve never been 100% satisfied with the audio player selection in GNOME. I have somewhere around 5000 songs; my library is comprised mostly of a ripped version of my physical CD collection, all in OGG format. The directory structure where I store my music is organized (Artist Name/Album Name/01. Artist Name – Track Name.ogg).

Before I go into too much depth, I’m just going to say it: I started writing an audio player tailored specifically to my multimedia desires. It will include killer playlist/library management (with separate playlist and library interfaces), an Amazon.com Web Services client to look up additional metadata information (particularly to fetch an album cover image!), and it uses GStreamer 0.8 for audio playback, so whatever GStreamer can play, my player can play.

Because I generally like the concept, I have been using mpd for quite some time. It keeps a database of my music collection for fast metadata searching. My problem with mpd is the lack of a good client front end. I really like gmpc, especially with my mpcstick2 hacks applied, but it’s lacking so many features, particularly good library/playlist organization. Also, due to the client/server nature of mpd, there is much that cannot be implemented (such as visualization plugins) in a client.

Then there’s RhythmBox. It’s cute. Kinda like iTunes. I’ve never been too fond of RhythmBox, though I have much respect for it. It always seems slow, and the interface is too big. It has decent library support, but not really good playlist support. I think it’s good to have a separate playlist and library. I don’t always want to play music directly from my organized library. Sometimes I just want to listen to a standalone media file, without having it merged into the library. RhythmBox does not separate playlist from library. RhythmBox also crashes a lot. I do however like the iRadio support. There aren’t many visual stimulations in RhythmBox either.

That brings me to XMMS/Beep. I haven’t used the legacy XMMS in about a year. I do like the Beep Media Player, which is a GTK2 port of XMMS. It’s basically the same thing. Playlist support in Beep is decent, but there’s no library support. I like the visual stimuilation of Beep, with the skins and nifty bar visualization thing. It also has a straight forward, but basic tag editor, and good plugin support. So I use Beep often for listening to music outside of my complex library.

What I am developing is somewhat of a hybrid of mpd, RhythmBox, and Beep, and I’m mixing in some cool new features that don’t exist in any other program that I am aware of. My goal is strong library support, great playlist support that has the ability of being separate from the library (so I can listen to “standalone” music), metadata searching through various web services (for album cover fetching, concert dates, web sites relating to the band, etc.), visualization effects (like iTunes), a collapsible interface, GNOME tray support, mpcstick2 integration, xosd support, and much more.

So what do you want in an audio player?