Need Smalltalk Examples?
Look no further than Stephanne Ducasse's free Smalltalk book site. In particular, have a look at Smalltalk by Example and The Joy of Smalltalk.
Look no further than Stephanne Ducasse's free Smalltalk book site. In particular, have a look at Smalltalk by Example and The Joy of Smalltalk.
Apparently, Drinkable Donuts aren't working out for Krispy Kreme. Scroll down and look at the pictures of the reviewer as he takes his first sip :)
Interesting photo from the Cassini probe - from Nasa. Anyone seen the Lord of the Sith recently :)

Ted Neward shows us this simple truism: If developers can misuse a feature, then developers will misuse that feature
Julia Lerman is excited about the inspector in a Whidbey preview - it apparently lets her drill all the way down into an object. Nice to see Microsoft is powering forward into the 80's. Wake me when they reach the 90's....
One of the things that JIS asked for was examples - examples of how to do various things in Smalltalk. Well, we've been talking about this at Cincom, and some of us are going to start posting examples from parts of the product that we are familiar with. I've done a fair bit of work in HTTP for BottomFeeder, so I figured I'd go through the basics on that. In general, when I post examples, I'll be using the examples category
How to do an HTTP Query in VisualWorks
If all you need is a quick result (when dinking in a workspace, for instance), you can just do the following:
HttpClient new get: 'http://www.yahoo.com'
Now, that will work - and it will even do the right thing in the face of a redirect (either 301 or 302). However, it's not terribly robust - it won't handle any of a variety of of hiccups you might get from a web request (server errors, timeouts, etc). Sure, you can wrap that message send in an exception handler (handling an ExceptionSet of issues) - but you still won't get all the things you want. You will likely want to be able to do things like:
For that, you need to dig into the ancillary classes surrounding the basic HttpClient (and HttpsClient) class and construct a custom request. Here's how you would create a basic HttpRequest object:
setUpRequestFor: url request := HttpRequest new. (request getFieldAt: 'User-Agent') value: 'My Agent String Here'. request contentType: 'text/html'. request accept: '*/*'. request method: 'GET' url: url.
Now, that's hardly an exhaustive list of data that you can attach to a request. You can specify things like cookies, and conditional-get information - but you get the idea. The (request getFieldAt: 'blah') value: 'value' pattern can be used to specify arbitrary headers.
So we have a request object. What do we do with it? We execute the request and we get a response. Here's how you execute the request:
httpExceptions | set | set := ExceptionSet new. set add: HttpRedirectionError. set add: HttpObjectNotFound. set add: Smalltalk.OSErrorHolder notReadySignal. set add: OS.OSErrorHolder notReadySignal. set add: OS.OSErrorHolder peerFaultSignal. set add: OS.OSErrorHolder inaccessibleSignal. set add: OS.OsTransferFaultError. set add: HttpServerError. set add: HttpTimeout. set add: HttpStatusLineError. set add: SSLBadCertificate. ^set
executeRequest: request | response | exceptions := self httpExceptions. client := HttpClient new. client keepAlive: true. ^[client executeRequest: request] on: exceptions do: [:ex | nil].
Now, even that's not the full range of what you might need to do. In BottomFeeder, I trap a few specific exceptions for handling. With that out of the way, what do I do with the response? For things like redirects, I have to check the response:
httpGetFor: someUrl request := self setUpRequestFor: someUrl. response := self executeRequest: request. (response notNil and: [response isMoved]) ifTrue: [self handleMovedObjectFrom: response]. ifFalse: [response notNil and: [response inUnauthorized] ifTrue: [self handleAuthorizationRequestFor: response]]
Now, bear in mind that handleMovedObject: and handleAuthorizationRequestFor: are not part of the standard API. As it happens, the standard Http libraries handle basic authorization and redirects - but not necessarily in a way that is sufficient for applications (i.e., BottomFeeder wanted to silently re-label feed urls, and it wanted to handle Digest Auth - and the standard libraries do not do Digest Auth yet). Beyond those two, this is all boilerplate VW code. So let's put the "high level" API we've just defined in one piece:
responseOrNil := self httpGetFor: someUrl
Now we have a response (or nil). We can send the contents message to that and get the results. Then you can do whatever is appropriate - parse it, store it, display it, whatever. The basics of this are in two packages in the public store - Http-Access, which is used in BottomFeeder now, and a much cleaner implementation in NetResources, which is what Bf will be moving to shortly. I'll go through how to construct a POST next time I give an example.
We just became a reseller of SmallCOM/X (an add on from Joops that allows you to embed Active/X controls into VW Windows). There's a demonstration version in the goodies - it shows you how to embed the IE HTML control into a VW window. I just got a note from Josef Springer at Joops - he has some information for users of VW 7.2.1:
SmallCOM/X Version 2.1.0 for VisualWorks 7.2.1 is available now. Some modifications ecspecially for VisualWorks 7.2.1 have been made. You can load an evaluation copy from http://www.joops.com/SmallCOMX.zip. SmallCOM/X 2.1.0 is useable with VisuaslWorks 5i or higher.
There's money in Smalltalk - see The Register's story on the acquisition of OOVM:
Swiss embedded software company Esmertec has acquired the start-up founded by VM pioneer and former technical lead of Sun's HotSpot project, Lars Bak. OOVM was founded in Denmark in 2002 and privately-held Esmertec acquired the company for an undisclosed sum.
The details:
"If you have say, a small router or a dishwasher you can upgrade the code while it's running, no reboot is required," Bak told us today. "If you have a device, and you have more than one component it doesn't make sense to shut down the system."
Consumer electronics manufacturers have experimented with the technology, attracted not only by the serviceability by its small size: as low as 128kb, which includes a TCP/IP stack. For example as a research project, Bang and Olufsen built the VM into digital speakers, which could then be modified over FireWire.
How does it achieve this magic? OOVM's technology comes in two parts, a VM and a development environment, and it uses Smalltalk, rather than modern-day kludges such as Java, which resembles a modern object-orientated environment in the way that a pub ashtray resembles a cigar store.
So much for the notion that Smalltalk is "big and bloated" - For more details, see my article on Lars' talk at StS 2004
There isn't a lot of "new" stuff in this release. It's a maintenance release over the last one. There were a lot of changes in 7.2 and 6.9, and a number of those things have been enhanced in this release. Here's a short list:
VW
ObjectStudio
That's the summary. For VW bug fix details (with case numbers included) go here. For the same information on ObjectStudio, go here
Here's the list of fixes included in ObjectStudio 6.9.1:
Enhancements For 6.9.1
I'll have a post up shortly with a summary of what's new from a functionality standpoint in both products
The new (VW 7.2.1 and OST 6.9.1) Non-Commercial downloads are now available for download. If you have already registered, there's no need to do so again; just follow the link that was sent to you in email, and you'll be offered the up to date downloads. What's new in this release? - the current release is primarily a maintenance release. There will be a major release this fall.
VW 7.2.1 Fixes from 7.2
Those are the VW fixes. I'll post a list of the OST changes shortly
Every few months this complaint runs around the Blogosphere again:
(From Mark Fletcher) - Centralized services like Bloglines avoid this problem because we only fetch a feed once regardless of how many subscribers we have to it. Desktop aggregators can't do that, of course, and end up generating huge amounts of traffic to sites like Infoworld. There are various things that a desktop aggregator can do to mitigate the load, like using the HTTP last-modified header and supporting gzip compression. But the aggregator still has to query the server, so there will always be a load issue.
This is not a new problem. Popular website (like Yahoo, Google, etc) have had this problem (without RSS/Atom being involved) for eons. If you get popular, you need to add more bandwidth, plain and simple. On the client end, if you pay attention to:
Then you are doing all the right things (BottomFeeder does all of these). The biggest issue now is that a lot of the sites serving RSS or Atom are serving feeds dynamically, and not offering server side support for any of these things. Fix that, and most of this chicken little stuff will fade away
Ed Foster points to an interesting policy MS has on getting access to "premium" support:
"I needed to know how to solve a problem we were experiencing in Outlook, so I went to Microsoft for help," wrote the reader. "After drilling down I found what looked like a link to a solution for our problem. Upon clicking on the link a page appeared and said that since the machine I was using did NOT have Office 2003 installed, that content was not available to me. I should go out and buy a new Office suite and upgrade to it and then I could have access."
That's pretty nasty. Never mind whether or not you are current on your support - have you loaded the latest and greatest?
I've got a dev update (i.e., add dev/ to the end of the update path in settings to see it) that makes the HTTP updates that Bf does threaded. If you go to Settings, you'll see a new option under the 'Network' page - turn on threaded updates, and the system will spawn (lightweight) threads for each http query. Let me know how it works out; it's a lot faster on my system.
JIS asks "where's the beef"? in Smalltalk. It's a fair question - but I think we have answers. I left this as a comment on his blog, but I'll repost here:
Sample Web App? My blog and the main Cincom Smalltalk site.
Not to mention the other blogs here
Sample client App?
BottomFeeder. If you want to see code samples, look at the various Smalltalk blogs above - most of them get far deeper into that than I do on my blog. There are blogs devoted to GUI, Tools, Database, and general Smalltalk stuff. There's been a bunch of good content that way recently. All you have to do is look.
I'm still testing some changes to BottomFeeder, but expect to have an update out this week. This is where I'll be marking a break between the release (3.6) stream and the dev (towards 3.7) stream. I'll be adding the ability to have BottomFeeder run the update loop using a configurable number of threads (instead of the single threaded loop it now uses). There will be a limit - if you subscribe to as many feeds as I do, then having a thread per feed update would just torch your bandwidth and likely result in most of the attempted http queries timing out. I'll have a dev build for that up soon; I have to finish off some bug fixes to the NC download application first though. Stay tuned.
We should have the latest - VisualWorks 7.2.1 and ObjectStudio 6.9.1 non-commercial up on the site for download later today. I'm still awaiting one confirmation from engineering - once I get it, new downloads will be the latest stuff. I suppose I should point out that we have a new release :) What's new? Well, this release is mostly a maintenance/bug fix release. The next major release will be in the fall (late November, most likely). Have a look here for details
Scoble wants to blame his travel issues last week on an old DOS app. It's not always about the technology. What Scoble ran into was a simple people problem. I've seen this sort of thing (booking problems) happen with modern "whiz bang" systems as well. If you have bozos doing the data entry, you can get bozo results. Updating the software and keeping the bozos will simply result in prettier looking Snafus....
Michael points to a fascinating viewpoint on the Sydney Smalltalk & Ruby meeting. Heh - he thinks us Smalltalkers wear suits all the time :)
I've said before that the various suits brought against MS were not going to have any long term utilty. What will is the sort of arrogance that creeps in once you think you control the vertical and the horizontal. Have a look at this anecdote from BlogOn to see what I mean...
Anyway, the presenter was doing his pitch in a polished way and at one point he said he wanted to show us a "really cool" feature and he looked up into the audience and said "Show of hands...How many of you use Internet Explorer?". Probably 99 times out of 100 when he asks that question all the hands go up, right? Well first there was a pause and then a giggle and then a whoop of laughter as the audience looked around and realized that NO ONE had raised a hand. The presenter was thrown off his mark, but he recovered and said, "Wow! Okay how many of you wish we'd fix IE so you could use it?"
Still no hands....
MS is losing the leading edge in browser users - this is reflected in the rising non-IE refs in the server logs of this blog as well....
I ran across this problem in BottomFeeder awhile ago, and had exactly the same problems that Dare had:
I stumbled across a feed that used the same link for each item from a given day; the Cafe con Leche RSS feed . This meant that RSS Bandit couldn't differentiate between items posted on the same day. This was particularly important when tracking what items a user has read or whether an item has already been downloaded or not. I should have pinged the owner of the feed to point this problem out but instead I decided to code around this issue by using the combination of the link and title elements for uniquely identifying items. This actually turned out to be worse.
Yes, I've had that problem, and it's one of the reasons that differentiating items in RSS is non-trivial. There are blogs out there that don't include GUIDS or links - yes, odd as that sounds, I've seen it. If someone can create weird XML, they will create weird XML...
I just love the hullabaloo around e-voting. Take this:
Part of the problem arises from the complexity of e-voting systems. The code that makes up these systems is so large that there's no efficient way for election officials to ensure that it's free of malware or to completely debug it, according to testimony Johns Hopkins University professor Avi Rubin gave before the U.S. Election Assistance Commission this spring
Complexity? Seriously, how complex should a system like this be? It's an automated multiple choice list. If the people writing such systems made them complex, then find better developers. Seriously, this doesn't even begin to be a complex domain problem. As to security, that's mostly an issue of separating the systems from public (net) access, and verifying that only authorized staff has back end access. In other words, problems we know how to solve. Then there's this:
If you thought pregnant chads in the 2000 election were bad, wait until you see what a determined hacker could do to the democratic process this fall. That is, of course, if we're lucky enough to detect the attack.
What, this columnist has never heard of ballot box stuffing? I'll refer her back to the history of Tammany Hall in New York - this sort of system is no more (but also no less) secure than any other system out there.
This article has an interesting interview with John Loicano, Sun's exec VP in charge of software. Here's an interesting point:
Question: Solaris is going open-source. Why not Java?
Answer: We see ourselves as being the stewards of Java. Compatibility is a key issue.
fascinating....
Sometimes it's just carelessness. Have a look at this Computerworld story - an email address book with bad entries caused lots of county government mail to be cc'd off to Sweden:
The investigation was launched after Computerworld notified the county on July 6 that Robert Carlesten, managing director of Internet company Ord&Bild AB in Karlstad, Sweden, had produced dozens of e-mails that he said had been arriving at his Internet.ac domain regularly for the past two years. Carlesten said he responded to the senders of the e-mails on multiple occasions to inform them of the problem but never received a reply.
...
According to Whittington, the glitch stemmed from the county's Internet naming structure, which includes ".ac" for the auditor controller's office. "Now we need to research who has the bad address book that has this address," he said.
Whittington said his office was never directly informed about the problem by Carlesten and noted that any county employees who may have received e-mail responses from Carlesten never brought the matter to his attention.
This apparently went on for over 2 years. Makes me wonder how many security breaches that are blamed on MS (etc.) are really just careless mistakes like this...
It's a long way from Sydney back to Maryland. Unlike my outbound flight, there wasn't a lot of excitement this time. The trans-pacific flight went off fine. I plowed through three of the books I brought with me - the book on the siege of Petersberg ("The Last Citadel", 1864-1865, US Civil War) was very good. The author used a lot of primary source materials - after action reports by commanders, individual soldier's recollections and letters, and some of the archival material from "The Commitee on the Conduct of the War" (a Congressional commitee that examined the war effort during and after the war). If you are a Civil War buff, this is a great book.
Anyway, things went fine to LAX. Then I had to go back through security - and I had a small contretemps with one of the rent-a-cops at the entrance to the security line. It seems that my travel back was too big (and yes, it's bigger than the size specified - it's a garment bag). However, no one else with outsize bags was being hassled - the rent-a-cop had some bogus ideas about how the other bags could be folded. After a little back and forth I did an end run - I went to the other security line, where they had sane people working. With that out of the way, I had 3 exciting hours to spend in LAX.
As it happens, I paid my way into the USAirways club last year, and my membership is still valid. That got me into the united lounge, which was certainly nicer than the main concourse. This is when I found out that the "powers that be" at LAX have signed up the world's most ineffectual WiFi vendor - some bozo firm called Boingo. When you spawn a browser and the site uses T-Mobile, or Wayport (or any of a number of other services), you get an HTML form to login to. Simple, no fuss, no muss. Not these morons. No, first you register. Then you download a Windows client (I guess you are just SOL if you have a Mac, or Linux). That client allows you to access the WiFi. To top it off, it was up and down the whole time I was there. That still wasn't the dumbest part though. First, you have to register. Ok, you get a browser page - hit the link to the "Try it Now!" page. You get a list of one option - $21.95 per month for a year.
Well, that's useless, so I went to dialup. However, it turns out that they do have "pay as you go - it's just well hidden. You have to follow a link labelled "Change the Promotional Code", delete the code from the input field, and then submit - at which point you get a pay as you go option. Who's the blazing idiot who came up with that? Someone who's driving theory was "yes, I want fewer customers now?" At least I was able to get news updates and mail.
So now I'm back home, exhausted (I've had two Fridays this week). I'll sleep well tonight, and with luck, won't have any jet lag. We'll see...
This is interesting - a .NET (C#) developer looking at what it would take to add an attribute to an object at runtime:
I wanted to be able to add properties on the fly. I've changed the idea a bit to look them up on the fly versus adding them. Using psuedo-code:
// expandable object
MyObject o = new MyObject();// add the property
o.AddProperty("FirstName", "Justin");I'm not using these properties in code anywhere. I'm actually feeding the object to a template system (the C# port of StringTemplate in this case). Now StringTemplate supports reading properties in the templates like so...
$p.FirstName$
But unfortunately the MyObject type doesn't have a FirstName property. And StringTemplate uses the Type to do reflection. Anyway, during my research of IExpando (much like IDispatchEx), I noticed the interface IReflect. Looking at the docs for it, it contains all the most common methods that people use on Type when performing reflection (GetProperty, GetMethod, etc.). So if I change StringTemplate to use IReflect vs. the Type class, then I could implement IReflect myself. Of course, there are problems with this; mainly the fact that PropertyInfo is an abstract class (MemberInfo, the parent class, is also abstract). So I would have to write implementations of those.
Hm...this seems like more effort than its worth. Maybe I should just do something like this...
$p.Attributes.FirstName
Attributes would be an IDictionary. Then I can extend StringTemplate to look at the object. If it is IDictionary, then use the property name as the key. The former definitely has more of a "coolness" factor, but the latter would take like 15 minutes.
Heh. As opposed to the following in Smalltalk:
myObject class addInstVarName: 'firstName'. This is one of those telling differences between Smalltalk and languages like Java and C# - it's not that you can't accomplish the same things - it's that you don't bother because of all the work involved. Smalltalk makes the simple things simple, and the hard things possible. Languages like C# and Java make the simple things possible, and the hard things painful...
Jonathan Schwartz still thinks that commoditization is helping Sun - apparently, he's not noticed the buckets of money Java shovels at IBM - even as Sun continues to lose money (yes, they made money last quarter. Remove the MS payoff and the numbers are still brutal though). Here's more fantasy thinking:
At Sun, as I said, it's tough to compete against a social movement, especially one in which we all believe. But compete against a single company, Red Hat? Finally. Now that Sun's Solaris operating system runs on Intel, AMD and Sparc systems, our customers have immense choice. We can deliver our products at a lower price point, we can deliver more and better features, more innovation, legendary security (the national security kind), and far better customer support and responsiveness - maybe not for a developer looking for real-time patches (yet), but certainly for the enterprise looking for an accountable vendor.
So if you're running Red Hat, and feeling frustrated by their support, exorbitant pricing, or weak security, it's time to look at Solaris, on any of the more than 200 hardware platforms we support. From HP, Dell, IBM and, of course, Sun (and a host of others). The migration is a very easy one. So is the free download.
Yeah, keep whistling past the graveyard Jonathan. I have a tip for you: Redhat isn't the competition - Dell (lower cost) and IBM (Service and software delivery) are. Dell's costs are scads lower - which is why they sell so much hardware. IBM has a software suite that actually sells at a profit (while Sun doesn't). What's enabled that? Well, commoditization of hardware (making a Sparc purchase mostly insane), and commoditization of software (which Sun has done to itself with Java). No one wants the Sun hardware anymore - I see shops walking Sun out and Linux in every day.
It's worse than that though - Sun simply isn't structured to make money on the commodity sales end, and it's showing. Then we see this kind of thing:
And if you're looking for an open source Solaris, stay tuned there, too. Remember, it's in our roots.
Update: Seems I spoke too soon below - this ComputerWorld story has details.
That's too funny - watching Schwartz make public comments about open sourcing Solaris, while McNealy immediately makes negative comments about the idea. So is this good cop/bad cop, or is Schwartz just publically dissing McNealy? It's hard to tell from here.
The MS guys are rediscovering yet another old Smalltalk idea - treating an object as if it were an array. Take a look at #instVarAt: and #instVarAtPut: in class Object (never mind that doing this sort of thing is typically a very, very bad idea):
http://www.csharphelp.com/archives/archive140.html
C# introduces a new concept known as Indexers which are used for treating an object as an array. The indexers are usually known as smart arrays in C# community. Defining a C# indexer is much like defining properties. We can say that an indexer is a member that enables an object to be indexed in the same way as an array.
Âthis [argument list] {  get  {   // Get codes goes here  }  set  {   // Set codes goes here  } }
Of course, the beauty of this is that C# had to add new syntax to do this, while the equivalent Smalltalk functionality is just another set of methods. So the C# guy has to memorize yet another set of reserved words, while the Smalltalker simply looks at the library. Sometimes I'm amazed at how Java and C# are examples of Smalltalk being re-invented - but with a crufty, inelegant syntax....
Ted Neward has a post up talking about the pitfalls of O/R mapping - now right off, I have seen plenty of Smalltalk projects go down the road to hell trying to build their own O/R frameworks - so it's possible to fall off the cliff. Smalltalk is certainly no silver bullet here. On the other hand, I've also seen many projects succeed quite well here. I think Ted overstates the problem:
Both major software vendors and project teams (building their own O-R layer) fall into the same trap. With object-relational technologies, products begin by flirting with simple mappings: single class to single table, building simple Proxies that do some Lazy Loading, and so on. "Advisers" are sent in to the various project teams that use the initial O-R layer, but before long, those "advisers" are engaging in front-line coding, wrestling with ways to bring object inheritance to the relational database. By the time of the big demo, despite there being numerous hints that people within the project team are concerned, project management openly welcomes the technology, praising productivity gains and citing all sorts of statistics about how wonderful things are going, including "lines of code" saved, how we were writing far more useful code than bugs. Behind the scenes, however, project management is furious at the problems and workarounds that have arisen, and frantically try every avenue they can find to find a way out: consultants, more developers, massive code reviews, propping up the existing infrastructure by throwing more resources at it, even supporting then toppling different vendors' products as a means of solving the problem. Nothing offers the solution the team needs, though: success, a future migration path, or at the very least, a way out preserving the existing investment. Numerous "surprises" (such as the N+1 query problem thanks to lazy-loading proxies or massive bandwidth consumption thanks to eager-loading policies) make the situation more critical. Finally, under new management (who promise to fix the situation and then begin by immediately looking to use the technology in other projects), the team seizes on a pretext, ship the code and hand it off to system administrators to deploy, and bring the developers home to a different project. Not a year later, the project is cancelled and pulled from the servers, the project's defeat complete in all but name.
There have been two really nice O/R frameworks done in Smalltalk (that I know of - there may well be more) - TopLink and GLORP. GLORP is an active project, and getting quite nice early reviews from people taking it up. Sure, projects can fall over dead in the attempt to build a "perfect" O/R layer - but projects can far, far more easily fail by scatter shotting SQL throughout the code base. What is Ted actually advocating here? Does he have a proposed solution, or is it just carping? Inquiring minds want to know :)
I've had a few people ask me for my subscription list - here it is. If you grab this, you'll want to delete the Smalltalk-CST folder - the urls for those feeds are internal to Cincom, and you won't be able to get to them :)
It's been a great trip, but I'm ready to head home. My wife and daughter miss me, and I miss them. The With Style guys have been great, and I was able to present to some great groups. The ANU presentation this afternoon went very well - and afterwards, a lot of the folks there were brainstorming about how to make use of RSS and blogs for project management. The Linux group had a few different concerns, but we still had a very good session with lots of good questions. I had a great time, and I'm looking forward to coming back!
Dave points to some pretty anti-social behavior on the part of IIS6:
In a comment on a late post yesterday, Scott Fraer points to a Microsoft article that explains: "When you start Internet Information Services (IIS) 6.0 on Microsoft Windows Server 2003, IIS binds to all IP addresses on the server, not just the IP addresses that are assigned to Web sites."
That's just... wrong
In the Star Trek universe, there's never too many bad ideas:
Rick Berman, executive producer of UPN's Star Trek: Enterprise, revealed to SCI FI Wire several spoilers for the upcoming fourth season, including the possible casting of original Star Trek star William Shatner (Capt. Kirk) in a familiar role.
Ooh, like we haven't seen this idea before. Over-acting is already a problem in Enterprise :) But wait, there's more!
- T'Pol (Jolene Blalock) may find herself getting married in episode three, Blalock said in an interview.
- The long-standing Temporal Cold War arc will be resolved in the first two episodes.
Will this involve removing the stick from T'Pol's butt? And Berman finally noticed that the temporal cold war idea sucked? Here's a thought - send Berman away on a long term research project and find better writers!
I'll be speaking at the ANU tomorrow at 4 (in Canberra). Then sometime around 7, I'll be speaking at the Canberra LUG (Linux Users Group). Should be a good time.
Sean Malloy shows us how to sell Smalltalk to your boss:
I setup a server, and while test clients were connected to it and sending/receiving messages, I started changing the request handler methods which determined the responses to messages. Simply changing some of the outputs while the test app was connecting to the server. At first it wasn't really apparent to him what was going on. Not until I showed the same task being accomplished in C#. Each rebuild we got to watch the test client start throwing exceptions about failed connections, mean while any change to the code required rebuilding the app. So I wasn't able to change the results of requests on the fly. Trust me when I say if I had been trying to show off C# as the better option, it would have been a pretty bad demo. That was about the time he had a "Holy S***" moment. It was pretty cool.
Heh - I've seen that moment too - it's always great when you get the dynamic nature of Smalltalk across in a visible fashion.
Dare Obasanjo's has noticed something pretty odd in the W3C Compatibility mode docs for XPath 2.0:
The list below contains all known areas, within the scope of this specification, where an XPath 2.0 processor running with compatibility mode set to true will produce different results from an XPath 1.0 processor evaluating the same expression, assuming that the expression was valid in XPath 1.0, and that the nodes in the source document have no type annotations other than xdt:untypedAny and xdt:untypedAtomic.
My reaction is pretty much what his was - huh, what? Compatible isn't compatible, or something. Bizarre...
In a customer visit this morning, I ran across two things that seem to come up a lot:
The latter is often a simple solution to flicker problems in an application; the former involves appropriate tuning to an application's memory profile so that the GC sub-system isn't doing unnecessary work. In this area, I'd strongly suggest having a look at the appropriate pages of the VW Application Developer's Guide - it's well documented.
Tim Bray wants better we authoring tools:
The state of Web authoring tools is kind of like the state of what we used to call 1CWord Processing 1D twenty years ago when I was getting into this business. If everyone 19s going to write for the Web (and it looks a lot of people are going to) we need the Web equivalents of Word Perfect and Wordstar and Xywrite and Microsoft Word, and we need them right now.
Well heck, I saw those last night at the Sydney Smalltalk Users Group meeting. If you want WYWISWG XML authoring tools for the web, look no futher than Software With Style.
We have some customer visits in and around Sydney today, and then it's off to Canberra tomorrow. Should be an interesting day; then Friday I'm off for home again. It's been a good trip so far.
We (myself and the WithStyle guys - Michael Lucas-Smith and Rowan Bunning) spoke to the Sydney Smalltalk and Ruby user groups this evening. I gave a brief update on the products, and then spoke about BottomFeeder. That was well received - lots of good questions and feedback. Again though - the penetration of syndication is less than everyone seems to think.
Next, Michael and Rowan gave a talk on WithStyle. Rowan gave some background on the work they are doing rich interactivity of desktop apps in the model of web apps. Lots of cool stuff with Rich UI interaction va the use of the With Style engine. Michael is going to do a demo - I'd suggest a quick visit to their website to join their developer program.
Good question from Bruce Badger - some would say that JavaScript "solves" this problem - what say you? Rowan's answer is that JavaScript and the browsers really haven't lived up to that promise. I'd add that lots of people - and firewalls - turn it off. Back to Michael - "We are going to break out of the browser" - we need rich internet applications (ed: like, say, BottomFeeder). They plan to support:
Why CSS - have a look at CSS Zen garden. Now he's off to do a demo. But wait - we're in one - his presentation is in WithStyle. Showed us the example browser, and now he's showing the WYSIWYG XML editor. This is very cool - you can edit the content w/o having to muck around with the XML itself - and it's smart enough to have an open back end (i.e., you can save to arbitrary CMS systems).
Lots of cool things integrated - CSS2 and CSS3 (almost there). ECMAScript integration with Smee from David Pennel. They've got an HTML Window (which I have to integrate into Bf...). Now he's going to show us how to build a presentation app. It's a fairly simple matter of a few methods, or a few files. This demonstrates the integration of XML Events and of Smalltalk scripting - it's a very cool integration.
They are now doing nightly builds and a developer program - you can sign up, get on the mailing list and grab the builds.
Questions: How do you deal with the onset of Avalon and its (someday) ubiquity? Answer - trying to be a rich client solution, not a web browser specific answer.