development

Tunnel Vision

July 23, 2004 16:13:24.391

Ted Neward has a post up talking about the pitfalls of O/R mapping - now right off, I have seen plenty of Smalltalk projects go down the road to hell trying to build their own O/R frameworks - so it's possible to fall off the cliff. Smalltalk is certainly no silver bullet here. On the other hand, I've also seen many projects succeed quite well here. I think Ted overstates the problem:

Both major software vendors and project teams (building their own O-R layer) fall into the same trap. With object-relational technologies, products begin by flirting with simple mappings: single class to single table, building simple Proxies that do some Lazy Loading, and so on. "Advisers" are sent in to the various project teams that use the initial O-R layer, but before long, those "advisers" are engaging in front-line coding, wrestling with ways to bring object inheritance to the relational database. By the time of the big demo, despite there being numerous hints that people within the project team are concerned, project management openly welcomes the technology, praising productivity gains and citing all sorts of statistics about how wonderful things are going, including "lines of code" saved, how we were writing far more useful code than bugs. Behind the scenes, however, project management is furious at the problems and workarounds that have arisen, and frantically try every avenue they can find to find a way out: consultants, more developers, massive code reviews, propping up the existing infrastructure by throwing more resources at it, even supporting then toppling different vendors' products as a means of solving the problem. Nothing offers the solution the team needs, though: success, a future migration path, or at the very least, a way out preserving the existing investment. Numerous "surprises" (such as the N+1 query problem thanks to lazy-loading proxies or massive bandwidth consumption thanks to eager-loading policies) make the situation more critical. Finally, under new management (who promise to fix the situation and then begin by immediately looking to use the technology in other projects), the team seizes on a pretext, ship the code and hand it off to system administrators to deploy, and bring the developers home to a different project. Not a year later, the project is cancelled and pulled from the servers, the project's defeat complete in all but name.

There have been two really nice O/R frameworks done in Smalltalk (that I know of - there may well be more) - TopLink and GLORP. GLORP is an active project, and getting quite nice early reviews from people taking it up. Sure, projects can fall over dead in the attempt to build a "perfect" O/R layer - but projects can far, far more easily fail by scatter shotting SQL throughout the code base. What is Ted actually advocating here? Does he have a proposed solution, or is it just carping? Inquiring minds want to know :)

 Share Tweet This

smalltalk

Everything old is new again

July 23, 2004 16:13:47.916

The MS guys are rediscovering yet another old Smalltalk idea - treating an object as if it were an array. Take a look at #instVarAt: and #instVarAtPut: in class Object (never mind that doing this sort of thing is typically a very, very bad idea):

http://www.csharphelp.com/archives/archive140.html

C# introduces a new concept known as Indexers which are used for treating an object as an array. The indexers are usually known as smart arrays in C# community. Defining a C# indexer is much like defining properties. We can say that an indexer is a member that enables an object to be indexed in the same way as an array.


   this [argument list]
 {
  get
  {
   // Get codes goes here
  }
  set
  {
   // Set codes goes here
  }
 }


Of course, the beauty of this is that C# had to add new syntax to do this, while the equivalent Smalltalk functionality is just another set of methods. So the C# guy has to memorize yet another set of reserved words, while the Smalltalker simply looks at the library. Sometimes I'm amazed at how Java and C# are examples of Smalltalk being re-invented - but with a crufty, inelegant syntax....

 Share Tweet This

java

Schwartz - still in lala land

July 23, 2004 16:14:35.611

Jonathan Schwartz still thinks that commoditization is helping Sun - apparently, he's not noticed the buckets of money Java shovels at IBM - even as Sun continues to lose money (yes, they made money last quarter. Remove the MS payoff and the numbers are still brutal though). Here's more fantasy thinking:

At Sun, as I said, it's tough to compete against a social movement, especially one in which we all believe. But compete against a single company, Red Hat? Finally. Now that Sun's Solaris operating system runs on Intel, AMD and Sparc systems, our customers have immense choice. We can deliver our products at a lower price point, we can deliver more and better features, more innovation, legendary security (the national security kind), and far better customer support and responsiveness - maybe not for a developer looking for real-time patches (yet), but certainly for the enterprise looking for an accountable vendor.

So if you're running Red Hat, and feeling frustrated by their support, exorbitant pricing, or weak security, it's time to look at Solaris, on any of the more than 200 hardware platforms we support. From HP, Dell, IBM and, of course, Sun (and a host of others). The migration is a very easy one. So is the free download.

Yeah, keep whistling past the graveyard Jonathan. I have a tip for you: Redhat isn't the competition - Dell (lower cost) and IBM (Service and software delivery) are. Dell's costs are scads lower - which is why they sell so much hardware. IBM has a software suite that actually sells at a profit (while Sun doesn't). What's enabled that? Well, commoditization of hardware (making a Sparc purchase mostly insane), and commoditization of software (which Sun has done to itself with Java). No one wants the Sun hardware anymore - I see shops walking Sun out and Linux in every day.

It's worse than that though - Sun simply isn't structured to make money on the commodity sales end, and it's showing. Then we see this kind of thing:

And if you're looking for an open source Solaris, stay tuned there, too. Remember, it's in our roots.

Update: Seems I spoke too soon below - this ComputerWorld story has details.

That's too funny - watching Schwartz make public comments about open sourcing Solaris, while McNealy immediately makes negative comments about the idea. So is this good cop/bad cop, or is Schwartz just publically dissing McNealy? It's hard to tell from here.

 Share Tweet This

development

So much work

July 24, 2004 1:10:05.813

This is interesting - a .NET (C#) developer looking at what it would take to add an attribute to an object at runtime:

I wanted to be able to add properties on the fly.  I've changed the idea a bit to look them up on the fly versus adding them.  Using psuedo-code:

// expandable object
MyObject o = new MyObject();

// add the property
o.AddProperty("FirstName", "Justin");

I'm not using these properties in code anywhere.  I'm actually feeding the object to a template system (the C# port of StringTemplate in this case).  Now StringTemplate supports reading properties in the templates like so...

$p.FirstName$

But unfortunately the MyObject type doesn't have a FirstName property.  And StringTemplate uses the Type to do reflection.  Anyway, during my research of IExpando (much like IDispatchEx), I noticed the interface IReflect.  Looking at the docs for it, it contains all the most common methods that people use on Type when performing reflection (GetProperty, GetMethod, etc.).  So if I change StringTemplate to use IReflect vs. the Type class, then I could implement IReflect myself.  Of course, there are problems with this; mainly the fact that PropertyInfo is an abstract class (MemberInfo, the parent class, is also abstract).  So I would have to write implementations of those.

Hm...this seems like more effort than its worth.  Maybe I should just do something like this...

$p.Attributes.FirstName

Attributes would be an IDictionary.  Then I can extend StringTemplate to look at the object.  If it is IDictionary, then use the property name as the key.  The former definitely has more of a "coolness" factor, but the latter would take like 15 minutes.

Heh. As opposed to the following in Smalltalk:

myObject class addInstVarName: 'firstName'. This is one of those telling differences between Smalltalk and languages like Java and C# - it's not that you can't accomplish the same things - it's that you don't bother because of all the work involved. Smalltalk makes the simple things simple, and the hard things possible. Languages like C# and Java make the simple things possible, and the hard things painful...

 Share Tweet This

travel

Back home

July 24, 2004 1:11:04.380

It's a long way from Sydney back to Maryland. Unlike my outbound flight, there wasn't a lot of excitement this time. The trans-pacific flight went off fine. I plowed through three of the books I brought with me - the book on the siege of Petersberg ("The Last Citadel", 1864-1865, US Civil War) was very good. The author used a lot of primary source materials - after action reports by commanders, individual soldier's recollections and letters, and some of the archival material from "The Commitee on the Conduct of the War" (a Congressional commitee that examined the war effort during and after the war). If you are a Civil War buff, this is a great book.

Anyway, things went fine to LAX. Then I had to go back through security - and I had a small contretemps with one of the rent-a-cops at the entrance to the security line. It seems that my travel back was too big (and yes, it's bigger than the size specified - it's a garment bag). However, no one else with outsize bags was being hassled - the rent-a-cop had some bogus ideas about how the other bags could be folded. After a little back and forth I did an end run - I went to the other security line, where they had sane people working. With that out of the way, I had 3 exciting hours to spend in LAX.

As it happens, I paid my way into the USAirways club last year, and my membership is still valid. That got me into the united lounge, which was certainly nicer than the main concourse. This is when I found out that the "powers that be" at LAX have signed up the world's most ineffectual WiFi vendor - some bozo firm called Boingo. When you spawn a browser and the site uses T-Mobile, or Wayport (or any of a number of other services), you get an HTML form to login to. Simple, no fuss, no muss. Not these morons. No, first you register. Then you download a Windows client (I guess you are just SOL if you have a Mac, or Linux). That client allows you to access the WiFi. To top it off, it was up and down the whole time I was there. That still wasn't the dumbest part though. First, you have to register. Ok, you get a browser page - hit the link to the "Try it Now!" page. You get a list of one option - $21.95 per month for a year.

Well, that's useless, so I went to dialup. However, it turns out that they do have "pay as you go - it's just well hidden. You have to follow a link labelled "Change the Promotional Code", delete the code from the input field, and then submit - at which point you get a pay as you go option. Who's the blazing idiot who came up with that? Someone who's driving theory was "yes, I want fewer customers now?" At least I was able to get news updates and mail.

So now I'm back home, exhausted (I've had two Fridays this week). I'll sleep well tonight, and with luck, won't have any jet lag. We'll see...

 Share Tweet This

sports

Hehe

July 24, 2004 2:18:01.735

 Share Tweet This

security

It's not always a bug, virus, or worm

July 24, 2004 15:13:17.040

Sometimes it's just carelessness. Have a look at this Computerworld story - an email address book with bad entries caused lots of county government mail to be cc'd off to Sweden:

The investigation was launched after Computerworld notified the county on July 6 that Robert Carlesten, managing director of Internet company Ord&Bild AB in Karlstad, Sweden, had produced dozens of e-mails that he said had been arriving at his Internet.ac domain regularly for the past two years. Carlesten said he responded to the senders of the e-mails on multiple occasions to inform them of the problem but never received a reply.

...

According to Whittington, the glitch stemmed from the county's Internet naming structure, which includes ".ac" for the auditor controller's office. "Now we need to research who has the bad address book that has this address," he said.

Whittington said his office was never directly informed about the problem by Carlesten and noted that any county employees who may have received e-mail responses from Carlesten never brought the matter to his attention.

This apparently went on for over 2 years. Makes me wonder how many security breaches that are blamed on MS (etc.) are really just careless mistakes like this...

 Share Tweet This

open source

Open Sourcing Solaris

July 24, 2004 15:24:12.742

This article has an interesting interview with John Loicano, Sun's exec VP in charge of software. Here's an interesting point:

Question: Solaris is going open-source. Why not Java?
Answer: We see ourselves as being the stewards of Java. Compatibility is a key issue.

fascinating....

 Share Tweet This

security

The supposed issues with e-voting

July 24, 2004 15:37:39.561

I just love the hullabaloo around e-voting. Take this:

Part of the problem arises from the complexity of e-voting systems. The code that makes up these systems is so large that there's no efficient way for election officials to ensure that it's free of malware or to completely debug it, according to testimony Johns Hopkins University professor Avi Rubin gave before the U.S. Election Assistance Commission this spring

Complexity? Seriously, how complex should a system like this be? It's an automated multiple choice list. If the people writing such systems made them complex, then find better developers. Seriously, this doesn't even begin to be a complex domain problem. As to security, that's mostly an issue of separating the systems from public (net) access, and verifying that only authorized staff has back end access. In other words, problems we know how to solve. Then there's this:

If you thought pregnant chads in the 2000 election were bad, wait until you see what a determined hacker could do to the democratic process this fall. That is, of course, if we're lucky enough to detect the attack.

What, this columnist has never heard of ballot box stuffing? I'll refer her back to the history of Tammany Hall in New York - this sort of system is no more (but also no less) secure than any other system out there.

 Share Tweet This

rss

Been there before

July 24, 2004 22:20:21.174

I ran across this problem in BottomFeeder awhile ago, and had exactly the same problems that Dare had:

I stumbled across a feed that used the same link for each item from a given day; the Cafe con Leche RSS feed . This meant that RSS Bandit couldn't differentiate between items posted on the same day. This was particularly important when tracking what items a user has read or whether an item has already been downloaded or not. I should have pinged the owner of the feed to point this problem out but instead I decided to code around this issue by using the combination of the link and title elements for uniquely identifying items. This actually turned out to be worse.

Yes, I've had that problem, and it's one of the reasons that differentiating items in RSS is non-trivial. There are blogs out there that don't include GUIDS or links - yes, odd as that sounds, I've seen it. If someone can create weird XML, they will create weird XML...

 Share Tweet This

itNews

This is what will kill MS in the end

July 25, 2004 15:07:51.081

I've said before that the various suits brought against MS were not going to have any long term utilty. What will is the sort of arrogance that creeps in once you think you control the vertical and the horizontal. Have a look at this anecdote from BlogOn to see what I mean...

Anyway, the presenter was doing his pitch in a polished way and at one point he said he wanted to show us a "really cool" feature and he looked up into the audience and said "Show of hands...How many of you use Internet Explorer?". Probably 99 times out of 100 when he asks that question all the hands go up, right? Well first there was a pause and then a giggle and then a whoop of laughter as the audience looked around and realized that NO ONE had raised a hand. The presenter was thrown off his mark, but he recovered and said, "Wow! Okay how many of you wish we'd fix IE so you could use it?"

Still no hands....

MS is losing the leading edge in browser users - this is reflected in the rising non-IE refs in the server logs of this blog as well....

 Share Tweet This

smalltalk

Viewpoints

July 25, 2004 22:32:01.423

Michael points to a fascinating viewpoint on the Sydney Smalltalk & Ruby meeting. Heh - he thinks us Smalltalkers wear suits all the time :)

 Share Tweet This

itNews

It's not always about Windows

July 26, 2004 10:20:51.350

Scoble wants to blame his travel issues last week on an old DOS app. It's not always about the technology. What Scoble ran into was a simple people problem. I've seen this sort of thing (booking problems) happen with modern "whiz bang" systems as well. If you have bozos doing the data entry, you can get bozo results. Updating the software and keeping the bozos will simply result in prettier looking Snafus....

 Share Tweet This

cst

NC Update

July 26, 2004 13:24:59.730

We should have the latest - VisualWorks 7.2.1 and ObjectStudio 6.9.1 non-commercial up on the site for download later today. I'm still awaiting one confirmation from engineering - once I get it, new downloads will be the latest stuff. I suppose I should point out that we have a new release :) What's new? Well, this release is mostly a maintenance/bug fix release. The next major release will be in the fall (late November, most likely). Have a look here for details

 Share Tweet This

BottomFeeder

Some BottomFeeder updates soon

July 26, 2004 13:37:57.586

I'm still testing some changes to BottomFeeder, but expect to have an update out this week. This is where I'll be marking a break between the release (3.6) stream and the dev (towards 3.7) stream. I'll be adding the ability to have BottomFeeder run the update loop using a configurable number of threads (instead of the single threaded loop it now uses). There will be a limit - if you subscribe to as many feeds as I do, then having a thread per feed update would just torch your bandwidth and likely result in most of the attempted http queries timing out. I'll have a dev build for that up soon; I have to finish off some bug fixes to the NC download application first though. Stay tuned.

 Share Tweet This

smalltalk

Re: Refining my Smalltalk post

July 26, 2004 14:19:49.545

JIS asks "where's the beef"? in Smalltalk. It's a fair question - but I think we have answers. I left this as a comment on his blog, but I'll repost here:

Sample Web App? My blog and the main Cincom Smalltalk site.

Not to mention the other blogs here

Sample client App?

BottomFeeder. If you want to see code samples, look at the various Smalltalk blogs above - most of them get far deeper into that than I do on my blog. There are blogs devoted to GUI, Tools, Database, and general Smalltalk stuff. There's been a bunch of good content that way recently. All you have to do is look.

 Share Tweet This

BottomFeeder

Threaded updates

July 26, 2004 23:24:25.370

I've got a dev update (i.e., add dev/ to the end of the update path in settings to see it) that makes the HTTP updates that Bf does threaded. If you go to Settings, you'll see a new option under the 'Network' page - turn on threaded updates, and the system will spawn (lightweight) threads for each http query. Let me know how it works out; it's a lot faster on my system.

 Share Tweet This

itNews

Required Clients

July 27, 2004 11:05:13.458

Ed Foster points to an interesting policy MS has on getting access to "premium" support:

"I needed to know how to solve a problem we were experiencing in Outlook, so I went to Microsoft for help," wrote the reader. "After drilling down I found what looked like a link to a solution for our problem. Upon clicking on the link a page appeared and said that since the machine I was using did NOT have Office 2003 installed, that content was not available to me. I should go out and buy a new Office suite and upgrade to it and then I could have access."

That's pretty nasty. Never mind whether or not you are current on your support - have you loaded the latest and greatest?

 Share Tweet This

rss

The RSS permathread returns!

July 27, 2004 11:11:14.994

Every few months this complaint runs around the Blogosphere again:

(From Mark Fletcher) - Centralized services like Bloglines avoid this problem because we only fetch a feed once regardless of how many subscribers we have to it. Desktop aggregators can't do that, of course, and end up generating huge amounts of traffic to sites like Infoworld. There are various things that a desktop aggregator can do to mitigate the load, like using the HTTP last-modified header and supporting gzip compression. But the aggregator still has to query the server, so there will always be a load issue.

This is not a new problem. Popular website (like Yahoo, Google, etc) have had this problem (without RSS/Atom being involved) for eons. If you get popular, you need to add more bandwidth, plain and simple. On the client end, if you pay attention to:

  • Feed meta-data about how often a site updates
  • Use Conditional-Get
  • Request and deal with mod-gzip

Then you are doing all the right things (BottomFeeder does all of these). The biggest issue now is that a lot of the sites serving RSS or Atom are serving feeds dynamically, and not offering server side support for any of these things. Fix that, and most of this chicken little stuff will fade away

 Share Tweet This

cst

New NC Available

July 27, 2004 11:49:15.311

The new (VW 7.2.1 and OST 6.9.1) Non-Commercial downloads are now available for download. If you have already registered, there's no need to do so again; just follow the link that was sent to you in email, and you'll be offered the up to date downloads. What's new in this release? - the current release is primarily a maintenance release. There will be a major release this fall.

VW 7.2.1 Fixes from 7.2

  • Advanced Tools
    • 46996 MetaNumerics classes #printOn: should send #asString to UserMessages
  • Base Image
    • 46729 UHE because of nil argument in BlockClosure>>uiEventNowFor:
    • 46852 Memory Shrinking issue
    • 46900 InflateStream is missing a couple of methods.
    • 46933 menu pragma causes a compiler warning
    • 46940 Move convenience methods such as trimBlanks from String to CharacterArray
    • 46978 Issues with the Home Directory settings dialog.
    • 46995 GenericException>>mustBeHandled raises ControlInterrupt prior to returning false
    • 47079 MNU: #removeComponent: while starting the image saved with Parcels
    • 47105 Change Set adds only one matching class/instance selector to an existing parcel
    • 47131 Changes>>override list for a Parcel: DNU sending #name to a String
    • 47156 change sets hang on to parcel instances.
    • 47206 Update TimeZone comments for use of TimeZone null
    • 47242 Browse versions walkback when parcel has no source file
    • 47256 DebuggerService>>#scheduleMessage: should coerce potential user messages
    • 47302 SmallInteger>>asDouble omits the primitive...
    • 47313 In Debugger, textHasChanged value does not update properly
    • 47338 Refactor #addEntiretyOfClass: to re-use existing methods
    • 47541 Wrong documentation for sizesAtStartUp:
  • DLLCC
    • 47441 New DotNETConnect version for integration
  • EXDI
    • 46824 DB exceptions hierarchy tweaking for backward compatibility.
    • 47107 ConnectionDialog expects an exception to be a class, not an instance
    • 47120 Unix EXDI Bug
  • Goodies
    • 46859 New Version of GHStoreEnhance (with reknown functionality) available
    • 46861 Wiki which can co-exist with Web Toolkit made available
    • 46997 Update ObjectExplorer overrides for 7.2
    • 47168 update RBCodeHighlighting goodie to 1.18
    • 47429 New version of GHSpeedUpUserMessages made available
    • 47430 New version of GHSpeedUpXMLParser made available
    • 47433 New Version of GHTools made available
    • 47507 STAMP: MNU #addressString on letter view/creation
  • GUI
    • 43875 B:Dialog damage holes
    • 46355 flyByHelp inactive in new user-placed window
    • 46367 FlyByHelp does not work on disabled views
    • 46419 Enh: making >>defaultPrintConverter more consistent
    • 46552 One click to a cell activates entry callbacks upon Dataset cell navigation
    • 46623 non standard menu behavior on windows
    • 46677 Windows unresponsive to keyboard or mouse if dialog host is closed
    • 46810 Menu bar keyboard navigation interference by mouse cursor on Windows
    • 46811 menu selection bug on long menus
    • 46829 Group box border becomes blue when disabled in the Windows XP Look
    • 46835 Exception on image startup - Message not understood: #sensor
    • 46847 E:Possibly allow pattern paints with Motif L&F
    • 46851 Can't select Dataset column in Mac UIPainter canvas
    • 46885 UIPainter - Editing widgets in a group box rearranges tab order
    • 46911 Menu bar open by hot key in Windows look should select first menu item (like VW 3.0)
    • 46966 Fly-by help doesn't always reappear on some unix platforms.
    • 46972 Probable race condition with multi-proc UI
    • 46973 UHE when copying widget
    • 46985 UHE: Mnu: #newExceptionFrom: when indexing unknown paint for a palette
    • 46987 Icon of active window is not transparent where it should be
    • 46989 In Windows L&F, pop-up menus opened near the right or bottom edge of the screen open in the wrong place
    • 47006 Dialog TreeViews ignore text emphasis settings
    • 47014 Selecting window from VisualLauncher->Window menu should always raise the window
    • 47020 B:Startup image with DoubleBuffering does not open all windows
    • 47026 B:DNU NullWindowManger processOutstandingEvents
    • 47028 B:Bad setting of DevicePaint in MacOSXWidgetPolicy
    • 47029 EnterEvent gets lost when exiting menu
    • 47039 UI actions performed prematurely while attempting to update display
    • 47043 Windows LookPolicy submenus open or close uncharacteristically with mouse action
    • 47091 GeneralSelectionTableView methods should anticipate selectionStyle outside of #element, #row, or #column
    • 47158 B:ResizingSplitterController>>exitEvent: calls enterEvent:
    • 47163 Transcript>>show: garbles input from multiple processes at like priority
    • 47165 Progress bar should use a system color
    • 47182 Too many window updates after opening
    • 47197 Introduce a bug into e.g. browsing queries and one looses the launcher...
    • 47218 WindowManager class>>purgeDeadWindows modifies its registry while iterating over it
    • 47223 OS X look facelift
    • 47224 Use platform-faithful combo box buttons for Mac OS X
    • 47230 TreeModel>>refreshRoot fails to update expansion icons for unexpanded nodes
    • 47233 Pop-up Menu selector dispatching invokes editor callbacks whereas Blocks don't
    • 47250 [OSX] Use Panther-like menu item separators
    • 47252 B:JPEG Image Reader doesn't do Images correctly
    • 47254 Use of pluggable adaptors along with aspect adaptors raises MNU #subject
    • 47274 Event name typo in SelectionView<
    • 47280 Implement MultiSelectionInTree>>selectionDo: for multiple selections
    • 47282 [mar04.3]PNGImageReader and ArborGIFImageReader incorrectly access their argument
    • 47283 Label mnemonics fail to move focus to a subcanvas
    • 47290 Becomes Cursor normal during Cursor>>showWhile: if cursor enters another widget
    • 47292 Combo Box behavior in Windows XP is not correct
    • 47310 Pollock Preview for 7.2.1
    • 47321 ApplicationModel>>wrapperAt: does not protect, when the builder isNil.
    • 47332 closed launcher still hanging around
    • 47367 Mouse wheel doesn't suspend fly-by-help
    • 47385 MNU: #<< entering catalog symbol to label in GUIPainter
    • 47394 MNU: #specClass to SelectionDragModeTracker during UIPainter drag
    • 47427 Marking a Subcanvas "Initially Invisible/Initially Disable" doesn't work
    • 47448 Remove unused instance variable from WindowManager
    • 47457 Opening interface for UISpecification classes throws exception MNU: #openWithSpec:
    • 47463 E: Add wait for keypress, mouse press to WindowManager
    • 47488 Inconsistent use of 'converterClass'
    • 47491 Dataset cell entry accepted w/o callbacks or focus change upon menu bar selection
    • 47530 Mac OSX Dataset row selector buttons display with MNU:#container
    • 47531 Add <Alt><Select> to toggle multiselection lists, trees, and datasets
    • 47540 Alignment in InputFields and Home/End-keys (Pos1/Ende Tasten) position bad the input cursor in aligned input fields
  • I18n
    • 46857 Unicode support on Windows broken since oct03.4
    • 47200 Release does not contain newest version of Unicode for Windows parcels
  • Installation
    • 47377 installer and packaging changes
    • 47473 Fix installMac for limbo NC
  • Lens
    • 46527 [Glorp] Faster replication
  • Net Clients
    • 46160 Change target FTP server for FTPTests
    • 46815 Add flush for Net clients write socket streams
    • 46905 FtpURL does not properly decode password
    • 46909 UHE on Net.URI encode: 'hi%'
    • 46945 FtpURL broken, #directoryContents and #construct:
    • 47053 FTP URLs with characters encoded to %hex equivalents do not work
    • 47333 HttpClient doesn't update the port number when url is moved
    • 47471 Integrate some 7.3 AR's to 7.2.1
  • ODBC Connect
    • 45059 ODBCEXDI doesn't allow multiple result sets
    • 47345 ODBC EXDI does not support PLSQL binding
  • Oracle Connect
    • 46579 Raising exception for stored procedure created successfully, but with compilation errors
    • 46762 OracleError missing parseErrorOffset.
    • 46871 Problem when binding arrays have different size in array binding.
    • 47141 Oracle External Authentication does not work in VW.
    • 47232 Speed up for Oracle 8 EXDI
    • 47271 Crash because of allocation failure in OracleEXDI
    • 47273 In OracleEXDI 'nullable' returns an integer, in ODBC it returns a BOOL
    • 47378 [vw7.2] DNU in oracle exception handler
  • Releasing
    • 46862 Need more accurate error messages from the install script.
    • 47428 visualworks.ini is outdated
    • 47515 fix DotNETConnect file names
    • 47542 fix build script for StreamWritingExtensions and remove parcelName property from PackingListTool
  • Runtime Packager
    • 46849 Emergency notifier doesn't open properly when dialog is in focus
    • 47413 RuntimePackager should keep AbstractSystemEventInterest
  • Security
    • 47235 [Hashes] hashes itermittently generate wrong digests
  • StORE
    • 46178 Walkback when comparing system version of PundleLoadedChange which isn't in current database
    • 46287 compute leafItems just once in PackageDifferences>>loadFromDBWithin:
    • 46803 Remove Browse packages and Browse Classes View launcher picks form Store
    • 46832 #updates:fromParcel:relink: should send properties instead of pundle to #relink:
    • 47072 File out of bundle from browser does not capture bundle structure.
    • 47152 BundleModel>>#structure: should use #expandMacrosWith:with: instead #expandMacros
  • Tools
    • 46895 UHE in RBSUnitExtensions when a test and non-test classes are selected
    • 46896 UHE in class finder when clicking down arrow
    • 46899 Tune #optimizedSelectors in RBParser
    • 46936 No autocompletion in class creation/find dialogs
    • 46946 No Class>New menu in a browser spawned on a package
    • 46948 [RB] Misspelled method name ParseTreeSearcher>>recusivelySearchInContext
    • 47022 [VW 7.2] Exception when selecting a shared var containg a window
    • 47051 FormatterConfigurationTool should automatically enable applying the changes to all browsers
    • 47085 Add page access method to SettingsManager
    • 47145 Explainer doesn't always explain selector in browser
    • 47146 Remove max size limit from the launcher
    • 47147 Change window max size default
    • 47159 Ctrl+E to call the explainer in Trippy conflicts with eval pane
    • 47161 Make #markedAsSystemClass clearing a user setting
    • 47174 [FB] FileBrowser loses text changes on directory selection
    • 47183 Minimize RefactoringBrowser window updates on opening
    • 47196 Cannot browse implementors of * because its interpreted only as a pettern
    • 47202 typo in FormatterConfigurationTool>>#postOpenWith: dialog messages
    • 47204 BrowserNavigator>>#pundleMenu has two items with missing catalogs
    • 47212 Walkback while dropping methods into class without any protocols
    • 47213 Auto-flush in Transcript
    • 47239 RE: [VW7.2] [BUG] #abortDebuggingFor:
    • 47249 [MiniChanges] Allow change set creation from change set list
    • 47269 copyStack in PDP broken by I18N
    • 47272 Package search auto-completes too much
    • 47365 PDPMsgRcvdInstrumenter>>initializeBreakpointLeadString needs to send #asString
    • 47387 PDP's CompiledMethod>>printNameOn:inClass: needs asString when printing unbound methods
    • 47404 PDPInstrumenter>>initializeIvar needs to send #asString
    • 47539 PC not set correctly when removing multiple CodeProbes at the end of a method
  • Wave Developer
    • 47036 Regression:Wave subcanvases not built if client is nil
    • 47334 WaveUIPainterTools doesn't unload cleanly
    • 47383 VisualWave looks up some menu items by label, not key
  • Wave Server
    • 46864 clarify server names in UI
    • 46878 walkback in #receiveEntityOver:
    • 46942 port: not understood from server console
    • 47066 #shouldUseWebToolkitResolving is called, but not implemented in VisualWave
    • 47076 CGI gateway Crashes under win 2003 and XP
    • 47347 Server Memory policy does not properly use defaults
    • 47402 Improve web server extreme low-memory handling.
    • 47486 Tighten up exception handling in ISAPI DLL
  • Web Services
    • 47185 xsi:nil="true" should return a nil ( undeclared object) instance
    • 47326 Building header marshaler from an element with complex contents
    • 47379 Release notes 7.2.1: WS added support for nil attribute
    • 47381 Changed default for XMLObjectMarshalingManager useInlineType caused a fault response
    • 47396 Soap Header was not created for doc/lit style
    • 47412 AR for case 362190, UTF-16LE encoding and more
    • 47456 AR for case 362190 Error resetting superclass
    • 47480 XMLTypesParser doesn't process attribute with restriction
    • 47509 The inline type was not set for simple types
  • WebToolKit
    • 45638 smarter caching of missing servlet
    • 45850 Make Session>>at:ifPresent: support zero or 1 arguments
    • 45978 ifAbsent: forms for any*Value... methods in Request
    • 46060 wave developer/server/web toolkit partitioning errors
    • 46435 error handler in tag processing can mask user-level dNU:'s
    • 46439 Mutual exclusion on session and application
    • 46440 consistent accessing protocol for sesions and requests
    • 46442 PageModel>>application should be eagerly initialized
    • 46491 comments for new settings classes in wave/wtk
    • 46515 validate to avoid recursive logical names
    • 46765 Semantics changes for attributeAt:, beanNamed:ifPresent:
    • 46833 Move SimpleFileUploadServlet into the base wtk
    • 46886 Server console session display doesn't work for wtk requests
    • 46988 [WTK] Body tag body evaluation issues
    • 46990 [VWAS] Server Console seems broken on MacOS
    • 47095 don't set cache control headers for static content
    • 47100 Internationalize tutorial URLs
    • 47198 Request>>attributes doesn't include parent attributes
    • 47287 WTK adds #encoding method to internal streams, breaks XML
    • 47319 add convenience protocol to servlets for accessing application, webSite
    • 47331 Fix Response expiry header semantics
    • 47368 Remove "Built with Cincom Smalltalk" trailer

Those are the VW fixes. I'll post a list of the OST changes shortly

 Share Tweet This

cst

ObjectStudio fixes in 6.9.1

July 27, 2004 12:24:23.123

Here's the list of fixes included in ObjectStudio 6.9.1:

Enhancements For 6.9.1

  • 73653
    • Ensure that #canReceiveFocus answers false for FormItems with the #NoSelect option on
  • 76292
    • Autoskip goes backwards when the shift key is down. Item traveral using the tab key was redesigned to put the behavior in Smalltalk. The method ControllerItem>>tabTraverseStep: is now invoked by the VM after the user presses the key to handle switching focus to the next item in the traversal list.
  • 76548
    • The ItemTraversal in InterfaceComponents does not work
  • 77230
    • 'fieldsArray' and 'formatDict' of a table are not initialized if you try to access tables with another user than the one who created them
  • 77430 Event Handling of empty TreeViewList and double triggering entered events for ListCtrl. The #entered event was being sent twice if you pressed the key for an item in a list box.
  • 77590
    • An error setting TreeView fonts introduced in 6.8 was fixed.
  • 77703
    • OperatingSystemMessageBox>>setParentTo: and related messages should take a Form argument
  • 77704
    • memory access violation when Sybase database is stopped. The error block is now handled correctly in SybaseDatabase>>privateExecSql:onError:
  • 77722
    • Symbol cannot begin with a digit In previous versions of ObjectStudio, the code #2 would compile into the number 2, i.e. the # was just ignored. It will now trigger the compiler error 'An unquoted Symbol cannot start with a digit'. To create a symbol, use #'2'
  • 77761
    • Remove the duplicate ControllerItem check in Form>>checkDuplicateCItems: This method was commented out, see the comment in the method for more info.
  • 77813
    • SafeSharedQueue>>waitForEntry calls fetchSemaphore method, which is not implemented. An accessor method for the instance variable fetchSemaphore was added to the class SafeSharedQueue and all references to the inst var were changed to use the accessor instead.
  • 77918
    • The Designer now sends the message #minExtent to get the minimum height and width of a FormItem
  • 77941
    • Fixed a display problem with number entry fields (The first digit of the filled numeric entry fields were not displayed when
      • the field is filled,
      • it gets the focus first time and
      • The place for the field is not big enough
    • 78014
    • Renamed MessageBox>>privateTitle:text:icon:buttons:action:controller: to MessageBox>>createTitle:text:icon:buttons:action:controller: for protocol compliance with ModalMessageBox
  • 78035
    • ItemTraversal does not work properly for buttons with the "Help available" option enabled
  • 78063
    • ModelingTool method ICDFontAttributes>>getFont was changed to not pass nil as an argument to Font>>setBoldTo:
  • 78112
    • It is now possible to logoff from one instance of OracleDatabase using the method OracleDatabase>>logOff
  • 78170
    • Fixed a problem with ObjectStudio Sybase interface and large text columns
  • 78189
    • Problem with ByteArray>>decodeUsingDescriptor: when encoded data was an Array
  • 78208
    • Problem with infinite loops on notebook update. Page>>updateItems was modified to update items only if page is visible
  • 78211
    • ListViewCtrl>>privateUpdateSelection was changed to update only if the ListView is open.
  • 78286
    • New Class Browser no longer gives syntax error on saving despite no apparent syntax error in method due to obsolete method reference syntax.
  • 78305
    • PrintStream problem fixed. PrintStreamClass>>file:onError: (the sole instance creation method) was not initializing inst vars properly, as StreamClass>>new does. PrintStreamClass>>file:onError: was rewritten in Smalltalk to call (super new), and the primitive behavior of connecting to the printer was put in the instance method PrintStream>>device:onError:.
  • 78387
    • When log on with username but no password ObjectStudio ignores username and uses Windows authentication instead. This will now cause an error. The proper behavior is when loggin on to SQLServer without inputting user name and password, ObjectStudio will use your domain logon automatically.
  • 78402
    • String>>matchRegularExpression: is now Thread safe and an error in Thread Initialization was corrected.
  • 78441
    • ODBC truncates milliseconds from SQLServer times
  • 78453
    • FileStream>>findPattern: method used to sporadically fail.
  • 78469
    • Object>>isMTError is not implemented.
  • 78503
    • Make FormListView/FormTreeView methods use 1 based indexing. The following methods in FormListView and FormTreeView are called from the VM: getTextForItem:getTextForItem:subItem:imageIndexForItem:onBeginEditAt:onLabelChangedAt:to: The VM used to pass the C-style (zero-based) index of the row in question into Smalltalk. It will now pass the Smalltalk-style (one-based) index. For instance, the first row used to be indicated by row index 0; now row index 1 indicates the first row.
  • 78509
    • After open a cursor on a database and get some values, it is not possible to select data from another table in another database using execSql:
  • 78511
    • Subclasses of FixedItemsController were not getting their mainForm properly set when saved from the Designer.
  • 78535
    • ByteArray>>asString, ByteArray>>stringFrom:to: did not respect current character set.
  • 78545
    • The method Number>>printRounded: gives wrong results. This method would sometimes round down instead of up, so a statement like 1.995 printRounded: 2 would answer '1.99' instead of '2.00' Depending on your version of Windows and the math libs installed, it was even possible to see behavior like (1.95 printRounded: 1) = '2.1' This has been resolved with this release.
  • 78548
    • Remove hard coded help file name from ThreadBrowser
  • 78620
    • #selectAll does not always work for MaskFields FormMaskField>>update was only informing the Windows API of the proper selection for a mask field if that field had focus when it performed the update.

I'll have a post up shortly with a summary of what's new from a functionality standpoint in both products

 Share Tweet This

cst

New stuff in CST

July 27, 2004 12:28:53.757

There isn't a lot of "new" stuff in this release. It's a maintenance release over the last one. There were a lot of changes in 7.2 and 6.9, and a number of those things have been enhanced in this release. Here's a short list:

VW

  • Web Services
    • Tools for generating Smalltalk classes from WSDL and for generating WSDL from Smalltalk classes. These tools are "command line" (i.e., Workspace) driven in this release, but will have Wizard style interfaces in the next release.
  • Web Toolkit/Wave Server
    • The server has been updated to use the Opentalk framework, making it more stable and more scalable. We have added an Opentalk based Load Balancer framework, which replaces the CORBA based one from earlier releases. This framework will be generalized over the next few releases
  • GUI
    • Many bug fixes to the event handling and painting of widgets, especially the TreeView and DataSet (grid) widgets. Most work is focusing on Pollock at this point; the existing UI will not be updated (other than critical bugs) until Pollock replaces it.
  • Internationalization
    • All English language strings in the product have been replaced by UserMessages - which means that developers can more easily internationalize their applications. Reuse of existing Dialogs (for example) no longer requires code changes - instead, simply create a parallel catalog
  • Unicode support
    • On Windows, we now have a fully Unicode aware Image and VM. This means that VisualWorks will display the correct font - assuming that said font is installed on the machine in question (without regard to the current Locale). This support will be extended to the Macintosh platform in the fall, and beyond that to Linux/Unix over the next few releases
  • Platforms
    • Windows CE support remains in preview (beta) for this release. We intend to move this to a fully supported state for the fall release. Developers can target Win CE 4.x devices that use either the x86 or StrongARM architecture.

ObjectStudio

  • XML
    • We have included a port of the XML Parser from VisualWorks into ObjectStudio. This enables better interaction with XML based services from ObjectStudio
  • VW Interoperation
    • We have included a port of Opentalk (the Smalltalk to Smalltalk protocol) in ObjectStudio. This is in preview (beta) until the fall release. What this allows is full messaging interoperation between VisualWorks and ObjectStudio - developers with ObjectStudio applications that need access to services supported only in VisualWorks (Web Services, etc) may now do so much more easily

That's the summary. For VW bug fix details (with case numbers included) go here. For the same information on ObjectStudio, go here

 Share Tweet This

smalltalk

Smalltalk powers forward

July 27, 2004 13:55:13.445

There's money in Smalltalk - see The Register's story on the acquisition of OOVM:

Swiss embedded software company Esmertec has acquired the start-up founded by VM pioneer and former technical lead of Sun's HotSpot project, Lars Bak. OOVM was founded in Denmark in 2002 and privately-held Esmertec acquired the company for an undisclosed sum.

The details:

"If you have say, a small router or a dishwasher you can upgrade the code while it's running, no reboot is required," Bak told us today. "If you have a device, and you have more than one component it doesn't make sense to shut down the system."

Consumer electronics manufacturers have experimented with the technology, attracted not only by the serviceability by its small size: as low as 128kb, which includes a TCP/IP stack. For example as a research project, Bang and Olufsen built the VM into digital speakers, which could then be modified over FireWire.

How does it achieve this magic? OOVM's technology comes in two parts, a VM and a development environment, and it uses Smalltalk, rather than modern-day kludges such as Java, which resembles a modern object-orientated environment in the way that a pub ashtray resembles a cigar store.

So much for the notion that Smalltalk is "big and bloated" - For more details, see my article on Lars' talk at StS 2004

 Share Tweet This

cst

VW 7.2.1 partner note

July 27, 2004 13:59:41.149

We just became a reseller of SmallCOM/X (an add on from Joops that allows you to embed Active/X controls into VW Windows). There's a demonstration version in the goodies - it shows you how to embed the IE HTML control into a VW window. I just got a note from Josef Springer at Joops - he has some information for users of VW 7.2.1:

SmallCOM/X Version 2.1.0 for VisualWorks 7.2.1 is available now. Some modifications ecspecially for VisualWorks 7.2.1 have been made. You can load an evaluation copy from http://www.joops.com/SmallCOMX.zip. SmallCOM/X 2.1.0 is useable with VisuaslWorks 5i or higher.

 Share Tweet This

examples

How to do an Http Query

July 27, 2004 15:16:30.542

One of the things that JIS asked for was examples - examples of how to do various things in Smalltalk. Well, we've been talking about this at Cincom, and some of us are going to start posting examples from parts of the product that we are familiar with. I've done a fair bit of work in HTTP for BottomFeeder, so I figured I'd go through the basics on that. In general, when I post examples, I'll be using the examples category

How to do an HTTP Query in VisualWorks

If all you need is a quick result (when dinking in a workspace, for instance), you can just do the following:

HttpClient new get: 'http://www.yahoo.com'

Now, that will work - and it will even do the right thing in the face of a redirect (either 301 or 302). However, it's not terribly robust - it won't handle any of a variety of of hiccups you might get from a web request (server errors, timeouts, etc). Sure, you can wrap that message send in an exception handler (handling an ExceptionSet of issues) - but you still won't get all the things you want. You will likely want to be able to do things like:

  • Specify the content-type
  • Specify what kinds of responses you'll handle (mod-gzip, etc)
  • Specify the User-Agent and/or the Referer string
  • etc

For that, you need to dig into the ancillary classes surrounding the basic HttpClient (and HttpsClient) class and construct a custom request. Here's how you would create a basic HttpRequest object:


setUpRequestFor: url
	request := HttpRequest new.
	(request getFieldAt: 'User-Agent') value: 'My Agent String Here'.
	request contentType: 'text/html'.
	request accept: '*/*'.
	request method: 'GET' url: url.
	

Now, that's hardly an exhaustive list of data that you can attach to a request. You can specify things like cookies, and conditional-get information - but you get the idea. The (request getFieldAt: 'blah') value: 'value' pattern can be used to specify arbitrary headers.

So we have a request object. What do we do with it? We execute the request and we get a response. Here's how you execute the request:


httpExceptions
	| set |
	set := ExceptionSet new.
	set add: HttpRedirectionError. 
	set add: HttpObjectNotFound.
	set add: Smalltalk.OSErrorHolder notReadySignal.
	set add: OS.OSErrorHolder notReadySignal.
	set add: OS.OSErrorHolder peerFaultSignal.
	set add: OS.OSErrorHolder inaccessibleSignal.
	set add: OS.OsTransferFaultError.
	set add: HttpServerError.
	set add: HttpTimeout.
	set add: HttpStatusLineError. 
	set add: SSLBadCertificate.
	^set


executeRequest: request
	| response |
	exceptions := self httpExceptions.
	client := HttpClient new.
	client keepAlive: true.
	^[client executeRequest: request]
			on: exceptions
			do: [:ex | nil].

Now, even that's not the full range of what you might need to do. In BottomFeeder, I trap a few specific exceptions for handling. With that out of the way, what do I do with the response? For things like redirects, I have to check the response:


httpGetFor: someUrl
	request := self setUpRequestFor: someUrl.
	response := self executeRequest: request.
	(response notNil and: [response isMoved])
		ifTrue: [self handleMovedObjectFrom: response].
		ifFalse: [response notNil and: [response inUnauthorized]
					ifTrue: [self handleAuthorizationRequestFor: response]]

Now, bear in mind that handleMovedObject: and handleAuthorizationRequestFor: are not part of the standard API. As it happens, the standard Http libraries handle basic authorization and redirects - but not necessarily in a way that is sufficient for applications (i.e., BottomFeeder wanted to silently re-label feed urls, and it wanted to handle Digest Auth - and the standard libraries do not do Digest Auth yet). Beyond those two, this is all boilerplate VW code. So let's put the "high level" API we've just defined in one piece:


responseOrNil := self httpGetFor: someUrl

Now we have a response (or nil). We can send the contents message to that and get the results. Then you can do whatever is appropriate - parse it, store it, display it, whatever. The basics of this are in two packages in the public store - Http-Access, which is used in BottomFeeder now, and a much cleaner implementation in NetResources, which is what Bf will be moving to shortly. I'll go through how to construct a POST next time I give an example.

 Share Tweet This

development

Small things, great excitement

July 27, 2004 15:42:37.121

Julia Lerman is excited about the inspector in a Whidbey preview - it apparently lets her drill all the way down into an object. Nice to see Microsoft is powering forward into the 80's. Wake me when they reach the 90's....

 Share Tweet This

development

Re: Annotations are not for configuration

July 27, 2004 16:49:56.155

Ted Neward shows us this simple truism: If developers can misuse a feature, then developers will misuse that feature

 Share Tweet This

humor

Darth vader, call your office

July 27, 2004 16:56:03.534

Interesting photo from the Cassini probe - from Nasa. Anyone seen the Lord of the Sith recently :)

 Share Tweet This

food

Drinkable Donuts - Apparently not there

July 27, 2004 21:49:12.557

Apparently, Drinkable Donuts aren't working out for Krispy Kreme. Scroll down and look at the pictures of the reviewer as he takes his first sip :)

 Share Tweet This

smalltalk

Need Smalltalk Examples?

July 27, 2004 22:04:28.985

Look no further than Stephanne Ducasse's free Smalltalk book site. In particular, have a look at Smalltalk by Example and The Joy of Smalltalk.

 Share Tweet This

development

Middleware wisdom

July 28, 2004 12:53:39.060

Sean McGrath makes a comment on the wisdom of using static languages in middleware:

My position on this is simple. Anyone coding middleware in a statically compiled language, working in a commercial environment where time is money, has rocks in their head.

Clearly, I agree with that. How do Java folks update their servers without taking them down and up? How do C# developers? In Smalltalk, I do this all the time, and as a result, my servers tend to run 24x7x365. Yes, I test things out locally before I upload them :)

 Share Tweet This

smalltalk

On updating

July 28, 2004 17:11:23.634

This post got a lot of attention from the curly brace crowd. When I asked "So how do you run a 24x7x365 Java/C# application server?", I got a bunch of responses. They all involved having multiple application servers (load balanced), and updating each in sequence while doing server configuration tricks to ensure that the app server being updated didn't get accessed. So I have a simpler question. Say - like this server - you have one app server you want to update without downtime. Let's say that said update involves shape changes to various objects that may or may not be in memory. So how do you keep that up while updating it? Sure, I get the notion of sequential updates.... but say the server (like most of them out there, to be honest) isn't a suite of load balanced systems. What then?

 Share Tweet This

development

Help for dynamic languages on the CLR?

July 29, 2004 11:05:20.020

This looks like good news:

Jim Hugunin, the creator of Jython, starts work with Microsoft Monday chartered to work towards a production-ready IronPython, and more broadly to improve the state-of-the-art of dynamic languages on the CLR.

That means that Microsoft is genuinely interested in making things better for dynamic languages. Meanwhile, Sun continues to let the JVM stagnate - because gosh, they did everything that ever needed doing back in the mid 90's. Tip of the hat to Microsoft here

 Share Tweet This

humor

Husbands and Wives

July 29, 2004 21:51:44.024

In a post about databases, Roy Osherove slips in this funny bit:

"Question:  If the DBMS knew you were approaching the end of your rope, why didn't it say something?  My working hypothesis is that it's kind of like when your wife wants you to take out the trash, but all she says is, "The trash can is almost full."  Not, "Honey, will you please take out the trash?"  Her objective is not to get you to take out the trash; rather, it is to improve you, the husband, morally and spiritually -- while at the same time getting you to take out the trash.  You're supposed to infer, based on the facts she's provided, that you need to do it.  I say, this is more like training than housekeeping.  My wife insists that she must therefore be a very poor trainer.  But trust me, she's keeping score."

Heh. Very true, that...

 Share Tweet This

itNews

Linux momentum

July 30, 2004 10:55:50.023

Jonathan Schwartz likes commoditization, so this report must be music to his ears:

Aeronautics giant Lockheed Martin plans a 10,000 seat migration away from Solaris over to Linux and Intel, a confidential source told us yesterday. There's no word yet on how much the new Linux deal could be worth or who the lucky vendor might be, although our source did throw out the name Dell once.

Maybe he's got some great railroad track line to cover this situation :)

 Share Tweet This

itNews

Release late, release when no one cares?

July 30, 2004 10:57:35.223

Longhorn is going to be later - I guess that gives developers more time to be confused between WinForms and Avalon :)

 Share Tweet This

development

hammers and nails

July 30, 2004 17:26:42.738

It's nice to be placed in the same category with Paul Graham, but I think I'm being a little misunderstood. Here's what I mean:

There are some software development pundits from the world of obscure languages who have lots of really smart stuff to say, like Paul Graham and James Robertson, whose hatred of popular languages just has to be glossed over if you expect to be able to read them. I think that they're so offended that their language of choice (Lisp, Smalltalk, or whatever) never hit the big time that they just can't see other, more popular languages all that rationally. I know they'd tell me that they hate Java or C# or whatever because they handcuff your productivity when compared to the obscure language that they favor, and they may even be right.

It's not a matter of hating C# or Java - I recognize them as rather large scale improvements over C++, the programming language from hell. What I'd like to see is less auto-decision making going on. Instead of "well of course we'll use Java", I'd like to see people actually think. I've seen people using EJB and three tier set ups for problems that could best be solved by Access, for instance. What I mostly object to the sheer volume of hammer/nail thinking in the IT industry.

 Share Tweet This
-->