Showing posts from March, 2006

Matz on Ruby's Lisp heritage

I like this! From Matz: Ruby is a language designed in the following steps: * take a simple lisp language (like one prior to CL). * remove macros, s-expression. * add simple object system (much simpler than CLOS). * add blocks, inspired by higher order functions. * add methods found in Smalltalk. * add functionality found in Perl (in OO way). So, Ruby was a Lisp originally, in theory. Let's call it MatzLisp from now on. ;-) Since the late 1970s, I have always been happy writing software in Lisp, but except for the development of three commercial products and quite a bit of R&D, Lisp has been a hard sell. With the mass enthusiasm for Ruby on Rails, Ruby is starting to be an easy sell. My only problem with Ruby is that you don't get the white-hot high performance of compiled Common Lisp - but I can live with that.

Rails 1.1 released

Here is the good news! The timing is great since I am just finishing up my Enterprise Ruby book and I will take an extra week to update the examples, as appropriate, mostly with RJS and new ActiveRecord features.

I enabled comments on my blog

I don't really have too much extra time to deal with problems like content SPAM, but I am going to try "word verification for comments" to minimize the automated SPAM problem. I get a lot of email from people reading my blog, which I enjoy. If you would rather have private communication, just keep emailing - otherwise, click on the "COMMENTS" link to participate in a public discussion.

Managed code, Microsoft dropping .Net from Vista implementation

I understand that in some cases managed code can run slower or require more memory. Still, I was disappointed that Microsoft (some time ago, apparently) removed .Net code from beta builds of Window Vista. As a Linux enthusiast (yes, I am posting from Ubuntu right now :-) I would also like to see managed code in the Linux kernel and surrounding utilities. I would be happy to take a performance hit to improve security (just getting rid of buffer overflow errors would be huge) and reliability. I believe that Java Hotspot technology, or something similar would work just fine. I am not a .Net expert, but I would imagine that they use something like hotspot, use ephemeral(or generational) garbage collection, etc. I linked to an article the other day that showed that in some cases managed memory can be faster than C mallocs. Anyway, I sold my Microsoft stock last year (I was very irritated with them for not supporting open document formats and decided that I simply did not want to own their s

We *really* need semantic attributes on web links

Scoble complains about the lack of a 'do not follow' link attribute on Tailrank : link to an article that you are complaining about and the linked article gets a (slightly) higher search rank, and more people read it. Sure, this is a problem, but the real solution is setting a standard (could be grass roots) for adding optional attributes to HTML links (I wrote about this More on link types and the Semantic Web a few months ago). Jon Udel has a great idea for combining CSS style ids with semantic information. The microformats people have good ideas for using the rel attribute to specify a relationship to a link (license, help, type-of, friend, etc.) What I am most interested in is having enough usable information on the web to enable me to write software tools that can automatically extract information on trust relationships between information sources on the web. However, the range of applications is just about infinite - given more metadata.

Great article on Java performance

This article on Java memory management by Brian Goetz explains why Java memory management is so efficient. The key is ephemeral or generational garbage collection - a technology that made Lisp a practical and efficient language 20 years ago. I especially liked Brian's discusion on how there is often a zero cost of deallocation of short lived objects. Cool stuff!

Privacy issues vs. very useful web portals like GMail, Yahoo Calendar, etc.

I received a note from a good friend last week (a Linux security expert) who has decided to completely stop using public web portals. I got a different take from David Brin (sci-fi writer) when I spent an afternoon with him at his home in California a few years ago: privacy is a lost cause, but as long as everyone has the right to surveillance data, then the situation is OK (I am paraphrasing him - hopefully fairly accurately). I decided that I am willing to take the privacy hit: my wife and I use discount cards at our two local supermarkets, so every business that cares about it buys data on exactly what we buy and when - and we get a few little discounts. Unless you take extreme trouble to avoid it, just about everything that you do on the internet is public (to companies who are willing to pay for the information, and the government). So, I use convenient public web portals, including my handy . I think that many people are artificially nervous about privacy issues in the is starting to come online

I requested an invite a week ago mainly because I was curious about how well Google would implement a web editing and hosting service for non computer geeks. The executive summary: they did a good job and I have recommended to all of my non-technical friends to request an invite. I already have my own web sites, but to try out their service I just wrote up a little rant on: My take on Spirituality and Responsibility Fun stuff - not as fun as something like Flickr , but a great site to recommend to non geek friends and family.

Yes, Ruby is ready for the Enterprise

David Heinemeier Hansson quite rightly critiques James McGovern's anti Enterprise Ruby article. To say that Ruby and Rails are not for the Enterprise is like saying that PHP, Perl, Common Lisp, Smalltalk, etc. are not ready for the Enterprise. What ever happened to thinking about using the right tool for each job? Factors influencing "what is the right tool?" decision certainly include: Existing knowledge and experience in your organization Runtime efficiency and reliability Time required for Development Effects on maintenance costs Existing software libraries and infrastructure software etc. Don't get me wrong: I love server side Java for solving many different types of problems, but lighter weight (often scripting) languages and platforms also have their uses and there are many types of problems that are better solved with Rails than some subset of J2EE.

Blue Ray and HD-DVD; Amazon S3 storage

Good news, I guess that consumer devices are finally coming out. Still, I am a skeptic - I am thinking about and drawing analogies to LaserDisks and BetaMax. In bulk, I pay about 10 cents for CDRs and about 75 cents for DVD-Rs - $25 for a writable Blue Ray disk or half that (?) for a writable HD-DVD seems expensive. The convenience of higher capacity, for me, is cancelled out by the desire for redundancy: would I back up as often on such expensive media? I am more excited by Amazon's S3 storage system because it fills a real need that I have for secondary (backup) persistence for web applications . I like to develop close to "no maintenance" web applications. Part of the solution is to use managed hosting (I favor Xen based virtual servers for low cost and good performance) so your web application can be swapped to another server (along with your complete virtual OS environment) when hardware fails. Amazon's S3 service fills the need for incrementally backing up user

Useful tool for searching millions of RSS feeds; some of my own projects

I have been using recently (both because they are a customer of mine and their service is very useful). I also use Technorati to specifically search blogs, but Rojo has a few results optimizations that makes their service a bit more useful to me. I have been working on a customized information portal for about a year. I took down the Java version a few months ago when I started on a newer version written in Ruby and Rails. I was hoping to have it back on line by now, but working on my new Ruby book and consulting for a few customers takes priority. I created a 'knowledge based' recipes/cooking portal last year and I also want to work on this technology more this year. I originally started to use the USDA nutrition database, then stopped when I realized how inaccurate estimating the nutritional content of recipes is given variations in cooking and quality of ingredients. Anyway, I want to take another shot at providing nutritional informa

Feeling of relief: switching back to from Word

I more or less had to use Word while creating a draft of my new Ruby book because I was required have separate chapters and a master document (and Word master documents are evil :-) I have finished the book to the point where I have a complete manuscript and delivery-wise I can go back to one large manuscript file. My publisher's styles are very portable between Word and, so I coalesced everything into one document file and switched back to OO.o. I really had a lot of hassles using Word's master document "feature", and it feels great to have that behind me, and back to using OO.o because when I use OO.o to write, I don't even think about the mechanics of using the program, just on what I am working on. I still have 4 or 5 weeks of work on my book, polishing it based on some excellent feedback from the owner of my publishing company and the tech reviewers, but I am happier working with a single OO.o document. When Microsoft un-cages their next versi

I wish there were more commercial apps for Linux

I use mostly open source or free as in beer development tools on OS X, Windows, and Linux (with a major exception of IntelliJ - a bit expensive, but really worth it). There are two commercial utilities that I use almost constantly: TextPad (Windows) and TextMate (OS X). Both editors are well integrated into their host operating systems, offer good shell support, etc. On Linux, I find gedit fairly handy, but I would spend some money to get a TextPad or TextMate type product with no hesitation.

Flickr and Netflix web portals, etc.

Work wise, working on interactive read/write web portals is one of the most fun things I do (in addition to artificial intelligence stuff). I have to admit more than a little professional jealousy whenever, as a consumer, I use the Netflix and Flickr portals. Beautifully done. As a developer, I feel like I have the server side plumbing down cold, but I really need to perfect my Javascript skills. One thing that I feel that has really helped me in the last year is cutting down on the number of programming languages that I use: except for some of my personal AI research and a few smaller contracting jobs, I have been just using Ruby and Java. It is difficult to largely give up Common Lisp, Prolog and Scheme, but except for a major runtime performance hit, Ruby really is good enough for most of the stuff that I do and I think Ruby on Rails and server side Java is all I need for web development. Ruby and Java nicely cover my requirements for programming languages because they tend to be v

I finally converted from CVS to Subversion

I have been using RCS and CVS since the 1980s for version control. Finally today I upgraded to Subversion which is a lot more flexible in allowing developers to rename and move directories, better handling of binary files, etc. (Actually, I only converted 6 active projects - other stuff I am just leaving on CVS.)

Ruby 'duck typing' addiction

I just had another reminder why I like late binding and flexible typing so much: I had written a handy little utility in Ruby for collecting some data, writing to an open file as data was collected and processed. Initially, I thought: why buffer everything in memory? Then I had the need to use the same functionality to dynamically generate a download from a web app, but I did not have to change any code: I need to collect text and send it out in a Rails controller (instead of using a view) back to a client web browser - I needed in-memory data, not a local file. Well, since both String and File classes support << (which is what I used in the first version of the code for writing to an open file), I did not have to change any code since I could just pass in an empty string instead of an open file, and return what used to the a file descriptor (instead of closing it) as the value of the accumulated text. Try that in Java or C++ :-) Anyway, not a big deal, but it did save me refact