Travis has been thinking about sort functions in Smalltalk, and how to follow the same patterns shown in SymbolValue and Block culling:

Since the introduction of SymbolValue and Block culling, one of the things I've chased is how to do this same style of programming with sorting. For most sorting cases, you have a series of objects that you want to sort on some particular attribute. Maybe a sequence of customers you'd like to sort by name.

Travis goes into the approach he picked - go read the whole thing for the details. I do like this summation:

I sat down last night, and with tests, put together a TAG-SortFunctions package, published in the Cincom Public Repository. The basic idea was to use an object. Time and time and time again over the years, I rediscover the principle "there's an object waiting to be birthed here!"

A lot of sins in Smalltalk code can be solved by remembering to create a new object when it's useful to do so. It's not like they cost money :)

Yesterday, I pushed up a post detailing a hack I did to make drag/drop in VisualWorks listboxes work more like they are expected to work. One problem though; my "fix" pretty much breaks select on down, which isn't really what you want.

As is usually the case with such things, if the fix seems overly complex, you're probably doing something wrong - and I certainly was here. The problem comes up in EmulatedSequenceTracker>>setUpDragDropFor:

With that, it looks like things respond the way you would expect, and select on down works (unlike the hack I posted yesterday). I also think this is closer to a supportable fix - although I suspect a full rewrite of the controller and tracker are still a decent idea. You can find the code in the public repository as MultiSelectPatch. Kind of outside my scope though :)

One of the things I've been asked to look at here is build automation. Right now, all builds are done manually, using RTP - and sometimes, based on various things going on, they need multiple builds done per day. As you can imagine, that takes up a lot of staff time, and adds in an error prone personal component to the process.

Now, I'm hardly an expert in such things, and for that matter, there are entire toolsets devoted to this field. Having said that, I do have a set of build scripts for BottomFeeder, so I have done some work here. When I sat down to look at what I do for Bf, I realized that while I've automated pieces, I haven't automated everything. So, I created a small (very small) tool to tie my process together. We'll see whether or not it scales up well enough to use for the problem at work, but that's in the future.

Right now, here's how I do BottomFeeder builds:

Execute a Smalltalk script that creates a runtime image

Execute a second Smalltalk script that uses image compression tools to shrink down the image file for deployment

Run a shell script that creates the various zip files I throw up to the server

Manually use sftp to ttransfer the files

Not as automated as I'd like :) I wrapped the first three things up with the tool I created - the last bit will require some research on my part - I haven't done unattended sftp in a shell script before, and unlike stock FTP, it's not something I can do in Smalltalk out of the box. So how does it work? Simple, really - I have a key=value ini file that describes each script that will run. The one for BottomFeeder looks like this:

Basically, each section describes how to run the script, whether it's a VW script or not, and an assertion script to go with the build piece. That assertion piece is just a small bit a of Smalltalk that should return a boolean, explaining whether the associated build script worked or not. Then I put together a (very simple) UI that lets me pick a script to use, and see the results. Heck, I even have tests :) That window looks like this, after I ran my test script:

That's pretty much it, really - there's plenty that could be done, and it's hardly the best build system in the world - but it suits my purposes well enough, and automates what was a tedious build process. Whether it scales up for a real project - I'll find out soon enough :) If you're interested in taking a look, load the "BuilderBundle" bundle from the public store repository. I'm happy to hear any comments, good, bad, or indifferent.

Today's Smalltalk 4 You continues with "ProfStef", which is part of the "one click" Pharo download. Today we we take a look at how conditionals work - like most other things in Smalltalk, it's noy built in syntax, it's part of the library. If you have trouble viewing it here in the browser, you can also navigate directly to YouTube. To watch now, click on the image below:

If you have trouble viewing that directly, you can click here to download the video directly. If you need the video in a Windows Media format, then download that here.

For years, I've been saying that to create great Web content, you need to always be thinking: Nobody cares about my products and services except me and the others in my organization. What your buyers do care about are themselves and they care a great deal about solving their problems (and are always on the lookout for a company that can help them do so).

The thing is, it's true - but only to an extent. In the process of telling people how you can solve their problems, you have to get into the how - and presumably, that involves.... your product(s). So yes, no one cares about your products - in the abstract. What they might care about is how your products can be used in their domain.

In order to get there, you do actually have to - *gasp* talk about your products. Because cutesy videos might attract a lot of views, but if they don't relate you and your products to a live problem, that's all they do.

Are you tired of marshaling state, mapping URLs, and making sure your form fields all have unique element IDs? Do you long for a better way to develop for the web, without editing XML files? Do you ever wish complex online applications actually let you use the Back button? Seaside frees you from these burdens, leaving you to focus on creating the applications that can make or break your business.

Here's another video from ESUG 2010, which was held in Barcelona, Spain, the week of September 13, 2010. In this presentation, Thomas Stalze talks about System Integration. You can watch using the embedded player below, or follow this link to Vimeo.

Syfy announced today it will end its original action-adventure series Stargate Universe once the show returns to finish its second season in the spring of 2011. The upcoming 10 episodes will be the series' last.

I find it depressing that well written shows like this just don't find a place.

Mariano Rivera admitted the unthinkable had been a possibility. — The Boston Red Sox offered him a chance to turn in his pinstripes and switch sides in baseball's fiercest rivalry. — “It was real.

I follow baseball pretty closely, and I'm a big Yankees fan - but this is one of those periodic reminders that it's primarily a business, not something put out there for the sole enjoyment of the fans. When that fourth wall breaks (think Babe Ruth going to the Yankees, or his late career away from the Yankees), it makes that all the more obvious.

I've always been a big reader - I just finished two sci fi books on my last trip to Dallas (I still need to post the reviews for those). What I'm finding lately is this: I'd much prefer to read on my iPad than read on paper.

Why? A few reasons:

The iPad is light. I can carry as many books as I like on it, and it doesn't get heavier

I can buy a new book anytime I have access to the net

I don't ever have to worry about losing my place - the Kindle app manages that for me

I think the weight thing is the big one. I'd really rather not cart a bunch of books in my travel bag - especially since they are just so much dead weight after I've finished. Even with books I've been waiting for, like Towers of Midnight - I'll wait for the digital edition. The hardcover is too big, and even the paperback (when it comes out) will take up a lot of space.

Welcome to episode 10 of Independent Misinterpretations - a Smalltalk and dynamic language oriented podcast with James Robertson, Michael Lucas-Smith, and David Buck. This week David and I spoke about the supposed interchangeability of developers - something management longs for. While we don't think this is advisable or desirable, there are some ways in which some level of interchnageablility is useful: no one wants a dead project because a key developer leaves.

You can subscribe to the podcast in iTunes (or any other podcatching software) using this feed directly or in iTunes with this one.

To listen now, you can either download the mp3 edition, or the AAC edition. The AAC edition comes with chapter markers. You can subscribe to either edition of the podcast directly in iTunes; just search for Smalltalk and look in the Podcast results. You can subscribe to the mp3 edition directly using this feed, or the AAC edition using this feed using any podcatching software. You can also download the podcast in ogg format.

Welcome to episode 10 of Independent Misinterpretations - a Smalltalk and dynamic language oriented podcast with James Robertson, Michael Lucas-Smith, and David Buck. This week David and I spoke about the supposed interchangeability of developers - something management longs for. While we don't think this is advisable or desirable, there are some ways in which some level of interchnageablility is useful: no one wants a dead project because a key developer leaves.

You can subscribe to the podcast in iTunes (or any other podcatching software) using this feed directly or in iTunes with this one.

To listen now, you can either download the mp3 edition, or the AAC edition. The AAC edition comes with chapter markers. You can subscribe to either edition of the podcast directly in iTunes; just search for Smalltalk and look in the Podcast results. You can subscribe to the mp3 edition directly using this feed, or the AAC edition using this feed using any podcatching software. You can also download the podcast in ogg format.

I just finished reading a very interesting book - "Spin" by Robert Charles Wilson. I also finished the second (of three?) books in the series, "Axis". The books are connected, but can be read separately - it does help to read Spin first so that you know how things got to be the way they are.

To summarize the plot of the first book, one night the stars go out. Panic ensues, and then things get progressively more odd as the reason for the blackout is found: the Earth has been wrapped in some kind of barrier that keeps time passing normally as billions of years pass beyond the barrier. That gives rise to a bunch of "end of the world" cults, as it seems obvious what will happen if the barrier is removed after enough time has passed that the Sun itself starts to expire.

Suffice to say that doesn't play out exactly as the doomsayers expect - but neither do things "go back to normal", either.

The second book is concerned with what happens after the spin barrier is removed. I don't really want to get too far into that, as doing so would spoil the first book. It leaves a lot for a follow on book though, so I'm certainly looking forward to that.

While the setting is near future, and it's clearly a sci-fi setting, it's mostly about the people. I became very attached to a number of the people - one thing I will say is that Wilson is not afraid to kill off characters, even ones that have become quite central to the story thus far. That keeps you reading - no one is safe. I'm looking foward to book three, and if you like pondering how people would collectively and individually handle a presumed apocalypse - that then doesn't play out as the worst fears had it - these are great books.

It's the end of the year, so it's time to look at the schedule for the videos and podcasts. JS4U and ST4U will be on hold after Wednesday until the new year; there will be at lest one more "Independent Misinterpretations" before the end of the year, but then that will go on hiatus until January as well.

Have a Merry Christmas, Happy New Year, and enjoy the archives until January rolls in!

The two things that you spend most of your time doing as a programmer — coding and debugging — are made noticeably easier and more fun by that combination of Smalltalk language and IDE. The language syntax is small, powerful, expressive, introspective. The entire stack (and libraries, and IDE) is written in Smalltalk (turtles all the way down), and you have access to the source code, allowing you to study and extend all operations, basic and complex. The code organization — explicit, first-class visual IDE support for packages, classes, protocols (groupings of methods by intended use) and methods — is extremely helpful.

Follow the link and see what he says about the debugger - non-Smalltalkers often miss the power of the debugger in Smalltalk.

I have two - count 'em, two - strings of lights across my doorway and the step railings outside:

As I was plugging them in, they went out. I thought one string had dropped a fuse, so I went looking for replacements - and found my battery backup in the basement (the one I use for the router) beeping. The ground fault on that plug had popped. How the heck are two lousy strings of lights an overload state?

The Aida 6 web framework is rather different in objectives than Seaside 3 as a Smalltalk application server. My specific interest was to determine to what extent the services for web applications were orthogonal to any given web markup. Both default to HTML but I am looking at frameworks suitable for emitting declarative Curl markup using the Curl web content language (originally MIT and now Sumisho.)

The rise of various streaming TV options - from DVRs to Netflix, Hulu, iTunes, (etc) - has done a fair amount of damage to the traditional "appointment tv" model. Now there's some real evidence of what the future of that model looks like: sports:

Of the 20 highest-rated telecasts of any kind so far this television season, 18 have been N.F.L. games on CBS, NBC or Fox. In terms of the best of 2010, nothing else comes close. Of the 50 highest-rated programs during the calendar year, 27 have been N.F.L. games, including 8 of the top 10.

This makes perfect sense to me - watching recorded games is hard, because it's just too easy to hear about the results elsewhere. Beyond that though? Most shows now have a niche audience, which means that it's pretty easy to avoid spoilers.

Beyond mass audience things like NFL games though, it makes the standard ad supported model harder and harder to justify.

The fact that the people in charge of the FCC actually seem to believe this tells me that they have no business regulating anything more complex than their utensils drawer - and that might be pushing it:

the release says that only "measured steps" to regulating wireless are necessary because "open operating systems like Android" have been released, and that it wants to see how Verizon and other 700MHz spectrum winners handle the hotly-contested openness requirement when building out 4G.

Right... because how a carrier handles bits over the air has so much to do with what OS is running on the receiving device. I'll be over here, in the corner, laughing my whatever off at all the clowns who think the FCC is doing anything useful.

I spent a fair bit of the evening playing the new DLC for Fallout: New Vegas
. It's not bad - but it does have a fair bit of similarity to one of the DLC packs for Fallout 3
- "The Pitt":

You get captured and lose all of your equipment

It's a one way trip, with your return dependent on finishing the task at hand

The whole thing is being run by a whack job escapee from the Brotherhood of Steel (I'm giving nothing away by saying that it's Brother Elijah, the guy who really wanted to stay at Helios)

Mind you, there are huge differences as well. I was able to run through Pitt and find all the guns, ammo, and armore I wanted. Theer seemed to be plenty of stimpacks lying around too, as I recall. In Sierra Madre, that's just not the case. There's virtually no guns or amm to be found - I've been pumping up my melee skills since I started it (the level cap goes up to 35 with this dlc). Still, my health has been running at 50 percent or less most of the time. The only health I manage to find is out of the vending machines, and that requires me to find lots of casino chips. To be fair, those are all over, albeit in small-ish numbers.

You also lose your entire party - again, a lot like "The Pitt". Inside, you end uphaving to take the crew you find and deploy them to various places on the map (and convince each of them to stay there) as you go off to open up the casino proper. That's as far as I've managed to get - I was on my way to the bell tower when I ran out of time for the day.

My advice? Bring in a leveled up (at least 20th) guy with both melee and survival pushed up. Your gun and energy weapon skills just won't help you that much.

I hope all of the people who've been pining for network neutrality know what they just got from the FCC - it's a huge win for the existing carriers and cable companies. Why do I say that? Take this statement:

"A commercial arrangement between a broadband provider and a third party to directly or indirectly favor some traffic over other traffic in the connection to a subscriber of the broadband provider (i.e., 'pay for priority') would raise significant cause for concern," the Commission then elaborates. This is because "pay for priority would represent a significant departure from historical and current practice."

So to take a for instance - NetFlix couldn't pay to get priority for their traffic. Meanwhile, the local cable outlet (or telco) ships video on demand down the "cable" channel (although it actually comes down the same pipe), and gets to prioritize the heck out of it.

I sure hope all the idealists are happy now. The only good news here is this: based on recent court decisions, it's likely that the FCC overstepped its authority. I certainly hope that's how this plays out.

How did I miss The Diner returning? I love Lileks' stuff, and the podcast seemed to disappear in 2009 - there was a gap between March and October, and I just dropped the subscription. Now I wish I hadn't!