Looks like Peter William Lount has lent a hand - you can get to Planet Smalltalk via this url now: http://planet.smalltalk.org/
Well, that's disappointing. I just noticed that a bunch of the comics I read every day stopped updating in BottomFeeder. I tried browsing the site (dwlt.net), and found out that the domain has expired. Hmm. Nothing a few minutes of Smalltalk scripting couldn't fix though - I now have scripts to grab Dilbert, Get Fuzzy, and Pearls Before Swine. Crisis averted :)
I spotted a question about VAST support over in the CLS newsgroup:
IBM has posted a date of 12/2005 as the end of support for IBM Smalltalk/VisualAge. Is this the end of the road? They haven't announced a new version or update... anybody hear anything?
I knew I had a reading backlog. It just got worse. We bought new lights for the bedroom - the old ones are flaky, and don't always go on. That meant moving the bed side tables, which in turn meant going through the mountain of books that have piled up there. I thought I had a backlog of about 4-5 books to read. The cleanup uncovered a bunch of past gifts that I had forgotten about as new ones came in. So, my backlog is now more like 15 books. The sad part is, that doesn't include the backlog of magazines and technical journals that are piled up.
Well, I'm finally back online. My network dropped before I got up this morning - I went through the whole "unplug the cable modem, unplug the router, reverse" routine - no dice. Called Comcast, and to my initial surprise, it wasn't them - my router had gone wonky. I've been having some flakiness with it of late, and I guess this explains that. So, I ran down the road to a local PC shop, hoping to get a replacement. The owner had decided to take his lunch break at that point, I guess - his sign said "open", but the door was locked. Great, I had to run all the way into Columbia proper to the CompUSA store. I picked up a nice little NetGear b/g router (it also claims to support the non-standard 108 mbs thing, but I don't have that). Set it up, bing, everything came right back up. I had to go in and change the password and the default IP range (I have a couple of things on the net with static IP addresses, and the default 192 range used to have issues with the Cincom VPN). In any event, I've got connectivity back. Now I need some lunch...
I found this amusing. Variety is implying that there are fewer "R" rated movies due to the "political climate":
But even those who are reluctant to conclude that today's kids are any less interested in R-rated drugs, sex and violence than they were five years ago, say the continued political pressure over public decency has changed industry practices and made it harder for R pics to make money.
I was a little skeptical, and suspected a more humdrum financial angle - and sure enough, in the same article:
Perhaps even more startling is the fact that in 2004, PG films outgrossed R pics for the first time in two decades: $2.3 billion to $2.1 billion. The last time PG was bigger business than R was 1984, the year the Motion Picture Assn. of America introduced the PG-13 rating.
While PG films have been making more money -- "Shrek 2," "The Incredibles" and "Harry Potter and the Prisoner of Azkaban" were all rated PG -- the box office generated by R-rated films has been falling precipitously.
My quick translation of all this - the finance guys in Hollywood are pushing for the stuff that sells, and the creative guys would rather make what they consider to be art. Over a long enough interval, good market data beats "gut feeling". Don't buy it? Have a look here, at the top ten grossing films - not an "R" rating in the bunch. Generally speaking, when it comes to business decisions like this - look for a financial rationale before you look for a more esoteric one.
Ok, this is interesting. Have a look at this post from Don Box. In a discussion about what language to use to teach his kids to program, he mentions Lisp, ML, Smalltalk, and Ruby. Then he explains why C# and Java are absent from the list:
There are some conspicuous absences from this list. I don't care if any of my three kids ever grok the difference between an abstract class and an interface or between a pointer and a reference, so languages like C++, C#, Java, and VB.NET are out. Honestly, if the industry is still forcing programmers to ask these kinds of questions by the time the next generation of programmers comes to the table, I'll consider my generation to have really squandered an opportunity.
My plan is to learn Ruby and relearn Smalltalk to inform my decision. In the meantime, comments or flames (public or private) from the Peanut Gallery are most appreciated.
Now, the obvious next question is - if those languages are too complex for teaching programming to kids, why are they useful for doing productive development work? Does anyone need that level of complexity?
Now, this is ironic - I stumbled across this IBM VAST partner site today. That page offers Web Services expertise using VAST. Now, scroll about 2/3 of the way down, and note what they use to bolster their argument:
So, why go for Smalltalk?
"Over-complexity? Gartner reports that 70% of Java projects fail. They also report that something like 80% of J2EE projects don't use EJB (or much at all from J2EE) - mostly they use these products as scalable app servers for JSP. That's an awfully expensive strategy"...James Robertson, Product Manager, Cincom Smalltalk
Heh. If they can use my arguments to sell Smalltalk based Web Services, maybe they should try out the product I was talking about
After this post yesterday, I thought I'd take a shot at generalizing and extnding the ad-hoc search script. So, I came up with this set of code:
First, a block that defines a "reporting" function
"creates an HTML report for the pattern match" htmlReportBlock := [:collection | | stream out | stream := WriteStream on: (String new: 10000). stream nextPutAll: '<html><body'; cr; cr. stream nextPutAll: '<p><b>Amazon Reference Report</b></p><p>'; cr; cr. stream nextPutAll: '<table width="100%">'; cr; cr. stream nextPutAll: '<tr>'; cr. collection do: [:each | | key value | key := each key. value := each value. stream nextPutAll: '<td><a href="', key link, '">', key title, '</a></td>'; cr. stream nextPutAll: '<td>'. stream nextPutAll: value size printString. stream nextPutAll: '&nsbp;&nsbp;('. 1 to: value size do: [:cnt | | each1 | each1 := value at: cnt. each1 getMyLink isNil ifFalse: [ stream nextPutAll: '<a href="', each1 getMyLink, '">', cnt printString, '</a>&nsbp;']. cnt = value size ifFalse: [stream nextPutAll: ',&nsbp;']]. stream nextPutAll: ')'. stream nextPutAll: '</td></tr><tr>'; cr]. stream nextPutAll: '</table></p>'; cr. stream nextPutAll: '</body></html>'. out := 'bookReport.html' asFilename writeStream. out nextPutAll: stream contents. out close].
That gave me a reusable block of code for simple reports. Well, marginally reusable :). Next, the basic search function, now with an inbound search string:
"execute with an inbound pattern, answers the matches" matchItemsBlock := [:pattern | | amazonCollection matches | amazonCollection := SortedCollection new sortBlock: [:a :b | a value size > b value size]. RSSFeedManager default getAllMyFeeds do: [:each | | items | items := each allItems. matches := items select: [:eachItem | | desc | desc := eachItem description. desc ifNil: [false] ifNotNil: [pattern match: desc]]. matches notEmpty ifTrue: [amazonCollection add: each->matches]]. amazonCollection].
Now, notice how that block has the resulting collection by itself on the last line? That's because blocks, by default, return the result of the last expression. Thus, we need to make sure that it does. Now that we have our functions defined, we can try them out:
"look for matching books, then report on it" | matches | matches := matchItemsBlock value: '*href*amazon*asin*'. htmlReportBlock value: matches.
That will first gather the matches, and then execute the HTML report. We can then look at in a browser, post it to a blog... whatever. What if we wanted to track book references across all of our feeds and items on an ongoing basis? Well, there's a scripting plugin for BottomFeeder - so I can create a simple script that makes use of these functions to create a local feed:
"create a local RSS feed for this search" | matches | matches := matchItemsBlock value: '*href*amazon*asin*'. out := 'bookReport.xml' asFilename writeStream. matches := matchItemsBlock value: '*href*amazon*asin*'. [writer := RSS20_SAXWriter new output: out. writer prolog. writer startRSS. writer startChannel. writer title: 'Amazon Book Report'. writer description: 'Amazon Book Report for:', Core.Date today printString. writer pubDate: Core.Timestamp now. matches do: [:each | | items | items := each value. items do: [:eachItem | writer startItem. writer link: eachItem link. writer title: eachItem title. writer guid: eachItem guid. writer pubDate: eachItem pubDateString. writer description: eachItem description. writer category: eachItem category. writer author: eachItem author. writer endItem]]. writer endChannel. writer endRSS] ensure: [out close].
If I stick that in my "scripts" directory, I can use the script tool to add it to the set of running scripts. Now I can add this feed to BottomFeeder via a file URL, and have immediate access to all book referencing items. Pretty neat.
I ran across this post from an apparently new user of VW non-commercial. He raises a lot of potential problems that new users might run across, so I figured I should explain some of them. First off, he ran into the infamous "Smart CR/LF" handling of WinZip:
First thing I wanted to do is getting Store working. I ran into my first smalltalk problem at that time. For some reason, when I loaded some base VisualWorks packages, Store was launching some obscure exception for some of them, refusing to load them and breaking the currenly running image. I also had problems with some parcels refusing to show up the code in the browser even if the source file was present in the correct directory.
After some experimentations, I found a documentation stating that Winzip's "smart CR/LF conversion" should be disabled before extracting the archives. I reinstalled and restarted everything from scratch after disabling that so-called smart feature and that fixed my problems. But I'm still wondering why that caused so many troubles and why VisualWorks did not report an understandable error message. Weird.
if possible, you should just grab the entire ISO file and install that - it will obviate this entire issue. People on slower connections do download the compressed archives though, and we know this is an issue - we intend to post a network installer in the near term future. Here's what's going on though - the compressed archives are tar gzip files. By default, WinZip has an option called "Smart CR/LF conversion" turned on - what it does is convert Unix style CR or LF lines into DOS cr/lf combos. What's the problem? Well, the parcels (loadable components) of VW ship as two files - a .pcl (binary) and .pst (source). The binary file contains pointers into the source file so that you can browse loaded code. If the file is munged by the WinZip conversion, you lose source access. As well, you can get strings for menus (etc) completely hosed up. If you see that the launcher menus are screwed up when you start vw nc, this is what happened. Turn that option in WinZip off, and try again.
The next issue Ludo ran up against is GUI building - specifically, building UI's that look good on Window resize:
Then I started playing with the GUI Painter. I must say that this tool is of very high quality and that the doc is quite well done. The only thing I found a bit crappy is the handling of window resizing. Maybe I did not understand how it's really working but I could not manage to get a nice looking resizeable GUI. Weird.
This is something that I used to have trouble with as well - but fortunately, there are two excellent summaries of what you need to do on Vassili's blog:
I found both of those posts to be invaluable for me - I was able to fix up BottomFeeder properly only after reading those. Highly recommended. Next, Ludo ran across some database problems:
Then I wanted to play with databases. So I read the Database App Dev Guide and tried the "New database application" wizzard. All I got was MessageNotUnderstood: #newDataMain exception. It took me an hour to figure out that I did forget to load the Lens-Dev parcel. Weird.
This is easier to run into than it should be. In general, what you need to do is make sure that you've loaded one the "for Lens" database connects. That will make sure that you have all of the necessary pieces. However, something else you should probably check out is Glorp. The parcels are all in goodies/parc, and are being developed rapidly. Glorp is where our database stuff is going, and it's well worth looking at. If you have questions, stop by the Smalltalk IRC channel; Alan or one of the other Glorp users are usually on hand and willing to answer questions.
Finally, Ludo had a look at Seaside, the continuation based web app server that Avi is largely responsible for:
Finally I read about Seaside and continuations. Sounds so cool that I must try it. I loaded the parcel and started reading the one-page tutorial and quickly started playing with the counter example. Then with the multi-counter example. Amazing. Simply amazing. This framework is much more powerful than everything else I've seen before. So I wanted to create my own application from scratch using Seaside. I could not understand how components are related to each other nor what are the basic rules to create an app. I read the docs. Twice. But still could not understand. Maybe because the doc is sparse, maybe because the code is not documented and I still have difficulties reading Smalltalk, maybe something else but I could not manage writingg something equivalent to the store example. I also tried to understand the store example which was also a dead-end so I tried to remove its code from the image hoping things would become a little clearer just having the framework code to read but one more time I failed to do it. So I abandoned my idea of writing a Seaside application thinking I needed much more experience in Smalltak first. Weird.
We only just started including a Seaside port with VW as a goodie - it was developed in Squeak, and proted by Michel Bany, one of our tech guys in Europe. There is doc on the net for this, but you have to look for it - this is another thing that we ought to include some pointers to. In any case, here's a pointer to a Seaside tutorial (pdf).
All of Ludo's complaints are pointers to things we need to improve on - and we intend to do so. At this point, you might wonder how I stumbled on Ludo's post - I wasn't even aware of his blog's existence before this morning. Well, I subscribe to a PubSub feed that searches for references to "Smalltalk" - and this post turned up in it. I subscribe to a bunch of search feeds using PubSub, BlogDigger, Feedster, and Technorati - they make my Product Management job much, much easier.
I was inspired by this post from Jon Udell, where he used XQuery to walk through his feeds and find all the items that made a reference to Amazon - which is a pretty good approximation for all the posts that reference a book. Well, I'd much rather play with Smalltalk than with XQuery, and - as it happens - I have a lot of the development system available to me in the BottomFeeder runtime. So - I opened a workspace (off the System menu) and ran the following script:
| amazonCollection stream matches | amazonCollection := SortedCollection new sortBlock: [:a :b | a value size > b value size]. RSSFeedManager default getAllMyFeeds do: [:each | | items | items := each allItems. matches := items select: [:eachItem | | desc | desc := eachItem description. desc ifNil: [false] ifNotNil: ['*href*amazon*' match: desc]]. matches notEmpty ifTrue: [amazonCollection add: each->matches] ]. stream := WriteStream on: (String new: 10000). stream nextPutAll: '<p><b>Amazon Reference Report</b></p><p>'; cr; cr. stream nextPutAll: '<table width="100%">'; cr; cr. stream nextPutAll: '<tr>'; cr. amazonCollection do: [:each | | key value | key := each key. value := each value. stream nextPutAll: '<td><a href="', key link, '">', key title, '</a></td>'; cr. stream nextPutAll: '<td>'. stream nextPutAll: value size printString. stream nextPutAll: ' ('. 1 to: value size do: [:cnt | | each1 | each1 := value at: cnt. each1 getMyLink isNil ifFalse: [ stream nextPutAll: '<a href="', each1 getMyLink, '">', cnt printString, '</a> ']. cnt = value size ifFalse: [stream nextPutAll: ', ']]. stream nextPutAll: ')'. stream nextPutAll: '</td></tr><tr>'; cr]. stream nextPutAll: '</table>'; cr. ^stream contents
By inspecting the results, I got a ready to post set of html, which I pasted below. The nice thing is, I already have objects for all the feeds and items - and those objects have a nice rich API for me to exploit. Since I have access to tools like inspectors and workspaces (no browser or debugger though), I can do this in the application, with all of the application data at my fingers. So, here's the output from my 250 feeds - all of the items in all of my feeds that make a reference to Amazon, complete with links to the matching feeds and items:
Amazon Reference Report
If you are looking for a bizarrely funny movie to watch, then look no further than your local rental/DVD place and pick up Shaolin Soccer. We watched this flick last night with friends, and it was hilarious - in a bizarre sort of way. Imagine, if you can, a cross between "The Matrix", "Kill Bill" (vol 1, the good one), nearly any 70's era Kung Fu flick, and almost any sports flick you've ever seen - you've now got "Shaolin Soccer".
It's a hard film to describe - there are parts that just made me scratch my head and go "huh??", and other parts that cracked me up. There was soccer (with "Matrix" style effects, there was fighting (but no killing - you can let kids watch this), and there was even a "boy meets girl, buy loses girl, boy gets girl back" romance. Check it out - it's an hour and a half of completely harmless fun.
Well, last night was another exercise in humility (as if I needed one after the circuit breaker stupidity). My car failed the Maryland emissions test last month, so I had to have it looked at. I finally got around to taking it to a mechanic, who found a simple problem and fixed it. The trouble started when he asked me if I wanted to pick it up, even though he was closing soon. I said "sure", and he asked if we had a spare key. As my wife mentioned "I don't think so" in the background, I said "sure". And there went a few hours of last night, as we went back and forth to the mechanic twice, with keys that weren't for the car. Well - my mother in law had some sense, and suggested that we call AAA.
That worked out fine (although, it's unsettling to watch how easy it is to break into a late model car). With that done, we had the remainder of our evening back. Here's the part that really made us feel dumb - as we headed to bed, we located the spare key in the kitchen, hanging on a hook. Something tells me that I need more sleep...
Dave Winer asks "Should I take up golf? or is golf evil?" Heh. Well, I've been playing golf since I was 16 - and like everyone else who's stuck with the game, I really wish I could get out more often. It's a funny game though - I've got some friends I can play golf with (my cousin, for instance) - while other friends simply find the game frustrating. I think it depends a lot on your level of patience (with yourself). If you find that you get more and more angry when you just can't quite get it, then golf may not be for you. Why? Well, the first few times you go out (unless you are some kind of prodigy), you'll screw up your drives. You'll top the ball and hit a lot of grounders. You'll muff more putts than you could believe is possible. And yet... there's always that one unbelievable shot that you just have no idea how you managed to make. That's what keeps me going back. For anyone else? I think you have to try it.
When you get under Scoble's skin for bad marketing/PR, just watch him go wild. On the other hand, things are starting to turn around on that front here at Cincom. The guys doing the web site have noticed blogs and RSS, and they've been asking me questions about it. There's a general redesign of the main Cincom site underway (yes, it's a pretty stock 1996 kind of site right now). They want to start getting into blogs and RSS, so I'm encouraged.
I got this note in my email this morning - if you're a Smalltalker in central Europe, this should be of interest:
SSUG is organizing a Smalltalk Party/SqueakNic/Coding Party - We invite all Smalltalkers to join this event to share their enthusiasm and knowledge about Smalltalk.
What -- Smalltalk Event Where -- University of Bern - IAM Bern, Switzerland When -- Saturday 12th of March 2005 -- 12pm until ... Contact --
Bring your lunch with you and contact me so that we can arrange something.
An apero sponsored by our sponsors will end the day. Our sponsors:
If you plan to come, please add yourself on this list.
Here some directions for getting there:
We've had many reports of trouble running VW on Fedora Core (RedHat). Here's the answer from engineering:
If they have /proc/sys/kernel/exec-shield then they need to either 'echo 0 > /proc/sys/kernel/exec-shield' or try using the utility they provide [named something like 'execstack'] to run vw without the shield.
The problem is caused by the fact that we were writing the CPUID instruction sequence into data segment memory and executing it.
Which D&D class are you? Here's what they told me:
|You scored as Bard. It is said that music has a special magic, and the bard proves that saying true. Wandering across the land, gathering lore, telling stories, working magic with his music, and living on the gratitude of his audience: such is the life of a bard.|
The Smalltalk Industry Council Announces the First Annual Smalltalk Solutions Coding Contest
Cary, North Carolina - February 18, 2005: The Smalltalk Industry Council is pleased to announce the first annual 2005 Smalltalk Solutions Smalltalk Coding Contest. The Smalltalk Solutions Technical Conference being held in Orlando June 27-29, 2005 will serve as the home for the coding competition finale. Smalltalk Solutions is the premier forum for bringing together Smalltalk users, developers, vendors, and enthusiasts.
Coding contest prizes include:
- 1st Place - $1,000 USD to be used towards a future Camp Smalltalk attendance
- 2nd Place - iPod
- 3rd Place- iPod shuffle
Each of the finalists will also receive a Smalltalk Solutions 2005 conference registration valued at $670 USD as well as a complimentary individual membership to the STIC. This does not include travel, lodging meals, tutorials, or any other fees associated with the conference attendance. The Smalltalk Solutions Coding Competition is broken into two phases of competition. The first phase begins on Monday, May 16 at 9 a.m. EST and ends on Wednesday, May 18 at 9 a.m. EST running for 48 consecutive hours. Registration will begin March 1 and participants must register for the competition online at www.stic.org by May 13 at 6 p.m. EST. Confirmed registrants will receive the requirements for the first phase online. All coding must be done in Smalltalk. Conference registration is not required to participate in the first phase of the competition.
One representative from each of the four board member companies consisting of Cincom Systems, GemStone, IBM, and Knowledge Systems Corporation will judge the first phase of the competition. Each submission will be submitted to the judges as blind submissions and a total of three (3) winners will be selected to compete onsite at Smalltalk Solutions 2005 in Orlando, Florida. The winners of the first phase will be announced on June 1, 2005 on the Smalltalk Industry Council web site. The second and final phase of the competition will take place on Sunday, June 26, 2005 from 6 p.m. to10 p.m. onsite at the Wyndham Orlando during Smalltalk Solutions pre-registration. The details of the second phase of the competition will not be released to the finalists until the competition begins. Prize winners will be announced during the keynote general session on Wednesday, June 29, 2005.
iPod and iPod shuffle are registered trademarks of Apple Computer, Inc.
It seems that the folks at Warner Brothers are out to damage a brand:
he old look of the cartoon character Bugs Bunny is saying "That's all folks!" to the generations who grew up with him. Bugs, the Road Runner and other Looney Tunes cartoon characters are getting a new look and even new names.
The "reimagined" Bugs Bunny is going to be renamed "Buzz" and star in a new series called "Loonatics." The series will be set in the future and will feature a tough-talking rabbit with laser eyes and who is a martial arts expert. Even Daffy Duck will get a techno-update with built-in sonar.
So... exactly how is this an "updated" set of characters instead of a brand new set of characters? Look Warner, you have a successful, well known set of characters here. Remember how well the Animaniacs did a few years ago? Now ask yourself, were those "re-imagined" characters, or new ones?
I mean - I ask you - which image below is Bugs Bunny? Bah
Some of the letter writers here have way too much free time on their hands. For that matter, the "Free Stanley" folks need to find a hobby as well...
I've finally gotten serious about providing some tools for the blog software I've been working on for the last couple of years. The latest version in the public store has some GUI (not web) tools for bootstrapping and managing blogs and users. I haven't fully tested them yet, so there could be problems. There's also a few layout issues - I slapped them together quickly, and have not gone back and adjusted them so that a window resize won't make them look wonky. At some point, I'm really going to have to go through and create a message catalog and pull all the strings as well. Having added all of those caveats, it's progress. Grab the latest rev of CST-Blog from the repository and have a look. I'll be updating this page once I do some more testing.
Apparently, there's still a Boston Red Sox related curse out there. The last time the Sox won a World Series (before this year) was 1918. The following Stanley Cup (1919) was cancelled (the influenza outbreak). So this year, the Sox won the Series. And sure enough, the Stanley Cup has been cancelled.
It seems to depend. If Microsoft created the SmartTag, it falls with an enormous thud. On the other hand, as Dare Obasanjo points out, it lands quietly if Google created it. I really like this summary line by Dare:
Personally, I can't wait to see how much cognitive dissonance this causes the Slashdot crowd.
Heh. He's got that right.
I think we can file this in the "couldn't happen to a nicer bunch of guys" folder - The Register is reporting that SCO is likely to be delisted from NASDAQ. It's a fitting punishment for all of the value they've destroyed (their own) and attempted to destroy.
If the lawyers can't blame D&D, or movies, or TV... they'll try to blame videogame. Which part of "Personal responsibility" is unclear to this bozo?
I met with a very interesting customer today - RubrIQ. They are based in Ottawa, Canada - the meeting was in Cincom's Montreal office. They drove over from Ottawa, I came up from Maryland yesterday. I met with David Long, who's the visionary (and a co-owner there) and John Couch, one of their customer support and all around networking guys.
These guys have a very interesting system they call Atlantis. It's built in VisualWorks, and exists roughly in the domain specific modeling area. Here's what they do - they capture the business process requirements for an application area. Their tools allow you to model it graphically, showing as much or as little detail as you want. The underpinnings of this system is a Finite State Machine - which means that the applications generated by Atlantis are always in a known state. If your requirements are wrong that might be the wrong state, but it's definitely known.
What they've done is work with a few people in business areas they are targeting - I won't go into too many details there, since we are under NDA. Suffice to say, they capture the full business process for a given problem, and they can push a full application out the back end. They believe in their own sales pitch - their internal systems (accounting, sales management, and software lifecycle) have all been built with this tool.
Before I saw what they do, I really would not have believed it was possible - given a set of business processes, they can capture them and generate a working application. In the markets they are going after, they can deliver a working product in a week - which is pretty darn impressive. I won't say that this is a silver bullet for all business areas; it's not. However, for the targets they are going after (and a few others they plan to go after) - Atlantis is simply untouchable.
I mentioned that I didn't think that a tool like Atlantis could be built in the faddish languages - like C# or Java, for instance. In a theoretical sense, that's not correct. In a practical sense, it is - while you could build this in one of those systems, it would require a larger team and a much larger up front investment in time. They make use of the dynamism of Smalltalk - and of the meta model behind Smaltalk - in ways that would be hard to deal with elsewhere.
This is an outfit that you're certain to hear more about as time goes by. John and his team have done a very, very impressive job.
I had a fascinating meeting with a customer today - Satellite Forces Canada. I'm heading off to the airport shortly, but will have some details later. I'll write some thoughts up on the plane, and post later. They have some truly cool technology that I don't think you could do easily in the currently faddish systems out there.
I figure that it's a bad sign when you get up in the morning and discover that your hotel has no hot water. Hey, it's only February in Montreal - who wants hot water? Having survived that, I'm off to find coffee before meeting with a local customer.
I found a way to justify my coffee habit - it's lowering my risk of liver cancer :)
Well, I've got to hand it to the NHL. Salon is reporting that the season is cancelled. This is really, really stupid. The NHL doesn't rake in nearly as much money as the NFL, the NBA, or the MLB - they can ill afford to go dark for a whole season. And yet there they are, doing it. It took baseball years to recover from the lost 1994 season, and baseball started with a far larger fan base. The owners and players deserve each other...
I see that ComputerWorld has a new article on outsourcing this week - Mark Gottfredson wants us to believe that even "core" business functionality should probably be outsourced. Let's take a walk through his notions:
You say that sourcing, which was always tactical, needs to become a core strategic function. Why now? The reason it's so important now is that there is a confluence of events that makes it possible for you to literally be able to redefine your business in terms of whether you do things or have them done by someone else or more cheaply somewhere else. A population 10 times the size of the U.S. has come on stream in the last few years, and they have an average wage advantage of 85% to 95% versus us.
Also, a technological revolution has made it possible to do many things that used to be done manually over the Internet or a telecom pipe as quickly and cheaply around world as next door. Finally, there's a trend where things that used to be functions of companies are becoming industries, and whole companies are focusing on functions.
There are a couple of problems here. First off, the price advantage in India is sliding. There's been a tech boom there for a few years now, and salaries are rising. I've seen US based (never mind near-shoring to Canada) consultants willing to do work for $20/hour. The price differential is there, but it's not as attractive as it used to be. Because the tech market in India is so strong, turnover is a huge problem. Turnover is never a good thing for a project.
His second point is theoretically true, but runs into a few problems. I'm the Product Manager for Cincom Smalltalk, and we have staff distributed across North America, with a few people (and critical partners) in Europe. We have regular conference calls so that the various development teams can stay in touch - and we also make use of things like IM, Skype, and IRC. It's difficult to schedule a meeting when we need people from Europe and people from California. Why? Well, at 9 am in Santa Clara, it's 6 pm in Germany. Either someone has to get up early (CA), or someone has to work late (Germany). As I write this, it's 2:50 in the afternoon here (I'm in Montreal at the moment, but it's the same time in my office in Maryland or Corp. HQ in Cincinnati - and only 3 hours earlier in California). In Mumbai, it's 1:20 AM. So at 9AM my time, it would be 7:30 PM there. You see the problem? Sure, we can communicate just fine using all sorts of whizzy stuff on the net - so long as someone is willing to do it during non-business hours. That works fine if you have a project that requires minimal communication. I hate to break this news to Mr. Gottfredson, but software isn't one of those projects.
We know how well throwing requirements over the wall to a local (but uncommunicative) IT group works (not well at all). We know what the failure rates for such projects are (high). So.... how will tossing it 10 1/2 hours away make it better? Unless your plan is to fail less expensively. If you want a software development task to have a decent shot at success, you're going to need good, solid, regular communication between the developers and the people who will take delivery. This is one of the reasons that agile methodologies exist, btw - as a reaction to disconnected failures.
There are other issues as well - further down, Gottfredson praises the idea of pushing customer care off:
The traditional view has been to think about what's core and what's noncore and consider outsourcing the noncore. That's not a particularly useful framework anymore. Think of customer service and the call center: What could be more strategic than your interface with customers? Yet those customer-interface skills are not particularly proprietary across industries. The way you respond to customers is common for any number of companies. So even though it's strategic, many times other people can do the job better and more cheaply than you're doing it.
Here's the thing - people who work for you actually care about the product or service that you provide. When customers call, they have an attachment to the product that makes it easier to provide good service. When the call center is a bunch of low rent staffers (whether overseas or not) reading from a script, it's very, very clear that they don't care. For instance - here's a saga I had with a Sony TV repair a year ago. You know what the upshot of that experience was? I now own a GameCube instead of a PlayStation2. There's Gottfredson, claiming that others can provide this service cheaper and better. No they can't. In fact, they won't even try.. The contracted support people are sitting in a call center, manning a phone bank. They get calls for multiple products, and pick up the appropriate script off the computer based on which line rings. Do they know anything about the product you are calling about? Probably not. Are they empowered to help you in any way? Probably not. Can they ask someone down the hall "hey, is this a known problem"? Heck no, they don't actually know anyone at the source company. All they can do is read a script. If your problem matches the script, great. If not, you start down the road to hell.
Here's the problem - we all know that it's easier to keep an existing customer than it is to grow a new one. We also know that a torqued off customer will regale his friends with the epic tale of bad service from Company X over and over again. In the age of Google and blogs, we now know that these rants will be searchable. For instance - I just did a Google Search for "Sony Customer Service", and the second result on the list is this one. There's one other such link on the first page. When I'm looking to buy a new piece of expensive hardware, I now execute such searches - because I want to find out whether or not I'll be able to get help if I run into a problem. Sure, it's cheaper to send support to a call center off in the boonies. What people like Gottfredson fail to realize is that there are matching costs. Dell noticed this; they moved their corporate support back inside.
Any kind of customer facing activity is potentially hazardous to send elsewhere. It really depends on whether you are selling something that is a low cost commodity (in which case, you probably need to outsource in order to keep costs down), or whether you are selling something that is expensive. If the customer paid a lot, the customer is also going to expect good support. If you provide bad support, it's going to cost you. Glib business experts like Gottfredson see only the cost savings - they never even consider the possible soft costs that will bite back.
One of the outcomes of the rising tide of spam is the gradual loss of the commons - something Phil Ringnalda pointed out in a post this morning. Think about it - a few years ago, email was useful and (mostly) dependable. Now it's neither. For one thing, not all the spam gets caught by filters - there's some mess to clean up each day. Worse are the false positives. How much mail are you losing to spam filters? It's actually impossible to tell, because there are so many levels:
- Filtering done by the ISP/corporate IT - if something gets tossed before it gets to your mailbox, you simply never see it.
- With local filtering, the false positives at least get into a junk folder. But how often do we actually check that?
Think about that - someone sends you an email asking for comments on some issue. 7 years ago you got the email and responded (or not, but at least you saw the mail). Now? If you don't respond, the sender has no idea what happened - are you ignoring them, or did you simply never see the email? The spammers have completely destroyed email. I only know of one place where email still works - in closed systems, like the security agencies (NSA, CIA, etc). Ironically, the people who are cut off from the net are getting better service because of that.
Now turn to blogs - a relatively new phenomenon whereby anyone can express their opinions and get instant feedback - either via comments, trackbacks from other blogs, or referer lists. At least, that's how it used to work. Now, you have to have some kind of comment protection system or face an onslaught of links from poker and porn sites. Depending on which system you use, comments may well become more difficult to enter, deterring some level of honest feedback. With others, it's simpler just to turn comments (and trackbacks) off rather than deal with the daily headache of managing the ones that got through. That kills a goodly proportion of the value proposition behind blogs - the interchange of ideas. Again, the spammers have destroyed the commons.
That leaves us with referers. For any kind of post you put up, a referer list is a valuable thing. It gives you a window into how people are finding your content - and gives you an opportunity to locate other people who are saying things you might be interested in. That was before referer spam took off. It's trivial to create - all you need to do is use a script that queries for a page and provides a spam url in the referer field. A real reference points back to content that actually references you; spam creates bogus links for you to follow. What this does is force the site owner to build filtering rules for referer reporting (even if it's not public) - you don't want to have to wade through a ton of sites that don't actually reference you. For instance - during the Presidential primaries last fall, I got bogus refereral links from the campaign sites of every single Democratic contender. if you read this blog, you realize that I never get into national/international politics - it was just more commons destruction
I don't know how to fix this. Spam is too easy and too cheap to create - much easier and cheaper than the various counter-measures we take. We've been trying to get rid of email spam for years now, and it's not really working out. Sure, there are tools - but there are also costs. I don't see a happy shiny future coming - just an endless battle against the ethically challenged..
It wouldn't be a complete trip without a nice delay - I've got an extra hour in the lovel Philadelphia airport, where I get to enjoy the $9.99 per day WiFi. Fortunately, no one is expecting me there until this afternoon. I've got another post on outsourcing lined up - there are a couple of howlers in ComputerWorld that I feel a need to abuse :)
I'm off to Montreal in the morning - going up to see a customer's application. I'm sure I'll have more to say when I get there. In the meantime, I better remember to bring my heavy coat and gloves - it's still winter up there :)
Slashdot reports that SHA-1 has been broken:
"From Bruce Schneier's weblog: 'SHA-1 has been broken. Not a reduced-round version. Not a simplified version. The real thing. The research team of Xiaoyun Wang, Yiqun Lisa Yin, and Hongbo Yu (mostly from Shandong University in China) have been quietly circulating a paper announcing their results...'" Note, though, that Scheier also writes "The paper isn't generally available yet. At this point I can't tell if the attack is real, but the paper looks good and this is a reputable research team."
I'm no crypto expert, but the experts seem to be impressed...
Blaine Buxton points to new leadership for Squeak's direction. Check it out
I've finally gotten around to creating some tools for automating the management of the blog server. This afternoon I knocked out a web interface for creating a new blog, and finished up the interface for disabling existing blogs. Other than the tedium of creating the SSP pages, it was all pretty easy - the only place that gave me a small hitch was the resetting of server state. Here's what I was doing at first:
The problem is, I was doing that in the #doPost method of a servlet, and on the page I was redirecting to there was an expectation of finding a session variable called 'currentUser'. In its absence, the page redirected over to the login page. This confused me for a few minutes, until the obvious dawned on me - clearing all the sites also cleared all existing session state - so of course there were no session variables left! As it happens, the WebToolkit has a very straightforward API, so I went and looked at class WebSite. What I wanted to do was programmaticall add a site, or remove a site (depending on which management page is in use. Here's all I had to do:
Adding a site:
site := VisualWave.WebSite
fromFile: self siteFile
in: VisualWave.WebSite siteConfiguration.
VisualWave.WebSite addSite: site.
Removing a site:
VisualWave.WebSite removeSiteNamed: siteName.
That's it - it's pretty easy to create a small set of site specific tools with the api provided (other than that SSP creation :) ).
Firefox has succeeded - it's pressured Microsoft into updating IE. This is good news all around, because with MS finally moving, the Firefox team will have an actual competitor to compare themselves to
I'm happy to see Microsoft promoting the concept of least priviledge (i.e., not running as local admin). The part I find amusing is how long it took them to get there - Unix has worked that way for decades. The trouble is, MS at first thought that it would too complicated to throw that at end users. The result - years of "glued on" security that peels off all too easily.
Well, I feel stupid now. Last night, we had a light blow in the kitchen. After that, none of the lights in the kitchen would go on. First thought - check the circuit panel. I checked, it looked fine - nothing looked tripped. My wife checked, it apparently looked fine to her. We expected some nasty short or something, so I called an electrician this morning. He went down to check the panel, and sure enough - a circuit was flipped. We must have needed more light or something. Either way, I'm out $86 due to my own inability to spot a flipped breaker. Dohh!
On the political side of the blogsphere, there's been a lot of "post game" talk about the Eason Jordan mess. Thus far, it looks to me like just about everyone commenting on this thing is missing the point. Doc Searls points to a post that calls the resignation a "right wing hit job". Anil Dash approached the root of the problem, and then backed away - to wit:
In this sense, Eason Jordan got fired for blogging. Except, of course, he's not a blogger. And nobody's ever been fired for blogging. But his words getting taken out of context and resulting in his resignation from his position put him in an untenable, unemployable position, at least to those who choose a false clarity over the nuance and understanding any of us would extend to the people we care about.
And further down:
And about Eason Jordan: More myopic blogger triumphalism. Dear political bloggers, most people, even in the blogosphere, have never heard of the whole kerfuffle, let alone the one surrounding Jeff Gannon. This is inside-baseball cliquishness at its worst. I'm not saying these guys didn't screw up, I'm saying that you didn't win. It won't temper we liberals who control the media to be more moderate, and it won't keep the White House from trying to spin the media. Net effect? Lots of negatives, few positives.
Not to put too fine a point on it, but you're hurting us. You're hurting all weblogs.
There are so many things missed here that it's funny. Was Jordan taken out of context? It's impossible to know, because the people who have the audio and video won't release it. Think back to when you were a kid, and you played a game of "telephone" - this is a game where you get 20 or 30 kids into a circle, and the first one tells a 1 or 2 sentence story to the next kid in line. The fun part is seeing what the story looks like by the time it gets all the way back to the first kid.
What we have here is a first class PR disaster for CNN - which was exacerbated by a purposeful lack of information. Step back from the politics of this for a minute, because I don't think any of that's the real story here - how would you react to this story if we changed it over to the IT industry, swapped in someone from MS, IBM, or Sun (pick your favorite large company there), and changed the statement to some partially closed speech at an event? We had that recently with Gates' "communist" statement about Open Source. Take a look here at Red Herring reporting on this - he immediately released a statement attempting to clarify his remarks. He continued to have people in the trade press disagree with him (witness Red Herring), but he also defused the PR problem with more speech. That's what Jordan didn't do. MS and Gates realized that they had to get out in front of the issue and clarify - Jordan and CNN though they should hunker down and "weather the storm".
The difference is that - without politics involved, we can see the PR issue far more clearly. Go back to Jordan now - he made a controversial statement, was apparently called on it in the room, and immediately started back-pedaling from it. When people started asking questions, he (and his employer, and the Davos people who had the tapes) stonewalled. What happened next followed a very familiar pattern - the stonewalling made Jordan (and by extension, his employer) look bad, and fed the idea that he must have said something truly awful. Instead of getting out in front of the issue the way Gates did, he tried to hide behind the "it was taken out of context" standby.
Jordan didn't lose his job because of politics - he lost it because his statements embarrassed his employer, and they decided that they didn't want to take any more PR damage. Sure, the politics of the various people asking questions entered into it, but that's mostly irrelevant. When you have a bad PR problem, what you need is more transparency. In this case, Jordan and CNN opted for less, and they took damage as a result. What CNN needs to do is recognize this mess for what it is - atrociously bad PR. If they continue to view it as nothing but politics, then we'll see the same kind of thing happening there again in the not too distant future.
Planet Smalltalk Blog Headlines Now Live
Smalltalk.org and Planet.Smalltalk.org are pleased to provide Smalltalk Related Blog Headlines on Smalltalk.org. Thanks to the efforts of Coen De Roover of Planet.Smalltalk.org we were able to quickly add this functionality. Enjoy.
Smalltalk.org is actively seeking projects that can be deployed for the Smalltalk community's benefit. If you have an idea for a project please contact us.
Well, I tried commenting on this item over on Gordon's blog, but it's giving me a 500 - probably related to the problem Gordon says he's having:
I got an IM from the admin at my hosting provider telling me there are about 30 concurrent mzscheme processes running and that it's consuming about 80% of the server's resources. Looks like the optimization problems I blogged about a while back have caught up to me. The general plan is to switch to a real storage mechanism, such as mysql, postgressql or dbm, instead of the filesystem, but I may try to hack in a temporary fix until I can get the time to do the right thing. In the meantime, I've done the really brutal fix and deleted the older half of the archives until I can get the performance under control.
Ok, I'm curious. I use the filesystem for storage on my blog as well, but I don't have problems like that. It may be because I only ever run one process - a single Smalltalk image - to manage all the blogs on the server. As well, I don't store html pages in the html directory system; all the "pages" in my archives are in binary object files (one per day). It's easy to route to the right file via the guid (which is a stringified timestamp). I use a cache for the keyword and category searches, which has helped a lot. I've thought about using a database, but thus far there's been no compelling reason to do so. Heck, even backups are simple - a tar gzip and I'm done :)
Looks like ObjectConnect just released a new version of Smalltalk MT
I'm finally getting around to building some site administration tools for the blog server. So far, I've done all the management ad-hoc, in a development Smalltalk image. That's worked ok, but I wanted something a whole lot simpler. Not to mention something that other Smalltalkers could pick up if they had any desire to try the system out themselves. So far I have some simple web forms that allow one click creation of new blogs, and a similar screen for turning blogs off. Once I get this stuff stable, I'll update the home page with the updated SSP files.
I know why Orbitz would like to ban deep linking without their permission; they want to make sure you come through their site and see the ads, offers, etc. I also know that it's an exercise in futility. Linking is the nature of the web; there's no easy way to stop it. If they want to prevent such linking, they'll have to write their applications in such a way as to make it hard to do. Instead, I expect them to deploy lawyers. See slashdot for more on this. Here's my two cents back to Orbitz - the mere existence of this policy has convinced me to stay away from your service. Congratulations! You just lost a potential customer.
Labels like beta on software are completely meaningless to almost everyone but a very small minority of keyboard-wielding geeks. Unless you can be absolutely positive your audience is only other geeks who know how to use a test release, care should be taken with each release you put out.
Fair enough. My comeback on this is twofold:
- If beta is meaningless, why does Google keep every new thing they do in that state?
- Google's initial audience for their new stuff (GMail being a prime example) is the geek audience
Anyhow, Ryan makes some good points, and I don't really disagree with him that much on this.
More evidence (as if I needed it) that SOAP is the new CORBA - only shinier with angle brackets and port 80! - Mark Baker points to the ongoing interop woes. Gee, I seem to recall this kind of thing happening before...
It's reading posts like this one that make the job worthwhile.
I'm constantly amazed at the "security problem? Perish the thought!" attitude that prevails across the entire IT sector. It seems that each individual person/business has to get slapped upside the head before awareness dawns. For the latest example, have a look at this PC World story on the security behind wireless car key systems and the ExxonMobil speedpass system:
ExxonMobile acknowledges the potential security problems with the Speedpass device. "Bottom line, we are aware of it," says Don Turk, a company spokesperson. Still, the company does not have any plans to change the internal Texas Instruments chip or upgrade their current security systems at this time, he says.
"There are additional security protections for our consumers in the Speedpass system," says Turk. Unlike a credit card, a Speedpass does not store consumer data, so thieves would not have access to personal information, he says.
ExxonMobil Speedpass also guarantees that consumers will not be held liable for any fraud committed against their accounts, Turk says.
According to Texas Instruments, consumers have little cause to be concerned. The company has made upgrades to the RFID chip that the Johns Hopkins researchers tested, says Gary Silcott, an RFID spokesperson for Texas Instruments.
"We're evolving beyond that product," he says. Additionally, Silcott says, "There's a much greater security threat and a much greater instance of fraud on magnetic-stripe credit cards."
Bah. Sounds like they'll have to have a serious incident before they wake up. It's not just them though; that's the way the entire industry thinks.