MPD Music Server – A followup

So a week or so ago I posted about setting up a music server based on MPD. The whole setup has been running along for a few days now, and so far I’m impressed.

There were still some loose ends from the original install. One was getting audio streaming working properly (the initial install was just playing through my Bose Lifestyle system via a patch cable). I wanted to be able to stream audio to laptops and other computers. This required setting up Icecast – a feat not as complex as I feared. Icecast is in the Ubuntu package archives, so installing it was just a matter of “aptitude install icecast2”.

(no subject)Configuring Icecast and MPD was pretty simple as well – I followed a few references on the net, and had it running in about 10 minutes.
One of the other changes I did was moved from using Sonata to using GMPC from Qalaxy. I found it has a much better interface and is more comprehensive in it’s functionality.

The other client I installed is called ‘Pitchfork’ – a PHP + Ajax based web client. Unfortunately, it appears to have gone into abandonware mode, and it’s website is down. I found someone on #mpd on Freenode that had a copy of it, and I installed that directly. It’s a handy, decent web front end that has the added bonus of having a built in audio streamer – so you can listen to the Icecast stream directly via the browser. Nifty.

The rest of my time has been taken up importing music. I had various music archives lying around, and of course my own fairly hefty CD collection. Ripping CD’s seems to go fairly well using Grip – even so, it’s a slow process. Fortunately I can do it while doing other things – I just haul down one of my cd books, and start feeding them to the laptop. When I finish a few gigs, I copy the entire directory over to the server, and tell MPD to update.

dbs@yawl:~$ mpc stats
Artists:   1459
Albums:    2066
Songs:    25235
Play Time:    2 days, 16:12:08
Uptime:       3 days, 12:05:52
DB Updated:   Fri Nov 28 22:15:14 2008
DB Play Time: 73 days, 7:11:13

I’ve introduced the roommates to the server, and pointed out how they can listen to music stored there. Having only one audio stream is going to be a problem as more folks are interested in listening to what is stored there, but for now, being able to save and update shared playlists and switching the current music around remotely is a big enough win, I’m not going to worry about the next stages until after we move.

Compiz memory leak?

Recently I’ve started working on an all-linux laptop (named ‘algol’, more on this later), and I’m enjoying using Compiz as my compositing window manager.

Unfortunately, I’ve noticed a problem with memory usage. It appears to be connected with suspending and resuming the machine (which works fine, except for this). Compiz memory usage skyrockets on restart:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
4610 dbs       20   0  848m 626m 5068 S    1 31.2  13:40.13 compiz.real  

(Yep, that’s a resident size of 626 megabytes, on a 2gig laptop. I’m a Java developer, I’m used to large memory footprints, but when your window manager outshadows the footprint of your IDE, J2EE server, and compiler by a factor of 4, something is amiss).

After a logout / login, the footprint drops to ‘sane’ :

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
14990 dbs       20   0  221m  17m 6552 S    0  0.9   0:00.98 compiz.real 

A very fast suspend / resume I just did did not make the footprint grow… I’m wondering if it has to do with big screensavers or something (since last time I restarted, it came back up running a GL screensaver). More details when I have ’em, but anyone have an idea what might be causing this? I hate having to restart my entire desktop environment when I resume.

Music Server Remote Access with MPD.

It seemed like a simple question. Consider the problem of [a], a collection of ripped music from a large CD collection, [b] a server containing said mp3’s, located on a bookshelf in the corner, [c] a very nice Bose Lifestyle 48 audio system, and [d] a couch potato like myself wanting to listen to that music, but not willing to walk over to the workstation, hook up a monitor (it’s normally headless), and play something.

There were several things I wanted under the general heading of “I want to listen to music stored on that machine,” but no clear path in sight.

So how to approach this problem?

Continue reading “Music Server Remote Access with MPD.”

Frustrating Eclipse + Ubuntu + JVM Crash

I’m spending some time setting up a new Linux environment for CONGO development – mostly because I haven’t used a Linux desktop for heavy J2EE work in quite a while, and I have a decent laptop available to run it on.

The problem is the JVM is crashing regularly on the machine. I end up with a huge crashdump file, but the gist of it is:

# An unexpected error has been detected by Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f22e44e025a, pid=31427, tid=1077770576
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (10.0-b23 mixed mode linux-amd64)
# Problematic frame:
# V  [libjvm.so+0x1f125a]

Normally the JVM under Linux is amazingly stable, so this sort of internal crash is really puzzling. I’m going to post on the Sun forums for help, but just wanted to vent a little frustration here. Grr!

UPDATE Apparently this is a known bug in the JVM that is tickled on 64 bit systems, and has been around for a while. There’s a couple workarounds posted on the bug page at bugs.sun.com

Randomness…

Misc ramblings, just have to get them out there.

  • KDE4 – Not Ready
    KDE4 is so not ready for prime time. Or maybe it’s whatever version is currently bundled with Hardy. Ick ick ick. Not stable, unuseable, bleah.

  • Struts2 – So far so good
    I’m getting into the proper mindset to go “Make that, wire it up, go.” in S2. I’m missing a good powerful JPA layer though – too late to roll Hibernate into v2.0, but I so see it in the future.

  • Laptop battery, not so good
    clipper has a dying battery. After 3.5 years, I’m not surprised, but it is sad. I’m only getting 15-20 minutes out of it now, the question is replace the battery or the laptop and the battery. Decisions decisions.

  • Scratch is still cool
    Zach is still totally emfatuated with Scratch. I watched him ‘program’ for a bit today, and he clicks and moves components around with the best of them. He even figured out how to get it to generate an error and pop up a diagnostic window (“Cool, huh? What is that?” “That’s smalltalk.” “Neat!”), etc. Ahh, my little hacker.

  • Work kicks my ass
    Tech Barbie says “Work is hard!”. It is – it’s taking up a huge portion of my brain and focus, which is something I’m not used to. I finish the day drained and wrung out, but still force myself to get code done for Congo before falling over for the night.

  • Hudson is cool
    We have a hudson install going on one our servers. It’s doing continuous integration builds and deployments. FAR better than the hacked up scripts of yor. Need a new build? *click* Build in progress!

  • Perl made tolerable
    I’m still stuck with working on perl sometimes. But if I have to go total immersion, I’ll likely use EPIC. It’s a Perl IDE plugin for Eclipse, and actually seems to work. Very tasty.

Nuff rambling. Back to the grindstone.

The weekend. Let me tell you about it.

So this weekend had me out to Ubercon down in NJ. All in all, things went pretty well. It was the second time I took Zach with me to an event, and he and blk’s son Justin had a riproaring time gaming, socializing, and geeking.

On a personal level, this wasn’t one of my banner events. It’s been a while since I ran at at-con registration of a reasonable size, and a lot of things conspired together to fail so that, by today (the last day of the con), I felt pretty down about my showing. Let me esplain. No, there is too much, let me sum up.

  • Mame – My MAME cabinet, which I’d been hauling down to Ubercon for now the third event, gave up the ghost last week. deathstar refused to boot, and I almost cancelled bringing the machine. The UC folks happily offered up some spare hardware, and I decided to bring the machine down. Early Friday morning I did an emergency load of Kubuntu 8.10 on a spare laptop, installed my MAME drive that has my roms in as an external drive, and configured up KXmame. The end result? Unstable, video modes not working right, and general bleah. I managed to keep it limping along through the weekend, but it was not the glorious, elegant machine of the last event. There needs be work here.
  • CONGO – Hardware – The server I use for events, ‘endor’, has been running faithfully for almost 20 events now. I’ve done one full OS reload, and for the most part it has been dependable as all git out. This weekend however some hardware twitches started to come up. First, the CMOS battery died, which causes the ‘things have reconfigured!’ message on boot. What I didn’t realize was it had also reset the dates, so that all the log entries for CONGO this weekend have a datestamp somewhere in 2006. This will require manual fixing. We also lost power twice due to a flaky outlet. The last bit was I attempted to cut back the amount of hardware I bring to events, and in doing so managed to arrive short 2 keyboards. Fortunately, Ubercon loaned me a pair so things were fine, but Grr.
  • CONGO – Software – For the most part, CONGO behaved appropriately and did all we asked of it. I’m itching to get v2 up and running, because of all the deficiencies I keep seeing in v1. But, the old tried-and-true still chugs along, and we cranked out hundreds of badges over the weekend.
  • Organization – I normally have a very competent reg manager running the event with me. This time, the normal Ubercon chap I work with was unavailable (due to health issues). While other folks helped man the desk (we were never short on people), not having an “In charge” Ubercon person with us really pointed out weaknesses in the process control in CONGO (things like cash drawer management).

Despite my grumblings, the convention was a success, and I think we did a bang-up job on keeping everything flowing nicely. I am utterly, 100% exhausted – the drives up and down take their toll, and caring for a 9yr old while running an event can be a bit taxing. Would I do it again? Absolutely, and will next year. For now, I’m going to go fall over.

Jay Walker’s Library

I’m certainly a collector. Scouring eBay looking for another odd component to add to my esoteric toy collection is an age old pasttime.
But Jay Walker, the founder of Priceline.com and entrepreneur extraordinaire, has taken it to the ultimate.
Wired.com has an article and pictorial about his private library, containing centuries old books, originals of the milestones in technical and intellectual history (one of the spare Sputnik satellites, Enigma machines, an Edison kinetiscope, a 1960-era vacuum tube processor from IBM), all housed in a custom built 35,000 sq foot room.
Magnificent.

Nobody Cares about your Build

My pal Owen (who, incidentally, is doing some wonderful work on CONGO) has just written an excellent high level of of build system philosophy entitled Nobody Cares about your Build. If you’re a developer or release engineer, or are just plain curious about build systems, check it out – here’s a sample:

A reliable, comfortable build system has measurable benefits for software development. Being able to build a testable, deployable system at any point during development lets the team test more frequently. Frequent testing isolates bugs and integration problems earlier, reducing their impact. Simple, working builds allow new team members to ramp up more quickly on a project: once they understand how one piece of the system is constructed, they can apply that knowledge to the entire system and move on to doing useful work. If releases, the points where code is made available outside the development team, are done using the same build system that developers use in daily life, there will be fewer surprises during releases as the “releaseâ€? build process will be well-understood from development.

Not what I wanted to see tonight

I knew something looked fishy when I looked at this drive and only saw half the volume size I thought was there….

/dev/sdd             240365240 206665208  21490104  91% /media/usb3
dbs@yawl:~$ sudo umount /media/usb3
dbs@yawl:~$ sudo fsck /dev/sdd
fsck 1.40.8 (13-Mar-2008)
e2fsck 1.40.8 (13-Mar-2008)
The filesystem size (according to the superblock) is 61049646 blocks
The physical size of the device is 33554431 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort?

This is the 500gig external USB drive I’ve been carting around. In reality, there’s nothing particularly critical on it, some, er, backed up music files which I’m loathe to part with, but at least it’s not irreplaceable data.

Pandora – Try It. Really.

If you haven’t tried Pandora, you should. So far, it’s the only thing that has attracted me away from listening to Radio Paradise.

Here’s how it works.

You create a ‘radio station’ (basically a ‘channel’). In that, you hand it a few songs, or bands that you like – best if you choose a specific genre. For instance, I created a ‘progressive rock’ channel, and seeded it with Spocks Beard. Pandora will start playing songs it thinks are similar. From what it plays, you can say “Yep, that’s great!” or “No, I don’t like that at all.” If you find the station is drifting, or is not including other similar styles, you can seed in new band names or tracks.

So far I’ve set up a couple channels:

  • Progressive
    Spocks Beard, ELO, Alan Parsons Project, Yes

  • Modern Folk?
    The Duhks, Nickle Creek

  • 80’s Mix
    Tears for Fears

  • Live Blues / Jazz
    Les McCann, BB King

If you’d like to listen to any of these tracks, they should be available on my profile page, just click on the feeds (they’re named after the first band or song you add to them).

These channels have netted new bands I’d never heard of, and songs that were new, but, 8 times out of 10, they were songs and artists I liked. So I tell Pandora “Yes, please, more like that!” When I find a band I’d like to really find out more about, I ‘bookmark’ them. I have a list of new bands I hadn’t heard of before, but now I’ll look for more of their music:

  • The Flower Kings
  • Tim O’Brien
  • The Green Cards
  • The David Grisman Quartet
  • Pete Murray

It would be unlikely that I’d run across these folks listening to broadcast radio, though RP might play them. Both sources (RP and Pandora) are opening me up to wonderful new music. I love technology.

Perl GRRRR.

Warning. I’m ranting. I’m annoyed. I’m frustrated. You might want to put on your rant-proof galoshes before proceeding.
Ready?
Perl should be considered a Write-Only Language.
Code that is written in it is generally incomprehensible by anyone but the person who wrote it. It’s great for one-offs, quick simple jobs, and low-scope tools. But anyone who says it’s appropriate for an enterprise level application (and I mean anything over about a thousand lines) should be strung up, draw, quartered, glued back together, and shot into space.
The main problem is Perl is so weakly typed, it should be considered not to have any. That means that parameters passed to methods are not type-checked, and therefore there’s no way to tell if you’re calling a method correctly, except to see if the app blows up when you run it. Editors and IDE’s cannot magically determine that “such and such a method requires an integer, a string, and a hashmap containing such and such values. You’re doing it wrong.”
Because of this weak typing and lack of structure, Perl libraries become worthless. Let’s leave aside the fact that Perl OOP implementations are complete and total trash (OOP is designed to organize your data into object form, and stabilize how components are used, defining a rigid structure so that when you use the component, you must use it correctly). In the case of libraries, it’s impossible to use a library unless you understand how it works. Libraries are not self documenting, they don’t even have a standard method of organization. They’re just loose collections of Perl code, again, with very little defined structure.
Therefore, people who come along to maintain code after the first person has suffered the above fate has no clue how a method is supposed to work, unless the original coder documented it, or built in type checking in their code. I have seen NO Perl code that actively makes sure the parameters being passed in are of the correct type. At best, they make sure the parameter are not null. And if they’re super-advanced, they even use prototypes.
And yes. I am in the unenviable position of maintaining thousands upon thousands of lines of undocumented, badly maintained, incomprehensible Perl code. Yes, the developers could have documented, formatted, and put the code into a form that’s easier to maintain. But they didn’t, and to me that’s the languages fault, not the developers. A language should have some element of maintainability, and not require the programmer to make up for it’s inherent ambiguity. If it does, it’s doubling the burden on the programmer. They not only have to write the code, they have to document it, and make it maintainable.
In my opinion… Perl by its very nature encourages sloppy organization and unmaintainable code.
And now, back to the trenches.

My iPhone – 2 weeks on.

Taking a break here to chatter a bit about my iPhone. Catya and I got ours at the same time, and I have to say, it’s been a pretty nifty experience all around. The iPhone is pretty much the first ‘quasi-perfect’ melding of handheld computer, telephone, and portable internet device I’ve ever used.

I’ve named mine ‘speicus’, a reference for you Roger Zelazny fans. It’s really more of a companion than my Treo ever was. I have it hooked to my 2 email accounts (work and home), and viewing / responding / filing mail works perfectly, whether I’m on the 3g network or on a local WiFi connection. I love not having to carry an iPod around around for music. Not to mention having a web browser that is powerful, well supported, and fast, and there are volumes of applications coming through the AppStore that keep things interesting.

However, naturally, it has it’s faults. I wouldn’t be a blogger if I didn’t gripe and groan about things, so here’s my current ‘stuff that is aggravating me’ list…

  • Contacts
    The Contact manager is quite powerful. I was able to sync it against my Google Contacts via Outlook (bleah), and all 400 contacts came into the phone just fine. The problem is that it’s SLOW. Pulling up my Contacts list and scrolling it can take 7+ seconds to get started, that’s just plain too long.

  • SMS
    I text a lot. The SMS interface is good, but it’s hard to get to – it’s just a normal icon in the program listing. You can shortcut the one useable button on the phone to get somewhere quickly with a double tap, and I have that set to go to my favorites in Phone, but to get to an SMS conversation, I have to tap Home, scroll to the first window, tap SMS, and then select which convo I want to participate in. Startup of the SMS app is also quite slow, sometimes taking 4-5 seconds to come up.

  • Buttons
    I applaud the design of the iPhone. The screen is a joy, touch sensitive, multitouch, fast and beautiful. There are 5 external controls (Home, Volume up/down, Silence, and Close (?)). The last 4 have fixed, non-changeable functions,and the Home button is required to always be Home, but has 1 programmable function (double-tap). IMHO, a button on either side of the home button would have been a huge win. They could have been reassignable, and having shortcut access to certain well used applications would be great.

That’s it. For 2 weeks of heavy usage, these are really the only things that have made me go “grr”. If I were pressed for another problem it might be the battery life. But really, the volume of things this device is doing, from internet connections to bluetooth to playing games to playing music, coupled with easy charging via USB cables, I’m okay with having to plug it in once a day to recharge it.

My first store-bought new Apple product, and I’m impressed.

A WeekBlog – A Post a Day – CONGOv2

So this week I’m faced with a situation I haven’t had in front of me in, well, as long as I’ve been married… at least as long as I’ve had kids in my life.
This week Cat is up in Maine with Zach. I have my normal work going on during the day, but no commitments for the evenings.
A unique opportunity to be sure.
The Plan [tm]
So here’s what I’m going to do. A few months ago I started work on a complete rewrite of CONGO. The rewrite is underway, and has been getting attention fairly regularly over the last couple weeks, but I need to make the final push to an alpha release.
This week, I will dedicate 2 hours a night every night to continuing work on CONGO v2, with the goal of reaching an alpha-testable version by the end of the week. I will also make a post each night with an idea of where my progress is on the rewrite, and what I’ve accomplished. (I do reserve the right to post the next morning if I’m up until Oh-Dark-Thirty coding and fall asleep in the middle of writing an exception handler.)
Anyone wishing to follow the riveting details of my work, I subscribe to the Commit Early, Commit Often philosophy of source code control, so when I’m working, you’ll see commits firing off pretty quickly. If this sounds interesting, you can sign onto the mailing list, or, if you’re uber-hip, subscribe to the RSS feed.
Yeah? So? Why us?
So why bombard ya’ll with my chattering? Well, I work better with encouragement, or if I know folks care about what I’m doing. Curious about bits of CONGO? Ask! Wanna help out? Give a “wow, kick butt, dude. Go for it” comment or two.
Hopefully I’ll have some work to show for tonight, but if not, stay tuned for truly exciting blow by blow Java coding!