pmuellr is Patrick Mueller, Senior Node Engineer at NodeSource.

other pmuellr thangs: home page, twitter, flickr, github

Saturday, December 23, 2006

surfing on the wii

'TV screen up close' by Francois Bester

We were watching something new on tv tonight. YouTube. And weather from around the world.

This is all new, for us, on the tv, because we downloaded the new weather service and Opera browser for the wii.

And they're pretty good.

Here's a movie showing the weather service, although that must have been an early prototype; it looks a little different, but seems functionally the same. Spinning the globe is definitely fun.

As far as the web browsing:

  • As expected, web pages don't 'fit' well; we have an old skool tv, maybe an HDTV (or whatever) would do better. NYTimes comes up ok, but is not really readable without zooming, which is pretty easy to do. YouTube movies you want to zoom in all the way, they will then fill 3/4 of the screen.
  • The YouTube movies looked great, though some/most were darker than you would want. Maybe that's something with the tv.
  • Keyboard entry is a soft keyboard (of course), but at least you're using the wand to point, and with it's feedback, it's not too terrible. But it is a soft keyboard so it is horrible. I'm going to want to be able to use a bluetooth keyboard.
  • Has a favorites list; looks crude.
  • Crude navigation via wand; scroll the page via wand gestures and a button down, page-to-page navigation via on-screen menu.
  • via Flash basically works. Plays for a few minutes and then some page pops up. hmmm
  • pandora locked up the wii. Twice. Avoid pandora.

So, whaddya know. I finally got myself a set top box, and didn't even intend to!

And I suddenly have an interest in Flash again (since Flash is supported on this browser).

Makes me wonder what kind of other content I could target for this device.

Makes me wonder when (not if, trying to be optimistic) sites will start targetting the wii and it's capabilities. It's pretty clear that ui's will need to be drastically changed so that they are more navigatable, and easier to read (use larger fonts).

User agent: "Opera/9.00 (Nintendo Wii; U; ; 1309-9; en)"

Update: some amount of JavaScript support; was able to run some JS to get the window dimensions (500x800) and display it in an alert.

Photo 'TV screen up close' with a nice CC license, by Francois Bester. Found using the Flickr's Create Commons Search.

Friday, December 22, 2006

taking the Ruby plunge

'Ruby Falls Barn' by Brent Moore

I've finally taken the Ruby plunge. It's taken a while. My buddy Chris Grindstaff recommended I look at it years ago. I had heard of it, and it sounded interesting, but coming from Chris, I took a closer look. Started following it from afar. Eventually bought the book. Still didn't really do anything.

Finally, as I have been posting flickr pix in my blog entries, and copy/pasting the html into new entries, it was time to automate, and thus getf4b was born. Simple command line program, and thus easy to integrate into TextMate and Eclipse.

(Quick aside: I edit all my blog posts in .html files using TextMate, then paste into roller when I'm all done.)

So, Ruby. I'm an old smalltalker, so I don't need much convincing on the gorgeousness of the language. I am a little suprised there's not much interest from the old OTI crowd in Ruby. They'll come around.

The little program I wrote uses a Ruby gem named 'flickr' to do all the flickr API work, but there are some issues. Check the code and you'll see how I had to hack the photo URLs a bit. I needed to figure out how to get program arguments, the name and location of the program being invoked, some basic string parsing, and how to do 'here doc'. Everything else was pretty natural.

Actually, the hardest thing was figuring out to 'require' a gem. It helps to require 'rubygems' first, and then use require_gem instead of require for a gem. The doc didn't really make that clear.

More later, I'm sure.

Photo 'Ruby Falls Barn' with a nice CC license, by Brent Moore. Found using the Flickr's Create Commons Search.

Thursday, December 21, 2006

data not markup

Mike Champion's blog entry, XML 2006 Observations, ends with some thoughts/questions on JSON. Here are my answers.

'Urban Markup' by Gord Fynes

Will we see JSON substituting for XML in SOAP messages, RSS feeds, etc.?

Kind of, and no. I don't think we'll see a JSON flavored SOAP, but there's already such things as JSON-RPC, so for those SOAP usages that are RPC in nature, the answer is yes. For those SOAP usages that are document-oriented in nature, there are such things as RESTful JSON.

But it's a stretch to imagine taking on the work to enable JSON-flavored [XML-thing]. For those things that XML works well for, follow the old adage: if it ain't broke, don't fix it.

Asking about feeds is telling also. Markup (XML) is fantastic for augmenting text. I have a bias; I've been doing text markup for 20 years (nroff, tex, GML, BookMaster, HTML, XML). Nothing better than to be able to in-line visual or semantic augmentation with your text, because it's sooo inline. Readable. Imagining writing a document as a big JSON object, with text strings littered with objects indicating augmentation is ... horrifying.

But that's just the text. Feeds don't neccessarily carry just text (well, at least in the future they won't). If the feed content is data, then sure, why not JSON. And the feed meta-data itself probably also better lends itself to a data layout than XML.

So, my take is: XML for text, JSON for data. Until the day the computers take over the world, we'll always be needing text, somewhere, and XML is the answer. But I'd rather be specifying my data in a data definition language like JSON, compared to doing it in XML as wonky marked up narratives.

Will people store JSON persistently?

Yes. If folks are storing XML persistently, and that XML is used to describe data in some way, I will argue that you'll save space by converting to JSON. Unless you perhaps take into consideration the fantastic compression you can get on XML, because of the extreme verbosity (what ever happened to anonymous end tags?).

That will require JSON-flavored APIs, schema/"data contract" languages, query/transformation languages, apps, etc.

Sure. Guess what? A schema for JSON in JSON is pretty simple. And ... readable. Query/transformation languages? Yup. But they won't be languages built on JSON. They will be the languages we use to do our jobs; JavaScript, Java, PHP, Python, Ruby, C, C#, etc. Because JSON, like the programming languages we use, has built-in constructs for numbers, strings, arrays, hash tables, etc. With XML, you need to apply some other structure on top of the XML itself to get this level of semantic. And don't get me started on query/transformation languages. XSLT is ... hard. James Governor asked on the #redmonk irc channel the other day if anyone had thoughts on XQuery, and my response was: tried to read the docs once; much like C++, I figured it was too complex, so I decided to ignore it, and hope it will just go away.

I'm sure that lots of us at in the MS Data Programmability team are pondering what we should think and do about JSON.

Excellent. Keep us informed.

Photo 'Urban Markup' with a nice CC license, by Gord Fynes. Found using the Flickr's Create Commons Search.

Update: 2006/12/22: fixed a typo

Raven Rock

Vacation. Holiday. w00t!

Raven Rock State Park

On Wednesday, I took the opportunity to head down to Raven Rock State Park to do some light hiking. Gorgeous morning. Crisp. Empty park, when I got there. I only started getting a bit warm, with my jacket on, right before I got back to my car. Took a few pictures.

I'm always amazed when I tell people in the RTP area about Raven Rock, and so few people have heard about it. It's about an hour from the triangle. A nice park with a few miles of hiking trails, most of which take you down to the Cape Fear river. The main place to go is Raven Rock itself, which is a cliff on the river, which you get to via a long set of steps. There's some rocks to climb on for the kids.

North Carolina has a pretty good state park system, with a functional web site listing the parks by name, location via a map, current park conditions, and nice printable PDFs of the individual parks.

Raven Rock is pretty tame, itself, though I took my walking stick, and was able to (=forced to) put it to good use a few times negotiating steps on the trail, and rocks off the trail. For the more adventurous, Hanging Rock provides a fantastic view with a moderate hike. Stone Mountain is one of my favorites; walking stick required, and the landscape at the top of the mountain is strange and gorgeous. Both of those parks are a few hours from the triangle, but worth the trip.

leave developerworks?

'Firewall' by Lili Vieira de Carvalho

David Shields advises me to:

leave the firewall and use WordPress. It's more fun and more reliable outside the firewall. You'll also learn more from those who will only be able to read your blog because it is in the real world.

I'm not behind the IBM firewall. Developerworks is completely outside of the IBM firewall.

I switched from a blog at blogger to this blog at developerWorks about 3 months ago. Why switch? My new job entails doing some community outreach, so I thought it was appropriate to do some of that, via blogging, at an IBM site. And the price was right.

dWorks is currently using roller, and so I suppose there is some peer pressure involved now, since I occaisonally have a beer or coffee with "the Roller guy", Dave Johnson. But seriously, I do like roller, generally. Better than blogger, when I was using it.

There are some downsides with the current blogging situation:

  1. Our roller is set up to use Velocity as it's templating language.
  2. It supports tags, but can't automatically generate feeds based on the tags. Though you can hack that. My understanding is that this is resolved in a later (or future) release.
  3. I don't feel as 'free' to post purely personal stuff at the IBM site.

I also had a blog inside the firewall, and I will concur with Dave on all his points w/r/t those types of blogs. I don't have time to blog here the way I'd like to; managing another blog isn't very practical. Likewise, per one of the points above, I'd been thinking about setting up a separate personal blog, for those times when I wanted to get personal. But like an inside the firewall blog, it's another resource to manage, so I'm not going that route now.

I'm not sure that there are limitations on any IBMers creating blogs at developerWorks, so if any IBMers out there want a blog here, let me know, and I'll pass the info along to you. I just asked for one, and got it in two days. I asked for a wiki at the same time, and got that in one day (we use Confluence for our wiki software, which is fantastic).

Photo 'Firewall' with a nice CC license, by Lili Vieira de Carvalho. Found using the Flickr's Create Commons Search.

can't teach an old dog new tricks?

'Change Priorities' by Christine

On JSON, recently:

Dave Winer: IT'S NOT EVEN XML!

James Robertson: Yeah, I really want another parser in my application ...

I'm reminded of the 'debate' between evolution and intelligent design.

Photo 'Change Priorities' with a nice CC license, by Christine. Found using the Flickr's Create Commons Search.

Tuesday, December 19, 2006

Five things

Bill tagged me.

Five things you didn't know about me:

  1. That device I'm staring at while on my afternoon walks is not a Blackberry, I'm not reading email. It's a Palm Pilot, I'm reading Planet Intertwingly.
  2. I was a garbage man at my dorm, freshman year in college.
  3. My first computer was a PCjr.
  4. I was asked to leave St. Peter's Basilica in Vatican City, because I kept putting my hat on.
  5. I own a couple of pairs of pants.

Tag: John, Nick, Dave, Rick and Robert.

Tuesday, December 12, 2006

2006-12 International PHP magazine articles from IBMers

2006 December International PHP Magazine

In the December 2006 edition of the International PHP Magazine you'll find articles by some of my IBM colleagues:

  • PHP - A Language Implementer's Perspective - Experiments With the PHP Engine
    By Graeme Johnson and Zoë Slattery

    In this article we will describe some experimental work in building a PHP engine from existing virtual machine components. We were interested in seeing if we could reuse high performance VM components to create a high performance PHP implementation. We will talk about the process that we went through and what we learned about PHP along the way.

  • Service Component Architecture for PHP - Reusable Components and Effort-free Web Services
    By Matthew Peters

    In this article we will survey some of what Service Component Architecture (SCA) for PHP offers the programmer. We have high hopes that the combination of reusable components, which can be called either locally, or remotely via Web Services, with the same interface will be of interest, and that anyone who works with Web Services may be interested in the ease with which an SCA component can be deployed as a Web Service: a simple matter of adding annotations and dropping the component under the web server's document root.

Both Matthew and Graeme presented on these respective topics at the International PHP Conference last month.

Graeme; sorry I had to link you to my blog, I still can't find yours :-)

Friday, December 08, 2006

wii guitar

'I wanna be a guitar hero' by ckirkman

yummy ...

MIDI Control for Music with Wii Remote: Teaser

Must. Hookup. To. Guitar. (via Ableton Live via TonePort)

I can already imagine the hours of practice I will be avoiding.

Isn't it great when folks use standard componentry?

Photo 'I wanna be a guitar hero', with a nice CC license, by ckirkman. Found using the Create Commons Search Site.

Technorati Profile

Thursday, December 07, 2006

New personalized license plate

Thought I'd take the opportunity to teach the boys the concept of hexadecimal.

Wednesday, December 06, 2006

Thank you Mr. X

Dave Shields posted a blog entry the other day, "Yogi Yarns - On being lucky. First is not always best", in which he talks about his involvement in IBM's first official open source project, Jikes. Dave's current posts are a great read on open source in general. Highly recommended.

'Mr - X' by Luiz Carlos

I couldn't resist sending him a note though, about a small piece of source code that I managed to convince my IP Lawyer at the time, Mr. X, to 'give away'. This was 1994, and giving away source code wasn't something that normally happened in IBM at the time. Dave reposted my note in his blog.

Of course, the real credit goes to Mr. X. I swore I was going to give Mr. X a heart attack at some point, with all the "crazy talk" that I threw at him. For some reason, he actually listened to me during my tirades, and realized that this particular rant, of wanting to give some customers some relatively harmless / worthless code, was not a completely stupid idea, and ran with it. The resulting license that he had me add to the distribution bares a striking similarity to open source licenses you see today. Remember, this was 1994.

Of course, the real reason I responded was that it's impossible to resist someone saying a record can never be broken. The question is, who's going to break Mr X's record?

I'm also reminded of an opposite case. Way back when, this guy I'd never heard of, Ward Cunningham, had a program on his web site called WikiWikiWeb. I was facinated. So much so that I wrote a lame clone of it in REXX for OS/2. And then told Ward about it. This was about the same time, 1993 or 1994.

Ward emailed me a few months ago, asking me if I still had the source. I never distributed the source, because, that was something that simply wasn't done. I had written some of it at work; it was IBM property, I couldn't just give it away.

I had a fun night, that night I got the email, trolling through lots of my old source code. I have stuff going back to the early 90's. But I couldn't find my wiki clone. Sad. If I HAD given the code out, there'd be a much better chance of it still be available, somewhere.

Update: Mr. X is Greg Doudnikoff.

Photo 'Mr - X', with a nice CC license, by Luiz Carlos. Found using the Create Commons Search Site.

Thursday, November 30, 2006

choose JSON

'stop' by MarkNick

In Should You Choose RELAX or JSON Now?, Robert Sayre claims "100% of the data-oriented use cases can be served better and faster by JSON. No 80/20 truism."


I've had a love / hate relationship with JSON over the last year, but I'm currently very positive on it. It has all the basic data types you need, and no more: numbers, strings, boolean, hash tables, arrays, and null. And it's not a document.

Photo 'stop', with a nice CC license, by MarkNick. Found using the Create Commons Search Site.

Monday, November 20, 2006


Yes, we camped out. At our local Target, which we believed was going to have 60 wii's available, and they did. My wife got the 5pm - 10pm slot, I got overnight. Kids stayed the entire time. It was frosty cold; literally. One of the shots in the flickr set shows the frost on one of our sleeping bags. The hot apple cider, hot Bojangles biscuits and hot Krispy Kreme doughnuts helped a little, but not enough.

I should point out this was the kids' idea. I was quite happy to wait till they became available on Amazon, and order from there. But they've been working us for the last few weeks about camping out, and when it finally came down to it, we folded pretty easily. The plan had been to head over at about 4am. Plans changed when we drove by at 4pm and saw about 9 people in line. By about midnight, there were 47 people in line. I think we could have arrived at 4am and just made it.

The crowd was great. Mostly young-ish nerdy types. The only shots I heard came from the Gears of War session someone had going. Power supplied by Lowes, next door, via an extremely long extension cord. Target really did this right. Came out at about 7pm to tell people they'd be opening the doors at 8am, and handing out vouchers at about 7am. That's the boys, to the right, holding our #16 voucher. Target let folks in early to use the restroom, also. Everyone was very friendly.

The Wii setup was easy, I guess. My 13 year old did it. I got it added to the network; it was no more difficult than adding any new device to our network was. Which for me, is a number of steps (security, dhcp, etc). For most people, I'm sure it will just 'work'.

The boys played Wii Sports all day; that's not my type of game, but they enjoyed it. Note you will need to have more 'open space' in your gaming area than normal, to allow for folks making full swinging motions with bats and rackets, as well as making plenty of boxing motions.

The boys didn't have enough money to get any games, so I bought one, and gave them the choice of Super Monkey Ball, Need for Speed, or Excite Truck, which seemed like the only ones I'd really play. They chose Excite Truck. Finally got to play last night at about 10pm.

The wii controller is quite cool. Bluetooth. Wonder if my Mac can see it, and what it would do with it? For the driving game, you basically hold the controller horizontally, then tilt it to steer and some other actions. I felt like I had to hold the controller a little unnaturally to do this, but once I got in the groove (a few minutes), it was pretty comfortable and easy.

BTW, as an additional non-proprietary thing they've done, you can use an SD memory card with the system, somehow; looks like it will show pictures from a phone or camera right now.

The internet connection doesn't seem to do much right now. One section of the system seemed to indicate that we'll be able to browse the internet soon. Showing an image of a Google web page. I guess if you're trying to show people you can connect to the web, showing them Google gets the idea across right away. Though it makes me wonder if there isn't some Google linkage coming. I'll be interested to see if they have some way to 'extend' web pages to do something interesting on them, when browsing on the wii. Also interested to see if people end up finding some networkable things on the wii. I was able to ping mine, but it doesn't have port 80 open.

Looking forward to downloading VectorMan from the Genesis section of the downloadable classic games area. Hope it's just $5, like a lot of them are.

International PHP Conference research presentations from IBM

'the art of runtime performance optimization' by  bitmapr

Two of my IBM colleagues, Julian Dolby and Graeme Johnson, recently presented at the International PHP Conference. Their presentation, PHP: A Language Implementor's Perpective, is available here.

I should point out that the topics presented here are research topics undertaken by IBM. Both presentations are the result of IBMers taking research and development experience in programming languages and applying that to PHP. And specifically, the challenges that PHP presents.

Brief overview ...

Julian's presented on static analysis of PHP, specifically, how static analysis can be used to identify security problems.

Graeme's presented on looking at the PHP runtime through the eyes of someone who has been developing Java VMs for the last decade.

Interesting stuff for folks interested in the nuts and bolts of dynamic languages and runtimes, and of course, specifically, PHP.

BTW, this was the same conference that Tim Bray presented on web frameworks, and then blogged about in Comparing Frameworks.

Enjoy ...

Photo "the art of runtime performance optimization", with a nice CC license, by bitmapr. Found using the Create Commons Search Site.

Thursday, November 09, 2006

Goodbye Bloglines, Hello Google Reader?

I've been using Bloglines for ... a while. I wonder how long? What did I use before? hmmm ... Anyhoo, one of those things that shakes your belief in a product happened to me last night, as I was adding a feed to my bloglines collection.

All of my feeds disappeared.

For a few hours, at least. This morning, everything was back the way it used to be, including that new feed that I had tried to add.

Important Lesson: make a back up of your feed list every now and again. This would typically be in OPML, which everyone seems to be able to export and then import. There are all sorts of ways you can lose your feed list, including some suprise ones.

My last copy was just over a month old, which was good enough for jazz.

civilized reader by ytang3

While it was down, I decided to poke around and see what else was available. I had recently loaded my bloglines opml into Google Reader to give it a try, so I continued to give it a try. I rather like it. And it's small fonts. (I think I'm quite fortunate that, of all the problems that people start accumulating when they get old, I don't have problems with my vision). I think I can get used to it.

Also took a quick tour of feedlounge, because I've heard good things about it. $5 / month. I can deal with that, I think. I just played a little, I should do another 24 tour with it I guess.

I used to use Shrook back in the day, and when I found it on VersionTracker, the reviews didn't seem so great, so I didn't bother.

Listening to a slightly old MacBreak Weekly today, I heard Leo put a good word in for NetNewsWire, which I guess got bought by NewsGator sometime in the recent past. I should try that also. I think the same show mentioned both Daring Fireball and The Macalope which I should try reading (again, for Daring Fireball).

w/r/t the online vs. desktop dilemma, I think I'm still firmly in the online camp (bloglines, google reader, feedlounge). Because there are still occaisons where I'm on some rando computer and want to check da feeds.

There are a number of downsides to Google Reader compared to Bloglines:

  • having my feed list easily publically available
  • groups, and feeds in groups not user-sortable
  • difficult to move feeds between groups
  • decent weather, package tracking?
  • subscribe bookmarklet doesn't work so well

Update: fixed a typo, added the picture

Photo "civilized reader", with a nice CC license, by ytang3. Found using the Create Commons Search Site.

Monday, November 06, 2006

Andy files a bug

A colleague of mine, Andy Wharmby, sent me a link the other day.

Terribly exciting, no? Well, maybe not for you. But a bunch of us in IBM were quite happy.

the squashed bug by [n]

Andy's got a cool job right now, which is: learn the innards of the php runtime. As IBM is getting more serious about PHP, we figured we had to get our fingers into the fun stuff, especially since we have a little experience with virtual machines and runtimes like this. Andy, for instance, has been working on the Java VM for a while.

Even so, getting a bug report like this filed doesn't seem like such a big deal; it's open source baby! My mom could submit bugs reports. But my mom doesn't work at IBM. We're fairly strict about work-related open source activities, after some of the events that have transpired over the last few years; we need not speak of that. Strict means getting approvals, etc. And to be precise, it's not the filing of bugs that anyone in IBM cares about, but shipping code, and by implication, submitting proposed fixes. Which Andy did. It's not an impossible chore to get this stuff done, but it takes some time to get everything lined up.

Everything's lined up.

BTW, Andy's fix was accepted with a small tweak from the Marcus and some eagle-eyed code checking from Pierre ... good to see the community keeping us honest.

Oh, Andy, I can't seem to find your blog. Where is it? :-)

Photo "the squashed bug", with a nice CC license, by [n]. Found using the Create Commons Search Site.

Friday, November 03, 2006

creating tagged feeds from roller

So, this dWorks blog supports tagging, which is great and all, but doesn't seem to support generating a feed of entries based on the tags, which isn't great. I asked the various &dieties; that I knew, Elias Torres, who I ended up having a great extended call with today, and James Snell, if they knew how to do this. In fact, I remembered James posting a blog entry with some roller atom generation hacks. Upside, they thought it was possible, but didn't have anything they could give me at the moment.

Blade Here by alykat

I started with James' blog post Deploying a Comments Feed in Roller, which got me most of the way there. And then tweaking from there.

Here's what I have so far:

Debugging these templates is ... a pain. And the programming facilities, using Velocity, aren't quite complete enough for my tastes.

One problem was the $requestParameters macro will give you the values for a particular query string parameter, but it gives you the values as an array (which is what you want). But Velocity doesn't seem to have any way of accessing arrays. Which seems totally insane. I found a little utility object the roller exposes called $utilities with a method called stringArrayToString which was ... good enough.

How did I find the $utilities variable? Roller's help. Notice however, no description of what $utilities is, is actually provided. How did I find stringArrayToString?

Debugging even something as small as this template is quite painful. One false move, and you'll get a 500 back from your server, with no indication of what the problem is. The trick is to create another template that you can plop tiny bits of code to exercise, and test that first. Want to know what class the $utilities object is, so you can find what methods are available? Just put the string $utilities in the 'testing' template, save, and then view the template. Voila. Hopefully you'll get the default toString() representation of the object, yielding the class name. From there ... google is your friend.

The crudest form of doIt / printIt I think I've ever used, but good enough for jazz.

Anyway, looks like it's functional, and validates.

Photo "Blade Here", with a nice CC license, by alykat. Found using the Create Commons Search Site.

Thursday, November 02, 2006

ZendCon 2006

I'm kinda bummed I missed the Zend/PHP Conference, which is wrapping up today. (Still waiting for the day when I can pay a few dollars and attend conference sessions virtually). Lots of interesting people, sessions and announcements. Right before the conference, someone had suggested tagging stuff about the conference with "zendconference2006". A few things tagged at and technorati, and boatloads of pictures got tagged at flickr.

IBM had quite a few folks presenting talks or in panels, including:

  • Panel Discussion: How Do The Stacks Stack Up? that included Anant Jhingran
  • Interoperability between J2EE and PHP by Stew Nicholas (IBM) and Andi Gutmans (Zend)
  • Web Services and SOA with the Service Component Architecture by Graham Charters
  • Querying XML - It's just data after all... by Kitman Cheung
  • Unlocking The Enterprise Using PHP and Messaging and Queuing by Dave Renshaw
  • Innovation That Matters: Making it Easy for Developers to Rapidly Deploy Usable & Actionable Information by Anant Jhingran and Mike Smith


Here's a list of pointers to other coverage.

update: fixed typo

Saturday, October 21, 2006

Stuff for trips

I don't travel much, anymore, so I've gotten out of practice. Here are some things to remember to bring and/or buy.

  • ethernet cables

    I so rarely use the wired intarweb anymore that I don't even carry a cable in my backpack. That's dumb. Some places still only have the wired intarweb.

  • airport express

    Turns a wired connection into a wireless one. Useful even for just a hotel room so I don't have to work at that thing they call a desk. Also, I have the previous version of this device, which I use to stream Radio Paradise into my stereo system at home, so this would be an upgrade of that device. That device is also sometimes referred to as a G3 iBook. My family would be happy to not have to unplug the stereo out every time they want to use the "family room" laptop. And, the stereo jack on the iBook is cracking anyway and probably doesn't have too much longer to live.

  • note taking gear

    I always have note taking gear with me. A Fisher Bullet Pen and a tiny IBM Think notepad in my pocket. But this isn't quite enough to take notes at a conference, like the one I just attended. For the family trip to Italy this summer, I got Moleskine Cahier Notebooks to keep a journal, and these worked great. I filled one up, and the boys did some scribbling as well. Sandy had a different journal thing she got from a friend. I tried using one at the conference, and it worked pretty well, except I was doing a fair amount of non-linear writing. That's where it gets tricky. A daily log is simple; page after page after page. I had daily schedules, expense, notes on presentations, questions to ask people, etc. It just barely worked.

    I think the next thing to try is index cards. And pre-print with relevant templates from the absolutely gorgeous D*I*Y Planner Hipster PDA collection from Douglas Johnston.

    I hate the thought of carrying these around in my pocket, which I'm sure I'll want to do at some point. I wonder if anyone makes 3"x5" index cards with rounded corners?


I spent the bulk of my time in the car, on the way to DC (5 hours), listening to podcasts. I sort of stopped listening to podcasts over a year ago (they got boring), but I decided to start looking around there again. Here's what I listened to on the trip:

php|architect's Pro::PHP Podcast. It's 1/2 interviews and half news. Good stuff, if you're trying to track what's going on in the PHP world. Think I'm all caught up at this point.

RedMonk Radio from the boys at RedMonk. No, I don't know why they have an eyeless, souless, creepily smiling zombie on their home page. What is it with England and zombies? Shaun of the Dead? 28 days later? Disclaimer: IBM is a Redmonk client. :-) Anyway, always a good listen. Think I'm all caught up at this point.

developerWorks podcasts. Grabbed these at the last minute before I left on my trip. I downloaded interviews with folks I've worked / chatted with over the years, including John Kellerman (previous boss, fellow BoilerMaker - go Boilers!), Carol Jones, Rod Smith, Bobby Woolf. Note these are Old Dudes (and Dudettes) Who Know Smalltalk (I think Carol and Rod at least dabbled in ST anyway). It was fun to listen to old friends, but I didn't really learn anything from it; I hear it at work all the time anyway. I suspect it will be good for non-IBMers to listen to.

I will probably also need a new iPod soon; my old 3G 15G is really getting old and crusty.

What my son wasted his time with today

And who can blame him, it's a blast! Maybe it's the simplicity of it. I'll rationalize that he'll empirically learn some physics ...

2006 DC PHP Conference

IMG_2344 by joelogon

Just got back from the City of Ginormous Escalators, aka Washington, DC. I was there for The 2006 DC PHP Conference. To the right is picture of a typical escalator to the Metro subway system.

The conference was pretty small; about 80 people; in two small-ish conference rooms in the hotel. But everyone was great. Conferences are all about the people anyway. With the small crowd, it meant being able to spend time with a significant percentage of the people there. It was a mix of PHP thought leaders, everyday PHP programmers, and, since it was based in DC, a lot of folks focused on the unique industry that is DC - government.

Here's some notes ...


Writing Maintainable Code with PHP by Laura Thomson of OmniTI. Pretty much standard fare for an old programmer like me, but good info for new folk. And it never hurts to hear this stuff again. Recommended the PEAR coding standards; arghhh ... spaces instead of tabs ...

PHP Security Testing by Chris Shiflett of OmniTI. This was good; I don't think I've ever really thought about using a test framework specifically for security testing, but it obviously makes a lot of sense. I mean, we always test for cases we know will fail, or are likely to cause problems, as well as for cases we know will succeed. But I've never specifically thought about testing for security. Mentioned Selenium, which I've heard of but know nothing about. Note to self, check it out. Chris also gave a talk on general security vulnerabilities and attacks against them, which I couldn't attend.

ext/soap with eBay Web Services by Adam Trachtenberg of eBay. Fascinating. Numbers: 59% of eBay listings are created from their WS APIs rather than through the web ui. One million WS requests a day. 100K sellers using 3rd party tools that use the WS. eBay wsdl file is 3Mb (the huge wsdl contains human-consumable documentation on the APIs (like JavaDoc)). New version of the APIs roll out every week, and each lasts a year or so, and there are separate APIs for different parts of the world; meaning hundreds of versions of the API are available simultaneously (but they don't change all that much). Showed how to build This was the first positive thing I've heard w/r/t WS-* in a long time. That's great. It's good to see people using this stuff in practical ways. I'm still not convinced it's the best answer though. Side note: Adam asked early on how many people have sold stuff on eBay, and I was embarassed to not be able to raise my hand. So I found something to sell: A pre-owned Metro FareCard.

High Volume PHP & MySQL Scaling Techniques by Eli White of digg. Went over typical clustering techniques, most of which I'm basically familiar with, although memcached, I'm not. Talked about database shards, a term I've not heard of before, but the concept I'm very familiar with. None the less, I can't help associating the term "shard" with a scene with Philip Seymour Hoffman from Along Came Polly; discretion prevents me from explaining more. Eli also presented Top PHP Feautures You Didn't Know Existed, but I was sitting in the virtual parking lot that is I-95 South in Northern Virginia on a Friday afternoon instead of attending. Like my eBay n00by-ness, I don't read digg much, so I just added it to my blogroll. Gotta keep up with the kewl kids!

Rasmus Lerdorf did two presentations in one; one was "Yes, PHP is ugly, get over it. Go solve some problems." The other was the Getting Rich with PHP 5. The first was definitely a pep-rally speech, but you know, I need one of those every now and again with PHP. The second one talked about valgrind/callgrind. Need to look into these.

Enabling Digital Identity by David Recordon of Versign. This was great; I knew almost nothing about OpenID before, and now I know ... something. Anything to get the nastiness of maintaining an authentication system yourself is a big win, as far as I'm concerned. Went ahead and created an account at, now I just need to figure out what to do with it. Also need to look further into Yahoo's Browser-Based Authentication thing.

Hacked badge from 2006 DC PHP Conference by pmuellr

General Chatter

  • General non-interest in frameworks
    • Too much PHP, not enough C code (performance issues)
    • Complicated
    • Overkill

    I was in total commiserate mode on this. Good frameworks are great, but they take a while to become good. Before that, they're not so good. Do stuff you don't want. Hard to debug. etc, etc. Maybe I'm just frameworked-out at the moment. There's also some confusion in the air; people call Zend Framework a framework, but it's really just a bag of useful classes and functions. CakePHP and symfony and RoR are frameworks.

  • Hard to hire good PHP programmers

    I think this is true in general, it's hard to hire good programmers; but PHP has a special problem in that the language is so approachable that lots of people can 'learn' it, or enough of it to be dangerous, and not really be ... programmers.

Scary Chatter

  • REST payloads are XML.

    I saw this in multiple presentations; REST and XML in close proximity to each other. That's too bad, since adding XML to the REST story just unneccessarily complicates things. JSON == good.

  • Web services are only for server-to-server communication.

    Not sure what web browser-to-server communication is, if it's not web services, but there you have it. I was really dumb-founded by this. What is XmlHttpRequest if not a web service? It's time for some serious head-shaping, if people think they can't reuse what they're using between clients and servers, for what they're using between servers and servers.

Photo "IMG_2344", with a nice CC license, by joelogon. Found using the Create Commons Search Site.

Wednesday, October 11, 2006

Amazon S3 vs RESTful Collections

Two things I've been reading / thinking about have collided in my mind: RESTful Collections, and the Amazon S3 service.

I've posted an 'article' comparing / constrasting the two, at my wiki, here: Amazon S3 vs RESTful Collections.

Friday, October 06, 2006

Apex Chemical Fire

We don't normally watch the 11:00 news at night; there's usually not much news. But last night, for some reason, we did. For about three hours.

We're 3 miles southwest of the fire site; the winds worked in our favor last night and this morning; we did not have to evacuate. We did pack though, in case we were going to be ordered to, or just decided to, evacuate. Our big problem is our multitude of pets, or else we might well have just headed out to a hotel in north east Raleigh last night.

Mark Pilgrim is live blogging on this. And Joe Gregorio also posted something to his blog.

Monday, September 25, 2006

my evil twin rick

I just happened upon the blog of my old colleague and friend Rick DeNatale. I was quite fortunate in the early nineties to have Rick in my department when I was really learning Smalltalk. He's a great teacher. And he has a lot of funny stories from the old days. Ask him about rainbow colored punch card decks, or changing the value of 2 in fortran some day.

He's now off playing with Ruby, and I plan on soaking up everything he says about it ... especially since I come to it, like him, with a Smalltalk background.

BTW, I refer to him as my evil twin since we are physically similar in appearance; many people used to confuse us back in the day, and I still run into people at IBM who refer to me as "Rick".

creative commons fears

Like Mark Pilgrim and Tim Bray, I've had my share of qualms regarding Creative Commons licensing. Alex Bosworth posted on this a while back also.

Yeah, I wouldn't be happy if someone used some of my CC-licensed 'art' (quoted, due to the dubious-ness of calling what I do 'art') in a way I wasn't happy about. But I could deal with it. My biggest issue is if someone used some art which identified me, or even worse, other folks, in a way I, or the person identified, wasn't happy about. For me, that means photos.

For a while I dealt with this by only making photos that didn't include people 'public' on my flickr site. Photos with people were marked 'friends' and 'family', meaning only people I identified as friends and family could look at. Which, for those folks, means, getting a flickr id. That's not a huge hurdle for the folks likely to be reading this blog entry. It is a hurdle for a large percentage of my friends and family. After dealing with the 3rd or 4th person that couldn't see the pictures because they: 1) couldn't figure out how to create an id (even if I invited them), 2) didn't want another id to manage (who can blame them), or 3) couldn't remember their id they previously created, and wanted me to help them get it back; I finally said "screw it", and started making some of those photos public also.

That was a line for me to cross.

And then I got a note the other day, from a commercial outfit, wanting to use a picture of mine from flickr in some kind of product they were producing. A chill went up my spine. Ut oh, which picture might that be? On the other hand, I immediately thought "hey, that was nice that they bothered to ask." (Note they are supposed to, since the photo is licensed as by-nc-sa.)

Here's the picture they want to use:

I had to laugh. My wife told me to keep the day job.

In the end, at least for me, I think the CC fears are largely exaggerated. It's highly unlikely many people will want to re-use my art. And those that do will probably do the right thing.

To that end, I've also been trying to be a good citizen. I enjoy including art work in my blog posts to make it slightly more entertaining. You can see from some of my previous posts that I've included CC-licensed photos; I've used photos that aren't licensed as "non-commercial" (is my blog commercial? it's primary home is at an site, so I'll say "yes" to that); and I've linked to the original photo site. If someone asks me to remove a picture, I surely will, despite the fact that given the license, I think it's fair for me to use it. And it's fun to just push the envelope on the issue in general anyway.

Sunday, September 24, 2006

Just Say No to XML - more often

In Just Say No to XML, Allen Holub writes "XML is perhaps the worst programming language ever conceived." What's he's talking about here are all the tools which use XML as a programming language. My only direct experience with this is with Ant. Within Eclipse. Because it's the easiest easy way to do 'scripting' with Eclipse. You know it's there, it's shipped with the base Eclipse. And I'll just say that, in general, I'm in agreement with Allen; I've written a shed-load of Ant scripts over the years, and I'd rather not have to be dealing with XML here.

Titanic cake

But I'd like to go even further! Allen follows up his 'worst' sentence (quoted above), with this: "I'm not talking about XML as a data-description language, which was its original design." If we're going to start thinking about not using XML for programming languages, let's also consider not using it for data-description as well. Why? Because XML isn't designed for data. XML is designed for documents.

And there's the problem. Documents. Programmers know how to design data. They don't know how to design documents. I think this is probably one of the biggest problems with the ws-* flavored web services; you need to design documents. To design an XML document, you need to know XML Schema. I know exactly one human who claims to be able to write XML schema off the top of their head, with no multi-hundred page reference document open. That's not good.

Sure, there are ways around having to learn schema, kind of. There's RELAX NG. But it's not widely supported in a least the places I program, and look at that last updated date on the page I just linked to. Kinda scary.

There's design tools, like UML-based stuff, but that adds layers of cake; now I have additional tooling I have to learn, there's code-gen in play so I have to watch for getting things synchronized, etc.

But let's pretend for a minute like there was an easy and standard way to design documents, and that programmers actually knew how to design documents.

Now you got the problem that there isn't really a simple way to go from documents to data. You might want to design your documents to be 'easy to parse' (eg self-descriptive), but that's likely going to violate some of the things you want in your document design, like readability. You'll probably end up using some coolio XML-to-data framework in your own code. However, some folks aren't going to have access to whatever coolio document-parsing-to-data system you're using, since most of these frameworks are single language stories, and your XML may be read by nearly any programming language known to man. In the end, some folks are going to have to use a DOM-based parser, or *gulp* SAX-based parser, to read your data. And that's simply no fun.

What's the alternative? Whatever is appropriate.

Java .properties files / windows .ini files are a really simple format for storing really simple data; too simple in most cases, but not all. Use these wherever you can get away with them.

YAML is kinda like .properties files on steroids.

JSON is the latest contender here, and is an appropriate format to use if you're expecting some JavaScript code to be handling your data, since you can use eval() to deserialize a JSON string into objects. IFF you can trust the source that gave you the JSON, anyway (that's a pretty big If, BTW; there are JSON parsers in JavaScript you can use if you can't trust your source).

Upon first really looking into JSON, I was struck by the similiarity in function that SDO provides. SDO provides a lot more than what what JSON provides, but at it's core, there's some definite similiarities. That seems good.

The point is, XML is unavoidable to programmers these days. It's everywhere. Just don't assume it's the best answer to your problem, just because everyone else is using it. There might be a better answer.

Photo "Titanic cake", with a nice CC license, by psb_minimal. Found using the Create Commons Search Site.

Wednesday, September 20, 2006

Tuesday, September 19, 2006

PHP is Doomed: a rebuttal

Imagine my horror, to take a new job in IBM doing some PHP stuff two weeks ago, only to find out last week that PHP is Doomed. Man, what crappy timing on my part, eh?

Impending Doom

I'm kidding of course; I don't think PHP is doomed. But the author of the article, Justin James, doesn't appear to be kidding to me; he seems quite earnest in his beliefs. So I figure I'd offer a rebuttal to some of his points.

PHP does not allow the programmer to multithread their application.

This point is brought up multiple times in the article. And of course, Justin is right. PHP doesn't support threads as a programming library capability like Java and other languages do. The reason Justin thinks this is the primary reason for PHP's demise is that you need multi-threading capability in servers; web servers now, when serving up pages, are going to be getting data from a variety of sources, and the only way to scale is to allow these separate pieces of data that make up a single page be retrieved simultaneously with multiple threads.

Justin uses Java as an example of a language that can do this multi-threaded processing on the server. Except, as it turns out, in Java Servlets, you are advised to not spawn your own threads. I won't go into the reasons, but found a message board entry here @ dWorks that provides the usual warnings: Re: Spawning Threads In Servlet. So, the fact is, you really shouldn't be spawning your own threads in a server.

Now, for the Java programmer, there's probably a way around this; your web container may provide extensions to allow you to spawn threads. For WebSphere, for example, you can use Async Beans. Or your container may support the WorkManager API. Or you may get some level of async processing through your middleware, such as asynchronously invoked web services. These bring additional complication, and in cases of container-provided extensions, may prevent you from writing completely portable code (portable across different web containers).

But there's still a problem. And it has to do with this thought (from the article).

If you are a Web developer, would you prefer your application to continue to process its work (for example, retrieving data from the local database, dynamically creating images, etc.) while waiting on the third party chunk of code (such as a Web service), and only have part of the page show a "Sorry!" message? Or do you think it is better for the entire page to take forever if the third party data source has a problem?

Threading is not simple. For example, how long are you willing to wait for that chunk to timeout, before using "Sorry!" as the content instead of what's supposed to be there? You're going to have to have a timeout. This implies that you actually need to synchronize on all the threads getting the individual chunks. Do you have a way to cancel a task that's taking too long? This is complicated stuff.

The obvious way around this, from my view, is to use AJAX to actually handle the parallel calls on the client. You've moved the problem from the server to the client, but it's safer to have it on the client anyway. And a user could, in theory, individually cancel pending requests, based on their ability to wait for them, instead of relying on presumably static timeout values in the server. But Justin doesn't appear to like the way of AJAX at all, which rules that option out for him. (Aside: he doesn't really explain why he doesn't like AJAX; I'd like to hear that argument).

Now, just thinking about moving your async tasks to the client brings up another point. JavaScript doesn't support threads when running in the browser; so how do they handle making HTTP requests in parallel? The model provided to the programmer is that of asynchronous programming with callbacks. When I make a call that would otherwise block, you pass in a function that the underlying code will call back on when the call succeeds or fails.

This style of programming is also available in the Twisted framework for Python (which I've never had a chance to use, personally; looks like fun though!). You can typically simulate threaded programming with asynchronous, event driven programming. With no threads. So, there's an answer for PHP straight off: they actually don't need threads, they need a port of Twisted. You of course need to have basic asynchronous i/o capabilities to build something like this, and it appears to me PHP already supports this for socket i/o.

Ruby is another language that Justin points out has thread support, but, in fact, it's probably not quite what he's thinking about. See Threads and Process from the online Programming Ruby book. Ruby's thread story is the same as VisualAge Smalltalk's: what we call "Green Threads"; they aren't operating system threads, but a threading system built into the virtual machine. As such, they will have limited capability to take advantage of multi-core machines, which is counter to part of Justin's argument that threaded applications can take direct advantage of multi-core machines.

There are things you could find to do with all those cores though; say ... virtualization.

Moving on ...

Its documentation is not very good, and frequently the comment threads provide the information that the documentation should have included but did not.

I would agree that the doc could use some work; I think a reorganized view of the existing doc might be enough to keep me basically happy; but doc quality is a constant issue (even with Java and Ruby). I actually like the end-user comment threads; someone tried this with Java a while back (@ JavaLobby?); wonder what happened to it? The one thing that I've not seen anyone compare with is the number of translations available for the base php docs: English, Brazilian Portuguese, Chinese (Simplified), Chinese (Hong Kong Cantonese), Chinese (Traditional), Czech, Danish, Dutch, Finnish, French, German, Greek, Hebrew, Hungarian, Italian, Japanese, Korean, Polish, Romanian, Russian, Slovak, Spanish, Swedish. Wow!

It lacks high quality tools such as IDEs and debuggers in a "ready-to-use" state.

Besides the well-regarded Zend Studio, if you enjoy the Eclipse lifestyle there are two PHP IDEs under development: PHP IDE Project and PHPeclipse.

I will give PHP this: it is easier to install on top of Apache or IIS than any J2EE server that I have encountered.

You sold me!

Update: fixed a broken link to the Creative Commons search page, linked to at the bottom.

Photo "Impending Doom", with a nice CC license, by Dr. Stephen Dann. Found using the Create Commons Search Site.

echo "Hello, Blogosphere!";

Note that this post was my first post in my blog @ developerWorks. I've moved all the entries over here, so the context is a bit wrong, but I figured I'd leave the post here, and just add this note - pmuellr - 2007/11/07

Who are you?

Patrick Mueller, check out my brief bio at my wiki @ developerWorks.

What are you doing here?

Well, I just took a new position in IBM that involves 'community' (as in programming communities) and so I thought I should set a good example of how to do that by creating a blog here.

In addition to doing something regarding 'community', my new assignment also involves PHP. While I won't quite claim to be a PHP n00b, I'm pretty green. I thought I could let you learn along with me, and hopefully some more knowledgeable folks will happen upon the blog and correct me as appropriate.

I've been blogging for a while; my old blog is here. Before blogging, newsgroups; before newsgroups, VM/CMS FORUMs. Whoops, just dated myself!

Anyway, besides the usual stuff I blog about (maybe I'll drop the movie reviews), expect to see PHP stuff.

By taking this assignment, I left another very cool one: Jazz. My hall-mate Bill Higgins talks about Jazz quite a bit, so go there to learn more. I'll probably do some blabbing about it myself, eventually.

Radio Paradise

Have I plugged Radio Paradise before? Maybe; if not it's time for another plug.

This is simply the best radio station I've ever listened to. It's not like there's much competion in the RTP, NC area. At Purdue, we used to get some pretty good stations out of both Indy and Chi-town, and DC/Baltimore had some decent stations when I was there.

But RP beats them all. Plays new stuff I can tolerate, and generally like. Old stuff I love. Non-intrusive, commercial-wise.

Time to donate again.

Click here to see what they've played recently.

We get DirecTV at home, and so also have some of the XM channels, but none of the ones I get compare. In a pinch (I'm upstairs, don't have a computer plugged into speakers), I'll listen to the XM traditional Jazz or Blues channels. The closest channels to RP play too much crap.

RP has actually turned me off of buying music. I'd much rather have the variety from them than to have to manually switch what I'm listening to. Yes, I am rather lazy.

I've done the emusic thing, a few years back, when they had unlimited downloads. I downloaded LOADs of stuff, mainly older jazz, but the first 1/2 of Elvis Costello's catalog more than made up for the $45 I paid for unlimited downloads for 3 months. Not really played with anything else, like, or as Mark suggested in his blog, OpSound; RP is just too easy.

If I could only get RP in my car, I'd be set.

Playing right now: SCOTS - Fried Chicken And Gasoline (link) . A "local" band.

Sunday, September 17, 2006

MacBook Random Shutdown

You'll only 'get' the image above if you have a MacBook that suffers from Random Shutdown Symptom (aka RSS or RSD). You can read all it about it Apple's MacBook Discussion Board. I'm an early adopter of the RSD technology, first experiencing it over two months ago.

Luckily, Apple has provided elaborate information regarding this problem in Knowledge Base Article 304308. What a relief!

My machine has decided it's time to start Randomly Shutting Down again, after it's second extended repair job less than a month ago (which took 10 days). Funny story: when I picked the machine back up at my local Apple Store, the Genius brought it out and powered it up, and the display filled with colored vertical lines. He took a look at it, and said "oh no, we're going to have to send it back to get repaired again". I replied "Nope, I can fix that". And proceeded to fix it. (I'd been reading the MacBook discussion list a bit too much).

That was a mistake, of course, since having it sent back right then, for another repair, would have meant instead of going in now for a 3rd repair, I'd be going in for the 4th, and would have gotten a new machine instead (Apple won't repair a machine more than 3 times, supposedly).

So, now I have to decide what to do; here are some options:

  1. I can stay up late some night so I can get a reservation at the Genius Bar at my local Apple store to drop the machine off for repair; but I absolutely have to be able to have the machine shutdown, in the store, in front of their eyes, before they will accept it.
  2. I can wait 60 minutes or more on the phone on hold with AppleCare to get a problem report open or hopefully re-open my previous problem report. And they'll send me a box to send the machine back to them.

In any case, current wait time for MacBook "Random Shutdown" repairs is about 3 weeks, according to reports on the message board.

Yes, I've learned my lesson. Never by rev 1 of an Apple product.

Friday, September 15, 2006

I take it back

I've decided that I don't think I want closures / blocks in Java after all. Never mind.

Thursday, September 14, 2006

movie review: The Illusionist

movie review: The Illusionist

Sep 14, 2006 by pmuellr
The Illusionist

★★☆☆☆ Sandy and I were kinda looking forward to this; we both like Edward Norton and Paul Giamatti. And it started off pretty hopeful. But it was quite, quite predictable. Wait for the DVD.

If you like Giamatti, check out: The Amazing Screw-On Head.

This hReview brought to you by the hReview Creator.

Tuesday, September 12, 2006

Just when you thought it was over

I hardly expected to see a new Smalltalk come out of the woodwork, much less from Sun, but ... there ya go.

I remember hearing about Animorphic (sp?) back in the day, and I think even that Sun had bought them. Ten years ago, I guess. Wow.

Now just waiting for:

  • Intel Mac binaries
  • File-based, class-per-file sources
  • to see what the startup time is like; I want to use this as a command-line shell programming language

on Amazon EC2

During a meeting today, Amazon's EC2 service popped into my head, and so I did a little extended thinking on it. I was going to research it some more, but since I didn't see the announcement of this soon enough, I don't have anything to play with anyway.

  • Amazon already has a crap-load of 'users'; who doesn't have an 'amazon id'? Won't take long before they take advantage of this by allowing me as a service provider to authenticate folks via 'amazon id', allowing me to somehow charge the users of my service by cpu usage and/or bandwidth, and generally cool social networky things. Not many sites have a user base of this magnitude. Yahoo! comes to mind, perhaps google (via gmail). EBay?
  • Micropayments, finally. Or at least close.
  • Virtualization on servers. It'll be interesting to see how this scales.
  • Real time vs space trade-offs. Most hosting companies I've seen charge you by the amount of bandwidth you use (as one of the limits on your service anyway). Here, Amazon is charging for both cpu and bandwidth. It's interesting to imagine situations, in this new fat client universe, of deciding whether I should pump excess info to my client and let them churn over it, or optimize the amount of data I send, but pay a bit more in CPU. If there's a huge cost difference, it's easy to decide which one. Maybe one provides a better end-user experience, but my users would be willing to pay for it. In the end, it will force people to deal with poorly optimized services, because they will literally paying for all the cpu they are throwing away.
  • If this isn't software-as-a-service, I don't know what is.

I think the most interesting thing to me is the micropayments. And thinking about how to charge the users of my services via something like micropayments. Charging just enough so I can actually host my service without it costing me a dime, by charging just a little over what it costs me. Hell, charging a LOT over what it costs me, maybe.

But what if I don't want to be tied to Amazon, and use PayPal or Google Checkout (or whatever) instead? Tough problem, because Amazon's got all the infrastructure all ready to go for this. Including user authentication. Something like Flickr's Authentication API would be nice to have here.

Friday, September 08, 2006

the dangers of transparency

From: [nag generator at my hosting server]
Subject: Re: [Alerts] *** SECURITY information for [my hosting server] ***
Date: Fri, 8 Sep 2006 00:36:09 -0500
To: [me]

Attention: the use of sudo is restricted to staff.

Please do not use sudo in the future.

Thank you.

[sig of nag generator at my hosting server]

On Sep 8, 2006, at 12:32 AM, [me] wrote:

> [my hosting server] : Sep  8 05:32:18 : [my userid] : user NOT in  
> sudoers ; TTY=ttyp0 ; PWD=[my home directory] ; USER=root ;  
> COMMAND=/usr/local/sbin/apachectl restart

The ssh session into my hosting server looks purty much like my local shell; I was of course trying to restart my, local, server, not my host's server.

No sandwich for me! (Thanks Josh)

Time to make my PS1 on my host a little more obvious, somehow ...

Of course, what's scary is that I use sudo (and sudo -s) a lot these days, it seems. Almost might as well be using Windows. Gotta do something about that as well ...

Tuesday, September 05, 2006

guitar signal chain

I'm a guitar noodler. See definition 3, and I'll emphasize the haphazard part. Although I started playing when I was 8, my big problem is I never played with a band (sorry Eric + Mark, biohaz doesn't really count). And I take frequent, multi-month breaks from guitar. But I'm back in one of my phases, and I've got a pretty good set up, so I thought I'd mention it.

I should first mention I was hoping to run everything through my MacBook, but when I tried that, the amount of set up I had to go through every time I wanted to play was just too much, plus, I don't really have room for everything in front of me, plus the chair I live out of doesn't lend itself to comfortable guitar playing.

So, I resigned myself to setting up on my wife's desktop. I bought a Line 6 TonePort UX1 about a year ago. This is a fun box, as it's basically like a traditional Line 6 Pod in it's functionality, only it's really just a USB-based D/A box; all the tone rendering is done on the computer it's connected to, but it doesn't use much CPU. The USB is nice, instead of having to rely on the line-in ports of my sound card; I'll take a USB connector over a 1/8" stereo connector any day. And the latency is basically nil. The UX1, when connected, adds another 'sound device' to windows, but only Ableton Live is listening to that device; luckily, Live actually let's you select audio devices to use instead of just using the system default, like every other program in the universe. I have some headphones always attached to the UX1 also, and the line outs of the UX1 go to an old receiver on that desk, so I can play through stereo speakers, if I'm willing to embarass myself in front of my family.

So, to play, I pull out my guitar, the guitar stand, and the cord. Then, I attach cord to guitar and then to the UX1, and either put on headphones or turn on the receiver. Then start trying to play. Probably less than a minute total. Nice.

Monday, September 04, 2006

version control for one

So I'm planning on getting off my arse and working on some small code projects I've been meaning to work on for a while. It's been so long, and so many machines ago that I've done this, that I don't have a legacy version control system that I must use, so I thought I'd look around a bit.

Actually, that's not quite correct. I was planning on using subversion. I started compiling it a few months ago, to get all the binaries lined up, and actually started using it. Well, reading the docs. Getting started, and reading the docs, means checking out the section of the Subversion book titled Choosing a Repository Layout. At least for a SVN n00b like me. Now, there's something to be said for the relatively clean nature of the SVN's tag and branch story. Quite nice, and logical, compared to CVS.

However, it kind of sucks to be in a position where you have to choose a repository layout like this out front. On one hand, I'd like to have some grand scheme in place for multiple projects, but on the other hand, structure like this usually evolves, or at least you need to have some practical experience, and I don't want to wait for either. I just want to start committing some code.

Not to mention, if I was planning on using Eclipse, I'd have to make the Subclipse vs. Subversive choice, and I have no idea which one would be a better fit for me.

Luckily for me, I won't be needing Eclipse. More on that later :-)

So, poking around at what else I might use, I ran into darcs again, and decided I'd try that for a while. Bonus, TextDrive supports it as well (on the server end).

Took me a few tries to get my initial project dir pushed to my server, and ... guess we'll see how it goes from here.

Saturday, September 02, 2006

movie review: Little Miss Sunshine

movie review: Little Miss Sunshine

Sep 1, 2006 by pmuellr
Little Miss Sunshine

★★★★★ Sandy and I saw this two weeks ago. Loved it. It's funny, serious, sad, but mostly fun. Especially the end. And I'm a sucker for Alan Arkin.

We saw it at the Galaxy in Cary, which is a great place to see movies; they serve beer and wine, and excellent popcorn. Please patronize so we have a decent alternative to the mega-plexes!

This hReview brought to you by the hReview Creator.

Friday, September 01, 2006

Movie Reviews

Sandy and I have been going out on 'dates' almost every week since the kids were really small. A slight respite from the madness of a teen and pre-teen. We often take in a movie, if there's anything we really want to see, and there often is.

I've been meaning to do reviews, but never really got a round tuit, and just ran into another reference to hReview, so I figured it was time to take the plunge. I created this review with the hReview creator, which is a nuts&bots JS app to build the microformat as I type in the HTML form, suitable for pasting into something like a blog.

So, here goes; I'll probably frig with my template to add some more css styles to try to make it purty.

movie review: Snakes on a Plane

Sep 1, 2006 by Patrick Mueller photo of 'Snakes on a Plane'
Snakes on a Plane

★★☆☆☆ I was quite prepared to review this movie as a good "bad movie", but it either wasn't bad enough, or was too bad, not sure which. I was certainly wincing at the end with the video of the band.

There were definitely some stupid and therefore funny scenes. Over the top funny. Places where people got bit. The speed at which people died.

And Sandy and I even both flinched at one scene, which rarely happens to me in movies.

Expected something ... better or worse, but it didn't quite cut it for me. Maybe the sequel will be worse!

This hReview brought to you by the hReview Creator.

Thursday, August 31, 2006

Scripting Languages in Java

Joe Gregorio has a nice, short article describing Python coolio stuff to Java programmers; Dave Johnson responds with some links to scripting languages implemented in Java that can do the stuff that Joe talked about, so you can have your cake and compile Java too!

Joe's article is great, will definitely have to keep that link handy, especially now that I gotta new job assignment involving scripting.

So I've actually played with some of these scripting languages in Java, and was even on the Groovy JSR Expert Group for a short time (a funny story why I left, that will cost you a measily beer). Note my most recent experiences were with Rhino playing with Eclipse Monkey. Some observations:

  • If you're expecting to call into existing Java classes from your scripting language, one thing your likely going to miss in your scripting IDE are things like code completion. Assuming you even have code completion for your scripting language (hard task without easily obtained string typing information that Java has), it's highly unlikely that you'd get code completion when you are calling out to Java. Which is where you really need it. I found that without code completion, trying to talk to existing Java code, I had to leave a JavaDoc browser open, and was sometimes cutting/pasting stuff between that and the editor.
  • There are a few language level mis-matches. I know Jython and Rhino had/have issues with Java arrays. Any time you needed a Java array, to pass into some existing API, there was some kind of little piece of poop you had to run. Was quite unnatural.
  • Environments can be unfriendly to the limitations of scripting. I've tried a couple of times to do some scripting of Eclipse, in the plugin sense, and Eclipse just doesn't make this easy. Expects you to have classes all over the place, based on gunk in .xml files, and without pre-compiling my scripts into Java, I was going to have to have at least some small Java stubs just to have someone for Eclipse to talk to, and then the stub could invoke the script.
  • Debugging. argghhh
  • Reload and run. Typically when you're scripting, it's not just that you don't have a compile step, but you also have a very short test restart cycle. For JavaScript in a browser, typically you're talking about F5, and then maybe some work to get you into a testing state. In Smalltalk, we'd just change the code, run the test again. In Eclipse, writing plugins, you have to launch a new workspace, debug away, and then generally have to bring the workspace down before making significant code changes. Hot code replace in Java is definitely sweet, but it can't tolerate class shape changes, and those happen far too often.
  • I've often thought of all the languages Groovy was probably going to be the easiest to use simply because it had no non-Java version it ever had to live up to. And had first class notions of dealing with Java.

I really, really wanted to use scripting in some, I thought, fairly obvious places, but it's always ended up just not working out for me. What a bummer.

If I still thought there was hope for scripting Eclipse, I'd definitely check out Aptana, based on Bjorn Freeman-Benson's glowing descriptions. Instead, I'm going to try living out of TextMate for a while ...

BTW, Tim Bray has an interesting set of blog posts on his experiences with JRuby.