By now some of you have noticed that the web services file is missing from the download area for NC. This is an oversight, not us holding anything back. We should have this addressed sometime this morning - I just have to wait for the guy who has sufficient permissions on that box to wake up...
if you tried to register for a public store account over the last few days, you got roadblocked by a small bug. Somehow, I managed to ftp up to the server the wrong version of the app, and responses from the db were not being properly read. That's been addressed - tip of the hat to Eric Engstrom for pointing the problem out to me.
Instead I think the question should be, "Whether Smalltalk?" And the answer could very well be yes.
VisualWorks 7 is loaded with Internet capabilities: servlets, server pages, SOAP (Open talk). The VM is so much more mature than the CLR and JVM implementations.
The company appears to be solid, and has backed VisualWorks longer than anyone gave them credit for. Cincom rescued Smalltalk from history, after ParcPlace nearly bungled one of the truly great software systems of all time.
S# appears to be close to release for dotNET. Not only could this put some spark back into Smalltalk, but it could pave the way for widespread success of dynamic languages in general on the CLR, through the collaborration with Microsoft and the specific implementation techniques.
Not to mention that Dolphin and MT are still solid Smalltalk implementations for Win32 and on multiple platforms Squeak and GNU Smalltalk are too. The combination of VisualWorks and S# and these others make a cross-platform opportunity for Smalltalk. Systems built for S# or VW to a large degree should run on the other.
VW 7.1 is supposed to provide a more solid (non-beta) native Mac OS X implementation and VW is already solid on Linux and other Unix systems.
Smalltalk is a simple, classic notation for expressing computation. Code written 20 years ago still runs on modern implementations.
Why build important computational assets in notations that are overly complex (i.e. they make you say more than necessary) and are tied to implementation decisions that will soon be outdated (i.e. the "standard" notations are regularly updated with new features that compell adoption by marketing lust and lead to a chronological stratification similar to carbon dating)?
Java and C# books become outdated in a year. They no longer teach the notations the way developers want to use them. On the other hand, a developer can learn 90 percent of Smalltalk by picking up 1983's Smalltalk-80: The Language and Its Implementation!
Far better to build your important computational assets in a notation that is already long-lived, simple, flexible, and efficient, not to mention mostly unchanged for 20-30 years or more. There are a two of these notations that make sense to me: Lisp and Smalltalk.
I could go with either. Smalltalk is easier to explain to developers using other object-oriented languages.
Add Patrick's Weblog to your reading list - there's always stuff worth reading and thinking about there.
For those of you who missed the WebServices package, it's now been placed on the download site. We apologize for the confusion.
It turns out that the Mac VM, when installed under Windows or Linux, loses the resource fork information. So I've grabbed the VM files that we ship with vw-dev in a compressed form (.bin), and have them packaged up that way. This means that BottomFeeder Mac users will have to do a little work on their end - decode the .bin files, and also set the type and creator codes for the image to HPS7. If I had a Mac, this would be easier. Alas, not in the budget...
If you have been using the Aragon goodies, you may well see a few problems in 7.1 - I was trying to fix the installer, and I think I broke some - possibly all - of the Aragon parcels. Since none of have been changed by the author since the 7 release, just grab the old 7 versions. I apologize for any difficulties....
- Keyboard shortcuts - see here for details
- Ability to import OCS, OPML, and RSS feeds from local files (based on the formats used by syndic8.com
- Ability to export the subscribed feeds to an OPML file. This will be extended to RSS and OCS before the release of 2.9
- A new, cleaner settings tool
BottomFeeder has supported marking feeds, folders of feeds, or all feeds read/unread for a long time now. The downloads are packaged as ready to run applications; the goal of this project is to make the application accessible to smalltalkers and non-smalltalkers alike. If you want to get into the code, the project has a SourceForge page - but the most recent codebase is in the Public Smalltalk Repository. Volunteers are welcome!
Thanks to one of our doc guys (Mark Roberts), the download page is cleaner and has a better set of explanations as to what you need to download. I also cleaned up the Web Services download link, which still had an invalid file name. It should all be ok now (fingers crossed)
This is priceless - Don Roberts at the C2 wiki:
He is a RedneckSmalltalker. He used to be "The Simplest Consultant That Could Possibly Work", but now he's at the University of Evansville as "The Simplest Professor That Could Possibly Teach." Where he's learned that teaching OOP using C++ is like teaching General Anatomy using only cancer patients.
I am visiting a prospect this morning - I'm just printing out the handouts now. It's a lunch meeting in Herndon, VA (which is heck and away from here), so it will take a long time to get there and back. Hoepfully, I'll have interesting news to report when I get back late in the afternoon.
I got invited to speak at a local company today by a developer (Dave Astels) I ran across at the local XP group. I was there for about 90 minutes, talking about Smalltalk and what's new in Cincom Smalltalk. A lot of the folks there had used Objective-C, so they were more open to the concept than a lot of people might have been. I got a lot of questions, and a good level of back and forth. I expect a few more downloads of the non-commercial product at least, maybe even some skunkworks usage of the product. We'll see; it was fun to just do an evangelical call for a change.
We had some kind of server problem over the last hour or so, but it's been dealt with. Seems that the postgres db we use had a brain cramp, and had to be restarted. All is well now - the web apps are responsive again, the public store is responding normally - we apologize for the problem, and now return you to your regularly scheduled Smalltalking...
I found this post on Patrick Logan's blog interesting. Patrick quotes Paul Graham asserting that Java, like Cobol - is an evolutionary dead end in terms of language development:
I think that, like species, languages will form evolutionary trees, with dead-ends branching off all over. We can see this happening already. Cobol, for all its sometime popularity, does not seem to have any intellectual descendants. It is an evolutionary dead-end-- a Neanderthal language.
I predict a similar fate for Java. People sometimes send me mail saying, "How can you say that Java won't turn out to be a successful language? It's already a successful language." And I admit that it is, if you measure success by shelf space taken up by books on it (particularly individual books on it), or by the number of undergrads who believe they have to learn it to get a job. When I say Java won't turn out to be a successful language, I mean something more specific: that Java will turn out to be an evolutionary dead-end, like Cobol.
This is just a guess. I may be wrong. My point here is not to diss Java, but to raise the issue of evolutionary trees and get people asking, where on the tree is language X? The reason to ask this question isn't just so that our ghosts can say, in a hundred years, I told you so. It's because staying close to the main branches is a useful heuristic for finding languages that will be good to program in now.
At any given time, you're probably happiest on the main branches of an evolutionary tree. Even when there were still plenty of Neanderthals, it must have sucked to be one. The Cro-Magnons would have been constantly coming over and beating you up and stealing your food.
The reason I want to know what languages will be like in a hundred years is so that I know what branch of the tree to bet on now.
I think he's right about Java - it's the butt end of the C language family, and - IMHO - goes about as far as you can go in that direction. To me, the emergence of new dynamic languages like Python and Ruby - which owe more to Smalltalk than to Java - shows you where things are going at a grass roots level. Java may be where a lot of the work is, but it does not seem to be where the interesting action is.
British Airways and Air France today signalled the end of the supersonic era in aviation by announcing that they were retiring their Concorde planes this year.
BA blamed falling passenger levels and rising maintenance costs for the decision to scrap flights. Both BA and Air France said their Concorde operations would stop at the end of October 2003. Air France's last transatlantic flight by Concorde will be on May 31.
Ok, so can we at least get power at the seats then?
If you live in the Washington DC metro area and would like to learn Smalltalk, Victor Goldberg will be teaching a class at Northern Virginia Community College.
Information on the class:
|Where||CICS 838-01N 6:00 - 9:00 pm, Thursdays|
|Dates||May 22 - July 10 (8 sessions)|
Contact number for information: 703 323-3168
There were a few annoying glitches in the NC download app that have now been addressed. You may also have noticed that the documentation link is broken; that should be addressed later today
If you have trouble starting BottomFeeder, then download this file and place it in the 'app' directory. There was a pre-requisite set in this component - a pre-requisite that exists in systems with VisualWorks installed, but in in environments without it installed. This was a silly mistake on my part, and grabbing this file will address it.
I spent most of the evening over-thinking keyboard navigation for BottomFeeder. Finally, I ripped out most of the awful code I had been writing, and it started working correctly.
When in doubt, don't fight against the code framework....
One claim made on PrevaylerIsNotADatabase is that unlike RDBMS's and OODBMS's, Prevayler does not have to worry about RAM limitations. Excuse me? Huh? OODMBS's tend to suffer when your indexes can't fit in main memory any more. Prevayler will go completely to the dogs the moment any of your object model is swapped out. Surely Prevayler has to worry more about RAM than anyone else? I posted a politely-worded query to this effect on the page, and received the following reply from the project lead:
No. Prevayler assumes the Prevalent Hypothesis. Databases do not.
To save you following the link, the Prevalent Hypothesis is (direct quote) "That there is enough RAM to hold all business objects in your system." That's right. Users of Prevayler don't have to worry about there being enough RAM because... we assume there will always be enough RAM!
Whoa. i don't know about you, but that's a pretty ignorant hypothesis IMHO. If anything, objects and data tend to expand to fill all available space and then some. Even when it's true, it doesn't necessarily make for a well behaved system - one client system I'm familiar with cached all the Gemstone objects in the Smalltalk image before releasing the product, allegedly for performance - most of us assumed it was to avoid having to buy client licenses. The application was huge, and end users had problems running other applications on their systems. Ultimately, making assumptions like all the data will fit in RAM are dangerous - like other assumptions, they should be tested, not simply asserted...
It seems that every time I turn around there's a new aggregator being announced - SharpReader just came out, for instance. A lot of these are using .NET - which is a 20 MB runtime.
BottomFeeder, on the other hand, is a cross platform aggregator. The baseline download (compressed) is a tad over 5 MB, and updates to it are in the 200k to 900k range. I could ship smaller updates - patches - but it seems simpler just to replace the baseline application parcel, and is certainly easier to manage.
Kind of an odd place, having the Smalltalk solution be the smaller, lighter weight implementation - it's not at all what the conventional wisdom on ST is.
We go once a week or so with friends, I almost always have the B and B Burrito, followed by the (mmmmmmmmmmm) Iron skillet pie. Then I feel like I inhaled a blimp the rest of the evening. Oh well
Looks like we'll be playing a new Settlers variant tonight - Mike wants to try out the stone age variant. Should be interesting - Settlers of Catan is one of our favorite board games, although we did overdose on it some the last few years.
I spotted an explanation of the pitfalls of XHTML over on Don Box's Blog. He actually went to XHTML, and backed off. In the technical blog-verse, there's been an awful lot of hullabaloo about XHTML, but this document convinces me that not yet is the correct answer:
There are few advantages to using XHTML if you are sending the content as text/html, and many disadvantages.
In addition, currently, the majority (over 90% by most counts) of the UA market is unable to correctly render real XHTML content sent as text/xml. For example, point your browser at:
Only Mozilla, Mozilla-based browsers such as Netscape 6 and 7, and very recent versions of Opera such as Opera 6 are able to correctly render that site. (IE6 shows a DOM tree!)
Authors who are not willing to use one of the XML MIME types should stick to writing valid HTML 4.01 for the time being. Once user agents that support XML and XHTML sent as one of the XML MIME types are widespread, then authors may reconsider learning and using XHTML.
That's right - like it or not, IE has over 90% market share, so using XHTML at this point is telling over 90% of your potential viewers to kiss off. No thanks. Far, far simpler to just slap HTML out there, and wait for the tools to evolve.
"Tremors the Series"????
This is what we get instead? Bleah. The first movie was funny, the second was too much of a weak concept. The series is just a waste of airtime. How far the mighty have fallen....
It looks like spring has finally found its way to Maryland. The sun is shining, the bulbs are up, and the temperature has finally escaped the 40's and 50's. And just in time as well - one of the neighbors is having their annual Easter Egg hunt this morning. It's a huge thing - separate hunts for toddlers and older kids. A huge spread of bagels, donuts, and coffee. Just a neighborhood event, but very nifty - something everyone looks forward to.
The people who throw it remind me of a personality type discussed in "The Tipping Point". Most of us have a circle of friends and business associates. Then there are the people who seem to know everyone, and be involved in everything - school activities, boy scouts/girl scouts, neighborhood activities, the works. If you start talking to them about something, they will likely have a recommendation for the person you should be talking to about it. In short, they are some of the glue that make a neighborhood a community.
So I'll be off to this year's bash soon, with my daughter. The local cache of chocolate will certainly be renewed.
Now I know why our street got plowed early last winter, and seems to always get plowed early. It seems that someone who was very high up in the last governor's staff lives on my street. Since the local (county) government is of the same party as the last governor, he still has some pull. I spent awhile last winter puzzling over this, since there didn't seem to be a good reason for our (non-through) street to get plowed early.
Same thing happened while I was growing up - we had a county legislator who lived on our dead end street, and we always got plowed early. It's obviously an independent of party sort of thing - it was one party in my old home town, and the other one here. Some things never change, I guess. On the plus side, it means that we can always get out to the local supermarket.
So we tried out Settlers of the Stone Age last Friday night. I got my butt handed to me, in pieces. It played well - I'd be more than happy to try it again, now that I have a better idea of what the winning strategies for that variant are. It would likely play differently as a 4 player game as well - we only had three on Friday. One thing's for sure - the starting position would be a lot more crowded.
Then check this site, which covers the bases.
Here's an interesting story on open source and the likely impact on industry. From the Economist:
The main loser (so far) as Linux advances is Sun Microsystems, one of the largest server vendors. Its Solaris software is generally deemed to be the most capable flavour of Unix, the family of powerful operating systems used in servers. But for many applications, Solaris is overkill, and Linux, a less capable flavour of Unix, is good enough. Many people who would once have bought expensive Sun boxes running Solaris are now running Linux on cheap, PC-like machines instead.
This has forced Sun to embrace the technology that threatens its existence. Last year, Sun launched its first Linux-based server. After several zigzags, it has now decided on its Linux strategy. As well as offering cheap boxes running Linux alongside its more powerful Solaris-based ones, Sun will include its server software with both Linux and Solaris, to make its Linux boxes more attractive and to allow users to "trade up" to Solaris. Even so, many in the industry believe that, thanks to Linux, Sun is doomed.
The clearest winner is IBM, closely followed by Hewlett-Packard (HP) and Dell, each of which has done well selling Linux servers. IBM embraced Linux in 1999, and now offers it across its entire range, from lowly PCs to mighty mainframes. Linux has also boosted IBM's mainframe business, since a single mainframe can be set up to behave like dozens of small Linux servers. Firms with mainframes have thus been able to scrap entire rooms full of Unix servers, such as those made by Sun.
This is pretty much what I've been thinking for awhile now - Linux is a nice alternative to expensive Sun hardware, and is "good enough" for many situations. This is going to be the next big shock that runs through the IT industry, in my opinion - when Sun starts to crumble, the shockwaves will affect the server space (Solaris) and the developer space (Java). All the folks who are operating under the delusion that Java is "open" could be in for a few surprises...
People who read many weblogs can use an RSS newsreader that will collect the news from the RSS files of weblogs to one "place" on their desktop. The interface of RSS aggregators look quite similar to Email programs.
Web sites are pull mode. People come to them to read.
Email is push mode. Information is sent to people.
RSS newsreaders bridge the gap between the web and Email. They enables web content to be pushed to the desktop of its subscribers.
Unlike Email, people who use RSS newsreaders choose what RSS feeds to subscribe to. But once they have chosen to read a feed, or to be aware of new items in a feed, they have to make the choice of reading the item or to ignore it. They cannot ignore the fact that a new item has been published, unless they unsubscribe from the feed completely.
Do we need more Email?
I don't think this is a good analogy. with email, I have no idea what will come at me. I've got a public interface into which anyone can throw things. Good stuff, bad stuff, anything. With RSS, I'm filtering based on what I know I'm interested in. I find that it takes me less time to follow the sites I care about with BottomFeeder than it used to with just a browser. However, I don't think this is the poster's real problem:
I have created an RSS feed for a weblog that deals with publishing weblogs in Hebrew. There are some issues regarding the mix of character sets and the bi-directionality of Hebrew that should be taken care of. Finding an RSS reader that can display RSS feeds in Hebrew is a hard task. I haven't found one yet.
There's his problem, I think - at present, most readers - certainly BottomFeeder - don't handle all encodings equally. This is a limitation I mean to address, but unfortunately, I'm not personally that knowledgeable about the issues. However, this next part I disagree with, a lot:
While developing the feed and testing different readers I thought about the whole idea and I think I have reached a personal conclusion. I think I don't want to use an RSS reader. I want to choose when to go a website to find if there is new content. I want to make my own decisions on when to go to a web site.
The fact that a technology is possible doesn't mean it's a good idea to use it. I don't want do be more distracted than I already am.
A reader is a tool - nothing more, nothing less. When I don't want to be distracted by news feeds, I either ignore it, or mark everything read. It's not as if the reader forces me to visit a site - it merely tells me that content i have previously expressed an interest in has been updated. IMHO, this is a good thing - certainly better than wondering if there's good stuff I might have missed, and having to plow through a bunch of favorite links to figure it out...
There was another silly typo (my fault) in the download area for NC - two of us went over the information, and we worked off of different iterations of the file - so we ended up having links to non-existant files in the ObjectStudio downloads. so if you tried downloading OS NC or EVOL in the last week, go back and get them now; it's been updated. I posted the text below to comp.lang.smalltalk to explain the problem:
(re, where are the download files for OS?)
No it's there, but we got snagged by a typo. A week ago, I went through the file that drives the downloads and fixed up filenames that had changed from the last release to this one. Then, one of our tech writers cleaned up the text, but he worked off an old version of the file, and I didn't recheck.
It's fixed - the ftp and http refs will now go to the right filenames. My apologies
First off, I had to take my daughter to the dentist - but no, the car wouldn't start. One jump later, I was off. The battery was shot, so it was off to Sears for a new Die Hard. back home, take my daughter to dance class. Then back home, and my wife has had a conniption because we have ants in the house. It gets worse, because I couldn't hop right up - I was on a conference call. It's definitely been one of those days...
Over on the C2 Wiki. Here's a little bit of the conversation:
Static typing adds to the complexity of the programming language. When you define a new language, do you want to focus your effort on the type system or on giving the programmer the functionality he needs? (Sometimes a static type system makes a langugae harder to extend, as Java and generic classes.)
It can help with refactoring:
- As someone who has only become enlightened recently (and still immersed in a statically-typed world), I cannot be too entirely specific. I have noticed that I waste a lot of time when refactoring fiddling with the types of things. I'm a greenhorn at this, and would be overjoyed to see this comment replaced with some more solid answers.
This is more about the lack of static typing, not the addition of dynamic typing. A lack of static typing can help you to refactor incorrectly! Suppose your refactored design requires something as simple as an extra method in one interface. Without static typing, you would modify each instance of client code so that it called the new method. You would then need to modify each object that might be used by that client. Which objects are they? Oh dear... With static typing, add the new method to the interface. All implementors will not compile until you've provided them with an implementation of the new method. It's that easy!
But UnitTests, if used, will also catch the (generally small number of) problems that static compilation will catch, in addition to catching logic and other errors. My experience with a DynamicTyping language (Smalltalk) is that a very small percentage of run-time errors are due to mismatched types... maybe 1 or 2%.
There's lots more to read - go read the whole thing. Comments, assertions, and reasoned arguments from advocates of both sides.
We spent quite awhile sealing cracks that the ants might be coming through. That pretty much blew the morning, along with a conference call that I could only partially pay attention to (due to the ant stuff). Maybe this afternoon, but I'm not feeling terribly ambitious at the moment....
I'm with Bill Kearney on this one - I don't want full web page content in my RSS feeds. This is why I don't really care much for this trend to XHTML either. I don't want graphics, or lots of pictures (etc.) in an RSS feed. If I'm reading your feed, it's because I like your writing. Give me a link to a picture you think is interesting, and I'll follow it.
Bottom line - I read feeds for the same reason I read books - to learn something, to be entertained - to be part of a conversation. My web browser is right here if I want the full experience of your website - don't force it on me in your RSS feed - that's not why I read it....
Alan Knight posted this in comp.lang.smalltalk:
A comment from another poster:I find writing EJBs to be extraordinarily tedious (as with Java in general), but haven't noticed any serious impediments to development.
Well, some might consider being extraordinarily tedious (and thus slow) to be an impediment to development :-)
As Niall pointed out, there are slides on the web where I covered some of these things in moderate detail. For the high-level view:
- I don't think the domain objects as components view of entity beans is a particularly good thing to try and accomplish. You throw away basic OO concepts like inheritance and polymorphism and don't get much in return.
- You lose testability. You can't test an EJB outside of deploying to its container. This is why, if you look at EJB usage patterns from people concerned about agility, they typically recommend against them. e.g. Martin Fowler's typical pattern is paraphrasable as: Don't use entity beans. You can use session beans, but they should act purely as a facade to an ordinary object with exactly the same API
- I don't buy into the model that the world is divided up into authors, assemblers, deployers, and whatever the fourth one is, especially at the fine-grained level that entity beans imply. You end up doing much more work to deploy a simple object (thus the tedium). You get to write multiple XML descriptors, totally more bytes than your actual object, just to make it work.
- The programming model is both limiting and bizarre. So, e.g. the prohibition on "loopback" forbids any sophisticated object programming techniques like recursion, double-dispatch, or even complex graphs of objects. The "enforcement" of relationships, where setting a value in one place can result in nilling it out in another is a wonderful example of the principle of most astonishment.
- The persistence model is very constraining, and not very powerful. I'll admit I'm fussy about persistence models, but IMHO this one is particularly bad. Compare what you can do with an object database, one of the JDO-relational mappings, or a tool like TOPLink, with what EJB constrains you to. EJB 1.X at least had huge holes in the spec where you could do something useful. EJB 2.0 plugged the holes, but not with anything useful.
- Performance is bad. You're adding multiple layers of code-generated stuff and remote calls onto every operation. We had people measuring performance hundreds of times worse between regular Java objects and EJBs doing the same thing.
I could expand on these, although I might have to start consulting notes if things get very technically detailed. It's been a while.
Heh. The principle of most astonishment. I'll have to remember that one...