One of the big things we intend to deal with over the next release cycle is deployment. Right now, it's kind of painful to go from application in development to application in deployment - using RuntimePackager can be pretty complex. We had a talk about this today, and it looks like a solution will appear in preview in 7.3.1. If you look in the packaging directory, you'll see a base.im - which is a first cut at a runtime image, ready to deploy. What we intend to do is simplify deployment down to a straightforward script - you'll toggle some settings, tell the system what parcels should be loaded - and ten point the script at the base image. The script will run, preparing a deployable image (or executable on Windows). This should make it far, far easier to push a product out the door.
"So, we had a problem, and it had a deceptively simple solution. This is exactly the kind of problem Word's Auto Formatter was designed to solve. The fancy name for Word's Auto Formatter is a "rule-based inference engine," which really means that it's like pattern matching on steroids. It takes into consideration the current state of the document, and interprets various keystroke input sequences in terms of a set of rules. It's designed to work very fast, so that users don't notice any effect on typing performance...."
"To summarize these rules, if the insertion point is:
- In an empty paragraph--always inserts a tab character;
- In the middle of a non-empty paragraph--always indents the whole paragraph; and
- In the first line of a paragraph:
- If there are no tab stops set, then indents the first line of the paragraph; or
- If there is a tab stop set, then inserts a tab character.... "
It gets better than that :) I really, really like this:
Personally, I'd like Tab to always be "Tab" and nothing else. Funnily enough, there's a solution for that as well. In order for 'Tab" to always be "Tab", you need to press "Ctrl+Tab". Now *that's* design ;)
I think the whole tool would work better if there was an option to unload the inference engine completely. It works only for short memo writing, and it absolutely sucks for anything more complex. Note to Microsoft - Word is awfully expensive for something suitable only for memos...
Here are some new press releases from our German Smalltalk group - they are all in German:
Here's a question that came up at the planning meeting this morning, and it's one that should properly be addressed to the community. There are a number of items in the "preview" (beta) directory of the VisualWorks distribution. The way we currently run releases, we do the following:
- Major release in the late fall/early winter of the year
- Minor release in the late spring/early summer of the year
In a minor release, we try to address things that skipped the major release, bugs, and preview items. looking at the preview items, here's the list:
- 64-bit engines
- Database\TIGER (connect package for the Cincom database)
- Database\Supra (connect package for the Cincom database)
- Modtracking/ModificationManagement (a framework for dealing with tracking object changes/immutability for things like database operations, particularly OODBs)
- Opentalk/iiop (CORBA related)
- Packaging/base.im (part of the deployment simplification process)
- SmalltalkDoc (new documentation framework, to be integrated with the browsing tools)
- Unicode (display of arbitrary character sets w/o regard to the current locale)
The question I have here is - what do you think? If it was your call, which ones would you be most interested in seeing promoted out to a fully supported set?
Well well - looks like another search site is supporting syndicated searches - MSN. It's very early (alpha) at the moment, but this is good news.
I'm wondering if the VW Wiki at UIUC is a spam casualty. It's been offline all day (I fixed a bunch of spam last night). There's one wiki still up on the UIUC site, the Camp Smalltalk Wiki. Hit Recent Changes and scroll down - see how many pages have been changed recently? That's a Wiki that barely gets any traffic or changes; it's all spam vandalism. It's really getting to the point where a few jerks are ruining it for the whole class.
If you are interested in GLORP, but don't know where to get started - check out Roger Whitney's tutorial:
It was written for students so it may be a bit too detailed for some. It does cover the basics and should help people avoid some of the problems I had learning Glorp from the unit tests.
Jumping into the Wayback machine, we discover that the first Mac rumor involved Smalltalk:
Aug 21 1982, 3:17 am show options
From: RUTG...@sri-unix - Find messages by this author
Date: Sat Aug 21 06:17:06 1982
Local: Sat, Aug 21 1982 6:17 am
Subject: Good rumors
Reply | Reply to Author | Forward | Print | Individual Message | Show original | Report Abuse
From: Ron <FISCHER at RUTGERS>
I have heard from a reliable source that there will be a SmallTalk-80
implementation for the Apple "Lisa." There is however some question
as to whether it will be fast enough. This aside from the problem of
what Xerox will decide to do with SmallTalk as a whole (sell it,
public domain, etc.).
This lends weight to arguments that the "Lisa" will have a fabulous
graphic display. I believe it was mentioned here that it is supposed
to cost about $10k. This is unfortunately becoming a "market price"
for workstations, i.e. personal machine of reasonable power with
Anyone want to expand on the "MacIntosh" rumor, that there will be a
stripped down Lisa built for home use (or at the least be cheaper)?
Please reply to WORKS at RUTGERS also.
Apple chief Steve Jobs announced the Mac mini Tuesday at the Macworld trade show. There are two versions of the mini--both without keyboards, monitors or mice--that will be available starting Jan. 22 for $499 and $599.
No monitor or keyboard, but this is a small price point - seems Apple's not conceding the low end.
Here's a note from Charles Monteiro on the NYC STUG:
Rob Fossella will be speaking about his adventures with XSL and VisualWorks and compare them to a previous implementation of his demo in Java. Also time permitting we will hear stories about his time at Avesta and the various characters he spend time with there.
In February, James Robertson will stop by and give a presentation on VisualWorks 7.3 and Product Roadmap for 2005.
Our meetings are opened to the general public. For more info, please visit:
I'm up early (durn timezone changes) and getting ready for our annual Smaltalk planning meeting. There's been a lively discussion on the vwnc mailing list of late, so I'm going in with some good feedback from the community.
Chris Petrilli points to some hypocrisy at Sun with respect to their upposed championing of Open Source:
The FreeBSD Foundation, funded largely by donations from the devoted community around its open source UNIX operating system, received some bad news shortly before Christmas. Sun Microsystems has announced it is revoking FreeBSD's SCSL license, which permits the project to ship Java support with the OS.
One thing people need to keep in mind is that corporations exist to make money for their shareholders. In that light, Open Source should be seen as a tactic (and a highly successful one at at that) for firms like IBM - they have been making huge piles of service dollars while portraying themselves as "the good guys". The difference between Sun and IBM here is one of marketing acumen; IBM has it, while Sun clearly doesn't. Heck, I consider Microsoft to be refreshingly honest about Open Source - they don't like it, and they don't really make any bones about it. I like that better than the "friend of the people act" I see in IBM's advertising of Linux...
This is very cool - the Library of Congress is putting thousands of Civil War battle maps and diagrams on the net. This is great news for people like me, who are fascinated by that period in American history.
Scoble talks about following conversations through the blogosphere - which is something that technorati is designed to do. As to why you would want to follow conversations this way, I wrote about that here. Scoble puts it this way:
For instance, I Technorati the new General Motors blog and I get to see everyone who links to the GM blog.
Why do that? Well, I find that corporate blogs only give you one side of the story and I wanna find the people who are giving the other side of the story. I also want to figure out if there are blogs on the topics of cars that I should listen to. That's actually how I was reminded about the Autoblog, for instance, which I linked to yesterday.
Thus far, I've found PubSub to be better at this kind of tracking than technorati, but technorati is fast. If you want to track commentary on something, you really have to use a number of tools. Here's what I use:
It's important to find out what people are saying about your product and/or services - a single negative review can spread bad words of mouth in ways that seem to violate the laws of nature - and if you don't notice that, how do you expect to respond to it?
There are already compelling legal uses for file sharing using BitTorrent; for example: distributing Linux ISO images. There is another use that makes all the sense in the world to me: I would watch more network TV if I could watch shows when I wanted. Why don't TV networks submit lower resolution copies WITH COMMERCIALS of their shows as torrents?
The problem is, they don't want to adapt themselves to new technology; they want to outlaw it and maintain the current status quo...
Tim Bray reports that Sun is interested in an oxymoron - binary XML:
There are a lot of people at Sun who are convinced that some sort of binary XML representation is a good idea. I've never been convinced, but they're serious; they've drafted a proposal and are working on getting it standardized; informally it's called the "Fast Infoset" and officially it's "ITU-T Rec. X.891 | ISO/IEC 24824-1". I've been particularly dubious because it's built on ASN.1, which I've had bad experiences with. But those mostly had to do with broken or unavailable software, and that objection may be moot, because as Eduardo Pelegri-Llopart writes, they're shipping an Open Source implementation. Eduardo also tells me they're getting lots of interest from outside of Sun. Hey, as long as whenever someone tells me "I interchange XML" that means they're willing to interchange streams of Unicode characters with angle brackets, I'm OK.
Binary XML... hey, wait a sec - if we wanted efficient data transfer, couldn't we have stayed with, oh I don't know - an existing standard - IIOP maybe? The supposed point of XML is that it's textual. If you're going to lose that, why invent a new protocol? Do the folks at Sun just have way, way too much free time on their hands?
Sam Gentile has a revelation while learning Python - and I think his explanation of his former bias explains a lot of how people talk past each other on dynamic typing:
VBScript, on the other hand, is a weakly typed language because you can concatenate the string '12' and the integer 3 to get the string '123', and then treat that as the integer 123, all without any explicit conversion. Also, unlike VBScript, Python will not allow you to reference a variable that has never been assigned a value. Then it hit me. I have been (naively) biased against late/dynamically bound languages because of the crap that is VBScript. This is coupled with Everything Is An Object. This is the kind of type system that has flexibility but certain safety at the same time and I can deal with that. It may not mean much to others but it unlocks a huge door for me.
For all you gaming geeks out there, the script below scrapes Dork Tower into a local RSS feed:
| writer content str rest out | contentBlock := [:builder :chunk | | stream base link | base := 'http://archive.gamespy.com/comics/dorktower/'. stream := ReadStream on: chunk. link := stream upTo: $". builder link: base, link. builder title: 'Dork Tower For: ', Core.Date today printString. builder description: '<img src="', (base, link), '">'. builder pubDate: Core.Timestamp now]. out := 'dorkTower.xml' asFilename writeStream. [writer := RSS20_SAXWriter new output: out. writer prolog. writer startRSS. writer startChannel. writer title: 'Dork Tower Feed'. writer link: 'http://archive.gamespy.com/comics/dorktower/'. writer description: 'Dork Tower Feed'. writer pubDate: Core.Timestamp now. writer startItem. writer title: 'Dork Tower For: ', Core.Date today printString. content := 'http://archive.gamespy.com/comics/dorktower/' asURI valueStream contents. str := content readStream. str upToAll: 'images/comics'. rest := str throughAll: '>'. contentBlock value: writer value: rest. writer endItem. writer endChannel. writer endRSS] ensure: [out close].
I'm headed to California for a set of product planning meetings this week - I'll be out there from Monday to Thursday. This is our regular post-release meeting - we hold one every year at this time. It's always good to see the entire engineering team in one place, and have face to face discussions. There's been a lot of progress on OST and VW, and we expect to do a lot more - I'll be posting regularly while I'm there - if you have pet peeves to bring up, it would be a good idea to pop into the Smalltalk IRC Channel and let me know.
But, here's what I really want: A Tablet PC on my coffee table that is hooked up via either BlueTooth, WiFi, or infrared to my home entertainment center.
I can't stand choosing programs on my TV. The remote control is just such a bad place for interactivity. A Tablet PC would make so much more sense for choosing shows that you want to record and all that.
Some things that a PC would support very well? Well, Maryam and I travel every two weeks so we need a way to tell our TV -- remotely -- to record shows. Plus I'd love to share recordings with myself when I'm remote and away from the TV. For instance, we were gone for two weeks over Christmas. I would have killed to see West Wing and other shows. My brother-in-law doesn't have a PVR and we were never home during prime time.
And we haven't even gotten into all the futuristic stuff like home-automation systems (I'd like to see a video of everyone who comes to my front door, or be able to turn on and off lights remotely via the Internet). If I have a Media Center hooked up to my TV I'll also be able to move video from my TV onto my SmartPhone (Greg Reinacker, founder of NewsGator, for instance, has the same phone I do and he showed me that he had moved West Wing onto his phone and was able to watch that on the five-hour plane ride across country).
Scoble misses a number of things here, as does Searls. People will happily hook up computers to their TV's - in fact, they already are. What they won't hook up is a PC, or anything that's even vaguely like a PC. TiVos, ReplayTV, the rebranded PVRs being shipped by cable companies? Those are all computers. But unlike a PC, they are single purpose, consumer grade equipment that's easy to use. Do they get infected with viruses? No. If they crash, do you have to intervene? No (yes, I know that you have to call support on occasion. See this post, for example). When people hook something up to their entertainment system, they expect simplicity - plug the cables in, turn it on, and go. The last thing they expect is the madness of the PC. See here for a longer rant on this subject.
Scoble misses something else though - the ease of moving stuff around. He says he wants to be able to move shows from his PVR to his phone. First off, most people won't want to watch TV on a phone. Never mind that though - there's a simpler problem, and part of it is with his boss. The first ReplayTV's that shipped had a feature allowing transmission of content across the internet. It's mostly useless, due to the upstream bandwidth limitations that most of us have - but it was a glimpse of where things could have gone.
No such luck though - the happy folks at the MPAA couldn't pull the sticks out of their posterior lobes fast enough to realize what fair use means, and made sure to shut that avenue down. Now Gates is sucking up to those fools, and making sure that it won't ever be possible unless it's MS equipment all the way down - and even then, the DRM restrictions attached will force you to offer DNA samples into the front of your Media PC before you can do anything - assuming that it hasn't acquired a trojan horse that kills it by then. So Scoble wants a PC attached to his TV so that he can copy content via the net? Go talk to MS' lawyers to see why we can't do that already. If they can break away from their power lunches with the MPAA long enough to be bothered, that is.
The submission deadline for Smalltalk Solutions is in less than two weeks! All submissions should be received by January 15, 2005.
Smalltalk Solutions is a premiere venue for Smalltalk enthusiasts, researchers, and professionals to meet and exchange ideas. We are currently accepting proposals for all varieties of talks involving Smalltalk technology and other areas of interest to Smalltalkers. We're looking forward to an excellent conference, and need your participation to maintain the high technical level of the conference!
This year's conference will take place in Orlando, Florida, June 27-29 2005. Presentations may be in the form of:
- Technical Presentations
- Experience Reports
- Technology Demonstrations
- Half-day Tutorials
In addition to the normal tracks, this years conference will feature a business track-including presentations with a greater emphasis on business than on pure technology.
Proposals should be submitted by email to Alan Knight at firstname.lastname@example.org and should include the following information:
- Contact Information
- Type of Presentation
- Title of Presentation
- Brief Abstract
- Short Biography of the Presenter(s)
- Desired Length
- Any constraints on date/time
- Any other information of importance in evaluating the proposal
Submissions should be received by January 15, 2005. Note that submissions with incomplete information may be rejected - particularly if bio or abstract information is missing.
See you there!
Q: "In recent years, there's been a lot of people clamoring to reform and restrict intellectual-property rights. It started out with just a few people, but now there are a bunch of advocates saying, 'We've got to look at patents, we've got to look at copyrights.' What's driving this, and do you think intellectual-property laws need to be reformed?
A: "No, I'd say that of the world's economies, there's more that believe in intellectual property today than ever. There are fewer communists in the world today than there were. There are some new modern-day sort of communists who want to get rid of the incentive for musicians and moviemakers and software makers under various guises. They don't think that those incentives should exist.
That's throwing a bone over to the RIAA and MPAA folks who want to make the very notion of P2P illegal. Microsoft has an entirely different problem with Open Source, and I think I outlined the shape of that problem here. I guess Gates wants big allies for this fight, and the music/movie industry has lots of dollars to throw around.
There's a scary connect the dots thing here:
"Intel has a new line of chips with DRM built in. This appears to be the very first DRM-enabled chip to hit the streets. This microprocessor is unlike others available, because the user doesn't have complete control over the thing, and your computer can (theoretically) betray you. For a while now, there have been computers (IBM ThinkPad) that won't boot unless you give the password, but you could always rip out the hard drive and read it, right? With this chip, the keys and RAM are on the chip, and the flash is encrypted, so this really looks locked up tight.
That's Hollywood's wet dream right there, and it sounds like Gates is willing to sign on - in order to get allies in his fight against Open Source.
One of the improvements I made in BottomFeeder in the last release was in memory consumption - it's lower now. Why is that? The answer gets into the configuration of ObjectMemory. One of the best things you can do is to read the class side comments in class ObjectMemory. In general, VisualWorks divides memory into 7 "zones" that are managed by the VM. The key for this problem lies in the following definition:
NewSpace is used to house newly created objects. It is composed of three sub-spaces: an object-creation space (Eden) and two SurvivorSpaces. When an object is first created, it is placed in Eden. When Eden starts to fill up (i.e., when the number of used bytes in Eden exceeds the scavenge threshold), the scavenger is invoked and those objects housed in Eden and the occupied SurvivorSpace that are still reachable from the system roots are copied to the unoccupied Survivor Space. Thereafter, those objects that survive each scavenge will be shuffled by the scavenger from the occupied SurvivorSpace to the unoccupied one, until such time that the aggregate size of these survivors threatens to make the scavenge pause excessively long (i.e., when the number of used bytes in SurvivorSpace exceeds the tenure threshold), whereupon the scavenger will attempt to speed up subsequent scavenges by moving some of the older surviving objects from NewSpace to OldSpace. We say that such objects are being 'tenured' to OldSpace.
New objects get created in eden, and then bounced to a survivor space. If the survivor spaces get filled too quickly, then objects get tenured into Old Space. Now, Old Space is the only part of Smalltalk memory that grows at runtime - and in garbage collection terms, the scavenger doesn't look to clean it up unless it's in extremis. So... if you create a lot of objects quickly - and don't have enough new space for them - they get tenured. This tends to grow memory that you really don't need. That's exactly what BottomFeeder was doing.
During the update cycle, here's what happens if a site gets queried:
- Fetch the XML source for the page
- Parse the XML Source into an XML document
- Convert the XML document into a feed object with items
- Process the items against what we already have for that feed, adding any new ones to it
That's repeated for each feed that gets updated. That's a lot of new objects, particularly if you have threaded updates on. In 3.7 and prior releases, New Space was too small - so lots of the transient objects (the XML document, the raw page source, etc) were being tenured as new space filled. With 3.8, I made sure that New Space is bigger. This had a big impact - I subscribe to 295 feeds, and it means that Bf now consumes 25MB less than it used to - and all just by looking at how my application used memory.
There can be big wins here for any application - both in footprint and performance. Have a look at the documentation for class ObjectMemory, and do some experimenting with the method #sizesAtStartup:
It turns out that there was a problem with the 3.8 builds if they were being installed for the first time. I've fixed that bug - so if you downloaded BottomFeeder and couldn't get it working, try grabbing the stuff I just uploaded. My apologies for this error
With the 3.8 release out (and it's a big improvement over 3.7), my attention is turning to futures. The first step is already started; I'm moving development to VisualWorks 7.3. There are few things that will need changing, due to underlying framework changes in VW (the Http libraries and the subscription listener). I've got a development image built, and everything seems to work fine though - I expect to have early development builds out fairly soon. So what's coming?
- On Windows, support for the Tray. Instead of "slim mode" on Windows, you'll see a tray icon. That's more in line with what Windows users expect.
- Unicode support on Mac OS 9, and possibly on OS X.
- Better image support on Linux, if we can get a working rev of gdiPlus integrated
That's the short list; I'll be taking a look at the Wish list for ideas and plans as well.
I posted awhile back on our dishwasher woes; the parts that the tech needed finally arrived today. So it was back to the phone, to see if there would be any way to get a tech in before next Friday. After navigating their truly annoying voice response system yet again, I finally got a real person. Not that it helped a lot; the best I could get was a promise to put me into a "if anyone cancels we'll call you" queue.
Now, I understand that they have other people waiting. On the other hand, the original trouble call was on December 27th, and I told them the next day which parts the tech should have with him. The whole thing is just irksome, and doesn't fill me with warm fuzzies about future Sears purchases. Heck, A goodly part of the reason I bought a GameCube rather than a PlayStation2 was this mess I commented on last month.
This is a lot like what PVRs (TiVo, Replay, etc) are doing to TV. It used to be that you could time-shift (and even skip ads) with the VCR. It took planning - you had to manually program the VCR regularly and swap tapes. After an initial fuss (the Sony case of the early 80s), the media industry decided that this wasn't that big a deal - they could sell/rent videos, and not that many people went through the hassle of setting up a taping schedule. You still got plenty of eyeballs in front of the ads (or at least, you could convince the people buying the ads of that).
The dawn of the PVR changed that. It's trivial to have a PVR pick up your favorite shows for you. I suspect that a lot of people, like my wife and I, watch their favorite shows later the same day simply to enhance the viewing experience. Why watch "Lost" over an hour with 15 minutes of ads when you can start the show 15 minutes in and just blip over all the ads? This is what terrifies the media industry, because it's a threat to the basic economic model of TV. There are things they can do (banner ads during shows, product placement, etc) - but it's a wrenching change they'd rather not make - and you see that in the fight to get ReplayTV to drop the commercial skip feature.
That's what RSS is doing to the web. If you follow bookmarks in a browser, you see all the ads splattered on a site (and possibly all the annoying popups). If you subscribe to their feed, you skip all that and see just the content. Sure, ads can be slipped into a feed - but they are pretty easily ignored there. As well, most aggregators strip out lots of the tags and scripting that advertisers use. That leads to this kind of response, from the first view above:
Sorry for the inconvenience...
..but we have had to change our XML/RSS pages back to excerpts instead of whole entries. Too many of you didn't come to the site at all and it has killed our blogad revenue, despite continued high bandwidth usage. This is a very expensive site to maintain, unfortunately.
I know, I know, I like to read the whole post in bloglines myself. We are truly sorry.
The trouble is, this runs smack into the leading edge usage of RSS that you see posited in the second view:
If you're like me, virtually all of your time is now spent between two inboxes: your email and your RSS feed (which I read with the excellent web-based Bloglines). Indeed, I've pretty much stopped using bookmarks altogether. If I do visit a site, it's usually via a link in my feed and only then if I feel pretty sure the full text there will be worth the trip.
That describes my usage of the web as well. There are very few sites that I like well enough to put up with partial content - I've simply stopped reading a bunch of them. I've also done something else - I've written scripts to scrape the content into a full content feed on my local hard drive for a number of sites that offer only partial content. Now, that's beyond the capabilities of most aggregator users, sure. But the "it's not worth bothering" behavior certainly isn't. Thus the problem for a lot of sites - they need to drive people to their sites to view ads, but their audience would much rather see just the content - just like what PVRs are doing to TV.
Where is this going to go? One thing is for sure - like the betamax case I referred to above, it's a safe bet to assume that we'll see more lawsuits. Based on the behavior I've seen so far, it wouldn't surprise me a bit to see some kind of legal attempt to prevent site scraping...
Here's one of the reasons I find the various attempts to make languages like Java more dynamic amusing - look at the headache David Walend gets trying to do the Java equivalent of this:
someArray := Array with: elementKind1 with: elementKind2 with: elementKind3.
In Smalltalk, we can place any objects we want into a collection - and write tests to ensure that they all support the appropriate protocol. As it happens, I use such collections extensively in BottomFeeder to hold various feed or item like things. In Java, you also have to satisfy the compiler...
This is a rough start, but it's working. There is a link in each item to go to the download of the release. I'll also include a summary of how many passes/failures and errors there are for the release. The body of each release will include the change comments.
The URL for this is http://www.softwarewithstyle.com/developers/developers.rss
You'll be prompted for a username/password when you subscribe, so go ahead and register with them first.
Since just before the New year, the nightly spasm of wiki spam on the UIUC Wiki and on the Cincom Smalltalk Wiki has stopped. I don't know what it means; maybe we outlasted the spammer, maybe my complaints to the abuse address helped, who knows. In the meantime, the spam attempts on the blogs have continued unabated. It's being blocked due to a few measures I've put in - disallowing comments on old posts has prevented a bunch of stuff I might not have noticed.
Blaine comes down as a pragmatist, stating that the most important thing is consistency - either use them or don't, but don't mix and match styles. I have a slightly different perspective, but it's colored by my experience developing BottomFeeder. One of the things I added early was the ability to have the app update itself on the fly. Smalltalk has always been capable of this, so I thought it would be a nice way of tooting that horn. Using direct variable access is problematic if you are going to update an app on the fly. Why?
Well, posit a method foo that directly accesses a variable bar - the older version (i.e, the one being replaced) was written before that variable had been added to the class in question. So I access the variable... and as soon as I try to send a message to it I'm likely to get an exception. When I add a new variable to a class, it gets initialized to nil, so I have one of two choices:
- I can wrap all direct accesses with a nil check
- I can simply add a getter method that does lazy initialization
The former is a more annoying version of the latter, and scatters the same initialization logic all over the class - which violates the once and only once principle. Now, this kind of thing never comes up in Java, because you can't add attributes to a class at runtime there - you would need to restart. For that reason, Java developers simply aren't going to come across this messy little use case for getters. That's why I tend to use getter methods - it makes runtime updating of code far, far simpler.
I've just released version 3.8 of BottomFeeder. There have been a lot of enhancements, updates, and fixes in this release; here's a short list:
Changes from version 3.7
- A much faster and more robust HTML display component. Software With Style has upgraded their tool, which enables much better BottomFeeder performance
- Bug fixes in th euse of libtidy and the spell checker. The intermittant stability problems that cropped up are gone
- Bug fixes and enhancements for the saving of your content. Backup/restore has been greatly improved.
- Better offline browsing capability - with the local cache created by the underlying network libraries, you should see images with your feeds while offline (assuming that they have been cached)
- Lower memory consumption - the memory system has been tuned to be less aggressive about grabbing memory from the OS.
- Two new keyboard shortcuts:
- ctrl-g: Fully expand the tree
- ctrl-h: Fully contract the tree
- A new font definition tool - if you don't like the fonts that are offered for display, you can now change them, and have them loaded at startup. See the System>>Define Fonts menu item
- Added a toolbar button for "Add Feed" - new users had complained that the context menu was not obvious
- More events reported from BottomFeeder:
- #bottomFeederStarting: sent with the feed viewer as an argument. Allows plugins to take advantage of startup
- #bottomFeederQuitting allows plugins to be notified of application quit (as opposed to image quit, which is also reported)
- Regular expressions now supported for internal searching
- Internal searches now support a "search for feed title" option
- On Unix/Linux, browser spawning can be customized to use a specific shell, instead of defaulting to a (possibly not installed) csh. As well, users may use arbitrary script names - the launching expression is not checked as a valid path
- Amazon search capability is fixed - there was a bug that prevented new searches from being defined
- Shutdown will be faster - the save files are only saved if there have been user changes since the last save
- Lots of bug fixes, including one that could cause problems in Newspaper view
- A raft of new plugins - Asteroids, Xonix, and GoldenMonkey. Now you can waste time while your feeds update!
I'd like to thank Michael Lucas-Smith for all of his help with this release. The libtidy and spellchecker fixes are his, and all of the improvements to the WithStyle browser component come from him and his colleages at Software With Style. I'd also like to thank Rich Demers for the documentation - I sure couldn't have produced that myself - and his tireless work documenting BottomFeeder brought numerous bugs to my attention. I'd also like to thank all of the great users I have - their usage and bug reporting helps make the tool better every day! Enjoy the new release
On the other hand, Danga was a casually-run company that existed to keep Livejournal running, and its founders cupboards full. SixApart is a venture-capital backed organisation that has a much more concrete appreciation of the concept of return on investment. It's inevitable that at some point, someone will look at the statistics and realise that fewer than one in fifty Livejournal users are actually contributing to its upkeep.
Any business ultimately needs to have some level of ROI - the difference with VC backed ventures is that the money guys are looking for a large ROI - and ultimately, for the day when they can go public and get paid off. That drives a set of behaviors, and those behaviors are not necessarily the same as those of a privately held concern. The private owner may be ok with a level of "charity", so long as the bills are being paid; VC's simply won't stand for that. This is not to say that VC's are bad - far from it. On the other hand, I would be surprised if LiveJournal didn't see some wrenching changes down the line.
The dev links on the BottomFeeder download page are a new build - and possibly the 3.8 build. If there are no major issues, this will be the release. We'll see what happens.
Dave Johnson corrects some of those "expert analysts" that the C level IT folks pay oh so much attention to:
Sun Readies Open Code, Michael Singer: "Other analysts say Sun could also open source its enterprise blogging application, named Roller. While the platform began its life as an open source project, before Sun hired its founder David Johnson, the company has not given the software the full on corporate treatment since he joined."
I don't believe those "other analysts" actually exist, this guy is just talking out of his, uh, never mind. I guess I need to set the record straight. First, Roller is and has always been open source. The version of Roller we use at Sun is the same one that you can download from the Roller project site at Java.Net in either source code or binary form. Second, I'm not interested in the "full on corporate treatment" -- I'm a married man.
This guy Singer is ready for the big leagues in analysis - next, he'll be making 20 year projections...
Update: The other analyst revealed
Dave Roberts has some excellent observations on open source issues up today. Here are a few I particularly like:
So the question here is how people working to reduce great ideas to practice are going to eat in the mean time. Every economic theory has to answer this question. All philosophy about the exchange of knowledge and ideas will lead absolutely nowhere if you can't answer the question of how people eat.
This is a point I end up making about Cincom Smalltalk all the time. People will ask me why we don't just open source our product. Well, the bottom line is simple - if you want to see future versions of the products, then there has to be a model whereby we can pay the people who develop the products. Right now, we are profitable, and growing. I have yet to see an open source model that wouldn't result in a drastic cutting of staff in the short term. Now, the common answer to this is "charge for service and support" - well, Dave has thought of that one as well:
- Development is difficult and support is a necessary evil. As a business, I'd rather spend all my time developing my product and as little time supporting it as possible. If I do the reverse, it means I have lots of customers with issues and my product is stagnating in the market. If I'm deriving my revenue from support, I'm actually incetivized to spend as much time on support as possible and as little on development as possible, leading to exactly the reverse of what we'd like as consumers.
- It is difficult to differentiate on support. There are many organizations that can support all sorts of different products. This is particularly the case with open source where the source code is available. As the developer of that product my revenue stream is being undercut by competitors that are not burdened with my development costs. Put another way, in this model, another business is actually incentivized to let everybody else do the development and then come in and skim off the support revenue (say business C comes in and supports the system created by A and B and doesn't give anything back to either one).
- At this point, people often speak up about "community" and giving something back. Business C is bad, they would content, if it simply reaps the rewards without doing some innovation itself. While I'm all for developing a good community and fostering community spirit, let's de-cloak that word and call it what it really means in this context: charity. While business C might have some sort of tacit moral obligation to not simply ride somebody else's coat tails, it is under no legal obligation to do so. In practice, there will always be at least one business like C, which will then gain competitive advantage by not shouldering the development costs. Whether C is ultimately successful depends on how much the "community" values "community spirit" (do they buy from C or avoid C because it is riding coat tails and therefore C is populated by bad people).
- In summary, if you're going to create a sustainable system, you need to find a way to tie revenue to effort as directly as possible. Any model which says "give this away and make it up over here" is going to create stresses on the system which can eventually cause it to fail. Can sustainable "loss leader" systems be produced? Yes, they can and there are many examples, but they need to be very carefully thought out and I don't think most FSF advocates have done much more than a hand wave here. In other words, certain product categories will do better here than others. Examples for include complex systems like JBoss where people inherently need training, etc. Examples against include anything that will be used by consumers who don't have time for training and don't want to be calling a 1-900 number for support.
There's a perfect example of Business C in the open source world - Red Hat. There's also a good example in the proprietary world - IBM, with respect to Java. Think about it - Sun does all the work, and made sure that Java would be popular by letting people use it for free. Before that ocurred, IBM had a whole stable of tools that were much like Eclipse - the VisualAge line. VA Smalltalk is the only one left - the C++, Cobol, and Java variants all got deep sixed. Why? Partly because it was far cheaper to be a free rider on Sun's charity.
Say we followed the advice of RMS, and put Cincom Smalltalk out under the GPL. Right now, Cincom supports the product with a small number of support engineers (and a larger number of development engineers). What would stop a company from offering support contracts for CST separately from Cincom in this scenario? Nothing. Could they do it cheaper than Cincom? Certainly - we would have to factor in the cost of the developers, while this competitor would only have to charge based on the much smaller number of support engineers they hired. What's the end result of that? It's a near certainty that Cincom would have to cut most of the development staff. Now, go look over here - just how much of that roadmap would be executed on after that? Not a lot.
There's an old Heinlein phrase that comes to mind here - TANSTAAFL (There Ain't No Such Thing as a Free Lunch). You say that Java is doing just fine, so that disproves my assertion? I beg to differ. Sun's revenue numbers have been in free fall for a long time now, and the only thing propping them up is the large pile of cash they acquired during the good times. Eventually, that pile is going to run out and Sun's financial folks will have to explain the nature of reality to Schwartz and McNealy. In the meantime, I can assure you that Cincom has nothing like the cash hoard that Sun built up - we would have to Pay the Piper" a lot sooner.
I love this quote that Bill Clementson repeated on his blog:
Another good summary of some of the considerations that a language designer needs to take into account when designing a DSL is spelled out in a post that Scott McKay (one of the authors of "The Symbolics Virtual Lisp Machine" and the person who said "C++ is history repeated as tragedy. Java is history repeated as farce.") made on the Lightweight Languages (LL1) mailing list over a year ago.
So what do I do if I want to say that I just want a number. Any number will do. Or maybe I only want rational numbers? What if my int is actually a Decimal type? Is that ok?
def foo(a: T1, b: T2) -> T2 where T2 <= T1:
Holy crap. That's all I'm saying. Larry Wall, your ship has arrived. Perhaps I missed something, but this is starting to look like Dylan, which is cool, but I don't see any mention of generic functions, which means it basically comes loaded with baggage - that's empty.
Update: Peter William Lount adds his thoughts