news
November 27, 2004 2:02:39.643
Ben Hammersley notes that real estate agents are about to get disintermediated:
Real-estate agents have been on the endangered-profession list for a while (thanks, Internet and 2% brokers), but Home Depot may make them extinct. In seven southern states, the DIY store will be testing home-selling kits aimed at the growing for-sale-by-owner market. For $12.95, you get a sign to put in your yard, but more important, you get a listing and photos on Owners.com, which claims to be the largest for-sale-by-owner site, with 5 million customers. The site has an answering service that fields calls from prospective buyers, eliminating the rĂ´le of agents and their 6% commissions. If the test goes over well, Home Depot plans to offer it nationally. And loud blazers will be seen only at country clubs.
Couldn't happen to a nicer bunch of value subtracting people...
Share
spam
November 27, 2004 12:47:21.615
I just discovered that I had about 10 old posts that had comment spam. These posts were ones that had been cross linked (like this one) and showed up in some relatively common Google searches. The reason I missed them was simple - they were all posts that had fallen out of my RSS feed, so I never noticed. The new spam filtering I've added should prevent this problem going forward; it's already nabbed one attempt to hit a post that had aged out of RSS.
Share
development
November 27, 2004 14:37:09.849
Lambda the Ultimate links to another IDE post. This is another one of those areas where non-Smalltalkers and Smalltalkers tend to talk right past each other. If you are using Java, you can code in Eclipse, or IntelliJ - or Notepad. If you use Smalltalk, it's simply not like that. With Smalltalk, the IDE is the language for all intents and purposes. What you are doing as a Smalltalker is akin to the old saw about sculpting a statue - you remove everything that doesn't look like a statue, and then you're done. The dilemma pointed out in the linked article doesn't really exist for the Smalltalk developer (as noted in the comments at the end). Need something added to Smalltalk? Why go ahead - extend the language and/or the base classes.
Share
BottomFeeder
November 27, 2004 19:04:24.355
Awhile back Bob mentioned some scraping tools he created for use with BottomFeeder. I decided to have a look at them today, because I decided that I'd like to have a subscription to User Friendly. I loaded Bob's code (Simple Script Runner from the public Store) and had a look. I decided that it would be more useful if it had some SAX drivers attached, so I created a new bundle - RSSScriptRunner - that included a few. I'm planning to enhance this little package some, but in the meantime the following script produces a valid feed with today's User Friendly comic in my local Bf directory:
| writer content str rest out |
contentBlock := [:builder :chunk |
| stream |
stream := ReadStream on: chunk.
stream throughAll: 'SRC="'.
builder link: (stream upTo: $").
builder title: 'User Friendly For: ', Date today printString.
builder description: '<a href="', chunk.
builder pubDate: Timestamp now].
out := 'userFriendly.xml' asFilename writeStream.
writer := RSS20_SAXWriter new output: out.
writer prolog.
writer startRSS.
writer startChannel.
writer title: 'User Friendly Feed'.
writer link: 'http://www.userfriendly.org/'.
writer description: 'User Friendly Feed'.
writer pubDate: Timestamp now.
writer startItem.
writer title: 'User Friendly For: ', Date today printString.
content := 'http://www.userfriendly.org/' asURI valueStream contents.
str := content readStream.
str throughAll: 'CARTOON FOR'.
str upToAll: 'href="'.
rest := str throughAll: '</A>'.
contentBlock value: writer value: rest.
writer endItem.
writer endChannel.
writer endRSS.
out close.
Works like a charm
Share
cst
November 28, 2004 10:37:59.271
One of the things I get asked about a lot is how VisualWorks developers should proceed with GUI plans - Pollock is coming (usable beta next year, full support in 2006) - see the roadmap. I realize that full production on this is a ways out, and that our user community has real work to do in the meantime. Here are a few tips on how to proceed:
- Read Sames' blog. Sames is posting on Pollock development regularly - it's your best way to get information on what's happening - and your best way to provide early feedback
- Join vw-dev. This will give you early access to developing code, as well as access to our developer forum
- Use the current GUI tools - but prepare for the future:
- Separate your UI code from your domain logic
- Use trigger events instead of dependency. This is covered in the documentation
- If you customize the Cincom UI frameworks, make sure that you keep that code in a separate package that is easily identifiable
When Pollock ships in full production, we'll have migration tools available - and the more closely you've hewn to the UI steps outlined above, the easier it will be to migrate.
Share
events
November 28, 2004 11:05:17.523
Share
books
November 28, 2004 15:33:11.933
I've taken to reading about the first world war lately - my grandfather (mother's side) fought in it after having come to America from Sweden. I recommend this one on the immediate background to the war - Europe's Last Summer. It focuses on the summer leading up to the war, when no one in Europe expected anything to happen. It's a fascinating look at how the continent slid into a catastrophic war. I read that last summer - right now, I'm reading two books that qualify as "oral history" of the war: Eleventh Month, Eleventh Hour, Eleventh Day - it's a view on the end of the war through the eyes of people who were there. It traces back through a number of people's war experience, ending with how they got through (or didn't get through) that last day. Amazingly enough, the allies were launching attacks right through 10:30 AM that day - my grandfather was nearly sent on a suicidal attack that morning himself. Finally, I'm also reading Forgotten Voices of the Great War. It comes out of a British project started in 1972, where recollections of veterans were recorded. It's truly fascinating, from the near ecstasy some of them felt when the war started, straight on to their disillusionment and horror at the front later on. You'll need a strong stomach to read this last book; a lot of the recollections are very, very raw.
I can't pretend that these books give me anything more than a (very) vicarious understanding of what my grandfather experienced, but it's interesting nevertheless. The first world war is the tragedy that created the rest of the 20th century - and the echos are still reverberating through our world now.
Share
BottomFeeder
November 28, 2004 20:19:54.718
If you've downloaded a dev build of BottomFeeder recently, you'll want to replace it - just grab the appropriate one of these three files:
Just replace the file you have in the install with the one you downloaded and restart. You can also delete any files sitting in the 'app' directory. Why do you need this? There was a problem with the loader that prevented any updates from loading. That's fixed now, but you need the new build.
Share
blog
November 28, 2004 20:48:13.569
I have to agree with Tim Bray here - the benefits of corporate blogging far, far outweigh any negatives you might think of. I've been running the Cincom Smalltalk blogs for over 2 years now; the community of bloggers has grown, and we're getting a lot of positive notice - notice that I don't think we could have gotten any other way. Here's how Tim puts it:
Despite all that, [corporate blogging obstacles] I think this is going to start happening, and the reasons are obvious. Today, in late 2004, there are exactly two companies in the world where blogging has gone wide-open: Sun and Microsoft. At both places, the impact has been overwhelmingly positive. Neither of us would consider going back for a second.
The existence of the Sun and Microsoft blogs is, every day, making our competitors' lives a little harder. This kind of competitive advantage generally just doesn't go unanswered; we are after all living in a free-enterprise system.
Most CEOs, and all good CEOs, are very outward-facing. They see what's going on, and they don't sit tight and let competitors maintain a competitive advantage. Especially when setting up enterprise blogging is easy and cheap.
Share
news
November 29, 2004 7:42:44.169
This spoiled my breakfast, so I felt compelled to share. Here's a story about a soda company desperately in need of a cluestick. I mean really - mashed potato flavored soda? Gah...
Jones Soda Co. takes the idea of a liquid diet to a new low. How does Green Bean Casserole Soda strike you? And how about an aggressively buttery-smelling Mashed Potato Soda?
Even the creators of the fizzy concoctions at this small Seattle soda company can hardly stomach the stuff. But last year's unexpected success of the Turkey & Gravy Soda means another round of bizarre food-flavored soft drinks. As an added bonus they're calorie-free.
This week Jones Soda Co. launches a full meal deal of five Thanksgiving soda flavors, from the bile-colored Green Bean Casserole to the sweet but slightly sickly Fruitcake Soda. Last year's Turkey & Gravy is also back on the menu.
Share
humor
November 29, 2004 8:23:49.630
Hacking a website isn't something I support - but I've got to admit, the SCO Page is amusing this morning. Look at what the woman in the background is writing, for instance. If they've fixed the site by the time you read this, I saved a copy of the image here. It's in place of the "webinar" banner image.
Share
BottomFeeder
November 29, 2004 12:10:38.244
I've been twiddling with the scraping plugin this weekend and this morning - I'm not ready to release it yet, since it's a bit "rough" around the edges. I thought I'd post another example of a scraping script - this one more complicated. I'm something of a political junkie, so I enjoy reading sites like Tapped and The Corner. As it happens, Tapped has a feed, but the Corner doesn't. The script for scraping that to a local RSS file is more involved than the one I posted the other day:
| writer content str rest out contentBlock today yesterday itemBlock todayString yesterdayString|
authorBlock := [:chunk |
| authorStream all |
authorStream := chunk readStream.
all := authorStream through: $>.
authorStream atEnd
ifTrue: [all copyWithout: $]]
ifFalse: [authorStream upTo: $<]].
itemBlock := [:builder :chunk |
| itemContent time timestamp itemStream descStream author lnk|
itemStream := chunk readStream.
itemStream through: $".
itemStream throughAll: '<b>'.
builder title: (itemStream upTo: $<).
itemStream through: $[.
author := authorBlock value: (itemStream upTo: $]).
builder author: author.
itemContent := itemStream upToAll: ''.
descStream := WriteStream on: (String new: 1000).
descStream nextPutAll: '<p><b>Posted by: ', author, '</b></p>'.
descStream nextPutAll: ((itemContent trimBlanks) copyWithout: Character lf).
builder description: descStream contents.
itemStream throughAll: 'Posted at'.
itemStream through: $".
lnk := (itemStream upTo: $") trimBlanks.
builder link: lnk.
itemStream through: $>.
time := [Time readFrom: (itemStream upTo: $<) readStream]
on: Error
do: [:ex | Time now].
timestamp := Timestamp fromDate: Date today andTime: time.
builder pubDate: timestamp].
contentBlock := [:builder :chunk |
| stream |
stream := ReadStream on: chunk.
[stream atEnd]
whileFalse: [ | itemChunk |
builder startItem.
itemChunk := stream throughAll: '<a name'.
itemBlock value: builder value: itemChunk.
builder endItem]].
out := 'nro.xml' asFilename writeStream.
writer := RSSSax.RSS20_SAXWriter new output: out.
writer prolog.
writer startRSS.
writer startChannel.
writer title: 'NRO Corner Feed'.
writer link: 'http://www.nationalreview.com/thecorner/corner.asp'.
writer description: 'NRO Corner Feed'.
writer pubDate: Timestamp now.
content := 'http://www.nationalreview.com/thecorner/corner.asp' asURI valueStream contents.
str := content readStream.
today := Date today.
yesterday := today subtractDays: 1.
todayString := today monthName asString, ' ', today dayOfMonth printString.
yesterdayString := yesterday monthName asString, ' ', yesterday dayOfMonth printString.
str throughAll: todayString.
str throughAll: '<a name'.
rest := str upToAll: yesterdayString.
contentBlock value: writer value: rest.
writer endChannel.
writer endRSS.
out close.
The interesting thing about this is how it looks more like procedural code with functions than it does like OO code. I could define classes and then execute methods in them, but that starts getting verbose in a script. Instead, I defined three blocks that handle the complex parts of the parsing (stripping email hrefs in the author block, for instance). The upshot of all this is that I ended up with a nice feed, with full content. The Tapped feed is one of those partial content deals; I may end up creating a script that scrapes that as well.
Once I get the script tool a little more polished, I'll push it out as a normal update. If you would like to play with it now, it's in the public store, bundle RSSScriptRunner
Share
development
November 29, 2004 19:02:43.178
Next time you worry about the fact that your code has insufficient levels of comments, read this from Bob Congdon. It may not fix anything, but at least you'll know that you have plenty of company out there :)
Share
news
November 29, 2004 19:05:36.035
Via Windley's comes word of the KSL Radio news blog. Very cool - reporters thoughts on story prep, stories they've done, etc. - IMHO, this is exactly what we need from the news guys - more introspection.
Share
spam
November 29, 2004 21:17:29.268
I have no idea who the wiki spammer is, but here are some of the slimy companies that he promotes - all I can say is, avoid doing business with these clowns - they advertise via spam:
- http://www.online-ccc.com/ - some kind of international consulting firm out of China. I suggest avoiding them.
- http://www.bochao.com.cn/cad.htm - some kind of software company, selling CAD stuff. Slime
- http://www.antu.com.cn/fme_jjie.htm - looks like a consulting firm. Again, slime - avoid them like the plague.
There you go losers - hope you enjoy the publicity. So long, and I hope you go out of business.
Share
law
November 29, 2004 23:21:20.576
You have to love what Sun is doing to Ted Neward. He's been a pretty tireless advocate of Java over the years, and Sun is after him (and gosh knows who else) for trademark infringement. Someone needs to beat these people with a cluestick :)
Share
development
November 30, 2004 8:07:11.626
Greg Reinacker has a post up detailing some of the requirements he has for new employees. The post is actually a short explanation of nearly everything that's wrong with IT hiring (and by extension, development). Go ahead and look at his list - do you see a description of the problem domain anywhere ? Nope, just a set of Windows (and C++) specific technical jargon you have to hurdle to get past the bar. One thing I've learned over the years is that domain specific knowledge is far, far more valuable than technical trivia - if you hire a competent person, the technical stuff can be learned pretty quickly. Hiring managers unwittingly eliminate a lot of great potential hires by making lists like Greg's.
Share
movies
November 30, 2004 9:49:51.848
Slashdot is reporting that a trailer is up for the ROTK Extended edition. Apparently, 50 additional minutes of footage are coming in. I know what I want for Christmas :)
Share
spam
November 30, 2004 10:34:21.300
Ryan Lowe is talking about comment spam issues. I've got a far simpler solution in place on this blog server, and it seems to be working. Now right off, I don't get hit a lot - I'm not running one of the common blog servers, so all my http api's are different. That helps enormously. I've been surprised that the wfw:comments api hasn't been abused more, but what do I know? In any case, what's the thing about most comment spam? Lots (and lots) of links. I simply scan all inbound comments, and archive off (without posting) any comments that have "too many" hrefs (never mind how many that is :) ). It's simple, but effective.
Share
BottomFeeder
November 30, 2004 11:34:49.671
I've mentioned the plugin that lets you write scraping scripts a few times recently - I've just posted a wiki page that goes through the basics - and links to a few example scripts. The main change to the script tools since Bob did the initial work is the integration of a few SAX drivers. If you look at the example scripts, you'll see that having the SAX drivers makes it a lot easier to produce scripts. If you can get at the source of a web page, know a little bit about Smalltalk streams, and can follow the examples, you should be able to produce scripts. I'd suggest creating them in the development environment - all you really need for that is the script tool and vwnc - you don't need to create a BottomFeeder development image to play with this stuff
Share
development
November 30, 2004 15:23:40.136
Sriram Krishnan calls it "The Tyranny of the Geeks"; you could also call it the triumph of the overly anal retentive. Sriram has some good, solid points in the linked post - I especially liked his takes on edit and continue, dynamic languages, and RSS aggregators. Go have a look.
Share
BottomFeeder
December 1, 2004 7:54:25.979
d2r links to Don Park's post about finding conversations. As it happens, BottomFeeder already does that. There's an option in settings (Do Item Cross-referencing) - if you turn that on, then items you subscribe to that are referenced elsewhere in your subscribed content will get flagged. I did that about a year ago, I think - it was a user request.
Share
development
December 1, 2004 8:43:52.610
Ziggy makes some comments about version control, and exhibits some odd ideas about Smalltalk in the process. His prime objection makes some sense - "everyone" else uses file based systems (like CVS) for version control, and Smalltalk's failure to "get with the program" holds it back. There's some truth to that - but there are also some very good reasons why most Smalltalk systems don't fall back to CVS style systems.
It's not that it can't be done, or hasn't been done - VSE used PVCS as a backend (even though it hid it pretty well). ObjectStudio users tend to use SourceSafe or other Windows version control systems. The real disconnect comes with systems like VisualWorks, Squeak, or VisualAge Smalltalk - all classic image-based Smalltalk systems. Avi explains the issues well here:
The thing is, when you move away from code and into arbitrary data files, most of the useful features of *any* version control system go away. How well does the darcs theory of patches work on images? Can CVS insert its conflict markers into a Word file? And how many times do you need to cherry pick changes from a patch someone committed to an obscure branch of that project timeline? The most you usually need or are able to do is to associate a specific revision of a binary file with a specific version of the code, and it would be trivial to extend Monticello [VCS Avi has worked on] to do that if the need came up
Here's the commentary that I wondered about in Ziggy's post:
Smalltalk, on the other hand, doesn't integrate well with the version control systems we have all grown to love (or at least tolerate). Avi Bryant points out that these problems don't really surface for Smalltalk developers, because the Smalltalk VM can keep track of every change, and tag each change with more metadata than SCM tools can possibly capture.
Sorry, but I don't buy it. I call this "Smalltalk Disease" -- the arrogant tendency for Smalltalkers to dismiss a problem because they can mutate a Smalltalk image to nearly eliminate it. (And, if they haven't done it themselves, or the necessary features aren't present in your VM, then at least someone has done elsewhere, presumably in some production environment.)
OK. So you can upgrade your VM to handle versioning and merging of Smalltalk methods. Fine.
What happens when you want to version something else, like, data files, documents, or images? I guess CVS/Subversion/darcs/etc. aren't so useless after all....
Hmm - it's not a VM level thing - the code and parse trees are all available at the Smalltalk level - which is a large part of what makes them easy to deal with. The common Smalltalk VCS systems - ENVY, Store, Monticello - all deal with code artifacts at that level, and use some kind of back end (typically a database, although Monticello supports multiple back ends) to store source code. One could posit a CVS style back end, and I've seen it done - our partner Heeg has plugged in such systems for customers on a consulting basis. As to external artifacts? As Avi says, it's not that big a deal to extend that way, and - in fact - VW 7.3 (which will be released very soon) can handle external artifacts. It's become a big deal because of things like the Web Toolkit, where there are ssp files (and image files, etc) that make up part of the "whole system".
There are issues with the various Smalltalk VCS systems - ENVY doesn't handle merges well, Store has had problems with the nature of its db schema - and, as Avi mentioned in his post, Monticello is not perfect either. The point is, the various file based systems aren't perfect either, and they simply don't mesh well with image-based development.
Update: Colin Putney comments here, and Patrick Logan has some thoughts here. Ziggy makes follow up points over here
Share
general
December 1, 2004 10:02:33.366
All I need now is Pooh flying Piglet as a kite. The wind is really blowing this morning - I just chased my trash cans down the street.
Share
events
December 1, 2004 10:05:44.780
Share
development
December 1, 2004 10:49:54.352
While explaining why he blogs, Dave Winer explains something interesting about product development:
When I started blogging it was mostly to get a bunch of stuff off my plate, ideas I couldn't do anything with, things I wanted even if I couldn't create them. I hoped other people would read this stuff and someone would create what I wanted, and therefore increase happiness. Over the years I learned that this very rarely happens. People really want to come up with the ideas, even more than they want to be successful.
This sort of thing is very noticeable in open source projects - the developers will work on what interests them, regardless of what kinds of polish might be required to "finish" the product. This befalls commercial products as well; it's quite common to run across areas of a product that fall victim to the "80% rule" - 80% (the interesting aspects) of some feature get built, while the remaining 20% of "spit and polish" never happen - because it's considered uninteresting by the developers.
I've come to the conclusion that only a real user base motivates people to "finish" products. And even with a real user base, the less income that is tied to the work, the less likely it is to ever get done...
Share
BottomFeeder
December 1, 2004 12:04:09.842
It's not for everyone, but I've been weeding out some of the partial content feeds - the ones that I would like to read, but tend to blitz by due to the teaser content. I've now got 4 scripts that create local full content feeds in order to replace the partial content feeds provided by the authors. I suppose this isn't the sort of thing that makes them happy; after all, it means that I'll be completely avoiding their html page (and thus, their sponsors). On the other hand, it's making my reading experience much more pleasant. If you're interested, see this wiki page for details and a short example script.
Share
smalltalk
December 2, 2004 8:09:40.787
Darren Oakey makes a common mistake when discussing typing:
He's got a reasonably good technique - every function has a test that passes nulls to it - so very quickly you understand how your app deals with nulls. However, I'm not sure I'm buying in. This is like the smalltalk type arguments on weak typing compared to strong typing. Sure, we can rely on tests to ensure the robustness of the code - but there's a lot in me that says that's not the answer - I'd rather rely on the compiler if I can!
One problem - Smalltalk is not weakly typed. It's just not manifestly typed. C is manifestly typed and weakly typed.
Share
marketing
December 2, 2004 8:29:08.717
Now here's some honest marketing for you - Scoble explains why he's not moving to MSN Spaces. Microsoft pushed out an announcement on their new blogging service (competing with Google) last night. Here's my biggest question on this sort of thing - MS and Google are supporting free blog hosting "for the masses" now. What's the revenue model here? Advertising I suppose... but on low volume blogs (which most are) - is that enough? Here's another thought - what's the upside for MS and Google in giving away space and bandwidth? What am I more likely to buy from them as a result? Just curious.
Share
smalltalk
December 2, 2004 9:14:32.983
Here's an online video showcasing Self. Interesting, and illustrates the benefits of dynamic systems nicely
Share
BottomFeeder
December 2, 2004 13:25:27.660
I've uploaded a new development build of BottomFeeder - all the changes are also available via the normal upgrade route (assuming you look at the dev stream). What's the change? Michael Lucas-Smith let me know about a change that would make the html display faster - they haven't turned it on ay SwS because it's not yet compatible with the editing of XML that they are concentrating on. For my purposes in BottomFeeder, that's irrelevant though. Have a look - you should see much better responsiveness
Share
development
December 2, 2004 15:37:02.509
I guess Dave doesn't realize how many huge sites run on things like PHP, Perl and Smalltalk:
I've been getting lots of mail about the programming project described below. My challenge will be to try to organize the energy to actually create the needed software. People ask if C# or Java would be okay, and the answer is, of course. I basically meant "compiled code" as opposed to interpreted code. Static instead of dynamic. We have to cut to the metal. I also need to write up a spec that explains what the software does. Anyway, let's give it a couple of days to gestate. In the meantime you might start writing code. ";->"
Share
marketing
December 2, 2004 19:23:01.583
I see that Sony - a company I usually think of as "getting" marketing - has come down firmly on the side of stupidity. While Ken Jennings was racking up victories on Jeopardy, lots of people were getting interested. It seems that Jason Kottke was just generating too much postive interest for the legal beagles at Sony. Apparently, he posted some spoilers for the last show, and Sony went all medieval on him. Interestingly enough, the Washington Post did the same thing, and Sony didn't so much as mumble. I guess only the small targets without big lawyers matter. I'm far less enthusiastic about the PlayStation 2 than I was a few hours ago. Good job, Sony legal. That sound you're hearing is a prospect sauntering off.
Share
smalltalk
December 2, 2004 22:25:52.620
Colin Putney has a good roundup on how Smalltalk is evolving.
Share
events
December 3, 2004 7:22:34.321
Share
itNews
December 3, 2004 7:38:13.953
Looks like IBM wants out of the PC business:
IBM, whose first PC in 1981 moved personal computing out of the hobby shop and into the corporate and consumer mainstream, has put the business up for sale, people close to the negotiations said Thursday.
While IBM long ago ceded the lead in the personal computer market to Dell and Hewlett-Packard so it could focus instead on the more lucrative corporate server and computer services business, a sale would nonetheless bring the end of an era in an industry that it helped invent. The sale, likely to be in the $1 billion to $2 billion range, is expected to include the entire range of desktop, laptop and notebook computers made by IBM.
Things get bought and sold between businesses all the time (think Lexmark) - but I have to wonder about one thing - what does this mean for the Thinkpad line? I've used a lot of laptops over the years, and the Thinkpad has been one of the nicest I've seen.
Share
security
December 3, 2004 7:54:07.853
Yeah, this sounds like a plan:
The way the Internet was built might be part of the problem, he said. Its open architecture allows Web surfing, but that openness makes the system vulnerable, Mr. Tenet said.
Access to networks like the World Wide Web might need to be limited to those who can show they take security seriously, he said.
Mr. Tenet called for industry to lead the way by "establishing and enforcing" security standards. Products need to be delivered to government and private-sector customers "with a new level of security and risk management already built in."
Hmm - will someone let Mr. Tenet know that the net isn't solely a US thing? Could someone else explain why a decentralized system is inherently more secure than the centrally monitored system he sounds like he'd prefer? Sheesh.
Share
BottomFeeder
December 3, 2004 8:18:28.281
The script tool has made it easier for me to follow a bunch of comics that I like - I can easily scrape any of the feeds on the comics.com site into a local RSS file that I can subscribe to. Here's the script I use:
contentBlock := [:builder :chunk |
| lnk |
lnk := 'http://www.comics.com', chunk.
builder link: lnk.
builder title: 'Monty: ', Date today printString.
builder description: '<img src="', lnk, '">'.
builder pubDate: Timestamp now].
out := 'monty.xml' asFilename writeStream.
writer := RSS20_SAXWriter new output: out.
writer prolog.
writer startRSS.
writer startChannel.
writer title: 'For Better, For Worse'.
writer link: 'http://www.comics.com/comics/monty/index.html'.
writer description: 'Monty'.
writer pubDate: Timestamp now.
writer startItem.
writer title: 'Monty: ', Date today printString.
content := 'http://www.comics.com/comics/monty/index.html' asURI valueStream contents.
str := content readStream.
str throughAll: '<IMG SRC="/comics/monty'.
str upToAll: '<IMG SRC="/comics/monty'.
str throughAll: 'IMG SRC="'.
rest := str upToAll: '"'.
contentBlock value: writer value: rest.
writer endItem.
writer endChannel.
writer endRSS.
out close.
That script works for any of the comics on that site; all you have to do is change the titles and urls. I'm now subscribing to a bunch of the things there.
Share
examples
December 3, 2004 9:51:18.662
A common need in any application is Windows that cooperate - child windows that close when their parent closes, etc. It turns out that it's pretty easy to set that up in VisualWorks - I've needed it in BottomFeeder, and I'm sure that most Cincom Smalltalk developers need this capability at some point. So how do you do it? Let's start with the 'main application window' - add this to the #postBuildWithMethod:
postBuildWith: bldr
super postBuildWith: bldr.
bldr window
application: self;
beMaster.
That sets the 'main application' window up as a master - child windows will receive most of the same window events and follow them. Now you need to set up the child window. Let's say that it opens up from some method in the main application:
openSomeTool
| tool |
tool := SomeTool new.
toolBuilder := tool allButOpenInterface: #windowSpec.
toolBuilder
window application: self;
beSlave.
tool finallyOpen.
What's going on here is that you are registering a specific window as the 'master', and another as the 'slave' - which means that a set of events received by the master window will be passed along. If you want events passed equally, then use #bePartner to all involved windows.
It turns out that you can customize the set of events you care about - a quick look at #beMaster and #beSlave in class ApplicationModel shows this:
beMaster
"Send windowState events to other ApplicationWindows that have the same
application as us. Effectively the dual of beSlave."
self sendWindowEvents: #(#close #collapse #expand ); receiveWindowEvents: #(#expand )
beSlave
"Receive windowState events from some other ApplicationWindow that has the
same application as us. Effectively the dual of beMaster."
self receiveWindowEvents: #(#close #collapse #expand ); sendWindowEvents: #(#expand )
You could easily add your own custom versions of #beMaster and #beSlave - and either expand or contract the list of window events. You can also use #sendWindowEvents: and #receiveWindowEvents: to tailor the event stream. It's all pretty easy to manage.
Share
humor
December 3, 2004 11:04:12.942
Why do some languages catch on while others don't? It's all about facial hair. I guess Alan Kay needed a beard, or a bigger mustache...
Share
cst
December 3, 2004 11:16:03.408
Rich is blogging again, and has an update on Smalltalk Doc. It is in preview for VW 7.3 (which will be out any build now :) ). It's not so much that ST Doc is "not a priority" as Rich says; it's more that it's one of many priorities we have. So many priorities, so little time...
Share
java
December 3, 2004 21:52:36.373
Binkley says that you can do hot (runtime) patching in Java now - from this article we get the following:
But ah-hah! We do, we can use a different implementation of FunctionTable which stores the method body as a String in Derby and uses BeanShell (or Janino!) to invoke it. So a method invocation is completely configurable at runtime! Not deploy time, runtime. If you find a bug, you can fix it without a redeploy.
Uh, yeah. Go read the whole post to see just how simple it really is. meanwhile, all I have to do in Smalltalk is load in a new version of my code, and I'm done.
Share
smalltalk
December 4, 2004 0:15:47.674
Mark Derricutt extolls the virtues of full closures - and his post gets picked up by Sys-Con, an online Java 'zine.
Share
development
December 4, 2004 9:34:05.621
Strongly Typed misconstrues the terms again:
WOW! There's quite a discussion going on regarding Stongly-Typed languages and Dynamic Languages.
A common point that I see in the discussion is compile time / run time checking. A strongly typed language will do type checking at compile time and reduce run time errors. Because of that dynamic languages will require the programmers to be more responsible.
Strong typing has nothing to do with whether the check is at compile time or runtime. Smalltalk, for instance, is strongly typed - you can't get a type error. If you send a message to an object that doesn't understand it, you'll get a well understood exception. C++ - which I guess is "strongly typed" in Richard's world - forces type declarations up front, but you can, via the wonders of casting, send wholly inappropriate messages to objects and get nice, malformed core dumps. Yep, that's safe. Hmm. Java lets you walk into that same minefield with casting, although the results are far less dangerous (the runtime system deals with them far more gracefully). His example is laughable:
I believe strongly typed languages yield better encapsulated code because requirements are explicitly presented up front. To illustrate this, lets make believe. Let's pretend we have a method called foo:
Public Function Foo()
End Function
All we know about it is that it returns a numeric type. But we only know that because we ran a few tests and made a reasonable assumption. Assuming that it returns a Integer type we go on to code. At some point we end up using the value from Foo in another call:
FooBarProcessing(VarFromFoo)
We run it and everything works great. Days go by and everybody's happy. But unexpectedly, after our code was released, it breaks.
What happened?
After an hour of debugging we find Foo returned a value of 100,000. FooBarProcessing only works with a 2 byte integer. Something we didn't know at compile time. We only found this out because we obtained the original source code and traced it through. So much for encapsulation.
That break isn't due to dynamic typing, but due to a lousy type system - one that every C based language shares, btw - in this case, his "fix" is to declare the variable an int (likely a 32 bit value, but that's an implementation detail left floating around to bite the developer). Now, let's examine that in Smalltalk - where the number would not be constrained to a range (unless there was a domain reason for doing so, in which case we would enforce that via code). In Smalltalk, there is no such thing as overflow for integers. So yeah, this is a typing problem - it's a problem with the typing system that Richard thinks is saving the day.
Share
development
December 4, 2004 11:54:30.154
Peter Williams Lount addresses what Birdman's Land calls OO's Achilles Heel:
"When everyone defines their own objects, then all [Object Oriented programming] does is bog you down trying to convert between two mismatched items."
I don't think this problem is specific to OO at all; it's a general domain level problem that has cropped up in many places (how many people have tried to define a generic "Person" object or data structure, for instance?). Peter's got a long dissertation on that subject; have a look
Share
product management
December 4, 2004 12:11:09.291
One of the things that helps a lot in a product manager's job is knowing what people are saying about your product(s). One way of doing this is face to face communication, and it's usually the best way. Unfortunately, I'm not really able to visit with all of our customers on a regular basis - there are too many of them, and they are too widely scattered (all over the world). We have local people, and they talk to customers (and in turn, to me) - and I visit with various customer groups at shows, conferences, etc. Still, it's not enough - I really need to get more. Enter the BottomFeeder
One of the more useful things I built int Bf is support for the RSS/Atom feeds that various search engines support - you can get results in a feed from:
And many others. I don't use pubsub, because their whole email subscription system was an extra step; call me lazy. It also helps to check Technorati on a regular basis. What I've done is set up search feeds for these engines looking for references to these terms: Cincom, Smalltalk, VisualWorks, ObjectStudio, James Robertson, BottomFeeder. I run across comments made about my company and/or its products pretty darn quick this way; it fills in the gap created by the impossibility of meeting regularly with all customers - not to mention the fact that it finds commentary by potential customers as well.
If you're involved in product promotion or customer relations in any way, you need to be tracking this kind of information. Get yourself an aggregator and start searching!
Share
general
December 4, 2004 15:52:47.682
Blogging Roller explains everything you'll ever need to know about child behavior:
I've got a theory about why kids can make parents so angry. They don't realize it, but kids emulate their parent's verbal and physical mannerisms all the time. As you watch your child you can see bits and pieces of your own personality. They pick up on the little phrases that you repeat. They repeat them too. When your kid starts to fuss or throw a tantrum or otherwise behave like a jackass, he does it in a way that reminds you of yourself, your mannerisms, and your personality. You see your own inner jackass reflected in the actions of your child. Your kid learned how to be a jackass directly from you, it shows, and boy oh boy does that piss you off.
Share
BottomFeeder
December 4, 2004 18:12:01.216
I've gotten a number of questions about how to build a BottomFeeder development image. I've finally got a set of basic instructions up on the site - follow the download links and grab the first download available under the DEV links (scroll down). Here's what you'll need to do first:
When you uncompress the file, you should preserve the directory structure. You may need to adapt the script file based on what you do there. Enjoy!
Share