Tuesday, August 22, 2006

David doesn't get it


David Pogue, tech writer for the New York Times claims (follow up here) that perhaps the reason that there are so many Wintel vs Mac computers in corporate America are because IT folks just want to keep their jobs and the viruses, spyware, and a defective Microsoft operating system help them. A corporate environment with Macs and fewer issues would, according to his logic, result in less work, a smaller budget, and a smaller IT staff.

But Pogue is missing a big aspect of the corporate world: what Visual Basic was historically, and what the .NET Framework is today. Corporate environments are filled with throwaway programs that are very specialized towards people's business needs. Without an environment like that (with serious investment) on Macs, that sort of shift is not possible. It harks back to Balmer's "Developers, Developers, Developers!"

Web applications are removing this disparity between operating systems, but I wonder if Apple sees developers as tightly bound in their corporate strategy as Microsoft does. Because they don't, and don't understand corporate software, it lends itself to the chasm between Apple computer and the business user.

ps. I'm aware of Filemaker and Xcode, I just don't think they are as good. As a thought experiment, compare how much Apple bets on these with how much Microsoft bets on Visual Studio and .NET.


Saturday, August 19, 2006

Ruby $LOAD_PATH Watir


On and off I've been messing around trying to get Watir to work on my machine. The gem installed properly based on the instructions given to simple go to the command line and use the following:

gem install watir

But when I tried to execute a simple test I got the following:

uninitialized constant Watir
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require'
./watir.rb:6: uninitialized constant Watir (NameError)
from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require'
from C:/CODE06/RubyStart/WatirTest.rb:7

It seemed like an environment variable was not properly referencing the library but when I hunted for it I saw no environment variables. I ran the unit tests for Watir and it seemed to have installed correctly but I noticed the following at the beginning of each:

$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__

Smells like a path the the library so I investigated with:


which shows me the following:


In order to get the script working I just hacked the $LOAD_PATH to include a hardcoded reference to my Watir libraries:

$LOAD_PATH.unshift 'c:/ruby/lib/ruby/gems/1.8/gems/watir-1.4.1'

From there I was set with the following simple script:

require 'watir'

include Watir

ie = Watir::IE.new

I'll dig into this - I haven't had the patience to sit down with a Ruby book just yet (anyone have ideas?) but if anyone has a similar problem running Watir, here is a hack to get you started if this is a hit on your Google search.


Friday, August 18, 2006

Podcasts to invoke musing, mulling


I love a good podcast. I started as a very regular listener on IT Conversations and have since drifted around looking for quality material. IT Conversations started with a lot of good content but it seems as though of late its drifted into MBA type material which is a bit vague for me; I prefer good technical podcasts.

Some places I've found myself consistently happy:
1. Hanselminutes - great coverage of the .NET universe along with other technical topics such as Syndication, SCRUM, and the like.
2. Software Engineering Radio - I am working at restraining myself of cultural stereotypes but the SE Radio crew are very, very concise. They have a much better depth of coverage than other technical podcasts
3. .NET Rocks - good show with an excellent track record. Sometimes just a touch too long, but I've always liked DNR.

I've listened to a few podcasts from WebDevRadio. Much of what I heard was good, and I like how it takes me out of the exclusively .NET universe a bit.

From IT Conversations, my favorites up to this point included Steve McConnel, Joel Spolsky, Philip Greenspun, Will Wright, and Paul Graham.

Although Venture Voice isn't really that interesting to me, Jason Freid and Joel Spolsky have some good interviews there as well.

In the "lost podcast" genre - David Heinemeier Hansson of 37 Signals had a great talk at Carson Workshops where he talks about the basic philosophy of Ruby on Rails. I don't see a link to it but if you find it, it's good. Simon Incutio took some great notes that will give you a good idea of what was said.

Well, there are a lot of podcasts out there; too many for me to get to. These are most of the ones I keep going back to and finding gems.

Peter Seale has a much more comprehensive listing here. I'm looking forward to going through his list, it would be nice to make a website that kept a nice listing of such podcasts. Not necessarily aggregated, but something maintained by a more trusted curator.


Thursday, August 17, 2006

Kiko Lessons


I posted yesterday about the speculation going on about their folding. Here it is from the proverbial horse's mouth.


Wednesday, August 16, 2006

Small Teams, Better Software


Via Raganwald, there is a small post on how smaller teams make better software. There is a nice balance between the need for methodology and the idea that people matter most. Agile thinking indeed.


Kiko, Down For the Count But...


... will they get up? Buzz is all around since the Y-Combinated Kiko is folding and being auctioned off. I was interested in what looked like a blog post retrospective of the whole thing until I realized it was just someone speculating, not the kids from Kiko writing about what happened.

Truth be told even though web calendars are interesting software, I really don't use them. I used Kiko a few times just to see how it worked and was impressed with what it seemed to take programmatically. And that's how I judge the whole thing - as a technical achievement, not as a sales person's way of making a lot of money even though they may have hoped for that side effect.

Now if I had $50,000 and a lot of motivation I'd get that source code and make a calendar component for .NET - the last one I worked with was no fun at all. And of course I know nothing about being profitable; it would be an interesting project is all.


Saturday, August 12, 2006

Yegge's Kingdom of Nouns


I'm late to the party once again; I discovered Steve Yegge just recently and ran across his essay "Execution in the Kingdom of Noungs." Yegge is a great writer and I can see why the essay recieved a lot of attention. Yegge basically asserts that Java is a kingdom of nouns; a language which focuses on things (objects) which he parallels as "nouns" over actions which he parallels as "verbs." This leads to a lot of verbose monstrositities in code and is, in his opinion, a bad thing compared to languages where verbs are parallel or even more first class than nouns - from which we get references to functional languages and the nirvana of LISP.

I remember learning java many years ago coming from the black sheep of all programming languages, Visual Basic. When I got to programming user interfaces with AWT and SWING, I remember being mesmerized by the sheer weight of it. In Visual Basic, one would double click on a button and the tool would create an event procedure that looked like this:

Sub MyButton_Click()
'code here
End Sub

I made the assumption that the tool was abstracting details away for me, but it was simple, intuitive, and effective.

In Java, I learned that to write an event handler I needed to implement an interface with a different class or override a method from an anonymous instance of a class that implemented the event handling interface. At first it seemed cool to throw all the terms around: "listener interface, anonymous instance... " but I had trouble stitching it all together cohesively by hand. It's been a while but I remember liking the idea of keeping a separate class to do my event handling rather than using an anonymous one but running into the trickiness of making references to data in the UI class where the event was being triggered.

I thought this was just a matter of tools; if I got the right IDE I would be able to nail the issue. But the IDEs I used tended to do things differently; I'm digging into memory here but I remember liking Borland's JBuilder for development and disliking how it used Borland helper classes for event handling to try to clean things up.

I think Yegge could have driven his point home about nouns if he'd focused entirely on event handling. To handle an event you need to know about two nouns: the listener interface and the class that implements that interface for you wherein you are given an opportunity to write your code.

I remember getting finally to go to training in Java (after I'd taught myself most of what I'd eventually know) and asking about that. People looked at me with the condescending "complexity is cool" look that usually sends Visual Basic programmers back to their environments to be productive.

And I can see some niceties of the extra nouns in Java. Building even more layers of abstraction is easier (e.g. handling many events with the same class implementing the listener interface) -

It's been a long time but I may be returning to the Java world; I made need to get Java certification for academic reasons. It will be interesting to study the language again with these thoughts in mind.


Monday, August 07, 2006

Joel, MapReduce, Javascript Closures, Flanagan


Older news is that Joel posted an excellent essay called Can Your Language Do This? where he walks through some of the basics of passing function references around in Javascript. I'll beat my old drum and say that Javascript is an intricate, powerful language.

The timing for the article is great because I'd just recently used function references as an approach to handling some client side script that needed to be synchronous. In the application we use a popup window that is launched in javascript and then based on some input from the user we pass back information to the page so that it can know how to proceed. The problem with this approach, however, is that a popup window is a disjointed entity from the page it popped up from and the thread that invokes the popup will not wait for the user to close the window before continuing with the rest of the javascript. My solution was simple: pass a callback function to the popup and use that to make sure the user interaction was finished before proceeding with the parent page's code.

Another essay I managed to finish over the weekend that runs along the javascript and functions as datatypes is Javascript Closures For Dummies by Morris Johns. Concise with beautiful typography.

One final thing: David Flanagan has a 5th edition of his Javascript book coming out from O'Reilly this month. I'm excited to see what his treatment of the latest developments such as Ajax will be. It will be painful to be buying that book for the third time, but if I get even a piece of the mileage I got out of the 4th edition, it will be well worth it.


Scott Gives Open Source, Step by Step


I've been wanting over the last few days to post Scott Hanselman's step by step tutorial on how to contribute to the DasBlog open source project. This weekend I had a chance to go over it, albeit without duplicating the steps - I'll do that soon enough.

It's always seemed a little sad to me that those of us working primarily with Microsoft development tools aren't as given to collaborating on anything that is either outside the scope of normal work or commercial effort. It's been a goal of mine to contribute to an open source project for a while and it's nice to get this little push in getting that done.

I did download DasBlog around TechEd time to study the structure of the application. It didn't quite install as easily as the *.vbs the readme file discusses but it was a simple permissions issue that I resolved by resetting server extensions on the virtual directory. At the time the NUnit 1.x binary was also unavailable so I had to remove the test projects in order to get it to compile.

Before I start writing patches, however, it will be important for me to have a proper understanding of the application's purpose, design, and implementation. I'm hopeful that my contributions while "dogfooding" will be more meaningful.


Step by step start to WPF


Posted by Snowball. I'm posting it for some future date when I have time to poke around...


Wednesday, August 02, 2006

Google Code vs SourceForge


Comparison is made here. The use of Subversion on Google Code makes it appealing to me since I was planning to use Subversion for my home brewed projects anyway.


Linus on Visual Basic, Norvig on Javascript, Heinemeier Hansson on taste


Courtesy of John Lam - some of the greater fish in the sea of programming answered some questions on Sztywny Blog:

Sometimes you don't know whether a compliment is a compliment. Linus Torvalds says Visual Basic did more for programming than object orientation.

For example, I personally believe that "Visual Basic" did more for programming than "Object-Oriented Languages" did. Yet people laugh at VB and say it’s a bad language, and they’ve been talking about OO languages for decades.

And no, Visual Basic wasn’t a great language, but I think the easy DB interfaces in VB were fundmantally more important than object orientation is, for example.
Peter Norvig, yes that Peter Norvig at Google thinks he needs to keep improving his Javascript. It always annoys me when people think they know javascript - not that it's unknowable, but knowing how to do alerts and toggle DIV visibility is for kids.

David Heinemeier Hansson gives the answers I would expect from him, especially espousing "values" as standing between good and mediocre programmers. For a long time I've been wanting to blog about his talk at Carson Workshops concerning "beautiful code."

The whole round table interview is interesting.