Planning meetings accomplished
We had a good set of meetings, and I now have a full plate of things that need to be done - I don't have anything specific to discuss, since we didn't change directions at all - have a look at our roadmap for where we are headed (and note that I plan to update that doc)
Media Hackers?
Steve Rubel reports that some people are yearning for some kind of "more authentic" ecology of podcasting - this is inspired by the news that Rush Limbaugh is now podcasting (although, I should note that it's a for pay service - you have to pay to access to the podcasts):
Dave Winer and Steve Gillmor have coined a new phrase - media hackers. I like it. Dave envisions a future where the biggest podcaster is not Rush Limbaugh, but media-hacker stars that have yet to come to the forefront.
Well, I have serious doubts about that happening (at least in large numbers). There's a reason that I go out of my way to listen to James Lileks, for instance - he spends time on his podcasts. Go over here and give on them a listen - you'll find an eclectic mix of pop culture references, Sci Fi riffs, and a variety of interesting (and often quite odd) music. There's only a new one once every few weeks, and part of that is likely due to the effort he's putting in.
Add to that something else - Lileks has a "radio voice" - he comes across very well. I've tried to listen to Winer's casts - they ramble, he moves away from the microphone (making it hard to hear him), and he's "all over the map" in terms of topics. In other words, there's no focus. It takes time to listen to an audio broadcast, whether it comes over the air or over the wire. If the speaker isn't focused and interesting, what's the point? Ultimately, if you expect to gain listeners, it's going to take actual effort. Rambling about whatever comes to mind just isn't going to cut it - for the same reason that it won't cut it in an editorial page writer.
Yet more meeting pics
I have two more meeting pictures - Suzanne had a real digital camera (as opposed to my camera phone), and had me snap a shot of her, Eliot, and Georg:
Here's a lower quality one of Sherry Michael and Sam Shuster:
That's what I have from the meetings - there should be a bunch of pics coming from Smalltalk Solutions though - along with my blogging of the events.
Satellite Forces and Cincom
I blogged about Satellite Forces last winter, and now we have a press release on our progress together:
OTTAWA, ON - Cincom Systems, Inc., a global leader in business process application development, announced today that they intend to pursue a partnership with Satellite Forces International (SFI), a leading developer of business management applications.
Smalltalk Solutions Tutorials
You can register for the StS 2005 tutorials now:
See you in Orlando!
When I think it can't get worse
Kim Delaney, Beau Bridges and David Cubitt will reprise their roles from NBC's hit SF miniseries 10.5 in 10.5: Apocalypse, a sequel that began filming in Montreal last week.
The whole plot was an improbability drive :)
Bad ideas beget more bad ideas
Here's a story proving that bad copyright ideas aren't solely a US problem - look at what the Europeans are pondering:
European recording companies are pushing to extend terms of copyright to nearly 100 years to be more in line with U.S. law.
So the idea is to prove equivalent levels of idiocy?
Looking for ESUG info?
If you want up to the minute info on the ESUG conference, then you should subscribe to this feed.
Changing the structure
When I first created this blog server (back in 2002), the basic server structure differed a fair bit. I've been evolving the code (mostly without having to restart the server) over time, and I'm about to make another such change - to the storage mechanism. The running implementation now dumps every blog item into one directory (per blog). So, every post I've ever made sits in a file somewhere in the same directory (one file per day). At some point, that's going to be a problem in terms of the file system. So, I've made a small change - underneath the basic storage directory are per-year directories, and each post just drops into that directory. The cool thing is, that change required only three small method changes - I'd refactored the storage code awhile back, so it was simple.
Harder is the fact of the existing server, it's caches, etc. Once I made the simple code change, I had to get the server updated - files relocated and caches updated. Moving the files was easy, because they are named based on date: a file named vw_blog13-5-5.blg is from the 13th of May, 2005. Quick work to rearrange all of that. Then there's the caches - for quick lookup, there are a few caches that needed updating - for instance, the category cache:
blogs := (BlogSaver default keys) asOrderedCollection. blogs do: [:each | | blog | blog := BlogSaver named: each. blog cache setupSearchCategoryCache].
Another short script of the same sort for the keyword cache, and it's done. I'll convert the server to this new structure sometime this weekend, and the cool part is, no one should notice the change.
Storm info for Florida, Gulf coast folks
If you live on the gulf coast or in Florida, here's a feed you should subscribe to - the National Hurricane Center. The stock website is here. At present, they have good info on Tropical Storm Arlene (scroll down); last year, I kept track of all the storms that crossed Florida via that feed. My parents live in Melbourne Beach, FL, so these things are of interest to me.
Too many bad ideas to count
Richard Mansfield has been scarred by the "C" language family. In this article, he tries to explain why OOP is bad. What he mainly explains is something very simple - he's only been exposed to OOP done wrong, and drawn bad conclusions from this:
To the extent that OOP is involved in components such as text boxes (not much, really), it's very successful. GUI components are great time-savers, and they work well. But don't confuse them with OOP itself. Few people attempt to modify the methods of components. You may change a text box's font size, but you don't change how a text box changes its font size.
What he's doing here is arguing against a concept that predates OO - encapsualtion. I was confused by this trashing of basic programming concepts until I read the short bio at the end of the piece:
Richard Mansfield has written 32 computer books since 1982, including bestsellers 'Machine Language for Beginners' (COMPUTE! Books) and 'The Second Book of Machine Language' (COMPUTE! Books). From 1981 through 1987, he was editor of COMPUTE! Magazine and from 1987 to 1991 he was editorial director and partner at Signal Research.
It looks to me like Richard started out in assembly, and his exposure to OOP has been through the marvelous examples provided by C++, Java, and C#. In those languages, you get OO as the supposed main play, but it's surrounded with stupidity like primitive data types, "final" class definitions, etc, etc - it's no wonder he's come away with so many bad ideas:
For a while it was a success, but things took a turn. In those early days, computer memory was scarce and processors were slow. Processor-intensive programs such as games and CAD had to be written in low-level languages just to compete in the marketplace. To conserve memory and increase execution speed, such programs were written in assembly language and then C, which conformed to the computer's inner structure rather than to the programmer's natural language. For example, people think of addition as 2 + 2, but a computer stack might work faster if its programming looks like this: 2 2 +. Programmers describe it as little Ashley's first birthday party: the computer starts counting from zero, so to the machine it's her zeroth birthday party.
When fast execution and memory conservation were more essential than clarity, zero-based indices, reverse-polish notation, and all kinds of bizarre punctuation and diction rose up into programming languages from the deep structure of the computer hardware itself. Some people don't care about the man-centuries of unnecessary debugging these inefficiencies have caused. I do. Efficiency is the goal of OOP, but the result is too often the opposite.
He then goes on to argue that data and functionality need to be separate - that this somehow increases the odds that your code will be flexible:
I find that leaving the data in a database and the data processing in the application simplifies my programming. Leaving data separate from processing certainly makes program maintenance easier, particularly when the overall structure of the data changes, as is so often the case in businesses (the most successful of which continually adapt to changing conditions). OOP asks you to build a hierarchical structure and thereafter try to adapt protean reality to that structure.
Encapsulation, too, is a noble goal in theory: you've reached the Platonic ideal for a particular programming job, so you seal it off from any further modification. And to be honest, constructing a class often is fun. It's like building a factory that will endlessly turn out robots that efficiently do their jobs, if you get all the details right. You get to play mad scientist, which can be challenging and stimulating. The catch is that in the real world programming jobs rarely are perfect, nor class details flawless.
This is where I think he runs off the rails. Inheritance is one aspect of OOP, but it's not the end-all, be-all. In fact, most of us recognize that deep inheritance trees lead to obfuscation more than they lead to elegance. But never mind that - what I want to know is this: If I have a set of functions over here, and the database over there - as opposed to a set of objects over here, and the database over there - how is the former easier to update than the latter? If the form of the data changes, guess what? The functions (or methods) need to adapt. Richard seems to think that a rigid separation somehow makes this easier - either he's smoking something, or he's never worked on a non-trivial system. I spent years working in C, and I also spent a fair bit of time in Basic (and other similar languages). Believe me, Smalltalk makes it far, far easier to deal with code migration issues than anything else I've ever worked with.
Mansfield has discovered that the Emperor has no clothes, and he thinks the Emperor is OOP. What he hasn't figured out - most likely through lack of exposure - is that C++, Java, and C# do not define OOP. In fact, they are all fairly ugly hacks pretending to be OO, while preserving the nasty familiarity of C style syntax. If he wants to blame someone, he can look at the supposed giants: Stroustrup, Gosling, and Hejlberg - who have managed to inflict a few megatons worth of damage to the software development field during their careers.
Humorous local media moment
My wife spotted this headline in a local newspaper - I don't think I need to add much commentary:
Holy contracts batman!
You have to see it to believe it:
The "cursed'' 1919 contract that shipped Babe Ruth from Boston to the Bronx sold at auction Friday for a staggering $996,000, delighting its new owner -- a die-hard Yankees fan -- and a hunger-relief group designated to receive a financial windfall from the sale.
All I can say is, whoa....
Plugging the pieces together
Over the last few years of development work on BottomFeeder, the application has changed in one very important way - what started out as a monolithic, big ball of code has become a set of reusable components that have been plugged together. That's not true in all cases; the RSS parsing is still too tightly coupled to the application - a looser coupling could make for a fully reusable Smalltalk library for dealing with RSS and Atom. However, that's the exception here. The application now includes, between core components and plugins, 30 pieces that can be updated in a (mostly) independent fashion. Of course, updates to one sometimes require new APIs available in another, but you get the idea.
So what's there? Let me walk through the list:
- SpellChecker - a pluggable spell checking module. It depends on the presence of the ASpell shared libraries, which are readily available for Linux and Windows, and can (in theory at least) be compiled for other platforms
- GIF Support - a library for reading GIF format
- WinGDIPlus - a Windows specific library that uses native libraries to convert various image formats into something that Smalltalk can use
- EpiWin32Folder - a Windows specific library that enables use of the directory selection dialog (as opposed to the file selection one)
- Emote-Support - used mostly by TypeLess, it provides a set of emoticons, enabling auto-replacement of ASCII-art
- ExtraEmphasis - a library that simplifies various VW font usage scenarios
- ExtraActivity - a library that makes it easier to animate Visual Components. Used mostly bu WithStyle
- Weaklings - adds a simple "Weak" mechanism for instance variable slots in an object
- VRCommonDialogs - a cross platform set of common dialogs
- Http-Overrides - this is really part of the NetResources library. It separates out the overrides required by that library, so that changes needed after a new VW release are easier to track down
- NetResources - a basic library for wrapping the VW net clients libraries with a highter level API
- NetResourcesHTTP - a high level API for HTTP access that simplifies access, and adds support for things like caching, digest auth, and more
- PatchFileDelivery - a general settings driven library for delivering application level updates (parcels) via HTTP. Supports download and save, and download and load immediately
- Browsing-Assist - a library that supports spawning a web browser on an URL across platforms. On Windows and Mac, this "just works", and has APIs for spawning new or reusing. On other platforms, the browser must be specified
- OSTimeZone - a cross platform library for setting the time in VW to match the PC clock
- XmlRpcClient - a library for making XML RPC calls and handling the responses
- XML Configuration Files - a library for storing configuration information (or serializing objects) in an XML format.
- BottomFeeder - the basic BottomFeeder application itself
- Twoflower - the Twoflower Http parser, used by WithStyle if LibTidy is not present or fails
- WSBundle - The Software With Style code base
- LibTidy - a library that wraps the C based LibTidy. This library takes arbitrary HTML and cleans it up, returning valid XHTML.
- Win32TaskbarSupport - makes VW Windows and menus cognizant of bounds, including the taskbar - prevents menus from disappearing behind the taskbar
- Windows TrayIcons - a Windows specific library with a simple API - allows you to drop an application into the tray
- IRC-BottomFeeder-Typeless - the Typeless IRC plugin to BottomFeeder
- Blog-Tools - the Blog posting plugin, which supports Blogger API, MetaWebLogAPI, and the MT API. Also available Standalone, as BottomLine
- WinMineGame - Minesweeper
- GoldenMonkey - a game
- Steroids - Asteroids game
- Xonix - the old Xonix arcade game
- EnclosureHandler - manager for downloading/saving enclosures automatically
That list has grown over time - I started out with three components that could be updated at runtime! I should also point out that an awful lot of those components were written by other people - in particular, Software With Style is responsible for the excellent NetResources and WithStyle components - without which, BottomFeeder would be a lot less nice.
Slamming a blog strategy
Scoble slams UPS in response to this article by Robert Manning of UPS. However, Manning does have a few good points. Rather than rush out and start blogging, you should have some idea what your plan is if you go at it from the "corporate blog" side. On the other hand, if you approach it as Sun and MS have - just let the employees go out there and provide a human voice rather than a corporate drone - then you can be more laissez-faire about it.
However, that doesn't mean that corporate marketers get to ignore the blogosphere; far from it. Witness the Kryptonite and Kensington issues, for instance - would you rather let those things sit and fester, or be able to respond immediately? That Kryptonite response was from weeks after the incident, when the damage was already done. As best as I can tell, Kensington has yet to respond.
What you product marketers and product managers need to be doing is paying attention to product mentions. How? Via search feeds. Using BottomFeeder as an example, I can set up search feeds using Feedster, Google, Yahoo, MSN, BlogPulse, BlogDigger, A9, and Three headline news services. I can also add searches that need to be manually set, like those from PubSub. Here's what it looks like:
You can click that for a bigger image. The point is that by subscribing to a search for "kensington lock" I can find all the references - positive and negative - that flow through the sphere. For my product - Cincom Smalltalk - I search on
- Smalltalk
- Cincom Smalltalk
- ObjectStudio
- VisualWorks
- Cincom
Across a number of the search engines. When I find positive references, I can publicize them - maybe even approach the person or company in question for a success story. When I find a negative response, I can follow up and get more details. That latter part is where a corporate blog may come in.
If you find yourself responding to commentary that comes in this way in a repetitive fashion, it may well be worth your while to get an FAQ posted. From there, you may decide that you need a more open, interactive forum - like a blog. Either way, you need to be tracking the commentary - because the positive and negative points are being made whether you engage them or not.
Rewriting History
Sometimes, an industry analyst gets a story so very, very wrong that they try to completely airbrush history. Members of the MSM like to accuse bloggers of this, but I just found a whopper example from Tom Yager of InfoWorld. On June 6th, before the Apple conference, he wrote about the (then rumored) Apple/intel thing. I can't link to the story because it's just gone - instead, I took a photo of it:
Now, it's hard to make out in there, but you can click for a bigger image. Compare that with the posted commentary from Yager on June 6 (note the "updated 9 June" snippet on the left). Here's a piece from the dead tree version:
Might Apple sell an x86? I doubt it. Might Apple shrink-wrap OS X for PC Systems? Who cares?
...
I'll tell you my pet scenario: IBM leaked the details of the top secret PowerPC 970MP processor to needle Apple into committing to a volume purchase. Apple doesn't like to be jerked around, so it had a sit-down with Intel over cucumber sandwiches and chortled, "You must promise not to tell anybody about this"
Compare that to what's posted at that link - some crow eating, but not a lot, and the print column is straight down the memory hole. The point isn't that Yager got this wrong - heck, go Google intel and Apple and see how many other people got this stuff wrong. Heck, look here, on my blog, and see where I fantasized about Apple "thinking different" and using the iTanic. Yager wants to airbrush history though: "Me? Predict that Apple would never, ever go to intel just days before it happened? Never, I never said such a thing! Why, try finding it in Google!".
So much for all those editors and fact checkers that keep "professional" writers honest - as opposed to the bloggers, who can just re-edit history. Yeah, right...
Weekly Logs - 6/11/05
Well, it's time to have a look at the logs again. First up - BottomFeeder weekly downloads.
Platform BottomFeeder Downloads Windows 520 HPUX 475 Mac 8/9 343 Sources 268 Linux x86 209 Mac X 172 CE ARM 86 Update 38 Solaris 15 Windows98/ME 11 Linux Sparc 8 AIX 4 SGI 3 CE x86 2 Linux PPC 2 ADUX 1
That's an average of 308 or so a day over the last week, which is where things have been at lately. Being cross platform has its benefits - A lot of my download rate is for platforms that have no other viable RSS/Atom answer right now. Let's take a look at the stock HTTP accesses to the blog site:
Tool Percentage of Accesses Mozilla 44.4% Internet Explorer 31.1% Other 11.6% Java 2.6% Google Bot 2.5% BottomFeeder 2.5% Net News Wire 2.3% MSN Bot 1% BlogLines 1% Opera 1%
A little more variety than last week, but not vastly different. What I'd really like to do is compare User Agent access to the main cincom site and the blog site - I suspect that IE accesses over there are a lot higher. Finally, let's look at the RSS report:
Tool Percentage of Accesses Mozilla 23.4% BottomFeeder 17.9% Net News Wire 14.4% Other 15.4% BlogSearch 4.9% NewsGator 4.2% SharpReader 3.5% Safari RSS 3.3% BlogLines 3.2% Lilina 2.1% Planet Smalltalk 1.8% Feed Tagger 1.7% MSN Bot 1.7% Internet Explorer 1.6% Feed Demon 1.5% Liferea 1.4% RSS Bandit 1.2% Feed Reader 1% Shrook 1% Jakarta 1% Python 1% Google Bot 1% JetBrains 1%
You can see that I trawled my way through the "Other" category (compared to last week) and added a few entries - the variety of tools in use to read RSS continues to grow, at least according to my logs.
Unnecessary damage
Incipient Thoughts makes a point about inheritance and polymorphism that points out a problem common to OO development - without regard to implementation language:
In every OO class I teach, I introduce encapsulation and polymorphism as the primary OO tactics, with inheritance a distant third. It's hard to tease apart polymorphism and inheritance, because most OO languages are based on an intimate fusion of the two, unnecessarily.
Inheritance is a very strong relationship between objects. It makes it hard to tease anything apart. Some people experience maintenance problems as a result of pervasive inheritance in OO systems. Justifiably, these people then become skeptical about polymorphism as well, because it is so strongly linked to inheritance. They are then tempted to give up on OO altogether. This is throwing the baby out with the bathwater.
The two don't have to be so tightly linked, and - in the place OO originated (Smalltalk) - they really aren't. I have plenty of polymorphic objects in BottomFeeder that have no inheritance relationship at all. However, the two are commonly linked in the teaching of OO, and it's not unusual to see large inheritance trees in Smalltalk projects. Which is too bad, because Smalltalk makes ad-hoc polymorphism far easier to achieve than Java, C# - you don't have to go out of your way to define a formal interface, for instance.
There's a good example in the post using an "edit" feature of a Wiki, which points out how inheritance is an unnecessary complexity in this case.
Smalltalk - not just for playing
Interesting post on the power of Smalltalk, but with an odd entry point:
The first thing I noticed was that the Smalltalk community is still alive allthough a bit muted. The impact of Java has definately taken its' toll though. A quick search on jobserve for Smalltalk vacancies identified only 10 or so and they appeared to be for maintance work. It looks like the remaining Smalltalkers are using Smalltalk just out of interest or just for fun in their spare time. With the exception of one or two German Consultancies, most of the Smalltalk related websites were either academic, or open source related - very few businesses.
Here's a Google search for Smalltalk - The Cincom Smalltalk web page comes up 4th, and the Why Smalltalk page 3rd. Admittedly, the Squeak entry in second place might emphasize an academic orientation, but there's plenty of commercial information right there. The top entry, for Smalltalk.org, republishes content from the CST blogs, so that will lead you to plenty of good information as well.
The rest of the article is well worth reading - it's a good promo for the ease of use and power of Smalltalk:
I got to put this idea to the test the other day. Whilst playing with Squeak, my girlfriend decided to pop herself on my knee and took a look at what I was doing. I was playing with the Alice framework port (Alice.org). Alice is a3D graphical framework which allows you to create a 3D world populated by Actors. On the screen was a pink bunny rabbit wearing dark glasses and carrying a drum and a mallet. I entered a few Smalltalk expressions asking the system to 'do-it' each time, and watched my girlfriends expression as the bunny respond to my every command. She soon caught on, and started entering commands of her own: "bunny head turn." Getting bored I was about to issue "bunny destroy" when she stopped me. "No you can't do that to such a cute bunny, make it beat the drum instead". At this point she grabbed the keyboard an typed "bunny beatDrum", but the system responed with: " bunny didNotUnderStand".
That's why I include a workspace in BottomFeeder - I actually use it myself for scripting and experimenting. That kind of end application scripting has led to actual product features, and is something that is well nigh impossible in Java or C#. In applications shipped in those languages, you have a dead end - if the developer didn't consider it, you're just done. Does this mean that just anyone can start coding in the Bf workspace? No, you do need to know the APIs and class names - that's a limitation. But at least you get far enought to have the limitation :)
Visiting Brussels and Beyond
My family and I will have a few days in and around Brussels, Belgium this summer (in August, after ESUG). We've got no clear idea at this point as to what we want to see - we have a number of thoughts, but they are not organized. We have 4 days to spend - and we don't want to spend most of it in a car or train. Anyone have any good suggestions? Thanks!
Speaking of scripting
BottomFeeder includes a workspace that allows scripting - but it's deeper than that. If you save your script to file called .btfrc and put it in the same directory as the image (or exe), it will get filed in at startup. For instance, I just had one of the IRC regulars ask me about a change to the localhost server that Bf runs. If you hit this url - http://localhost:8666/btf - while Bf is running, it will give you a list of your subscriptions, along with the top five items. Well, what if you wanted only the new items? Simple enough, if you have a small change to one method:
printHtmlOn: aStream (self link isNil or: [self link isEmpty]) ifFalse: [ aStream nextPutAll: '<a href="'; nextPutAll: self link; nextPutAll: '">'. ]. aStream nextPutAll: self title. (self link isNil or: [self link isEmpty]) ifFalse: [ aStream nextPutAll: '</a>'. ]. (self items notNil and: [self items notEmpty]) ifTrue: [| toPrint | toPrint := self allNewItems. aStream nextPutAll: '<ul>'. toPrint do: [:each | aStream cr. aStream nextPutAll: '<li>'. each printHtmlOn: aStream]. aStream nextPutAll: '</ul>'. aStream cr]. aStream nextPutAll: '<br/>'; cr
The only change was in the line: toPrint := self allNewItems. That had explicitly grabbed the top five before. Now, you do need to know the Bf API to make this sort of change. However, the cool thing is that it doesn't need to be a one-off effort. I've used this feature myself, and I know a few other people who have as well. The nice thing is that I didn't have to go out of my way to add scripting support to the application - it just happened. In fact, I wasn't even the first person to notice :)
Smalltalk Solutions Daily Update: 6/12/05
Smalltalk Solutions 2005 is coming up quickly - it starts on the 27th! Register now, so you can find out what's going on in the Smalltalk world:
Unit Testing Seaside Components
presentation
Shaffer, C. David: Westminster College
Tuesday 2:45 pm to 3:30 pmAbstract: I will present the freely available SeasideTesting framework and a small representative set of tests. SeasideTesting is a framework that extends SUnit to simplify developing and running tests of Seaside web components. This framework is unique in that it is designed specifically to allow both testing the rendered HTML result and direct access to the component instances. The advantages and some challenges that come with this capability will be discussed.
Bio: I am an assistant professor of Computer Science at Westminster College in Western Pennsylvania USA. In that capacity I teach all levels of undergraduate Computer Science. I am also sole proprietor of Shaffer Consulting and have been developing software in Smalltalk, Java, Python, C, C++ for more than 15 years. Recently I developed payroll and retirement management software and business to business web applications. I have several years experience with Java/JSP and also develop web applications using Python.
See you in Orlando!
Navel Gazing 101
When you read something like this, it really, really makes you wonder:
Although many reporters look forward to the trial's end, some admit they will be sad to see their colleagues go.
"It feels a little bit like the end of summer camp," Massie said. "It's a long time to be away from home, but you also get to meet people from different walks of life and get their opinion on things."
Summer camp? Time to step away from the camera and microphone, I think.
Beer Based Logic
Via Bob Congdon comes a link to this game of truck vs. overpass. The title was my wife's thought on how the decision to just keep going after the initial impact came about :)
Why dynamic typing makes life simpler
Read Tim Bray's adventures with generics in Java - and you'll know why a system that forces you to make the compiler happy does so at the cost of your productivity. The justification for all that complexity?
At the end of the day, my interfaces are all nicely parameterized and their customers won’t be getting any warnings. And I do think that making Comparable a little less of a blunt instrument was probably a good idea; after all, even if Fish is a Comparable, the following is probably unsound:
if ((new Fish(freshwater)).compareTo(new Bicycle(racing)) < 0)
The actual liklihood of that line of code being written? Approximately zero, and even then, only for your larger values of zero. But Java is good that way, protecting you from events you'll never see, and making sure you'll rationalize them away.
Meanwhile, we're busy being productive over here.
When WiFi drives less business
Via Dave Winer comes a link to an interesting NY Times piece on the intersection of cafe culture and free WiFi - here's an explanation of the problem that one coffee shop offering free WiFi ran into:
Victrola started providing free wireless access two years ago after customers asked for it. As in hundreds of other cafes, the owners hoped it would encourage regulars and infrequent patrons to buy more food and drinks. But there was also a disadvantage, staff members said: the cafe filled with laptop users each weekend, often one to a table meant for four. Some would sit for six to eight hours purchasing a single drink, or nothing at all.
I can see that happening, and I understand why this shop (explained later in the piece) decided to pull WiFi access on weekends. There's an examination of the different types of patronage such shops get, and how it drives the "culture" of the shop. Interesting stuff, and proof that not every business answer lies on the net :)
Smalltalk Solutions Daily Update: 6/13/05
Register for StS 2005 today, so you can find out what's new in the Smalltalk world:
VA Smalltalk Going Forward
presentation
O'Keefe, John and Clayberg, Eric: IBM, Instantiations
Tuesday 10:30 am to 12 pmBio: John O'Keefe is the lead developer of the IBM VisualAge Smalltalk team. After spending the first 2/3 of his career at IBM working on process control software and mainframe systems, he was introduced to Smalltalk by Bob Hinkle in 1988 and found his niche. He has been working on the IBM VisualAge Smalltalk product since before Version 1 and has been the technical lead of the team since Version 4.
Eric Clayberg, Sr. Vice President of Product Development for Instantiations, Inc., was Executive Vice President of Objectshare Systems, Inc. and Vice President of Development for ParcPlace-Digitalk, Inc. He is the primary author and architect of over a dozen commercial Smalltalk add-on products including the popular VA Assist Enterprise and WindowBuilder Pro product lines. He has a BS from MIT and an MBA from Harvard.
See you in Orlando!
The evolution of knowledge
Jon Udell highlights an issue that Dave Winer ran across in a WikiPedia page - from Dave's blog:
How is Wikipedia going to prevent from this from happening again? That's a serious issue. It's not the first time it's happened. This is why I've never been a strong advocate of Wikipedia.
When I spotted that in his blog, I followed the link, and couldn't see the problem - the page had been updated between the time Dave posted on it and my aggregator updated. Jon Udell has a lot more on the evolutionary nature of WikiPedia posts, and his screencast on the subject is perhaps the best way to understand how that works.
On a Wiki, information doesn't so much want to be free as it wants to be updated...
The joys of the net
Julie Lerman reports that some jerk is trying to trash her blog, and is busy deleting files. You know, I understand industrial espionage. I don't condone it (hardly!) - but the motivation for it is clear. With this? What is it, just simple nastiness? What's the point? Do the people doing this think that deleting a bunch of files off a server is something to brag about? Good luck Julie, and I hope the loser or losers doing this never work again.
Rent-a-wreck
Philip Greenspun asks a question about Rent-a-coder:
A business-minded friend of mine wanted a Web site with a lot of database-backed features, such as user registration, classified postings, auction bids, a user reputation system, etc. A simplified eBay. She also needed all the graphic design done. She posted her specs on www.rentacoder.com and the numbers to implement this system came back at around $450 for the entire job, including the graphic design. The five bids all came back fairly close to $450 from programmers in Bangalore, Romania, and Canada(!). She put the project on hold for reasons unrelated to implementation so we don't know how it would have worked out.
Here's the basic problem with that approach - it assumes that initial development is all you'll ever need. Using a system like this, where do you get:
- Maintenance (i.e., bug fixes, etc)
- New features as requirements change
There's a Heinlein phrase that comes to mind: TANSTAAFL.
Best Sith commentary yet
Dork Tower has perhaps the best "Sith" commentary yet. If you aren't a gamer, you might not get it :)
Where I would have gone in 1974
Why, to this academic conference on "Holy men in tights". Then again, maybe they wouldn't appreciate a 13 year old at their big shindig (from the past, no less) :)
You think it's hot?
I was all set to whine about how hot it is in the greater DC area (high today - likely around 93 farenheight). Then I saw this story out of India:
Bhubaneswar, which had witnessed the second hottest day in the current century, recorded a maximum day temperature of 44.6 ° C today while the mercury level at Cuttack was 43.6 °C. Other than the unbearable heat, the high humidity has made life miserable for the residents of the twin cities. One person died of sunstroke in the capital today while 15 other sunstroke patients were admitted into a hospital here during the day. In western Orissa, the mercury hovered above 46°C. Sundargarh recorded a maximum day temperature of 47°C followed by Jharsuguda with 46.2°C.
I'll stop complaining now.
Lighter Reading
With all the heavy reading I've been doing lately (have a look at my last few books posts), I needed a lighter diversion. I found it in John Ringo's "Into the Looking Glass", a fast paced, summertime beach book if ever there was one (assuming your tastes run to action/adventure sci-fi). If you've played Starcraft, this book is a Zerg invasion of earth - it's really, really clear that the author has played the game (more than a few times). Fun, light read.
Pre-Conference fun
Anyone else planning to arrive in Orlando ahead of StS 2005? A few of us are planning a trip to one of the theme parks (either Disney or Universal) on Sunday the 26th. If you are interested, comment here or drop me a line.
Blog stats
Scoble is asking about blog stats, and points to Tim Bray's periodic posts on the topic. As it happens, I post on this regularly (once a week now). Have a look at this category.
Smalltalk Roadmaps
Here's the Cincom Smalltalk roadmap - and here's what the new home of VA Smalltalk is pitching, in an upcoming webcast:
This Webcast hosted by Instantiations, discusses the staged evolution of VisualAge Smalltalk systems. In coordination with IBM, Instantiations has developed VA Smalltalk, a 100% VisualAge Smalltalk-compatible product. Instantiations will give a live demonstration of VA Smalltalk and discuss the evolutionary transition of Smalltalk applications to modern IBM platforms such as Rational and WebSphere.
So you can move forward, or you can "transition". Sounds like they are offering a non-Smalltalk future to me, but you should ask them :)
Update: Oh, I missed their bullet points. You'll love this:
- VA Smalltalk extends the viable life of VisualAge Smalltalk applications
- Instantiations fits into the overall IBM Smalltalk Transition and Roadmap Strategy
- VA Smalltalk will evolve over the next several years
- Instantiations Java products for Rational and WebSphere help position Smalltalk users for longer-term movement to Java
Well. Interested in an actual future with Smalltalk? Contact us, and find out what a committed Smalltalk vendor can do for you.
Zounds! How is it possible?
Blogging Roller mentions the Open Source release of Solaris:
The said it couldn't be done. They were wrong. OpenSolaris has been released under a true open source license and the project will be run as a true open source project, with outside contributors and independent distros and everything. Congrats to everybody inside and outside of Sun who helped maket his happen. This is definitely a historic day for open source.
But that's not possible - according to that super-genius James Gosling, doing something like this would mean chaos!
"We've got several thousand man-years of engineering in [Java], and we hear very strongly that if this thing turned into an open source project - where just any old person could check in stuff - they'd all freak. They'd all go screaming into the hills."
Hmmm, I say, hmmm
Smalltalk in Omaha
In Omaha this month? Check out the Omaha STUG meeting:
OK, this month's meeting is real special. We're teaming up with the SPIN group to present a really cool presentation! Here's the details: This month we have a real treat. Mike Cohn, a Denver Scrum expert, will introduce us to Agile Estimating and Planning.We'll look at why traditional planning fails, how to overcome those problems with a story-driven process, how to estimate and plan with stories, and why agile planning works.
We'll round out the evening with an interactive estimating exercise over pizza that will give you specific techniques to apply in your own work.
About Mike Cohn. Mike founded Mountain Goat Software{1} in 1993 to help organizations apply agile development methods to difficult software problems. Mike is certified in Scrum{2} and author of User Stories Applied and the forthcoming Agile Estimating and Planning (Fall, 2005)
Venue:
7pm next Tuesday June 21 2005,
Northern Natural
Gas, 1111 S 103rd Street, Omaha,
Room 149Join us! If you plan to attend, visit www.omahaspin.org and register.
Cast your mind back...
Brian Foote has some pictures from Smalltalk Solutions 2001 posted here. I'd link to one of me, but I think I was asleep when it was taken :)
Defining the pain
Via Steve Kelly, I came across this gem from Stefan Tilkov:
Definition: Worst-of-breed; composite noun: a strategy mixing a set of approaches, technologies or solutions so that the disadvantages add up to a disastrous combination no single item would have been able to create.
Example: Java + XML configuration files, which combines the verbosity and pain of having to create lots of meaningless code typical for statically typed programming languages with the runtime error probability of dynamic languages due to small typos, sometimes adding up to a solution that looks like an obfuscated programming contest application.
Heh. That's about the size of it. Productivity is over here.
Smalltalk in Toronto
Whoops, I can't read a calendar - this was last week (see the comments) - here's what you missed:
A final reminder: the next meeting of the Toronto Smalltalk User Group will be TODAY, Wednesday, June 8 at 6:30.
The meeting will be on the 42nd floor (not the 47th, as in the past) of the Bay Wellington tower, 181 Bay Street (Bay & Wellington, the north tower). When you step out of the elevator, go left, then left again. We're at the end of the hall. Look for the 'Northwater' sign.
Our web site is still down. We're still correcting a registration error... and the paperwork is a nightmare.
Jean-Luc Roche will talk about his experience in France...
The "Mutuelles du Mans", one of the two big Smalltalk users in France, developed all their corporate software with VisualWorks v2.5 in the early 90's. They never took the time to keep up to date with new Smalltak releases and, by 2002, they were faced with the rather daunting task to port all their applications to VisualWorks v7.
The most challenging aspect of the project was arguably to migrate the environment development to StORE, the SQL-based repository that ships with VW v7 and replaces ENVY. I propose to take a look at the porting strategy we used, to describe the difficulties we met and, in that process, to explore the differences between ENVY and StORE.
Bob Nemec
Toronto Smalltalk User Group
www.smalltalk.toronto.on.ca
The tenacity of failure
If you cast your mind back 10 years, you'll recall the various stories about the disasterous baggage handling system at Denver International Airport. Well, ComputerWorld reports this morning that the system is being retired, and DIA is returning to - wait for it - manual handling:
After more than a decade of trying to make Denver International Airport's computerized baggage system work as designed, United Air Lines Inc. is giving up on the technology and returning to manual handling procedures.
"It's never worked up to its potential," United spokesman Jeff Green said last week. He added that the airline has spent "enormous amounts of money" on the system over the past 10 years, but it's still used only for luggage heading out of Denver on United and some baggage transfers between flights. The system has never been able to process luggage from arriving flights.
Here's where I explain the title. The system has never worked properly, and yet it stayed online for a decade, causing who knows how many problems over that time. There were stories that first year advocating the action that they just took now, but no one was willing to admit defeat then.
This happens in IT projects as well, and it tends to get worse as more money is spent. There's kind of a tipping point past which failure becomes too ugly to contemplate - someone would have to explain all the consulting fees, all the hours spent, etc. etc - it's just easier for all involved to try and muddle through. In the meantime, large amounts of business damage accrue, and for what? The pride of a small cadre of management who won't admit that mistakes were made.
Smalltalk Solutions 2005 is right around the corner
Jason Jones reminds us that StS 2005 is rapidly approaching - register today!
How to dynamically resize widgets
I haven't posted an honest to goodness example in awhile - here's how to accomplish the common UI need to "zoom" a widget. I didn't come up with this code myself - in the finest Smalltalk tradition, I stole the code from the file viewer, which supports this as well.
In BottomFeeder, you can zoom the HTML pane to cover the entire item view/html view area. To do that, you need to figure out where your new widget bounds are, and then use them. Here's the "outer" method in Bf that either zooms or unzooms, as appropriate:
actuallyZoomHTMLView: htmlView topLayout: topLayout splitter: splitter2 top: top | sub myDivider | sub := self widgetAt: #feedID. myDivider := (self getComponentFromSubcanvas: sub withID: #Divider2). (self isZoomed: top) ifTrue: [self unzoomHTMLView: htmlView topLayout: topLayout splitter: splitter2 top: top. myDivider beVisible] ifFalse: [self zoomHTMLView: htmlView splitter: splitter2 top: top. htmlView takeKeyboardFocus. myDivider beInvisible]. self currentBuilder window refresh. htmlView beVisible
Now, there are a couple of curious things in there, including the #getComponentFromSubcanvas: message send. In Wrapper (as opposed to Pollock), it can be a pain in the butt to grab a wrapped UI if you haven't kept the builder around. in Bf, I wrote a convenience method to deal with that.
The arguments coming into that method are the wrappers for the html pane, the layout for the item grid (or list) pane, and the wrapper for the splitter. All the wrappers are retrieved like this:
wrapper := self builder componentAt: #widgetIDHere.
while the layout is retrieved:
wrapper := self builder componentAt: #splitterID. layout := wrapper component layout.
Having all that, we now have enough information to actually resize the pane. That code is a simple convenience method in BottomFeeder:
zoomHTMLView: htmlView splitter: splitter2 top: top "zooms the HTML view, covering the item pane" top beInvisible. splitter2 beInvisible. (htmlView component layout) leftFraction: 0; leftOffset: 0; topOffset: 0; topFraction: 0
The unzoom method looks similar:
unzoomHTMLView: htmlView topLayout: topLayout splitter: splitter2 top: top "unzooms the HTML view, exposing the item pane again" (htmlView component layout) leftFraction: 0; leftOffset: 0; topFraction: topLayout bottomFraction; topOffset: topLayout bottomOffset. top beVisible. splitter2 beVisible
What you are doing here is handing the wrapper a new layout frame to live in (thus the four arguments, telling it what the edges are). This is easy enough to extend to any widget or set of widgets, and, in fact, the code in Bf should be more generalized. It works though, and I haven't had a strong desire to muck with code that works well :)
You should be able to adapt this idea to your own UIs easily - and if you need an in image example, have a look at class Tools.FileTools.FileBrowser - specifically, at the #toggleZoom method.
Precision Systems at StS
I just received this announcement from Ann at Precision Systems, one of the corporate sponsors of this year's Smalltalk Solutions:
ENTER OUR RAFFLE FOR SMALLTALKERS: WIN AN APPLE IPOD OR AMAZON$!
Anyone can enter our free drawing. To enter, simply fill out this form
We will be giving away:
- an Apple iPod, and
- ten Amazon.com gift certificates
You don't need to be present at the drawing, which will be held at the conclusion of:
SMALLTALK SOLUTIONS 2005: JUNE 27 - 29 IN ORLANDO, FL!
Precision is proud to be an official convention exhibitor. There will be an impressive array of speakers, tutorials, workshops and exhibits of Smalltalk products and services. See the convention website for details
We hope to see you there! Good luck in the drawing!
Anne Miller
Precision Systems Design, Inc.
Smalltalk Staffing Group
SmalltalkGroup@PrecisionSystems.com
See you in Orlando!
Everything old is new again
News flash - "browse senders" is hardly a new thing. And yet, people using MS tools seem amazed by it:
Here's an example. Let's say I want to add attended transfer (where you have a call, press transfer, dial a number, talk to the new call, then hangup to connect the two). I'm looking in the source I'm familar with (the IAX protocol area), and see iax2_hangup(). That's a packet-level call, so when someone physically hangs up, that, somehow, gets called. Where? Well... right click the function, Call Browser -> Show Calls To:
Only implemented in Smalltalk back in the late 70's sometime, and - probably in Lisp before then. I guess if it doesn't come with curly braces, it doesn't exist :)
Is good enough, enough?
Frank Patrick points to this piece by Seth Godin (and a few other related pieces) on the concept of "good enough". Here's the riff from Seth I want to highlight:
I don't think so. I think that the open nature of the web and the hypercompetitive environment of worldwide competition are pushing things in two different directions at the same time. First, the hyper-cheap, sort of junky stuff that discounters and others want to sell in volume. And second, the relentless pursuit of better. (RPB). RPB is the opposite of good enough. It's not Jack Welch's six sigma nonsense in which engineers codify mediocrity. It's a consistent posture of changing the rules on an ongoing basis.
Well, that all depends on what "better" is, with respect to things like cost. For instance - I could own a better car than I do. It might cost me a ton more money though, and give me years of car payments. Am I "settling" by staying with the late model sedan, or deciding that I'd rather spend the money elsewhere? Opportunity cost plays a large role in any supposed pursuit of "better", because virtually no decision - business or personal - is made in isolation.
Re: 20 million DVRs for DirecTV
The PVRBlog notes an upcoming shift in the movie rental/purchase business:
Edward Jay Epstein covers Rupert Murdoch's drive to kill off the movie rental business by adding DVRs to the DirecTV network to create video-on-demand. The main challenge is that Wal-Mart has forced the movie companies to give physical retailers (Wal-Mart) a 45-day window of time where movies cannot be distributed electronically. Is this a Wal-Mart vs. DirecTV battle? I can't imagine it being that simple. However, a future where we don't travel to Blockbuster (or Tsutaya here in Japan) is obvious for those who enjoy NetFlix. With the 100 and 1000 Gb/sec. retail consumer fiber-optic networks in Asia, VoD for movies is not far away.
This is going to be a fairly big change. Right now, the rental model still works. If we have big enough pipes, and large enough storage arrays though - all bets are off. This is ultimately what the MPAA and the RIAA fear most - a basic change to the current industry model. It's not that there's no money to be made there - it's more that there's comfort in inertia.
Clues for the clueless
PR Differently points to a news article on people getting "fired for blogging". Here's the thing though - the people covered weren't fired for blogging per se - they were blogged for either:
- Airing "dirty laundry" in public
- Discussing sensitive corporate material in public
- Embarrassing the company in public
Well gee, get me a cluestick for these folks - those acts will get you washed and waxed if they become public. You think a signed letter to the editor doing any of the above would be looked at kindly by management? What makes you think that blogging will be any different? Here's one of the cluebots they talked to, a guy named Paul Whitney:
Like a growing number of employees, Peter Whitney decided to launch a blog on the Internet to chronicle his life, his friends and his job at a division of Wells Fargo.
Then he began taking jabs at a few people he worked with.
His blog, gravityspike.blogspot.com, did find an audience: his bosses. In August 2004, the 27-year-old was fired from his job handling mail and the front desk, he says, after managers learned of his Web log, or blog.
Well. Insulting co-workers in a public forum, and he's shocked that there were consequences. Here's his reaction:
"Right now, it's too gray. There needs to be clearer guidelines," says Whitney, who has found another job. "Some people go to a bar and complain about workers, I decided to do it online. Some people say I deserve what happened, but it was really harsh. It was unfair."
Harsh and unfair? What did he think was going to happen? Say you did exactly what he did, but in a loud voice in the employee cafeteria. You think maybe people might have been irked by that? A blog is is the quintessential "loud voice" - sooner or later, people are going to notice what you are saying. For instance, here's the sort of thing that likely got noticed. If you make personal attacks on co-workers, identifying yourself and the firm in question, it shouldn't be a huge surprise when the pink slip arrives.
And yet....
Scoble takes Joel to task for a few comments, and goes off on a rant:
If your employees get bored, can they go over and talk with some of the world's top experts on Linux? Oh, and think no one wants to come work at Microsoft? Well, the founder of Gentoo just came to work here. Sorta invalidates your theory that the Slashdot crowd won't come to work here too, don't ya think? Do you have any people who've written operating systems where you work? This Microsoft employee has written two. Do you build tools that let you build a new OS in minutes?
Well. Since you can build a new OS in minutes, I expect Longhorn will be out next month, eh? MS has a serious inertia problem when it comes to shipping, and there's a reason for it - everything depends on everything else. If MS has anyone on staff that understands the concept of loose coupling, they are locked away in a closet somewhere, probably to protect their own sanity.
You want to know why Longhorn - and VisualStudio, and SQLServer, etc, etc are late? Tight coupling. Remember the kerfuffle a few years back when MS said that it would be impossible to remove IE from Windows, because it was embedded there? People ranted about all the wrong things when that came up. The problem wasn't that MS was trying to strangle other browsers; the problem was that MS actually did embed the guts of IE in the OS, and thought that it was a reasonable thing to do. Longhorn may not be the last OS MS ships, but it's going to be close - they've tied themselves into a set of tightly coupled knots from which it will be really, really hard to escape.
What Scoble needs to ask himself is this:
- Over the last five years, how many versions of the flagship products has MS shipped?
- Compare and contrast that to what Joel's firm is doing.
Heck, compare and contrast it to what we do here at Cincom Smalltalk - we have a product who's history dates back to the 70's - i.e., it's far, far older than anything MS is doing. We manage to put out a major release once a year, and a minor release in between each major release. People knock Smalltalk for its supposedly monolithic nature, but we manage to keep updating, extending, and adding to it - with regular releases. While there's more coupling at the core (kernel, if you will) level of Cincom Smalltalk than we would like, we recognize that and are working to change it. Meanwhile, MS just keeps coupling stuff more and more tightly - and the release cycles get longer and longer.
Sure, MS has some cool technology. It also has huge problems.
Who benefits?
I've often thought that Open Source in the hands of big companies is a cudgel used to beat the life out of smaller ones - apparently, Mark Fleury just woke up to this fact after IBM purchased the main competitor to JBoss (GlueCode) and made the entire thing free. The IBM pitch?
The pitch to customers is this: You get the software for free and service and support at a bargain rate. And it all comes from IBM, a name you can trust.
Meanwhile, Fleury seems to be utterly stunned by this turn of events:
He claims IBM is trying to put his privately held company out of business. He is furious, but also stunned: He says Gluecode could hurt sales of IBM's WebSphere as much as it hurts JBoss, yet IBM doesn't seem to care.
Well duh. Let's have a look at IBM's cash on hand as compared to Fleury's outfit - seems IBM has a much bigger pile. Which company is going to drop dead first, IBM, or JBoss? The beauty of this for IBM? Since they released the software as OSS, they get to play the good guy (20 years ago we would have called this a predatory practice). The gap toothed crowd over on Slashdot hasn't really figured out who benefits from OSS yet - here's a hint - it's not the small guy. What I really love is the hue and cry aimed at Microsoft for things like bundling IE and Media Player (horrors! they all say) - meanwhile, IBM does the same thing in a less visible sector of the market, and it's all good. Here's the kicker on it:
But if Microsoft, for all its billions, is doomed by the open source movement, as many open source proponents believe, then what chance does Fleury's 130-person startup stand against IBM, a company that had $96.5 billion in revenue for 2004, aims to use software as a loss leader and can absorb losses for years?
Indeed, IBM's assault on JBoss raises big questions about whether stand-alone open source software companies can ever make enough money to sustain themselves. Because their code can be freely copied, these companies can't charge for their programs. Instead, they hope some users will pay for service and support.
Problem is, most people just take the free stuff and run. Only 3% to 5% of JBoss customers buy support contracts.
Look at those stats in the last paragraph again. You wonder why I keep saying that I've seen no viable business model behind open sourcing Cincom Smalltalk? That paragraph explains why that's the case. In order to "make it up" in services and maintenance, you have to have a huge customer base. It's actually the same problem you get into when you try and sell inexpensive developer licenses for a product like ours - in order to fund things, you have to sell (or in the case of free software, ship) gazillions of copies a year - every single year. Or, limit the size of your staff to a very small number. For free stuff, you have to hope like heck that no one else decides to be a free rider on your software - meaning, repackaging it and offering cheaper support than you can afford to offer (like, say, is happening to Red Hat right now). The real kick in the pants:
No wonder no one is making any real money at this. JBoss operates at a loss, as does MySQL, the open source database company. Novell (nasdaq: NOVL - news - people ), the No. 2 Linux distributor, is losing money. After a decade of losses, Red Hat earned $45 million last year on sales of slightly less than $200 million, but 40% of its profit came from interest income rather than operations.
There's a reason IBM supports Linux and other free software projects - it's a way for them to take a free ride on product development and vacuum up the available services revenue. There's a phrase that covers this:








