Wednesday, March 30, 2005
Frak or F***
We started watching the new and improved Battlestar Galatica last night (via Tivo of course). First off, I like it a lot. Good story and a cool take on the old show.I however noticed the frequent use of the word, "frak" instead of another famous f word. What a clever way around the censors, I thought! The intention and meaning is the same as the often censored version. Yet, no one would bat an eye at work if I used, "frak". Seems silly to me to get upset over one word and not the other if the meaning and intent is the same, don't you think? I know, what a weird thing to pick up on, but is foul language really obscene? It's just a certain configuration of syllables. The meaning and intent should be more important and that is what should be offensive. We should ban talking mean and shouting, instead of picking on just certain words. So, FRAK OFF! (just kidding of course)
Words to live by
I've been on a funk kick as of late. It's amazing how just letting the "vibes flow through" can make you feel so much better. The messages are positive and fun. My favorite funk bands have to be PFunk (Parliament, Funkadelic, Bootsy, George Clinton, etc), Earth, Wind, & Fire, and Graham Central Station. All of them are spiritual without being preachy and 100% fun. The lyrics are filled with nuggets of wisdom like this one:
"You are as beautiful as your thoughts"-Earth,Wind,& FireSomething I think we can forget from time to time. It's a great one to remember. So, the next time you want to be ugly and lose your temper, remember this quote. Let's make this world a funky place. Dig?
Remember: Entice not insult
I got following quote from comp.lang.ruby in the weekly updates, discussing the hype of Ruby On Rails:
CD Baby:Just a simple remainder to all of us evangelists. It's easy to slip into bashing mode, but sometimes it's better to be the soldiers making rock soup. We should be getting the villagers excited in our soup so that they join us and make the collaboration that much richer!
"The constant hype is what kept me AWAY from Rails for so long! I just couldn't stomach the constant self-congratulations to it all.
Now I can't stomach the constant other-technology-bashing. (Java, PHP, etc)
Nobody wants their current beliefs insulted."
Saturday, March 26, 2005
Less Time
David Gorisek, author of the awesome STS system for Dolphin and OmniBase, answers why he uses Smalltalk in a comp.lang.smalltalk.dolphin:
Right on!
- If there
is something missing I can usually write it in Smalltalk in less time
than it would take me just studying the documentation for some Java/EJB
app server. Also, frameworks are a very little part of any big
application and writing web frameworks isn't really a rocket science.
The frameworks usually just grow along with the app in the direction you
need them to grow.
Right on!
Rant
Eliot Miranda has a great rant on comp.lang.smalltalk.dolphin about the history of Smalltalk and how to capture the hearts of future developers:
Amen!
- First VS was killed by ObjectShare, not by Cincom; Cincom has done their
best to make VS available, including maintennance releases, e.g. for
WinXP; i.e. the VW team puts effort into keeping VS alive, even if in a
coma. Further, note that some of those behind the "killing" of VS at
ObjectShare were senior figures at Digitalk. VisualWorks did not kill
VS, people in control of PPD/ObjectShare who were interested in making
money killed it, and they ended up loosing the company a lot of money,
and a lot of engineering talent in the process.
One major mistake ParcPlace and Digitalk management made was assuming
they were each other's competition and hence a merger eliminated each
other's major competitor. Java was just a few months away...
Second, Dolphin is not VW's competition, it is our ally. .Net and Java
are our competition (and to a lesser extent python, perl et al). It is
to compete against MS, IBM, Sun et al that we've provided a lower
entry-point for the single programmer, not to steal market share away
from Dolphin.
In fact the situation is quite the reverse. VW wants Dolphin to succeed
and we're worried whenever any dialect seems to be suffering. If one
looks at Smalltalk from an MIS perspective it can be perceived to be a
tiny niche with very few stable players. Market analysts denigrate
Smalltalk as a dead language that is going away and one that management
should leave in favour of typically Java and .Net. [But these analysts
are playing to the choir, not providing objective advice].
The more healthy vendors and active open source dialects there are in
the Smalltalk community the more the above misperception can be
countered and the more confident MIS types can be in choosing Smalltalk.
If one looks at market share as available dollars to be spent on
development and deployment technology then the choice is obvious. One
can wear blinkers and go after 100% of the few millions of dollars being
spent on SMalltalk development projects, attempt to eliminate the very
people that help bolster your own sales, and have a larger slice of a
rapidly shrinking pie. Alternatively, one can look at the total market
and attempt to gain a share of billions of dollars being spent on
development and deployment technology across the industry, and gain a
growing share of a growing pie. For the Smalltalk sector to to do the
latter it helps if it attempts to be a community and recognizes its
members can be of enormous help to each other. Being fearful of each
other is not the answer.
One important aspect of this is the evolution of Smalltalk. When
Smalltalk was developed it was funded by the most rapidly growing
technology company the world had seen and it was developed by a
relatively small team. Certainly the number of people working on Java
at IBM and Sun dwarf the amount of people working on hardware and
software at PARC in the 70's. i.e. it was relatively cheap for Xerox to
fund in the 70's, but funding a successor now would be much more costly
if Java and .Net are at all representative (which they may not be).
Now, if Smalltalk is to evolve, or a successor invented to obsolete it,
I think it extremely unlikely that this will happen in the context of a
corporate funder. i.e. I doubt that Alan Kay will be able to get HP to
provide sufficient commitment to do this.
Where else might it happen? The two obvious candidates are in
universities and in the "open source community". But since it is
universities that populate the open source community anyway we should
concentrate on universities. That is a place where people get exposed
to new ideas, fall in love with them, and often come up with good new
ideas. Companies like MS recognize this, which is why they are
targeting universities with technologies like Rotor (the open source
.Net platform) and funding for research. They are fighting for hearts
and minds.
Over the past two decades the university sector has become more
vocational in its teaching. Alan Kay lambastes no less than Stanford
university in his Croquet presentation for using Java for teaching.
When I was teaching in London University in the early 90's much debate
was between those that wanted to teach concepts and those that wanted to
"provide marketable skills". Government, with pressure from industry
(almost always short-sighted), sided with the vocationalists and good
computer science teaching suffered.
So if universities are to be places where people get exposed to the good
stuff like Smalltalk, Lisp and Prolog, one thing that will definitely
help is if the commercial members of these communities can demonstrate
that in fact their technology is not dead, is not esoteric, but in fact
in widespread and extremely demanding use in industry. [side note:
VisualWorks and VW/GemStone combinations are used in sectors such as cpu
manufacture, container shipping and derivatives trading on a world scale
(i.e. they handle a substantial fraction of the world's activities in
these sectors). But for nearly two decades the corporations who have
built these applications have viewed their use of Smalltalk as a
strategic advantage, and hence prevented the vendors from using the
applications in marketing material.]
The more the Smalltalk community can demonstrate commercial viability
and relevance the more widely it will be adopted by the universities
and the more minds will follow the arc of falling in love with
smalltalk, finding its limitations and dreaming of something better.
Amen!
Monday, March 14, 2005
Another Reason Squeak/Smalltalk Is Cool
I was reading the Squeak Swiki tonight and ran across this entry for running headless. Here is the interesting bit:
Now, read through it. Does anything catch you off guard? Well, I for one think it's very clever! It takes into account that Smalltalk is a live system. You can quit in the middle of executing code and have it resume it where you left off when you quit! WOW! Name one modern IDE that can do that! It caught me off guard for its simplicity and cleverness. It again shows the absolute power that Smalltalk has. You can execute the code to save and quit the environment (because it's written in Smalltalk) and have it resume where you left off in your code if it was running! I had never thought of doing this! It makes me slap myself! I've saved images with running threads before (and have them jump back to life when the image restarts, this is how my background changer for Squeak works), and I don't know why I didn't think of it before. It's simply "a DUH! moment" TM.Anyway, I wanted to blog this because I thought it was another testament to the simplicity and power of Smalltalk. By the way, I think you can do this in any Smalltalk and it will work (the messages will vary by vendor of course).
- Another option is:
Smalltalk snapshot: true andQuit: true.
"All your restore stuff goes here"
PWS serveOnPort: 80 loggingTo: 'log.txt'
Select all of this and DoIt. Your image will save-and-quit...IN THE
MIDDLE OF THE DOIT. When this image starts up, it continues the
DoIt, which is the restore and the PWS startup.
Now, read through it. Does anything catch you off guard? Well, I for one think it's very clever! It takes into account that Smalltalk is a live system. You can quit in the middle of executing code and have it resume it where you left off when you quit! WOW! Name one modern IDE that can do that! It caught me off guard for its simplicity and cleverness. It again shows the absolute power that Smalltalk has. You can execute the code to save and quit the environment (because it's written in Smalltalk) and have it resume where you left off in your code if it was running! I had never thought of doing this! It makes me slap myself! I've saved images with running threads before (and have them jump back to life when the image restarts, this is how my background changer for Squeak works), and I don't know why I didn't think of it before. It's simply "a DUH! moment" TM.Anyway, I wanted to blog this because I thought it was another testament to the simplicity and power of Smalltalk. By the way, I think you can do this in any Smalltalk and it will work (the messages will vary by vendor of course).
Sunday, March 13, 2005
Deep Philosophy
Vincent Foley has an excellent quote for quipping back to people who want to rain on your parade. I love it! Go read it here.
- “Billions of flies eat shit; doesn’t mean it’s good”
Fun Script Project
OK,
I decided to take a little break this weekend and do something that I've been wanting for a little while. What is it you might ask? Well, it seems rather dumb, but I like for my wallpaper to change. Now, when I was back in X Windows land, this was simple. Perl, crontab, and voila changing wallpapers. It seems to be more a challenge on windows. So, I dusted off google and found the solution. I implemented it in a quick and dirty little ruby script. All I did was put all of my images (already converted to bmp) into one directory and it cycles between them all. Nothing sexy really. I've just been curious on how to do this on windows. I have Squeak that changes my wallpaper of my current project. So, I wanted it all of the time. I'm a happy boy now. Here it is (like I said, it is ROUGH)
That's it! It's amazing how little information there is. I found changing the registry only by chance. And then, it will not update. Calling the rundll32 command by pure chance. It was a good learning experience and it makes me a little bit of a happier boy. One more note, I converted all of my jpg and gifs to bmp via Squeak. I couldn't find any conversion image stuff for Ruby. If anyone knows of any, let me know. Now, back to Fox/Ruby land for work on my Trail Blazer inspired tool...=)
I decided to take a little break this weekend and do something that I've been wanting for a little while. What is it you might ask? Well, it seems rather dumb, but I like for my wallpaper to change. Now, when I was back in X Windows land, this was simple. Perl, crontab, and voila changing wallpapers. It seems to be more a challenge on windows. So, I dusted off google and found the solution. I implemented it in a quick and dirty little ruby script. All I did was put all of my images (already converted to bmp) into one directory and it cycles between them all. Nothing sexy really. I've just been curious on how to do this on windows. I have Squeak that changes my wallpaper of my current project. So, I wanted it all of the time. I'm a happy boy now. Here it is (like I said, it is ROUGH)
require 'win32/registry'
#show bmp in file_name stretched
def show_wallpaper(file_name)
Win32::Registry::HKEY_CURRENT_USER.open('Control Panel\Desktop', Win32::Registry::KEY_ALL_ACCESS) do |reg|
reg['Wallpaper', Win32::Registry::REG_SZ] = file_name;
reg['WallpaperStyle', Win32::Registry::REG_SZ] = 2;
reg['TileWallpaper', Win32::Registry::REG_SZ] = 0;
end
`RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters`
puts "Showing: #{file_name}"
end
#Obtain the next file to use as wallpaper. Basically, cycle through the directory
def next_file_name(current_file_name)
found = false
first_file_name = nil
Dir['C:/wallpaper/*.bmp'].each do | any |
first_file_name = any unless first_file_name
return any if found
found = true if any == current_file_name
end
first_file_name
end
#Get the current wallpaper file
current_file_name=nil
Win32::Registry::HKEY_CURRENT_USER.open('Control Panel\Desktop') do |reg|
current_file_name=reg['Wallpaper', Win32::Registry::REG_SZ]
end
#get the next and then show
image_file_name = next_file_name(current_file_name.gsub(/[\\]/, '/'));
show_wallpaper(image_file_name) if image_file_name
That's it! It's amazing how little information there is. I found changing the registry only by chance. And then, it will not update. Calling the rundll32 command by pure chance. It was a good learning experience and it makes me a little bit of a happier boy. One more note, I converted all of my jpg and gifs to bmp via Squeak. I couldn't find any conversion image stuff for Ruby. If anyone knows of any, let me know. Now, back to Fox/Ruby land for work on my Trail Blazer inspired tool...=)
Saturday, March 12, 2005
Amen brother
Sam Griffith wrote an article named Ruby tools vs. Java tools... that is simply on the money. Never discount a technology because all of the bell and whistle tools are not there yet. I've been keeping my eye on Ruby for years because it is a great language. Hell, I've been secretly writing a tool for it that I use all of the time in Smalltalk. Why you might ask? Because I would like to see great tools in Ruby. A great language needs great tools. It helps in the amplification.
SmallHttpUnitTest is broken in VW 7.3
Well, it's broken for a little while. I looked at the problem and it seems to be around the cookies. I'm still looking into it. I've been rather busy with work as of late and haven't been able to spend a lot of time looking into it. But, I hope to have a solution soon. If you're hard pressed, it works great still in 7.2.
Danny Joe Brown of Molly Hatchet dies
Anyone that knows me, knows I love southern rock just as much as I love my metal. The news of Danny Joe Brown saddened me. I love the first three Molly Hatchet records. Danny's singing on the first two is just plain soulful and great. Great musicians simply rocking out on bad ass tunes. I don't even mind the quip about Alabama. Another great has fallen. A sad day indeed...
Friday, March 11, 2005
Tipping My Toe In Ruby Again
I've been playing around with Ruby again. It's nice to get a different perspective on things and the Ruby community shares a lot in common with us Smalltalkers. But, they are also different. Sure, we all love dynamic languages and know we're more productive. But, is there anything to learn from them? You bet! For one, they have an infatuation with blocks that leads to some cool designs and succint solutions! They also have philosophy that is pragmatic and to keep things simple. There's a lot of youth and excitement there as well. I'm having fun just playing around. One of the things that caught me off guard is not to have config files consist of data, but make them living code as well. So instead of some boring XML (or YAML) file, why not just use Ruby? The distinction of runtime and compile time is not there, so why have a data file? Make it executable and alive! It's one of those, "Gosh, well, YEAH! Why not?!!" It made me think of all the places we use static information when we can have objects that are alive. Anyway, I'll report more as I continue playing. I've known Ruby for awhile, but haven't really played with it in awhile. I think a lot of Rubyists would love Smalltalk if they gave it a chance.
Sunday, March 06, 2005
Encapsulation, Performance, and "DUH!"
I've been teaching a fellow programmer of the ways of the square bracket knights (I am but a mere squire, I know, please bear with me!) and he showed me some code that looked like the following:
Nothing wrong with that code, right? Well, my gut instinct was to rewrite the code thusly:
The only real difference here is that I used an OrderedCollection and then sorted. As I started to mention this to my friend, I heard the quote, "Premature optimization is the root of all evil!" I stopped myself cold. I knew the only change I was going to make was because of performance reasons. The next thought I had was, "Why does SortedCollection keep itself sorted all of the time?" I mean it is an object. Why not only sort when it is needed (when you send do:, collect:, reject:, etc)? Then, I could use a SortedCollection without having to worry about performance of sorting a large collection piece meal. It turns out to be a trivial change (simply override do:, add a flag to mark when sorting is needed, and that's it!) We get the performance improvement and the code above stays like it was originally. The way it should be. The user of the object doesn't need to worry about performance, the object does that work for them.
- | sorted |
sorted := SortedCollection sortBlock: [:a :b | a greatAttribute <= b greatAttribute].
someHugeFile linesDo: [:each | sorted add: (CoolObject from: line)].
sorted inspect
Nothing wrong with that code, right? Well, my gut instinct was to rewrite the code thusly:
- | toBeSorted |
toBeSorted := OrderedCollection new: someHugeCollection size.
someHugeFile linesDo: [:each | toBeSorted add: (CoolObject from: line)].
(toBeSorted asSortedCollection: [:a :b | a greatAttribute <= b greatAttribute]) inspect
The only real difference here is that I used an OrderedCollection and then sorted. As I started to mention this to my friend, I heard the quote, "Premature optimization is the root of all evil!" I stopped myself cold. I knew the only change I was going to make was because of performance reasons. The next thought I had was, "Why does SortedCollection keep itself sorted all of the time?" I mean it is an object. Why not only sort when it is needed (when you send do:, collect:, reject:, etc)? Then, I could use a SortedCollection without having to worry about performance of sorting a large collection piece meal. It turns out to be a trivial change (simply override do:, add a flag to mark when sorting is needed, and that's it!) We get the performance improvement and the code above stays like it was originally. The way it should be. The user of the object doesn't need to worry about performance, the object does that work for them.
Thursday, March 03, 2005
Omaha Smalltalk User's Group Meeting
It's getting near that time of the month again! So, instead of staying at home, why don't you come on down and see what all of the fuss is about? Come see the inspiration for countless languages, Smalltalk.
This month, Alan Wostenberg will be giving an updated and in-depth presentation on running FIT in VisualWorks. Hopefully this time the weather will behave. Here's all of the details:
When: March 8, 2005, 7pm - 9pm
Where: Offices of Northern Natural Gas
1111 S 103rd Street
Omaha Nebraska 68154
Office is at 103rd & Pacific. Guests can park in the Northern visitors parking area back of building, or across the street at the mall. Enter in front door, we'll greet you at the door at 7:00pm. If you arrive a bit later, just tell the guard at the reception desk you're here for the Smalltalk user meeting in the 1st floor training room.
This month, Alan Wostenberg will be giving an updated and in-depth presentation on running FIT in VisualWorks. Hopefully this time the weather will behave. Here's all of the details:
When: March 8, 2005, 7pm - 9pm
Where: Offices of Northern Natural Gas
1111 S 103rd Street
Omaha Nebraska 68154
Office is at 103rd & Pacific. Guests can park in the Northern visitors parking area back of building, or across the street at the mall. Enter in front door, we'll greet you at the door at 7:00pm. If you arrive a bit later, just tell the guard at the reception desk you're here for the Smalltalk user meeting in the 1st floor training room.
Subscribe to:
Posts (Atom)