You are currently browsing the category archive for the ‘Smalltalk’ category.
The video of my STIC 2012 talk “Practical Git for Smalltalk” is available. You can view the slides on SlideRocket or as pdf.
Photo by http://www.flickr.com/photos/unavoidablegrain/3277754772 / CC BY-NC-SA 2.0
Bob Nemec responds to Dave Thomas‘ statement that object abstraction is too complex for the majority of programmers.
From Bob’s post:
Photo by http://www.flickr.com/photos/markchadwick/6549846977 / CC BY-NC-ND 2.0
Kaliningrad oblast (sometimes called Yantarny krai which means “The amber region”) is located on the coast of the Baltic sea and is the site of the world’s largest amber deposits.
Kaliningrad Project
I created the Kaliningrad project because I want to use Monticello to manage the code that I write in Amber.
Kaliningrad automatically maps Amber package names to Monticello package names, so Kaliningrad is pretty easy to use.
Kaliningrad is based on Seaside 3.0 and uses the Seaside File Library and the Seaside-REST package to serve and store the Amber .js and .st files.
To load Kaliningrad execute the following expression:
Gofer new
url: 'http://ss3.gemstone.com/ss/Kaliningrad';
package: 'ConfigurationOfKaliningrad';
load.
((Smalltalk at: #ConfigurationOfKaliningrad) project version: '0.1') load.
The Kaliningrad configuration loads only the most basic packages for Seaside 3.0, so you’ll need to load up one of the adaptors (Swazoo, Comanche, or Zinc) before you can connect.
Using Kaliningrad
Once you’ve got the Seaside server running, hit (user/password : admin/tool):
http://localhost:8080/tools/amber-browser
to bring up the Amber Browser:

If you want save your Amber code into a Monticello package follow these steps:
- Create an Amber package (‘tODE-AmberClient’) in the Amber Browser.
- Create a Monticello package with the same name (‘tODE-AmberClient’) using the Monticello Browser in your image.
- Register the Monticello package with the KOAmberBrowser class:
KOAmberBrowser addMonticelloPackage: 'tODE-AmberClient'
Thereafter, when you hit the Commit package button for ‘tODE-AmberClient’ in the Amber Browser, the .js and .st source will be saved in the ‘tODE-AmberClient’ Monticello package.
Thats it!
The class KOAmberBrowser is also a good example for how to integrate Amber code into a Seaside component.
Importing classes into Amber
If you want to import a class from your Smalltalk image into Amber, you can evaluate an expression like the following in an Amber workspace:
KOImporter importClass: 'TOSession' intoModule: 'tODE-Amber'
Be aware that there are differences between Amber Smalltalk and other Smalltalk implementations (see the section entitled Differences with other Smalltalk implementations on the Amber documentation page). KOImporter does not check for correctness.
Summary
Kaliningrad 0.1 is based on Amber 0.9.
I’ve been using Kaliningrad with Pharo for a couple of weeks now, but the code should run in GemStone and Squeak.
If you run into problems, let me know.
—–
[1] Photo by http://www.flickr.com/photos/paul_garland/5133520694 / CC BY-SA 2.0
Smalltalk love from J. Pablo Fernández:
Photo by http://www.flickr.com/photos/yenstefanie/2660443781 / CC BY-NC-SA 2.0
Bruce Badger hits the nail on the head with his Who looks at Smalltalk? post:
The C guys looked at Smalltalk and said they didn’t need object orientation….
Photo by http://www.flickr.com/photos/fdctsevilla/4052593758 / CC BY 2.0
Daniel Lyons writes about his initial experiences with Smalltalk:
Thanks to Randal Schwartz for the pointer.
Photo by http://www.flickr.com/photos/jjjohn/2387534678 / CC BY-NC-ND 2.0
If you are a student and are interested in getting a stipend to write some Smalltalk this summer then have we got a deal for you!
Check out the GSoC Smalltalk Call for Students for details.
Photo by http://www.flickr.com/photos/axolot/ / CC BY-NC-SA 2.0
So you’ve read Kent Beck’s Smalltalk: Welcome to the Balkans:
I don’t think the real issue is standardization.
It’s true that each dialect of Smalltalk has quirks, but version differences are not unique to Smalltalk. It can be challenging to move Ruby programs between different versions of Ruby and it can be challenging to move C code between different operating systems and compilers.
Seaside is proof that a significant body of code can be written to be portable across at least 7 different Smalltalk dialects. It takes a hefty glob of Grease (a Smalltalk portability layer), but it can be done.
Aida and Swazoo are additional examples of significant applications that have been ported to multiple dialects of Smalltalk. They are built on top of Sport (another Smalltalk portability layer).
Writing portable Smalltalk is a solvable problem.
Kent’s proposed solution is a good idea in and of itself:
But expecting a set of vendors to agree on the the “tiniest possible core”, when they can’t agree on a set of common methods is unrealistic.
Here’s what sent Kent off on his diatribe:
and it’s sent me off on my own diatribe:)
I’ve been working in Smalltalk for 25 years and this problem is just as bad now as it was 25 years ago! It is virtually impossible to do cross-dialect development in Smalltalk. It was unfortunate for Kent that Monticello was partially ported, because it gave him the illusion that cross-dialect development was possible:
Right on, Kent! Existing customers may not demand cross-dialect development, but prospective Smalltalkers are being turned away and turning your back on cross-dialect development is turning your back on the Smalltalk community.
You know the story of the Smalltalk balloon:
Smalltalk isn’t just balkanized, Smalltalk is an archipelago where every dialect is stranded on its own island! It would be a luxury to have a hot air balloon to transport code modifications back and forth between dialects!
It is technically feasible to port Monticello to every dialect of Smalltalk.
It is an idea whose time has come and gone about 50 times! You can claim that a file-based Smalltalk wouldn’t have this problem, but Monticello is file-based development for Smalltalk.
Monticello makes cross-dialect development possible.
The Monticello code base has not had the attention to portability that Seaside and Aida have, but seriously, Monticello isn’t under active development. A one off port is perfectly adequate. I did a one off port of Monticello to GemStone in December of 2006. It’s not incredibly difficult and it has not required a lot of maintenance.
Monticello has withstood the test of time in the Squeak community and it does a pretty good job:
Envy and Store are not viable candidates. Monticello is a light-weight solution compared to Store and Envy.
If you can afford to port Seaside, then you can afford to port Monticello.
So why don’t we just do it?
It isn’t realistic to expect all Smalltalk dialects to live on the same island, but to continue to perpetuate the current isolationism between dialects is just pathetic:
I’m calling bullshit on the state of Smalltalk. Vendors, you’re acting crazy.
Thank you, Kent for the kick in the butt!
And Happy Valentines Day!





