Tag Archive: technology


or, Convincing Oneself is the Next Step Toward Insanity.

I’m not a programmer, dammit. I keep telling this to people who ask, and I keep telling this to myself. Yet, here I am, admittedly flailing about more like a yard-guard scr1pt-k1dd!3 than doing Significant Things, but I’ve written another package for your amusement.

This one also starts with technical difficulties in operating the Top Secret Radio Network. When I built the TSRN website, we were broadcasting over a ShoutCast server hosted at tess.fast-serv.com, and things were very simple. Things remained simple when I spun up a ShoutCast server at rbx.topsecretradio.net to replace tess. Things got even simpler when I moved the website to its new home on rbx as well. Then things sat stagnant for a while.

You may recall my post from last month wherein I described a plugin I’d developed for Exaile to support updating title information on a ShoutCast an Icecast server. I realized at some point last night that while I’d switched the server from ShoutCast to Icecast, I hadn’t updated the website to reflect this change.

The website sports a ticker on the right-hand panel that displays current server information, including the stream title, current track, and listener numbers. The ticker is derived (read: ripped wholesale) in large part from the MusicTicker XML package that I located while trying to find something to handle this function. This package hasn’t been updated in years, but it did what I needed it to do, with a minimum of fussing around with it. The problem: it only deals with ShoutCast XML; if you feed it Icecast XML for an active stream, it gags and dies. I wanted to fix this. It shouldn’t be that difficult, right?

Well, it wasn’t that difficult a fix, really; it only involved me staying up until 0500 beating my head on PHP’s supposedly ‘SimpleXML’ parser (which is, I guess, if you’re a stronger programmer than I am). The end result is the beginnings of a replacement, which vaguely resembles MusicTicker.  It’s not quite where I want it yet, and it only really supports monitoring one mountpoint at a time, but it seems to be doing the trick for the moment. I have some plans to work on this some more in the next few days to handle everything I want it to handle, but it’s in a sufficiently advanced state that I felt okay sharing it with everyone. You can get it here:

git clone http://www.dragonsroost.org/src/iceticker.git

Normally, I would release it under the revised BSD license, but because it’s derived from a GPLv2-licensed work, I’ve released it under the terms of the GPLv3. As usual, there is neither warranty nor active support, but I’ll probably answer short questions about it.

or, Learning to Hate Python One Commit at a Time

Most of the time, I’m content to remain Not A Programmer. After all, I’m not. I studied it for a while, and I know most of the basics, but advanced programming and algorithm studies and things like that just don’t interest me. I like doing things with computers, not trying to make them do things. Unfortunately, I found myself in a bit of a bind.

In my Copious Spare Time, I do an Internet radio broadcast for my amusement and the amusement of my friends. It’s fun, silly, and (now that I’m not trying to do it from 0200-0500 Eastern) relaxing. The problem, of course, is that I don’t operate anything remotely resembling a standard amateur rig for doing this. Part of any broadcast rig is music playback software, part of the rig is the streaming software, and part of the rig is a little widget that updates the metadata on the server with the song title information. A lot of software packages exist that tie all three of these components together in one application, but I don’t like any of the options available to GNU/Linux users.

To compensate for not having a handy-dandy all-in-one package that I liked, I found three separate components that I liked and tied them together with some spaghetti. To handle the streaming, I use a package called Darkice. It’s pretty flexible, and it’s super-easy to use. For music playback, I used to use XMMS, but it was deprecated even then and the development team was busily working on XMMS2, which doesn’t work the same. The last part was the trickiest. Neither Darkice nor XMMS will update the stream’s metadata with the current song title, since it’s not a job either of them is designed to do. So, I ended up digging up a little script called ‘shoutcast-titles.sh’ (available here) that would use a command-line HTTP client to update the metadata. XMMS had a plugin that let you run a command on certain events, and I configured everything accordingly.

Time passed.

I no longer use XMMS for my music; it doesn’t do the job I wanted it to do. I started using Amarok 1.4, and was seriously impressed with its functionality. It was well organized, easy to use, and even extensible with a plugin interface. The problem, of course, is that the plugin available for Amarok to update metadata was for Icecast servers only, and I was broadcasting over ShoutCast. I eventually buckled down and started hacking together a plugin for Amarok that would do the job I wanted it to do, but I never actually completed it.

More time passed.

Amarok got ‘updated’ to the new 2.x branch, and I stopped using Amarok. The new interface is ugly, clumsy, and painfully frustrating to use. I lost all interest in developing plugins for Amarok when I stopped using it as my primary source of aural entertainment. Eventually, though, after much trial and error, I stumbled across a project by people with similar enough tastes in music players to me: Exaile. Exile has most of the features of Amarok 1.4 that I really liked, and though it still has a few bugs, it works pretty well. Too, it’s written with a GTK+ interface, where my primary complaint about Amarok was its reliance on KDE (a desktop environment I would rather pass hedgehogs than use). Exaile also supports a plugin infrastructure, which allows for easy extension of functionality through the use of Python scripts. I hoped dearly someone had written a plugin to handle ShoutCast, or even Icecast, updates, but no dice.

I finally had enough. Last week, I broke down and started hacking together a plugin for Exaile to do what I wanted it to do. It took me a while to get caught up on Python; even simple stuff for most programmers takes me hours to puzzle out and implement, because my head’s just not wired the same way. Also, most of the formal study I put into programming was done with Java, which doesn’t look or feel anything like Python to me. The end result, though, is something I’m actually kinda proud of. I actually successfully produced a working plugin, that does everything I want it to, and even includes a configuration dialog to allow for users to set their own servers. Along the way, I stopped using ShoutCast, and went solely with an Icecast approach, so I dropped the idea of supporting ShoutCast with this plugin, but it works quickly and easily with Icecast, and I’m happy with it.

More to the point, I posted it here on this website where you can download it and use it for yourself. I may be updating it with a README file later, or perhaps even packaging it up, but for now, you can get it here:

git clone http://www.dragonsroost.org/src/updatetitles.git

Just put it in your Exaile plugins directory and away you go.

It’s released under the terms of the Revised BSD license, so don’t expect extensive support, but I’ll answer short questions about it if anyone’s curious.

or, Fun and Games with the Black Flag Telephone Company and Faster-Than-Dialup Connections

So, I finally got sick of relying on mobile broadband which limits me to 5GB of data per month before I get throttled to slower-than-dialup speeds. Unfortunately, I still can’t get Verizon FiOS here – the COA Board only just approved the installation, so we won’t have access to fiber optic technology for another five or six months. Suck-tastic, I know, but what can I do?

I called up Verizon- err. Well, actually, I browsed up Verizon, and ordered a DSL line. It’s on a month-to-month plan, because I have no desire to try and terminate a one or two year contract and pay the early termination fees, only to turn around and throw even more money at Verizon for a FiOS line when it becomes available. Of course, they want to try and sell me a technician to install it, and seven million different software packages, and when I finally wade through the order forms and click submit, Verizon says, “Okay! Your new service will be available in two weeks!” Fine, whatever.

The self-install kit I ordered, complete with the (no extra charge) DSL modem, showed up two days later. I proceed to sort through the kit, wonder why they shipped me an ADSL filter wall plate when I didn’t ask for one, and then set up the modem. I didn’t need one of their fancy-schmancy (read, ‘routes-for-shit’) all-in-one modem/router combo kit, since I’ve already got a router I find adequate for the current job. Of course, the router has already given me headaches trying to figure out why it won’t display things correctly when I have it set to use the 192.168.18.0/24 subnet, when it works just fine on 1.0 (the default) and 0.0 (the current setting), but again, whatever.

The day of my service activation rolls around. I make sure the connections are all tight. I make sure everything’s connected in the right place. I turn on the modem. I see blinky lights.

The DSL light doesn’t stop blinking. This is a Bad Sign.

Maybe it’s just me, but isn’t the DSL light supposed to stop blinking when it acquires and address? Yeah, it’s not just me. It’s not getting a connection.

I called up Verizon tech support and get walked through the automated system that runs a few tests, makes sure I’ve got everything in the right place, etc, etc, ad nauseam. I finally got a real person on the line, and they tell me, “I need to run a line test before I can schedule you for an appointment with a technician.” …didn’t I just get a line test run, by your automated system? Meh, sure, fine, run it, it’s just going to fail in five minutes anyway. I got an appointment for a tech to come out the next Friday, between 13:00 and 17:00.

Naturally, 17:00 on Friday rolled around and the tech hadn’t shown up; when 18:30 rolled around and they still hadn’t shown, I called Verizon dispatch to reschedule and get answers about why the tech didn’t show. Naturally, dispatch gave me the run-around, tried to convince me I was calling the wrong department, and then finally walked me, again, through another line test and then scheduled another appointment. And, oh, by the way, did we mention that if you live in an apartment building, we need the code to get in? And we’ll need access to your building’s phone box? Well, no, no one bothered to tell me this the first time; I’ll need to call the building manager and make arrangements to get access to the electrical room. And, no, you can’t have my building’s entry codes – you should have the utility provider codes already, and if you don’t, that’s not my problem, take it up with our management. I finally got the appointment scheduled for this morning, 08:00 to 12:00.

This time, fortunately, the tech showed up. I got a call from Verizon dispatch at about ten after eight, reminding me that someone over the age of 18 needed to be on the premises, and that the tech would be arriving within 30 minutes. It only took about 15, but then, the Verizon building is about a mile from here and I’m pretty sure I was the first appointment today.

The tech came in, took a look at the modem, took a look at the line, took a look at the jack, and then said, “Something’s not right. Lemme fix that for you.” He promptly plugged the line into a tone generator, and asked me to take him down to the electrical room. We got in, he looked at the Verizon box for all of about sixty seconds, waved his sounder over the jacks, plugged one in, and told me, “Well, it looks like whoever came to do the dry-loop installation forgot to plug your unit back into the box. Let’s go back upstairs to test this out.”

I blinked for a few moments, then shook my head and we came back upstairs. This whole mess was because whatever fruitcup had come to install the dry-loop connection had forgotten to plug me back in? Schmuck.

Got back up to the condo, plugged the modem in, got everything configured, and now here I am, posting from the new DSL.

When FiOS comes, please, lets not have this same problem, yeah?

Last Friday, I ordered a new cell phone. Up until now, I have steadily resisted the move into the 21st century of cellular telephone technology, simply because a) I never needed a phone smarter than I am and b) I didn’t really like the available smartphones that much. I mean, yeah, the G1 was nice, and Android was pretty neat, but I never really wanted to own one flat out.

I do, now. I finally broke down and bought one of these. I finally got up the gumption (and the money) to break into the 21st century of technology. It doesn’t hurt that, though not the kickassinest, it is still a very kick-ass miniature computer.

Heck, because Verizon is dragging their asses on rolling FiOS into our building, I’m even proving how kick-ass this phone is by posting this post over a Wi-Fi tether to my phone. One that I didn’t have to root my phone to use, even. Android 2.2 (FroYo) supports tethering out of the box, both USB and Wi-Fi. It’s kinda nice, being able to use my own God-forsaken broadband for a change :)

Hopefully, Angel will be able to do some real research in the evenings, now. I say in the evenings, because during the day, the phone goes with me ;)