Sunday, June 19, 2005
Excited about Smalltalk Solutions
I haven't been blogging much lately. Lots of stuff has been going on, but I thought I'd mention how excited I am about going to Smalltalk Solutions this year. I can't wait to meet my peers in the competition. I'm hoping to make some new friends! And we all can do with more of those right? I'm also excited at the list of presenters. It would be cool to spend an evening picking the brains of some of these guys. I just finished Eric Evans' book, "Domain-Driven Design" and it was a great read. And of course, Niall Ross will be cool to increase my meta-fu! And the list goes on and on! It will be nice to meet up with old friends and find new ones. Also, I hope there's a lot of action at Camp Smalltalk! So, everyone look out! I'm bringing the energy...=) Email me if you want to get together! SMALLTALK ON!
Tuesday, June 14, 2005
Omaha Smalltalk User's Group
OK, this month's meeting is real special. We're teaming up with the SPIN group to present a really cool presentation! Here's the details:
A special thanks to Alan Wostenberg for setting this up!
This month we have a real treat. Mike Cohn, a Denver Scrum expert,
will introduce us to Agile Estimating and Planning.
We'll look at why traditional planning fails,
how to overcome those problems with a story-driven process,
how to estimate and plan with stories,
and why agile planning works.
We'll round out the evening with an interactive estimating
exercise over pizza that will give you
specific techniques to apply in your own work.
About Mike Cohn. Mike founded Mountain Goat Software{1} in 1993 to
help organizations apply agile development methods to difficult
software problems.
Mike is certified in Scrum{2} and author of User Stories Applied
and the forthcoming Agile Estimating and Planning (Fall, 2005)
Venue:
7pm next Tuesday June 21 2005,
Northern Natural
Gas, 1111 S 103rd Street, Omaha,
Room 149
Join us! If you plan to attend, visit www.omahaspin.org and register.
{1} www.mountaingoatsoftware.com
{2} www.controlchaos.com
A special thanks to Alan Wostenberg for setting this up!
Saturday, June 11, 2005
Laptop's Back
I got my laptop back yesterday and it's almost back to operational status. I'm glad it's back fixed. But, I must admit the whole experience with HP support has left me cold. They almost refused to service my laptop because of a scratch on the outer shell and the hard drive had gone bad which was the real problem. I spent extra money on their three year three day fast fix warranty and they had the laptop for over two weeks. It took several phone calls before they agreed that they were being silly and they just needed to replace the bad hard drive. Grrrrr...So, the laptop comes back and they note they haven't fixed anything, BUT THEY HAD. It's enough to make you go to the funny farm. I can't believe how poorly I was treated. I'm a pretty tolerant person. And, to me an extended warranty is insurance for anything going wrong through normal wear and tear. I baby my laptop and was shocked how quickly they wanted to snake out of their obligations. I'm simply glad I got my laptop back in one piece and fixed. I spent nearly 8 hours on the phone over the course of the ordeal. So, what did I learn? Think twice before I buy anything from HP again and never buy another extended warranty. Trust me you are throwing your money away. What's the point of insurance if the company doesn't honor their end of the agreement? It just means you're giving them more money and getting nothing in return. Alright, time to SMALLTALK and create some love in this world!
Monday, June 06, 2005
Missing my Laptop
I've been without my laptop for the best part of a week now and I'm starting to miss it. I've set up linux on one of my old machines in the meantime. So, it's not all bad and I've been catching up on a lot of reading in the meantime. I plan on blogging on my ordeal with HP once everything is done. Somne of it was really silly. But, it's getting fixed now (the hard drive went out) and I should have it before the weekend. This is after several phone calls and almost in tears. Besides, I'm anxious to start playing around with prototype languages since I think I now understand it more now than I did before. I thought I might implement one in LISP just for fun. Who knows? Let's hope my laptop comes soon!
Sunday, June 05, 2005
Prototype Eureka
I've been reading a ton of articles on prototype-based programming. I even bought Prototype-Based Programming: Concepts, Languages and Applications which is an excellent introduction to the subject. So, I was thinking prototypes are a great idea, but I had some reservations since I have been so long in the class-based camp and prototypes are radical. I had basic questions of like how do I organize my programs now? Well, I found "Organizing Programs Without Classes". What an amazing read. It answered all of my questions and gave me my first "Eureka!" moment in prototype-based programming. It all feels so liberating! I can't wait to get my laptop back and continuing my studies of Self and Io!
Omaha Ruby User's Group
It's time to hold the second meeting of the Omaha Ruby User's Group. This meeting is just a simple get together like the last one. The only planned topic is to be bring your favorite pieces of Ruby code or your curiousity. Hope to see a lot of people there! Make sure you sign up on the mailing list. Here's the information of the when and where:
| When: | June 6, 2005 |
| Where: | Panera @ Eagle Run Shopping Center 13410 West Maple Road Omaha, NE 68164 |
Thursday, June 02, 2005
Ain't I Cool?
I'm sorry but I need to toot my own horn. Look at this:
How COOL is that?! I can't believe that I'm in the top 3! I am so excited! I can't wait to meet the fellows in the top 3 with me. It'll be great to sit and chat with them! This is great news since my laptop has been sick this week and that's why it's been slow on the blogging part. I can't wait to get out there and mingle with my Smalltalk brothers and sisters! This is going to be so much FUN! I can't wait to compete! See everyone June 26! SMALLTALK ON! Oh, I almost forgot I would like to thank everyone for putting on this contest! It was MAD FUN!
The Smalltalk Industry Council is happy to announce the winner of the first portion of the 2005 Smalltalk Solutions Coding Contest. Congratulations on a fantastic job. The winners in no particular order are:
- Blaine Buxton
- Michael Lucas-Smith Sorry for the misspelling before!
- Andrei N.Sobchuck
How COOL is that?! I can't believe that I'm in the top 3! I am so excited! I can't wait to meet the fellows in the top 3 with me. It'll be great to sit and chat with them! This is great news since my laptop has been sick this week and that's why it's been slow on the blogging part. I can't wait to get out there and mingle with my Smalltalk brothers and sisters! This is going to be so much FUN! I can't wait to compete! See everyone June 26! SMALLTALK ON! Oh, I almost forgot I would like to thank everyone for putting on this contest! It was MAD FUN!
Thursday, May 26, 2005
Morphic Thesaurus
I've been dabbling with morphic lately and this is the result. It was a fun learning experience. I love using a thesaurus as I've mentioned before here and I wrote a little utility to look up words in one. I can see myself writing a lot more utilties in morphic for myself. This wa only the first. So, if you have Squeak, it's on SqueakMap under the title, Thesaurus. Now, I have my beloved thesaurus built into my Squeak image. ROCK! Now, I need to implement it in Eclipse. But, I have a few other projects that need to be taken care of...=)
Tuesday, May 24, 2005
Shock And Awe Squeaking In Omaha
All I can say about Steve Wessels's demo on Squeak tonight is "Wow". A tour de force of what you can do in Squeak. I got to see a lot of it before he gave it and I helped a little bit (Steve did all of the work). I think we all decided that after 4 hours of intense Squeak presenting (remember this carried over from the last meeting) that we now need to give more in-depth presentations on various parts that Steve presented. So, it looks like we have a lot to discuss this summer! SQUEAK ON!
Thursday, May 19, 2005
Mad Fun
I'm glad I posted my submission to the coding contest. Micheal-Lucas Smith posted his as well and I had a lot of fun reading the code and looking at the web application. Man, I would hate to be a judge! He did such a fantastic job. I didn't think about using Prevayler, but I wish I had. It's simply awesome what he did! If anyone doubts what you accomplish with Smalltalk, look no further. It will be exciting to see what other people did as well.
Smalltalk Coding Contest Submission
I thought it would be nice to make my Smalltalk coding contest submission available. Just download the zip file and extract it. Simply run the Squeak image and follow the instructions in the workspaces. Now, the code is still rough (make that extremely rough). I'm a little embarassed by some parts of it. But, I am a perfectionist and a firm believer in elegant code. There's a lot of things in Seaside that I didn't use, but should have that would have made my life a lot easier and cleaned up a good bit of the code. The domain is rough as well. There's a great deal of work that I would love to do to it both design and code wise. I've had many thoughts on the subject since yesterday. But, it was 48 hours to complete and I'm happy that I exercised all of the domain with unit and acceptance tests. I also realized that I need to fix SmallHttpUnitTest for VW7.3 and port it over to Squeak as well. But, I digress, I thought making my submission available would be fun for people to see. I thought it would be great to write an article about it and using Seaside. Right now, the code is a barely acceptable form of using Seaside. But, it would be great to write an article on refactoring it to use all of the cool fixtures that are available. We'll see. Anyway, enjoy! If anyone has any thoughts, feel free to drop me a line! Oh and one more thing, I wrote the workspaces in the image at 6am on pure adrenaline alone! And it all needs to be heavily refactored. I was trying to see how much functionality I could provide in 48 hours and minimal sleep.
Wednesday, May 18, 2005
Smalltalk Contest
I participated in the Smalltalk Coding Contest. It was mad fun! I had a blast doing it. Huge thanks goes to Jason Jones and everyone involved in getting this off the ground! Hats off! I would like to thank all of the developers that I built my on top off. I truly stood on the shoulders of giants to get the task done. It was great coding in Squeak and seeing how much I could accomplish in a short period of time. I plan on doing a presentation on it. The task was to write a survey taking tool that allowed you to view the results. I'll probably post my code later. It's still a mess, but what do you expect in 48 hours? Oh, and have I mentioned how much I love Seaside lately? If not, I'm saying it now! Now, I'm keeping my fingers crossed. I hope I'm a finalist!
Resumable Exceptions
Time for another "this is why Smalltalk is cool" post, but this one also holds true for Ruby And Lisp as well. So, it's a "why Smalltalk, Ruby, and Lisp kicks mucho booty" so to speak. OK, enough of the back patting and let's get down to business. Today's topic is resumable exceptions. It has a nice geeky ring to it doesn't it? The first thing you might ask yourself is, "Why in the world would I want to resume an exception? It's an exception! Dead programs tell no tales!" True, true. Normally, you want an exception to send your program down in flames because you had a mechanical glitch that you didn't expect. Better stop everything before the propeller goes slashing through your data unkindly! But, what if we had exceptions that were good that could notify us of potential bad things or even enumerate potential bad things? Well, we do and we can! Smalltalk has a different take on exception handling. Much like a nuclear reaction in a controlled environment gives you energy, and mass destruction otherwise, Smalltalk allows us finer control over exceptions and what we can do with them like resuming. This is a powerful idea and it allows us to do unheard of feats in other languages especially when it comes to things like validation. For example, say we had the following code:
Pretty simple, right? Well, what if our form is very complicated and it's validation method looked like this:
Pretty straight forward and under normal circumstances, our validation code will always signal on the first occurance it finds. Well, for the user it will get tiresome because it only points out each exception one at a time. The user will start to feel like Curly from The Three Stooges. And we don't want hairless users running around do we? Now, what if we could resume and just tabulate the validation exceptions and show them at once? No code changes in the form validation code, just in our handling of it. Well, we can do just that! Here's the new code:
I left out some of the variable declarations to ease the readibility, but you get the gest of it. We now can resume on each occurance of the validation exception! Very cool! But, it doesn't stop there. We can return values from exception signals via resumes and this allows things like dynamic scope variables. Enjoy. Ruby's exceptions are resumable too. So, what are you waiting for? Go play!
[self form validate]
on: ValidationException
do: [:exception | ^self informUser: 'Validation Failed: ', ex messageText].
self form save.
Pretty simple, right? Well, what if our form is very complicated and it's validation method looked like this:
validate
self name size > 25 ifTrue: [ValidationException signal: 'Name size > 25'].
(self email contains: $@) ifFalse: [ValidationException signal: 'Invalid Email'].
Pretty straight forward and under normal circumstances, our validation code will always signal on the first occurance it finds. Well, for the user it will get tiresome because it only points out each exception one at a time. The user will start to feel like Curly from The Three Stooges. And we don't want hairless users running around do we? Now, what if we could resume and just tabulate the validation exceptions and show them at once? No code changes in the form validation code, just in our handling of it. Well, we can do just that! Here's the new code:
[self form validate]
on: ValidationException
do:
[:exception |
validationMessages add: exception messageText.
exception resume].
validationMessages isEmpty ifFalse: [^self informUser: 'Validation Exceptions' messages: validationMessages].
self form save.
I left out some of the variable declarations to ease the readibility, but you get the gest of it. We now can resume on each occurance of the validation exception! Very cool! But, it doesn't stop there. We can return values from exception signals via resumes and this allows things like dynamic scope variables. Enjoy. Ruby's exceptions are resumable too. So, what are you waiting for? Go play!
Saturday, May 14, 2005
Jealous: Dolphin 6 Beta
Apparently, Dolhpin 6 Beta is out. I'm jealous that I wasn't picked to be one of the beta testers! DARN IT! I guess I have to wait with the rest of the good folk to wait to see what they have cooked up for us. It looks simply wonderful thus far. I have always maintained that Dolphin is the cleanest of all the Smalltalks. It's elegant and beautiful. A simple joy to program in. I simply wish that I would have been one of the choosen few. DARN IT! Oh well, I guess I can wait another few months for greatness...=) I can guarantee it will be worth the wait for all of us! Are there any beta testers that I can bribe for a peak? Kidding, of course...=)
Wednesday, May 11, 2005
Io
I finally got around to taking a serious look at Steve Dekorte's Io language. I subscribe to his blog and it's always a great read. I finally got around to looking at Io since my interest in prototype-based languages is peaking again. It's a wonderful language and from the 10,000 foot view has everything that will be fun to explore. It's inspired by Smalltalk (everything is an object, right on), but has a lot of cool Lispisms (Access to the parse tree...could it possibly do Lisp macros? Yummy! I've been thinking of using code generation and meta-programming together and this looks perfect!). Oh, and did I mention that it's also been inspired by a host of other cool languages like Self and NewtonScript? The syntax is nice and simple. It's been downloaded and I'm ready to learn my language of year! I want to fully explore the prototype-based OO paradigm because I find myself drawn to it because of it's simplicity and it just feels beautiful to me. I'll be blogging more of my thoughts soon...
Metal Church Memories
I listened to the first two Metal Church albums today and they brought back a lot of memories. Most of them are them are from good programming times and my parents freaking out over the lyrics. I remember one time was getting into programming and my father overheard me singing the lyrics to one of their songs. He started to worry when I sang "We kill tonight" from the computer room. I remember my mother sitting me down to tell me my father was worried about me. At least, they were understanding. Man, it's weird when your heroes start dying. I only knew David from his music, but heavy metal music was very important to me when I was growing up. It holds a special place in my heart along with the musicians that create it. They gave me hope and inspiration to keep fighting the good fight. I know it sounds corny and weird, but it's true. Thanks for all of the great memories dude, RIP.
Omaha Smalltalk User's Group Part 2
I am proud to announce an emergency second meeting this month for the OSTUG! Steve's presentation went over so well that we're creating a special meeting just to hold part 2! We didn't get to the Croquet demo because Steve had so much cool stuff to show (Don't worry we're going to get to it). Part 2 promises to be even more exciting. So, if you want to see the future of computing or just do something cool, come see what Squeak can do for you! Steve gives a great presentation that will have you pumped to write Squeak code. Here's the details:
Here's all of the details:
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.
Here's all of the details:
When: May 24, 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.
David Wayne Dead At 47
David Wayne, original singer for Metal Church, has died at 47 from complications from an automobile accident. Wow, I am in shock. Two of my favorite albums as a teenager were Metal Church's debut and "The Dark". David Wayne sang on both of those albums. I loved his voice. I'm telling you that on the other side there is one hell of a band playing. RIP, David and thanks for all of the wonderful music.
Monday, May 09, 2005
The Art Of Thinking
I just finished reading "The Art of Thinking" by Harrison and Bramson. It's a wonderful little book which despite it's title is more about understanding yours and everyone else's thinking styles. It's an easy and enjoyable read. There's a test in the back and here's how I scored:
Basically, I'm pretty even across the board with a slight preference for Analyst and Realist styles and I am weak in the Synthesist style. Now, this doesn't mean anything bad, it's just a getting to know yourself exercise. All of the thinking styles have strengths and liabilities. It has a lot of practical advice on how to figure out what thinking style someone is and how best to influence them to get your ideas heard. It was also helpful for me to know when I tune someone out to why. It gave me a lot of homework and things to try out. Nothing is better than self improvement. It should be mandatory reading for every shop that pair programs.
| Thinking Style | Score | Meaning |
| Synthesist | 47 | Moderate Disregard |
| Idealist | 53 | Moderate |
| Pragmatist | 50 | Moderate |
| Analyst | 61 | Moderate Preference |
| Realist | 59 | Moderate |
Basically, I'm pretty even across the board with a slight preference for Analyst and Realist styles and I am weak in the Synthesist style. Now, this doesn't mean anything bad, it's just a getting to know yourself exercise. All of the thinking styles have strengths and liabilities. It has a lot of practical advice on how to figure out what thinking style someone is and how best to influence them to get your ideas heard. It was also helpful for me to know when I tune someone out to why. It gave me a lot of homework and things to try out. Nothing is better than self improvement. It should be mandatory reading for every shop that pair programs.
Omaha Smalltalk User's Group
This month, Steve Wessels and Blaine Buxton will be talking about Squeak and Croquet. Basically, if you've never done anything with Squeak, now is the time to learn. Steve has an unforgettable presentation on the abilities of Squeak. We will demonstrate Croquet and give a more detailed presentation on it next month. As always, bring snippits of cool code and we'll continute discussing Seaside, rules, and FIT project.
Here's all of the details:
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.
Here's all of the details:
When: May 10, 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.
Wednesday, April 27, 2005
Think Dynamic
I overheard this on the ruby-talk mailing list from Lothar Scholz:
This is in response to the popular "but, dynamic languages can't have auto-completion" baloney argument. First off, Squeak and VisualWorks both have auto-completion that works very well. I do tend to use it, but not very often. I certainly don't use it as much as I do when I am programming in java. Dynamic languages don't require as much cognitive friction and things just seem to flow. Auto-completion just isn't an issue. I simply loved Lother's response because it typifies the thought divide between dynamic and static language users. We "think different" because our tools allow us to create in more grandiose ways and allows access to better abstractions.
We are using a different type of language but too many people still
think in static terms. A completition popup can't look the same as in
java/C++ and the data gathering phase can't work with static source
code analysis alone. I'm not a mac guru, but follow apple and
"Think different"
This is in response to the popular "but, dynamic languages can't have auto-completion" baloney argument. First off, Squeak and VisualWorks both have auto-completion that works very well. I do tend to use it, but not very often. I certainly don't use it as much as I do when I am programming in java. Dynamic languages don't require as much cognitive friction and things just seem to flow. Auto-completion just isn't an issue. I simply loved Lother's response because it typifies the thought divide between dynamic and static language users. We "think different" because our tools allow us to create in more grandiose ways and allows access to better abstractions.
Programming and Craftsmanship
I've been enjoying reading Ora Lassila's Blog lately. I particularly enjoyed his entry on Programming as a craft. I agree with his sentiment 150% (OK, talking about framing his source code was a little much for me, I've never written code that I was THAT proud of...There's always room for improvement IMHO). It seems all too often that people think that programming computers could be done by anybody. It's true you can take anybody off the street and teach them to program, but can you make them great? I don't think so without a lot of training and passion from the trainee. The same passion that drives a great artist must be the same passion for a programmer. It's what separates the average from the good from the great. Peter Norvig has an excellent essay entitled "Teach Yourself Programming in 10 Years" which takes the position that to be great at something you must have passion and the will to practice to become better. In the paper, he argues that programming is a craft that needs to be practice to be mastered. If you would like to read a great book on the subject, read Software Craftsmanship by Pete McBreen in which he talks about having aprentenceships and masters like in the old days of blacksmiths. I love the idea of being a craftsman practicing my art everyday. Great programmers live and breathe for code. They spend every waking moment practicing and learning about their craft. One important thing that I have found about great programmers is the lack of arrogance (I've never seen an arrogant great programmer...Arrogant programmers might think they are great, but usually are only great with hot air). The great ones are humble and know that they will never know everything. They are equally eager to learn as they are to teach. I wouldn't consider myself to be great by any stretch, but I LOVE working with great developers. In fact, I think everyone has a trick that they can teach me. Camp Smalltalk 2004 allowed me to have access to some of the best minds in Smalltalk and programming in general. Everyone was eager to share and the colloboration was envigorating. I walked away with my brain hurting! I LOVED IT! I wish we could have programmer guilds where I could go and learn. I have a list of mentors that I would love to learn under. The Master of Fine Arts program at the University of Illinois was exciting for that very reason. A chance to be mentored by the best. The internet has enabled me to get closer to the best and that's a great thing. I guess this post was more of a "right on" of what other programmers have been blogging and a wish. I wish we treated programming like a craft that someone has to work at to get good at like music and painting. All programmers are not at the same level of competence much like musicians and artists are at different levels. As with any craft, you are constantly learning new ways of doing things and pushing yourself. I think it would be fun to work on a Lisp or Scheme project full-time just for the fun of it. How awesome would that be? I play with Lisp in my spare time, but I know an experienced Lisper could teach me a lot of tricks. Now, wouldn't that be cool? Well, I'm going to go practice my craft!
Tuesday, April 26, 2005
Cool Mouse Modification
Some people have too much time on their hands, but this is cute. It's basically a way to modify your mouse. Pretty cool and inventive stuff. I wonder why no one thought of it before. Mouse on!
Saturday, April 23, 2005
Quotes
I found the following quotes on Peter Norvig's site. Lots of quick spin doctor cleverisms (yeah, I made that word up). Check it out!
Omaha Ruby User's Group
I am proud to announce a new user group, Omaha Ruby User's Group. Our first meeting is just a simple get together. I'll be there with my laptop. The only planned topic is to be bring your favorite pieces of Ruby code or your curiousity. Hope to see a lot of people there! Make sure you sign up on the mailing list. Here's the information of the when and where:
| When: | May 2, 2005 |
| Where: | Panera @ Eagle Run Shopping Center 13410 West Maple Road Omaha, NE 68164 |
Friday, April 22, 2005
Cool Google Talk
I'm a little slow, but I finally got around to watch Jeff Dean's presentation at Washington University on Google's architecture and culture. It's a great one hour talk. It made me go out and immediately download the paper on their "MapReduce" framework. One of the things that stood out for me is the "20%" rule. Basically, Google engineers spend 20% of their time on anything that tickles their fancy and most of their innovations have come from this time. Imagine that, give developers a little free time to innovate (or just think about a different problem) can be just the creative juice to make you a market leader. I've always believed that developers should have time to pursue their passions no matter what they are. We need time to play so to speak. Google not only embraces it, but encourages it. How lucky their engineers are. He continues by statting the "MapReduce" framework came from this same rule. What started out as a simple experiment has turned into a major piece of Google's processing infrastructure. I love the simplicity of it. They took an idea from functional programming and allowed their developers to take advantage of parallel computing. The video is also interesting to see what technological feats that they had to overcome to provide fast searches. All I can say is, "WOW!"
Tuesday, April 19, 2005
Dolphin 6 is coming
Dolphin 6 is coming. I'm jumping up and down with excitement! I CAN'T WAIT! I love Dolphin 5. Let's hope I get picked for the beta team...Oh powerful Smalltalk gods, please let me be one of the first to play with the ultra cool new version. OH PLEASE....OH PLEASE!
Monday, April 18, 2005
New Version of Java Serialization Package
I've posted a new version of my on-going Java Serialization Package in Squeak to SqueakMap. It's for Squeak 3.8 (it doesn't work for older versions, sorry!) Check out my projects page for more information on how to get it. So, what's new for this release? Well, I made a ton of bug fixes, refactored some things, added more tests, added support to load classes via a class path, and started a VM simulation. Now, the simulation stuff has its tests commented out (it ain't even close to working), but I decided to include it anyway. I'm kind of shocked about how much stuff I have now in this project. What started out as a little project to just read in java serialized objects has turned into a lot more. It's also suprising because it's not something that I work on full-time, just when the mood strikes. Where do I plan to take it in the future? Well, I would like to finish up the VM simulation in the distant and adding RMI capabilities in the near. Why RMI? Let's just say I've been reading my Jini and JXTA books again...=) I must admit that coding all of this stuff has made me learn a lot about the internals of java.
Saturday, April 16, 2005
Unit Testing Structure Via Reflection
I love testing my code. I'm still not to writing the test first though. I tend to write a small bit of code and then, write the test. Bad monkey, I know! But, I do testing and coding in small steps at least. Writing the test first gets the protocol to feel right from the get go. Testing is great to ensure my code works correctly but, what if I want to test the structure of my code? You might ask why anyone would want to do that. For one, I found it great to make sure code is used correctly. For instance, I've been writing a tolerant XML parser (that also parses HTML) for use in some of my projects. In my parser, I use a temporary output stream that I keep around for purely performance reasons. The only problem is that if two nested calls try to use it, there is a clash and weird results happen. So, I restricted the use to one method. But, what if I forget about this method and use the direct accessors? Even in languages that provide constricted access, this would be a problem since access is local to the object and "private" would still make it accessible. So, I wrote a test to tell me when I have done something wrong and tell me! First, let me show you the one method that I want the internal methods in my class to call:
There's a lot of possibilities to explore here. One use could be to make sure access to certain methods is caught. It might be fine to call the method, you just might want to make someone think before they use it. Think of some of the lint checks for "become:". And speaking of lint, you could have lint tests like this to make sure that are no non-referenced instance variables in your classes or senders of "halt". Just another testament to the power that we enjoy in Smalltalk.
useOutputDuring: aOneArgBlockI basically send in a block that takes the stream as an argument. It then returns the contents of the stream and resets the stream for the next user. I also added a check in the beginning to warn me if it gets invoked from nested calls. Now, here's the test method:
self output position > 0 ifTrue: [self warning: 'Output is being used'].
[aOneArgBlock value: self output.
^self output contents]
ensure: [self output resetToStart]
testOutputConsistencyThe first two asserts make sure that only one setter and getter access the instance variable, output. I like accessors, so I doubt I will ever violate those, but you never know when a brain fart might occur. The last two asserts are to make sure that there is only one sender of the "output" method and that it is the "useOutputDuring:" method. This test is super easy with Smalltalk's metaclass facilities where not only can I query a class's method and instance variables, but I can also ask questions of the code itself. Smalltalk is super nice in the fact that I can questions like "Who accesses this variable?" and "Who sends this method locally?" Very powerful stuff to use ensure code is used correctly or at least warn a developer about it.
| accessors localCalls onlyCall |
accessors := OrderedCollection new.
self readerClass withAllSubAndSuperclassesDo: [:class |
accessors addAll: (class whichSelectorsAccess: 'output')].
self assert: (accessors size = 2).
self assert: (accessors allSatisfy: [:each | each = 'output' or: [each = 'output:']]).
localCalls := self readerClass allLocalCallsOn: #output.
self assert: (localCalls size = 1).
onlyCall := localCalls anyOne readStream upTo: Character space; upToEnd.
self assert: onlyCall = 'useOutputDuring:'
There's a lot of possibilities to explore here. One use could be to make sure access to certain methods is caught. It might be fine to call the method, you just might want to make someone think before they use it. Think of some of the lint checks for "become:". And speaking of lint, you could have lint tests like this to make sure that are no non-referenced instance variables in your classes or senders of "halt". Just another testament to the power that we enjoy in Smalltalk.
Sunday, April 10, 2005
Meeting The Challenge
Dave Thomas made a challenge to have executable unit test comments in Ruby based on this Python project. I thought it was a neat idea. At the very least, I was inspired and thought it would be a fun weekend Ruby project. It was fun reading through the RDoc and RUnit code. I posted my code here for Executable Comment Unit Tests. It works with the Runit test framework and uses the parser from RDoc. It's only one file and not that big. It only took me one day to do the code and most of the time was spent reading code. Take it from it what you will. Now, on to my thesaurus project, my second weekend project.
Saturday, April 09, 2005
Excellent Article on Naming
Mike Clark has written an excellent article entitled: "Tame The Name". It relates to my thesaurus entry in that Mike emphasizes my point of naming things properly in code. It's a great short article and well worth a read. It will make your code-fu better, I promise.
Friday, April 08, 2005
Lazy Collections In Ruby
I ported my Squeak Lazy Collections project to Ruby tonight and called it Lazy Enumerable. It was amazingly a pretty much straight forward port. Basically, the point of the project is not to create a new collection every time you call select, collect, reject on a collection. It simply holds on to the block and the original collection. Now, the fun begins when you start nesting. For example:
All I do is call the same add_monadic_valuable method, but with a twist. I create yet another block that calls the select block inside to see if the value is true or false. If false, we pass back that IGNOREABLE_OBJECT. In the Smalltalk version, I originally threw an exception but took it out when the performance suffered. So, in short, I simply turn my select into a special case of collect! Now, how do I support rejects? Do I copy the code for select and use unless? Nope, all I do is negate the reject block before I send it into the add_select method. How do you do that? Like this:
temp=some_collection.select do |each|Basically, the lazy enumerable combines the blocks for the collect and select into one and will not calculate the merged collection until some method like each or size is called. So, how do you do that? Well, the code for calling each on the LazyEnumerable looks like this:
each.is_interesting
end
answer=temp collect {|each| each.to_something}
def each(&proc)I simply call each on the original collection and then call the block defined in myself (which I call monadic) that simply transforms values when called. Now, I return a special value if it should be ignored. This will be covered when you add a select block. For now, let's look at the simple case of adding a block that collects:
self.original.each do |each|
if (self.monadic.nil?)
answer=each
else
answer=self.monadic.call(each)
end
proc.call(answer) unless answer === IGNOREABLE_OBJECT
end
end
def add_collect(&proc)This passes straight through to this method:
add_monadic_valuable(&proc)
end
def add_monadic_valuable(&proc)The interesting part is when I set my instance variable, monadic. I'm basically combining the current monadic with the new one passed in. Pretty cool, huh? I think this is the kind of stuff that functional programmers love. I can see why. It feels right. Now, let's look at how to add a select block:
current=self.monadic
if (current.nil?)
self.monadic=proc
return self
end
self.monadic=lambda do |each|
result=current.call(each)
if (result === IGNOREABLE_OBJECT)
result
else
proc.call(result)
end
end
self
end
def add_select(&proc)
add_monadic_valuable do |each|
if (proc.call(each))
each
else
IGNOREABLE_OBJECT
end
end
end
All I do is call the same add_monadic_valuable method, but with a twist. I create yet another block that calls the select block inside to see if the value is true or false. If false, we pass back that IGNOREABLE_OBJECT. In the Smalltalk version, I originally threw an exception but took it out when the performance suffered. So, in short, I simply turn my select into a special case of collect! Now, how do I support rejects? Do I copy the code for select and use unless? Nope, all I do is negate the reject block before I send it into the add_select method. How do you do that? Like this:
- class Proc
def negate
lambda {|each| !self.call(each)}
end
end
Thursday, April 07, 2005
Use The Ummmmm Thesaurus, Luke
I was working on a little Ruby project tonight. Basically, it's a simple upcoming calendar for just me. Nothing special. So, I started with an Event object and it is responsible for representing a calendar entry. Now, it needed to know when it was to happen and some descriptions. So, I gave it 3 instance variables: when, title, and description. The next question was how was I going to represent when. I knew it needed to display itself and compare itself to other whens (for sorting). I initially thought of the name, DateRange, since it is responsible for holding a range of dates. But, I didn't like the name because I wanted to represent the concept of future dates and a single date. DateRange just didn't feel right because it seemed too specific. So, what do I do when I don't like a name for an object? I go to my trusty thesaurus for the answer! Within seconds, I had a page full of words and one jumped right at me: "MOMENT"! EUREKA! Moment was the perfect name for this new object. It conveys the meaning of its responsibilities exactly. This way I could have FutureMoments, DatedMoments, and even UndefinedMoments. I use a thesaurus a lot in my development lately and it's an idea that I got from "Thinking Forth". It's a simple and brilliant idea. It starts getting you to think about concise words to name the objects of your model more precisely. Anything that makes meaning clear and succinct is always good in my book!
Smalltalk For Java, C#, and C++ Developers
While reading he "Smalltalk vs. Squeak" thread on comp.lang.smalltalk, I came across this document that Fernando posted. It's written with C++ programmers in mind, but I think it's for anyone who thinks Smalltalk's syntax is weird. It starts talking about the parser and moves to why the syntax is the way it is. So, if you know of any java, C#, C++, or C developers that offer the same ole "but, it's syntax is weird" line. Point them to here. And let them feel the love too.
Monday, April 04, 2005
Omaha Smalltalk User's Group
If you could only have 1 mantra to use that had to direct all your future philosophies, what would it be? If you have ever read 'The Selfish Gene' you are familiar with the idea of memes. A meme is a contagious idea competing for a share of our mind in a kind of Darwinian selection. The meme/mantra that we will take a look at in a software context is a paper called 'Collect what works' (the mantra!) by Stan Silver. This should be a fun free for all where we will consider the idea of solution spaces, and one of my favorite quotes: 'to gain knowledge, add something everyday. To gain wisdom remove something everyday'.
This month, Gary Overgard came up with the suggestion. Go to http://www.blainebuxton.com/ostug/CollectWhatWorks.doc to read the Collect What Works paper. Also, we would like to discuss using Gary's rules engine with Seaside as a Smalltalk FIT replacement. And as always bring your favorite snippets of Smalltalk code!
We're also now on meetup.com. So, sign on up!
Here's all of the details:
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, Gary Overgard came up with the suggestion. Go to http://www.blainebuxton.com/ostug/CollectWhatWorks.doc to read the Collect What Works paper. Also, we would like to discuss using Gary's rules engine with Seaside as a Smalltalk FIT replacement. And as always bring your favorite snippets of Smalltalk code!
We're also now on meetup.com. So, sign on up!
Here's all of the details:
When: April 12, 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.
Can Your Language Do This?
I've been an avid Squeaker for awhile. I use the Method Finder all of the time to find methods, but never used the advanced features despite Steve Wessels' rants about just how cool it really is. Well, I started to goofing with it tonight and nothing is going to be the same. OK, it's a simple method finder with a twist. I can type in partial names of selectors, but what if I don't know the selector. What if the only thing I know is the arguments and the answer? Well, it can find the answer! For example, say I want to find a degrees to radians conversion. So, I type the following: 180. 3.1415926.. Separate everything with periods and the last thing is the answer you desire. The method finder found the following method: Number>>degreesToRadians and Float>>degreesToRadians. WOW! How cool is that?! I spent half the night typing in arguments and the results to see what it would found. I was surprised! Squeak never ceases to amaze me. Click the Method Finder link to go to the Swiki page for more examples. SQUEAK ON!
Sunday, April 03, 2005
Late April Fool's Day Joke
Check out this April Fool's Day Joke. It describes a product called the "Commentator" and is pretty cute. I love the FUD factor control the best....=) I know it's a little late...But, it's still funny!
Saturday, April 02, 2005
Holy Numbers!
Ian Prince got a sneak peak at SmallWiki 2 and was very impressed. He added a link an introduction presentation by its author Lukas Renggli. Cruise to page 10 and you will see these numbers:
I guess this proves not all dynamic languages are created equal. Wikipedia is written in PHP. These are amazing numbers! I know that Seaside makes me very productive and it's nice to have proof. But, gosh darn, if those numbers are not impressive! WOW! Avi and the rest of the seaside crew must be grinning ear to ear! The presentation goes on to talk about a meta framework called Magritte that sounds very cool. I'd imagine it also had something to do with the low numbers. I can't wait till the code is released!
| Wikipedia LOC | SmallWiki LOC | |
| Wiki-Parser | 117,616 | 555 |
| Query-Engine | 20,970 | 195 |
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.
Monday, February 28, 2005
Metal Gods Return
Tomorrow is the day for the new Judas Priest album, "Angel of Retribution". No matter how old I get. I still get excited over new releases from my favorite bands. Judas Priest has a special place in my heart because they are the ones that really got me into music. I can still remember running out and buying "Defenders of the Faith" with quarters! Anyway, Rob Halford is back in the band and this is their reunion disc. It's even going to come in a special package with DVD! TOO COOL! So, I'll be banging my head tomorrow. DEFEND THE METAL FAITH!
Sunday, February 27, 2005
Plain and pure simple programming fun
Ruby has a programming quiz page. How boring right? Well, you would be WRONG! This is a fun little site. Not many problems and I don't know if the mailing list is still active, but I thought I would check it out anyway. It sounds like too much fun to a get new puzzle every friday. Something to massage the brain over the weekend! They do have a number of puzzles (with solutions and some without) and I thought it would be fun to try to program some of them.
It seems the page is based on the Perl Quiz Of The Week. I don't know why they call it "quiz", it's just puzzles. I think a puzzle during a user's group meeting would be a great idea. Maybe invite developers from other languages and let them show off their elegant solutions in their languages. I think we could win a lot of folks over to the Smalltalk side that way!
Ruby has a programming quiz page. How boring right? Well, you would be WRONG! This is a fun little site. Not many problems and I don't know if the mailing list is still active, but I thought I would check it out anyway. It sounds like too much fun to a get new puzzle every friday. Something to massage the brain over the weekend! They do have a number of puzzles (with solutions and some without) and I thought it would be fun to try to program some of them.
It seems the page is based on the Perl Quiz Of The Week. I don't know why they call it "quiz", it's just puzzles. I think a puzzle during a user's group meeting would be a great idea. Maybe invite developers from other languages and let them show off their elegant solutions in their languages. I think we could win a lot of folks over to the Smalltalk side that way!
Wednesday, February 23, 2005
Suits?
I was reading through various blogs that I haven't seen before and ran across this article. It talks about the Syndey Smalltalk and Ruby Users Groups getting together for a joint presentation and mutual love fest of dynamic languages. Sounds great to me. But, I found the differences between Smalltalkers and Rubyists to be hilarious. Here's the blurp:
I never fashioned myself as a suit and tie type of guy. I don't work at a bank either. I've never heard Smalltalkers being suits. Interesting to say the least...=) I love both languages and communities. Both have different types of energies. Anyway, there's no point to the post except that I found being called "suits" to be amusing to say the least!
I was reading through various blogs that I haven't seen before and ran across this article. It talks about the Syndey Smalltalk and Ruby Users Groups getting together for a joint presentation and mutual love fest of dynamic languages. Sounds great to me. But, I found the differences between Smalltalkers and Rubyists to be hilarious. Here's the blurp:
- Other differences between the groups were notable: the Smalltalkers typically wore suits, and worked professionally in Smalltalk, typically for banks. The Rubyists looked like refugees in comparison, and I don’t believe any of us use Ruby professionally for more than skunkworks projects. The Smalltalkers left at a reasonably sensible hour, leaving the Rubyists huddling over their pints. Smalltalk has 30 or so years of history, but clearly no staying power. (Or it could be that they were just smarter than us, as it was past last drinks at the time…)
I never fashioned myself as a suit and tie type of guy. I don't work at a bank either. I've never heard Smalltalkers being suits. Interesting to say the least...=) I love both languages and communities. Both have different types of energies. Anyway, there's no point to the post except that I found being called "suits" to be amusing to say the least!
Tuesday, February 15, 2005
Great Quote And Other Thoughts
"To attain knowledge, add things everyday;
to obtain wisdom, remove things everyday."
--Lao Tzu
A great quote for life and software design. It says what I tried to yesterday much more elegantly. It's amazing how often the theme of removal to gain is brought up. Perhaps we should learn how to reduce systems as well as build them! It was refreshing reading in the "Thinking Forth" book on how to reduce programs. It was amazing that the advice transcended language for the most part (removing conditionals and special cases, etc). Every language should have a "thinking" book. Lisp has one in Paul Graham's Advanced Lisp. Is there any more I need? Kent Becks Smalltalk Best Practices and the Smalltalk Design Patterns book come close for Smalltalk. I wonder if there is one for Prolog. They are fun reading and I always walking away with a different perspective to programming.
"To attain knowledge, add things everyday;
to obtain wisdom, remove things everyday."
--Lao Tzu
A great quote for life and software design. It says what I tried to yesterday much more elegantly. It's amazing how often the theme of removal to gain is brought up. Perhaps we should learn how to reduce systems as well as build them! It was refreshing reading in the "Thinking Forth" book on how to reduce programs. It was amazing that the advice transcended language for the most part (removing conditionals and special cases, etc). Every language should have a "thinking" book. Lisp has one in Paul Graham's Advanced Lisp. Is there any more I need? Kent Becks Smalltalk Best Practices and the Smalltalk Design Patterns book come close for Smalltalk. I wonder if there is one for Prolog. They are fun reading and I always walking away with a different perspective to programming.
Holy New Squeak Leadership, Batman!
Wow! It seems they got the blessing from current guides and it seems to be a healthy growth for the community! I'm so excited. I love Squeak and I spend the majority of spare time programming with it. This is a shock and a great surprise. They also mentioned that the formation of the Squeak Foundation is continuing. But, I do like taking the bull by the horns so to speak!
SQUEAK ON BROTHERS OF SMALLTALK!
- Göran Krampe announced this on the Squeak mailing list:
The last six days there has been some off list activity in forming a new
leadership for Squeak. Yes, you read it right - the Guides are now
*officially retired*. From this point and forward there is a new
*temporary* group consisting of five castawa... eh people, that now
leads Squeak:
- Göran Krampe
- Doug Way
- Cees de Groot
- Marcus Denker
- Michael Rueger
Wow! It seems they got the blessing from current guides and it seems to be a healthy growth for the community! I'm so excited. I love Squeak and I spend the majority of spare time programming with it. This is a shock and a great surprise. They also mentioned that the formation of the Squeak Foundation is continuing. But, I do like taking the bull by the horns so to speak!
SQUEAK ON BROTHERS OF SMALLTALK!
Monday, February 14, 2005
Tuesday, February 08, 2005
Sunday, February 06, 2005
Infocom's Hitchhiker's Guide To The Galaxy
Does anyone remember this game from their childhood? Well, I do and I wasted a lot of time playing it and Zork. Infocom ruled. Well, guess what? You can play it again! Check it out here. Feel the love again. Remember the magic of getting eaten by the dog because you forgot to feed it peanut butter in the beginning? Cursed endlessly, but spewed much Coke on the monitor in laughter. Yes, it's all here and more. What are you waiting for? GO NOW!
Does anyone remember this game from their childhood? Well, I do and I wasted a lot of time playing it and Zork. Infocom ruled. Well, guess what? You can play it again! Check it out here. Feel the love again. Remember the magic of getting eaten by the dog because you forgot to feed it peanut butter in the beginning? Cursed endlessly, but spewed much Coke on the monitor in laughter. Yes, it's all here and more. What are you waiting for? GO NOW!
New Smalltalk Blogger
It is my pleasure to welcome a new Smalltaker to the Blogosphere, Steve Wessels. I've known Steve for most of my professional career and he was one of the people that showed me the way when I was a mere Smalltalk pup. Steve is an avid Squeaker (like myself) and he has a lot of cool projects. Check it out! Here's the link: http://squeak.preeminent.org/blog/index.html.
It is my pleasure to welcome a new Smalltaker to the Blogosphere, Steve Wessels. I've known Steve for most of my professional career and he was one of the people that showed me the way when I was a mere Smalltalk pup. Steve is an avid Squeaker (like myself) and he has a lot of cool projects. Check it out! Here's the link: http://squeak.preeminent.org/blog/index.html.
Friday, February 04, 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. Alan Wostenberg will be giving an updated and in-depth presentation on running FIT in VisualWorks at 8pm. We will have an open forum from 7pm-8pm. Here's all of the details:
When: Feb 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.
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. Alan Wostenberg will be giving an updated and in-depth presentation on running FIT in VisualWorks at 8pm. We will have an open forum from 7pm-8pm. Here's all of the details:
When: Feb 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.
Java vs. C++
From Phil Whitney's Blog:
OK, I think it was a little nice. But, why drive a poorly designed and engineered car when you can have something so much better? Wouldn't you like to have a smooth ride, repairs done while driving, can add new engine components without stopping, faster to the destination, and above a pleasure to sit in? I can't think of a good car analogy for Smalltalk or Lisp because I can't think of a car that would fit that bill...But, man, I would buy one in a minute!
From Phil Whitney's Blog:
- Java is preferable to C++ in exactly the same way that driving a 1994 Chevy Impala is preferable to driving a 1978 Ford LTD.
OK, I think it was a little nice. But, why drive a poorly designed and engineered car when you can have something so much better? Wouldn't you like to have a smooth ride, repairs done while driving, can add new engine components without stopping, faster to the destination, and above a pleasure to sit in? I can't think of a good car analogy for Smalltalk or Lisp because I can't think of a car that would fit that bill...But, man, I would buy one in a minute!
Thursday, February 03, 2005
Too cute
Beware the Schememonster! It's out to get you...
For one, I love the whole concept of this website. It's cute, the projects are all great, and best of all it's fun. This is what an advocacy site should be. It's just plain fun. Hats off to the creators of this site. Maybe we need a Smalltalkster site? Of course, nothing but fun projects...=)
I thought the Smurf project was brilliant. Maybe we could do a balloon simulation that has to avoid the hordes of static followers on the ground. OK, it sounds lame and not as good as the Smurfs, but damn, I'll keep thinking about it!
Beware the Schememonster! It's out to get you...
For one, I love the whole concept of this website. It's cute, the projects are all great, and best of all it's fun. This is what an advocacy site should be. It's just plain fun. Hats off to the creators of this site. Maybe we need a Smalltalkster site? Of course, nothing but fun projects...=)
I thought the Smurf project was brilliant. Maybe we could do a balloon simulation that has to avoid the hordes of static followers on the ground. OK, it sounds lame and not as good as the Smurfs, but damn, I'll keep thinking about it!
Wednesday, January 26, 2005
Easier than C++
From lemonodor:
WOW! I would say that Java is still easier than C++, but not by much. But, with all of the new 1.5 features, I might have to concur that Java is not easier than C++ anymore. I keep seeing descension in the ranks of Java, I wonder what this means for the future? I think Java will continue to be a force in IT departments, but what will replace it? .Net? Something in my gut tells me something else is coming. Maybe something built on top of the JVM? Who knows...Things are starting to get interesting!
From lemonodor:
- Bruce Eckel, author of Thinking in Java and Thinking in C++, is working on a new edition of Thinking in Java:
This language, which was once hailed (admittedly, by the PR flaks at Sun itself) as being "much easier than C++" really isn't anymore.
WOW! I would say that Java is still easier than C++, but not by much. But, with all of the new 1.5 features, I might have to concur that Java is not easier than C++ anymore. I keep seeing descension in the ranks of Java, I wonder what this means for the future? I think Java will continue to be a force in IT departments, but what will replace it? .Net? Something in my gut tells me something else is coming. Maybe something built on top of the JVM? Who knows...Things are starting to get interesting!
Monday, January 24, 2005
Fat Free Alternatives To XML
Apparently, there's a couple of standards trying to win over XML detractors. One is JSON and the other is YAML. Both are claiming they are simpler and easier to read than XML. I looked at both and I think YAML would be the one that I would pick. It is far easier to read. JOSN looked even less readable, but more compact than XML. You can see examples at both sites. Judge for yourself. It's interesting to see the current uprising to XML. I've never been a big fan, but realized having it was better than not having it. Watching the different standards fight to the top is going to be interesting. Are we going to have lots of different formats to deal with again? But, then again we should always be pushing the envelope, right?
Apparently, there's a couple of standards trying to win over XML detractors. One is JSON and the other is YAML. Both are claiming they are simpler and easier to read than XML. I looked at both and I think YAML would be the one that I would pick. It is far easier to read. JOSN looked even less readable, but more compact than XML. You can see examples at both sites. Judge for yourself. It's interesting to see the current uprising to XML. I've never been a big fan, but realized having it was better than not having it. Watching the different standards fight to the top is going to be interesting. Are we going to have lots of different formats to deal with again? But, then again we should always be pushing the envelope, right?
Thinking Forth
Let's start off things with a quote:
Do I have your interest? This is the best quote I've read to describe the productivity gain that we Smalltalkers, Lisps, Rubyers, Perlers, Pythoners, and Javascripters enjoy. I just love this quote! Anyway...
Why am I bringing this quote up? Well, I was sick all weekend and in times of conscienceness, I could only read my blog feeds. I came across one from Planet Lisp about Forth. I decided to download the book, "Thinking Forth" from here that they had linked to. The thing that got my interest was mention that this book had a lot of the principles of XP programming in it (it was written in 1984). Now, I feel a lot of the XP ideas also came from "The Pyschology of Computer Programming", so another book to fill in the gaps is a nice addition. So, between naps, I read the preface today and it seems Forth is another "everything" language. For example, "everything" in Smalltalk is an object. It seems every language that I like has a simple underlying set of rules and model to govern everything. Forth is no different. I was so impressed with the preface that I picked Forth to be my language of the year over Python. In Forth, "everything" is a word! WOW! That sounds nuts doesn't it?! Let me continue...
You label things in Forth with a word. When you invoke a "word", it doesn't care if that word stands for a constant, variable, or function. It doesn't care. Andres Valloud has recently been pounding home the idea of distinctions (ala "Laws Of Form"). But, I've been having a hard time wrapping my mind around it. It seemed too simple. Well, it snapped today after reading the preface to "Thinking Forth". If you think of "words" as "labeling distinctions" and when you invoke a "word", you are "crossing into a distinction". It goes further too. Forth uses a simple stack mechanism to pass variables around. This is the "signal" that Andres loves to tell me about as well. I was so excited that I finally got it! And I did it while on cold medicine! Yippee! So, Forth might be the language where I get to play with distinctions.
I'm excited! Hopefully, Forth will turn out to be a language that increases my knowledge of programming as much as Smalltalk and Lisp have. I'm off to sleep more...=) Being sick sucks!
Let's start off things with a quote:
- "The programmer using a batch-compiler language can seldom achieve the productive state of mind that artists achieve when the creative current is unhindered."
Do I have your interest? This is the best quote I've read to describe the productivity gain that we Smalltalkers, Lisps, Rubyers, Perlers, Pythoners, and Javascripters enjoy. I just love this quote! Anyway...
Why am I bringing this quote up? Well, I was sick all weekend and in times of conscienceness, I could only read my blog feeds. I came across one from Planet Lisp about Forth. I decided to download the book, "Thinking Forth" from here that they had linked to. The thing that got my interest was mention that this book had a lot of the principles of XP programming in it (it was written in 1984). Now, I feel a lot of the XP ideas also came from "The Pyschology of Computer Programming", so another book to fill in the gaps is a nice addition. So, between naps, I read the preface today and it seems Forth is another "everything" language. For example, "everything" in Smalltalk is an object. It seems every language that I like has a simple underlying set of rules and model to govern everything. Forth is no different. I was so impressed with the preface that I picked Forth to be my language of the year over Python. In Forth, "everything" is a word! WOW! That sounds nuts doesn't it?! Let me continue...
You label things in Forth with a word. When you invoke a "word", it doesn't care if that word stands for a constant, variable, or function. It doesn't care. Andres Valloud has recently been pounding home the idea of distinctions (ala "Laws Of Form"). But, I've been having a hard time wrapping my mind around it. It seemed too simple. Well, it snapped today after reading the preface to "Thinking Forth". If you think of "words" as "labeling distinctions" and when you invoke a "word", you are "crossing into a distinction". It goes further too. Forth uses a simple stack mechanism to pass variables around. This is the "signal" that Andres loves to tell me about as well. I was so excited that I finally got it! And I did it while on cold medicine! Yippee! So, Forth might be the language where I get to play with distinctions.
I'm excited! Hopefully, Forth will turn out to be a language that increases my knowledge of programming as much as Smalltalk and Lisp have. I'm off to sleep more...=) Being sick sucks!
Tuesday, January 18, 2005
The PRIEST is BACK!
OK, I just went here to here 30 second samples of each of the new songs off the new Priest album. I just couldn't wait. The first album I ever bought was "Defenders of the Faith", so Priest has always had a special place in my heart. Anyway, the samples were impressive and I think I'm in for a butt kicker of an album. The next to last song, "Eulogy" sounds like an epic. I think it's only the intro on the web site! From the lyrics, it sounds like it might be a sequel to "The Sentinel"! I can't wait till March 1! I tell you! Rob Halford is the voice of heavy metal.
OK, I just went here to here 30 second samples of each of the new songs off the new Priest album. I just couldn't wait. The first album I ever bought was "Defenders of the Faith", so Priest has always had a special place in my heart. Anyway, the samples were impressive and I think I'm in for a butt kicker of an album. The next to last song, "Eulogy" sounds like an epic. I think it's only the intro on the web site! From the lyrics, it sounds like it might be a sequel to "The Sentinel"! I can't wait till March 1! I tell you! Rob Halford is the voice of heavy metal.
Saturday, January 15, 2005
3 + 4
Well, I got 3 + 4 to run in my java bytecode interpreter written in Squeak. I know others have traveled where I am now, but it's been a fun journey. I can't wait till I can get it fully functional with real objects and all. It'll be fun to run a java program in Squeak with all of the power of a Smalltalk environment. I think it will be cool for writing languages on top of the JVM. Gee, I wonder which one I would like to run in the JVM? Anyway, not much point to this blog except that I reached a milestone. I'm hoping to have a new version of the java framework out soon. It will work in Squeak 3.8 and support running java byte codes, read/writing serialized objects (this time 100%), reading class files, and that's about it. The next thing after the byte code interpreter is the debugging protocol (i've already started). It's been enlightening peering under the hood of java. It makes me appreciate the simplicity and elegance of smalltalk anymore. But, that's for another discussion as well! Good night all!
Well, I got 3 + 4 to run in my java bytecode interpreter written in Squeak. I know others have traveled where I am now, but it's been a fun journey. I can't wait till I can get it fully functional with real objects and all. It'll be fun to run a java program in Squeak with all of the power of a Smalltalk environment. I think it will be cool for writing languages on top of the JVM. Gee, I wonder which one I would like to run in the JVM? Anyway, not much point to this blog except that I reached a milestone. I'm hoping to have a new version of the java framework out soon. It will work in Squeak 3.8 and support running java byte codes, read/writing serialized objects (this time 100%), reading class files, and that's about it. The next thing after the byte code interpreter is the debugging protocol (i've already started). It's been enlightening peering under the hood of java. It makes me appreciate the simplicity and elegance of smalltalk anymore. But, that's for another discussion as well! Good night all!
Tuesday, January 11, 2005
Hate...
You know when you leave your mark on the world. How do you want to be remembered? Do you want to be remembered for being a good human being that everyone enjoyed being around or this:
What kind of sick person would do such a thing? I've left off the website because I don't want to give them anymore attention. I find this to be sick and just flat out uncalled for. Who ever is behind this site needs to be strapped to a post and horse whipped. This is the kind of stuff that makes me sick to be a part of this planet. Darrell would be remembered by millions for entertaining them and having a great time. How will this person be remembered? For being hateful and disrepectful? I can't believe would waste time their time with such drivel.
Anyway, if you want to read a good article, Read this. I totally agree with the sentiments of the writer. I just hate it when people use someone else's death to further their agenda. It make you wander who's really evil? Doesn't it?
You know when you leave your mark on the world. How do you want to be remembered? Do you want to be remembered for being a good human being that everyone enjoyed being around or this:
- A newly launched web site, ********.com, has selected late DAMAGEPLAN/ex-PANTERA guitarist "Dimebag" Darrell Abbott as its January 2005 "Dead Guy of the Month." The site's home page features a photo of Dimebag complete with a superimposed "bullet hole" in his forehead along with the message, "He was in PANTERA. He was in DAMAGEPLAN. Now he's in 'THE GROUND'." A message posted in the "About Us" section of the web site reads as follows: "The second week of December 2004, 'Dimebag' Darrell Abbott formerly of the band PANTERA was shot and killed at a show in Columbus, OH. The story grabbed the mass media's attention and was played over and over again. The typical post-celebrity tragedy scenario played out over the next few weeks: Mega-memorials and tons and tons of people who appeared to be mourning a great PERSONAL loss. This puzzled us. 'What the fuck?'
What kind of sick person would do such a thing? I've left off the website because I don't want to give them anymore attention. I find this to be sick and just flat out uncalled for. Who ever is behind this site needs to be strapped to a post and horse whipped. This is the kind of stuff that makes me sick to be a part of this planet. Darrell would be remembered by millions for entertaining them and having a great time. How will this person be remembered? For being hateful and disrepectful? I can't believe would waste time their time with such drivel.
Anyway, if you want to read a good article, Read this. I totally agree with the sentiments of the writer. I just hate it when people use someone else's death to further their agenda. It make you wander who's really evil? Doesn't it?
Monday, January 10, 2005
Feeling Behind
I'm always feeling behind in technology. I always I feel like I'm just right around the corner to some big breakthrough and if I read that next book, all knowledge will be mine. The universe and all its pearls will be mine. It's a never-ending quest. Does anyone else feel this? Knowledge is a never ending thirst and the more you quench it, the more you want to drink. The humbling fact is that no matter how much I learn, I will never know everything that I want to. I will always be on my search for more. So, why not just accept defeat and stop? Well, what fun would that be? It's the Samauri's creed to be the best that you can be (see you can learn things from Tom Cruise movies!). I will spend the rest of my life trying to be the best developer I can be. There's satisfaction is in knowing when I cross a barrier or master a piece of my craft that I thought was unattainable. The problem is with each step the bar becomes higher. Of course, this gives me the feeling that I'm always behind. And there's always someone out there who's kung-fu is better. I don't feel threatened when I find someone who is better than me, rather I take it as an oppoturnity to learn more. I might not always like the lesson, but the fight to resolve the conflict within is where I break across my barriers. A medicine much needed to help me reach higher heights. I guess I don't have a point to this post. I just wanted to express my feelings toward learning. My love to know more about what I do and to be the best I can be. But, I never feel like I am a master. I always feel behind and I'm alright with that. In fact, it gives me a certain inner peace. Striving is great and it's the journey that's important.
I'm always feeling behind in technology. I always I feel like I'm just right around the corner to some big breakthrough and if I read that next book, all knowledge will be mine. The universe and all its pearls will be mine. It's a never-ending quest. Does anyone else feel this? Knowledge is a never ending thirst and the more you quench it, the more you want to drink. The humbling fact is that no matter how much I learn, I will never know everything that I want to. I will always be on my search for more. So, why not just accept defeat and stop? Well, what fun would that be? It's the Samauri's creed to be the best that you can be (see you can learn things from Tom Cruise movies!). I will spend the rest of my life trying to be the best developer I can be. There's satisfaction is in knowing when I cross a barrier or master a piece of my craft that I thought was unattainable. The problem is with each step the bar becomes higher. Of course, this gives me the feeling that I'm always behind. And there's always someone out there who's kung-fu is better. I don't feel threatened when I find someone who is better than me, rather I take it as an oppoturnity to learn more. I might not always like the lesson, but the fight to resolve the conflict within is where I break across my barriers. A medicine much needed to help me reach higher heights. I guess I don't have a point to this post. I just wanted to express my feelings toward learning. My love to know more about what I do and to be the best I can be. But, I never feel like I am a master. I always feel behind and I'm alright with that. In fact, it gives me a certain inner peace. Striving is great and it's the journey that's important.
Sunday, January 09, 2005
So much for intelligent debate
Check out this blog entry. I'm sickened and appalled by it. I'm so sick of name calling in the name of good debate. I'm also sick of threatening to win an argument as well. I don't care what your politic leanings are, but we should all be able to discuss and debate without charged language, name calling, or threats. Both sides of the political spectrum are guilty and it's made sane and intelligent discussion impossible. When we have books titled, "How to talk to a liberal". It really shows what lack of respect we have for one another and it saddens me. You don't win people with your arguments by calling them idiots. I fear we have schism with each side with tunnel vision. No one can see the other sides point of view. What makes this country great is debate with sides arguing from different shades of gray. I think we are seeing the world in black and white too much. Where is the gray? Maybe we should stop digging in our heels in an argument and be open to new ideas. Just please stop with the charged language. PLEASE! I've gotten where I will not even listen to any argument with charged language. It really shows your lack of thought. OK, that's enough politics from me...
Check out this blog entry. I'm sickened and appalled by it. I'm so sick of name calling in the name of good debate. I'm also sick of threatening to win an argument as well. I don't care what your politic leanings are, but we should all be able to discuss and debate without charged language, name calling, or threats. Both sides of the political spectrum are guilty and it's made sane and intelligent discussion impossible. When we have books titled, "How to talk to a liberal". It really shows what lack of respect we have for one another and it saddens me. You don't win people with your arguments by calling them idiots. I fear we have schism with each side with tunnel vision. No one can see the other sides point of view. What makes this country great is debate with sides arguing from different shades of gray. I think we are seeing the world in black and white too much. Where is the gray? Maybe we should stop digging in our heels in an argument and be open to new ideas. Just please stop with the charged language. PLEASE! I've gotten where I will not even listen to any argument with charged language. It really shows your lack of thought. OK, that's enough politics from me...
Saturday, January 08, 2005
Quotes Page
I finally updated my fave quotes page. Check it out here. I've been meaning to do it for awhile. Enjoy! Also, let me know if I wrongly attributes any quotes. Smalltalk on!
I finally updated my fave quotes page. Check it out here. I've been meaning to do it for awhile. Enjoy! Also, let me know if I wrongly attributes any quotes. Smalltalk on!
Thursday, January 06, 2005
More thoughts on debate on getters/setters
Carrying on the discussion from previous. Here's some more thoughts:
1. Property objects. (Each instance variable would be it's own object)
2. Naming accessors with _ so that they look unnatural (not a big fan of this, but I'm trying to get thoughts flowing)
3. Change the language in some way. I don't like the restricting paradigm of java, but how could we change smalltalk. Maybe something more self like where instance variable access and method calls look the same.
4. Development-time method wrappers. Put wrappers in to monitor calls to accessors and warn on non-local access if it has been marked "private". The method wrappers could then be removed at run-time. We have the most dynamic language of all! How can we make it do what we want?!
And that's all I can think of right now. If I think of more, I'll blog them! Wouldn't it be cool to come up with a solution to the getter/setter debate once and for all! =) Of course, it might be like the early vs. late bound language debate and thus, never be solved...But, I think this one can be solved.
Carrying on the discussion from previous. Here's some more thoughts:
1. Property objects. (Each instance variable would be it's own object)
2. Naming accessors with _ so that they look unnatural (not a big fan of this, but I'm trying to get thoughts flowing)
3. Change the language in some way. I don't like the restricting paradigm of java, but how could we change smalltalk. Maybe something more self like where instance variable access and method calls look the same.
4. Development-time method wrappers. Put wrappers in to monitor calls to accessors and warn on non-local access if it has been marked "private". The method wrappers could then be removed at run-time. We have the most dynamic language of all! How can we make it do what we want?!
And that's all I can think of right now. If I think of more, I'll blog them! Wouldn't it be cool to come up with a solution to the getter/setter debate once and for all! =) Of course, it might be like the early vs. late bound language debate and thus, never be solved...But, I think this one can be solved.
The debate without end
It seems my discussion on "getters/setters" is having a lively discussion at James' and Andreas' blog. Both sides of the argument give great points. But, perhaps we are missing one another. Maybe we should ask ourselves. How could we compromise? I think we can all agree that encapsulation and consistency are things to keep in high regard. We shouldn't have to sacrifice one for the other. Is the obvious answer data objects? Objects with simple getters/setters methods, but encapsulated inside of a behavior object? I'm thinking out loud here. There's a lot of things that we could do with these data objects. They could notify of changes (good for persistence and gui models) without cluttering up the behavior objects and no one outside of the behvaior object should know about them. You could exchange data objects (since all access is via methods).Hmmm, I think I might need to do implement a model using this technique. I'm curious as to what other people might think would be a compromise to this or an alternative implementation. My point is that if we can't decide on which is better (and frankly, while I still side on the side of getters/setters. I still think both have their pluses and minuses), then maybe we should think of a better solution that has the bits that both sides like. Send me email. I'd be glad to discuss this!
It seems my discussion on "getters/setters" is having a lively discussion at James' and Andreas' blog. Both sides of the argument give great points. But, perhaps we are missing one another. Maybe we should ask ourselves. How could we compromise? I think we can all agree that encapsulation and consistency are things to keep in high regard. We shouldn't have to sacrifice one for the other. Is the obvious answer data objects? Objects with simple getters/setters methods, but encapsulated inside of a behavior object? I'm thinking out loud here. There's a lot of things that we could do with these data objects. They could notify of changes (good for persistence and gui models) without cluttering up the behavior objects and no one outside of the behvaior object should know about them. You could exchange data objects (since all access is via methods).Hmmm, I think I might need to do implement a model using this technique. I'm curious as to what other people might think would be a compromise to this or an alternative implementation. My point is that if we can't decide on which is better (and frankly, while I still side on the side of getters/setters. I still think both have their pluses and minuses), then maybe we should think of a better solution that has the bits that both sides like. Send me email. I'd be glad to discuss this!
Wednesday, January 05, 2005
Getters And Setters Redux
Is anything more hotly debated in OO development? Here's an article eloquantly arguing against them. Now, in the past, I have been strongly in the use getter/setters camp. Recently, I started to not use getters/setters to see if I got any new insights. At first, it felt weird and unnatural, but I soon got over that. I started to not use getters/setters for the exact reason listed in the article because I had seen too much code depend on the getters/setters and knowing too much about the internal representation of an object. Now, in java, you can restrict access to getters/setters through protected and private (which by the way, I think private is evil, but protected is broken as well...I think protected should only be used by the object and its inheritance heirarchy, but that's another discussion). I also wanted to not use getters/setters after watching the a Self video where they used methods and variables interchangebly. But, in most languages, there is a difference in calling a method and accessing a veriable. And that is the one thing I missed when I stopped using getters/setters, the consistency! In both java and Smalltalk, instance and local variable access looks identical and its easy to make a mistake (think a newbie or a really late night at work). So, am I saying that I think consistency is more important than encapsulation? NO! But, I do think they are equally important. You can achieve encapsulation with getters/setter by either restricting access (at the language level), placing them in a different spot in the source code (like at the bottom, make it hard to get to!), or through categories (I frequently put my getters/setters in an accessing/private category and never look at it unless I absolutely need it). You can even use method wrappers to make sure the sender is self and report otherwise. So, while I agree with the article, I still like to use getters/setters for the reason of consistency. I think it's up to a good programmer to keep encapsulation enforced. Oh, one more thing, one good reason for keeping your getters/setters is that if you ever need to do anything extra when an instance variable is set, you can do it through the setter and it's easy to add debug code in a getter (like a break point). I use my setters to ensure parent relationships are kept consistent (there's that word again!). Setters can also fire change events which are important for persistent frameworks and GUIs. One important thing that I am starting to realize with this debate is that it is a personal style issue of the programmer. Both sides have pluses and minuses and it's up to each shop/developer to make their choice. The worst is to mix both paradigms. Remember keep it consistent!
Is anything more hotly debated in OO development? Here's an article eloquantly arguing against them. Now, in the past, I have been strongly in the use getter/setters camp. Recently, I started to not use getters/setters to see if I got any new insights. At first, it felt weird and unnatural, but I soon got over that. I started to not use getters/setters for the exact reason listed in the article because I had seen too much code depend on the getters/setters and knowing too much about the internal representation of an object. Now, in java, you can restrict access to getters/setters through protected and private (which by the way, I think private is evil, but protected is broken as well...I think protected should only be used by the object and its inheritance heirarchy, but that's another discussion). I also wanted to not use getters/setters after watching the a Self video where they used methods and variables interchangebly. But, in most languages, there is a difference in calling a method and accessing a veriable. And that is the one thing I missed when I stopped using getters/setters, the consistency! In both java and Smalltalk, instance and local variable access looks identical and its easy to make a mistake (think a newbie or a really late night at work). So, am I saying that I think consistency is more important than encapsulation? NO! But, I do think they are equally important. You can achieve encapsulation with getters/setter by either restricting access (at the language level), placing them in a different spot in the source code (like at the bottom, make it hard to get to!), or through categories (I frequently put my getters/setters in an accessing/private category and never look at it unless I absolutely need it). You can even use method wrappers to make sure the sender is self and report otherwise. So, while I agree with the article, I still like to use getters/setters for the reason of consistency. I think it's up to a good programmer to keep encapsulation enforced. Oh, one more thing, one good reason for keeping your getters/setters is that if you ever need to do anything extra when an instance variable is set, you can do it through the setter and it's easy to add debug code in a getter (like a break point). I use my setters to ensure parent relationships are kept consistent (there's that word again!). Setters can also fire change events which are important for persistent frameworks and GUIs. One important thing that I am starting to realize with this debate is that it is a personal style issue of the programmer. Both sides have pluses and minuses and it's up to each shop/developer to make their choice. The worst is to mix both paradigms. Remember keep it consistent!
Tuesday, January 04, 2005
Cool Digital Art
Check out Joe Vinton's Digital Art right now. It's incredible stuff! His art is scenic futuristic landscapes. They are simply breath taking! But, what is that in the distance? It's a hot air ballon! What better way to fit the "Back To The Future" theme of Smalltalk than a futuristic landscape with balloons. Incredible stuff and it makes great backgrounds for Squeak if I do say so myself.
Check out Joe Vinton's Digital Art right now. It's incredible stuff! His art is scenic futuristic landscapes. They are simply breath taking! But, what is that in the distance? It's a hot air ballon! What better way to fit the "Back To The Future" theme of Smalltalk than a futuristic landscape with balloons. Incredible stuff and it makes great backgrounds for Squeak if I do say so myself.
Top Twenty
Every year I like to do a top 20 of my favorite albums from the year. It's sometimes hard to pick just 20, so I pick a few honorable mentions. I listen to a lot of music and this year I spent a good amount of time catching on some stuff. I bought a lot of old Depeche Mode and went back to purchase a lot of the old Earache catalog. I even got into a new genre of electronic music called chip music. It's made completely on 4 or 8 bit computers (gameboy advance and old commodroe and atari computers). Fun stuff! I did manage to listen to a lot of new music and this year was EXCELLENT. So here's my list of faves:
Honorable Mentions:
Every year I like to do a top 20 of my favorite albums from the year. It's sometimes hard to pick just 20, so I pick a few honorable mentions. I listen to a lot of music and this year I spent a good amount of time catching on some stuff. I bought a lot of old Depeche Mode and went back to purchase a lot of the old Earache catalog. I even got into a new genre of electronic music called chip music. It's made completely on 4 or 8 bit computers (gameboy advance and old commodroe and atari computers). Fun stuff! I did manage to listen to a lot of new music and this year was EXCELLENT. So here's my list of faves:
- Ayreon-Human Equation
- Assemblage 23-Storm
Wow! Assemblage 23 continues to impress with his brand of Depeche Mode inspired electronics. The lyrics and music are such a perfect fit. This is not happy music. Everything is damn near perfect. This is the way to do quality electronic music. - Vader-The Beast
GRRRRR! The album that got me back into extreme metal. This will rip you a new one and keep coming. - Trevor Rabin-National Treasure
Cheese and pomp. What more do you want in a movie soundtrack. I love this. It's overblown and ompous. Great arrangements and melodies with a hint of modern rock and electronics. Gorgeous to these ears! - Black Label Society-Hangover Music Vol. 1
Moody guitar driven southern rock. No one does it better than Zak. - Ozric Tentacles-Spirals In Hyperspace
Another album from the masters of space rock! Swirling arrangements of rock guitar and keyboards. The perfect mix. - Dream Evil-The Book Of Heavy Metal
Cheesy 80's metal with tongue in cheek lyrics. This album just makes me smile. I love it! Anyone who doesn't think these guys are having the time of their lives, needs to check themselves into the funny farm. - Into Eternity-Dead Or Dreaming
Prog metal, death metal, and a healthy dose of ass kicking thrash. I love it! - Dillenger Escape Plan-Miss Machine
Not what I expected. The music is still crazy, but in a different way. More like Mr. Bungle and I like the direction change. Lots of sick math rock still, and more unpredictable. - Decapitated-The Negation
Death metal that doesn't stop punishing. This is played with such vigor that you can't help but not bang your head. - Megadeth-The System Has Failed<
Megadeth comes back with an album that I never thought they would. This should have been the follow-up to Rust In Peace. It just flat out rocks. Dave remembers how to do metal right. Great to hear afterthe slew of bad albums (4 to be exact). - Behemoth-Demigod
Grandoise metal that still remains to be melodic and memorable while beating you into submission. This is not for one with heart problems. - Cradle of Filth-Nyphetamine
Cradle of Filth has to be the most consistent band ever. A new album and still not one disappointing moment. I love this band. - Estradasphere-Quadropus
The rightful heirs to the throne left by Mr. Bungle. In fact, i think these guys have surpassed them. Rock with everything thrown in. These guys know no boundaries. A rollercoaster ride that always surprises and never a dull moment. - Mastodon-Leviathian
ROCK! Extreme rock with lots of crazy drumming. This time its a little more subtle and it allows the songs to breathe more. Love it! - Vehemence-Helping The World To See
Melodic death metal that stays close to the brutal edge of things. Lots going on and lots of head banging. - Damageplan-New Found Power
Dimebag will be missed. His swansong was not his finest work, but not too many can come close to Pantera's great albums. A great album is what he left us that was varied and showed off his chops. The metal worlds has lost another great. - Exodus-Tempo Of The Damned
The exodus attack returns and shows us how thrash is made! WOW! These guys along with megadeth are the come backs of the year. Lots of reunited bands have done awful albums. But, this exceeded all expectations. It was great seeing them live too. - Arsis-A Celebration Of Guilt
Surprise of the year. Super melodic, but very fast and brutal. The new breed of death metal. - Kataklysm-Serenity In Fire
These guys vary up a lot on this release and this one sticks to you like peanut butter on the roof of your mouth. WOW!
My absolute favorite album this year. I can not praise it enough! A modern progressive masterpiece. Nuff said!
Honorable Mentions:
- Cannibal Corpse-The Wretched Spawn
A guilty pleasure. Brutal florida death metal. These guys keep getting better and more complex with each release. Forget the horror movie lyrics...Listen to those guitar lines! DAMN! - Alabama Thunderpussy-Fulton Hill
BIG RIFFS. Southern metal steamroller style. One of my fave bands of the genre. I love the new vocalist! - Alarum-Eventuality
For those of us who miss Atheist and Cynic, meet Alarum. Progressive death that will keep you on your toes. Good stuff! - Shift-Nasum
The finest grindcore. - Saliva-Survival Of The Sickest
This is 80's metal updated with a 90's sound. I loved this! - Killswitch Engage-The End Of Heartache
A repeat of their earlier albums, but these guys have the melodic hardcore style down.
Omaha Smalltalk User's Group Meeting
It's getting near that time of the month again! So, instead of staying at home with snow up to your eye balls. Why don't you come on down and see what all of the fuss is about? Come see the inspiration for countless languages, Smalltalk. Alan Wostenberg will be giving an updated presentation on running FIT in VisualWorks. Here's all of the details:
When: Jan 11, 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.
It's getting near that time of the month again! So, instead of staying at home with snow up to your eye balls. Why don't you come on down and see what all of the fuss is about? Come see the inspiration for countless languages, Smalltalk. Alan Wostenberg will be giving an updated presentation on running FIT in VisualWorks. Here's all of the details:
When: Jan 11, 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.
Monday, January 03, 2005
New Year...New Stuff To Learn
Well, I had time today to sleep and recover from nursing a sick system by spending time away from it. One thing that I like to do every year is set a few goals for myself. These always include learning a few new tricks. In the past, these have included learning Erlang, Lisp, Javascript, Prolog, Ruby, and etc. This year I plan on sinking my teeth into Python, CLIPS, and Scheme. Why so many languages? Well, I don't think Python and Scheme will be far different from things I already know. CLIPS is not too far of a stretch as well, but I really want to get into the way it does things. In the past, what I mainly pull from various languages is a different perspective. I look at programs a lot differently after really getting into Lisp and Erlang. In fact, learning Lisp is what really made me comeback to Smalltalk and realize just how painful and unhappy programming in java made me. I would still love to have a job doing lisp one day just to experience it on a full time basis. Now, yoy might wonder why I would pick Python. Well, I pick Python because a lot of interesting language research seems to be going on with it and I'm liking a lot of the frameworks I'm seeing coming out of the Python community. I picked Scheme because it's supposed to be a cleaner Lisp. It's going to be an exciting year and I hope to learn a whole lot more about craft. I also pray that there's a Camp Smalltalk this year too! If not, maybe I'll go to a Camp Python, Ruby, or Lisp. Now, that would be fun, wouldn't it?!
Well, I had time today to sleep and recover from nursing a sick system by spending time away from it. One thing that I like to do every year is set a few goals for myself. These always include learning a few new tricks. In the past, these have included learning Erlang, Lisp, Javascript, Prolog, Ruby, and etc. This year I plan on sinking my teeth into Python, CLIPS, and Scheme. Why so many languages? Well, I don't think Python and Scheme will be far different from things I already know. CLIPS is not too far of a stretch as well, but I really want to get into the way it does things. In the past, what I mainly pull from various languages is a different perspective. I look at programs a lot differently after really getting into Lisp and Erlang. In fact, learning Lisp is what really made me comeback to Smalltalk and realize just how painful and unhappy programming in java made me. I would still love to have a job doing lisp one day just to experience it on a full time basis. Now, yoy might wonder why I would pick Python. Well, I pick Python because a lot of interesting language research seems to be going on with it and I'm liking a lot of the frameworks I'm seeing coming out of the Python community. I picked Scheme because it's supposed to be a cleaner Lisp. It's going to be an exciting year and I hope to learn a whole lot more about craft. I also pray that there's a Camp Smalltalk this year too! If not, maybe I'll go to a Camp Python, Ruby, or Lisp. Now, that would be fun, wouldn't it?!
Evil is...
Hidden tracks on CDs. I hate them. I really do. One of the joys of having an mp3 player (I have the iRiver 40gb btw) is that I can edit out all of those pesky blank tracks and/or space. Still it takes time to edit the audio and it's just a pain in the rear-end! I have written several quick utilities to help in Javascript that organize and adjust volumes on my mp3s. Now, I just need a utility to remove the blank space and I would be in hog's heaven. I'm just glad for mp3 players because now I only have to edit it out once and I never have to deal with it. Depending on the day, I sometimes just delete the extra tracks because mostly the hidden tracks are just not worth the effort to edit the blank audio out. Word to bands, do not put hidden tracks on your CDs. You're just pissing off everyone and it's not cute anymore. OK, I think that's enough ranting for today.
Hidden tracks on CDs. I hate them. I really do. One of the joys of having an mp3 player (I have the iRiver 40gb btw) is that I can edit out all of those pesky blank tracks and/or space. Still it takes time to edit the audio and it's just a pain in the rear-end! I have written several quick utilities to help in Javascript that organize and adjust volumes on my mp3s. Now, I just need a utility to remove the blank space and I would be in hog's heaven. I'm just glad for mp3 players because now I only have to edit it out once and I never have to deal with it. Depending on the day, I sometimes just delete the extra tracks because mostly the hidden tracks are just not worth the effort to edit the blank audio out. Word to bands, do not put hidden tracks on your CDs. You're just pissing off everyone and it's not cute anymore. OK, I think that's enough ranting for today.
Sunday, January 02, 2005
Back in Nebraska
Well, I was welcomed back in Nebraska with a pager for a sick system and I've been a very busy boy since I've been back. I must admit that it was great to be back in Alabama where people smile and actually talk to you. But, as with all things, it's great to be back in the arms of my loving wife and the comforts of my own house. I spent the new year so far nursing a sick system back to health and it's been no picnic. I have a lot planned for this coming year. I can't wait to see what happens this year. Smalltalk on!
Well, I was welcomed back in Nebraska with a pager for a sick system and I've been a very busy boy since I've been back. I must admit that it was great to be back in Alabama where people smile and actually talk to you. But, as with all things, it's great to be back in the arms of my loving wife and the comforts of my own house. I spent the new year so far nursing a sick system back to health and it's been no picnic. I have a lot planned for this coming year. I can't wait to see what happens this year. Smalltalk on!
Subscribe to:
Posts (Atom)