• Ubuntu, like many other free operating systems, have a beautiful package management system that will track what depends on what, what is installed, what is not, what is not longer needed, which versions of each. If you tamper with it, you are asking for trouble. If you do a manual upgrade, from sources, eventually a package upgrade will downgrade your version or some other application being incompatible will not work. And once you start throwing files in /usr, you start to ask for trouble. I’ve been using this type of operating systems for years and I’ve learned this by experience.

    Nevertheless you, as I, want to try and code with Rails 2, right? Well, this is how I installed it in my Kubuntu box (should work the same for any Ubuntu and Debian derivate as well as others). I’ve decided to install everything on /opt/rails. I like to keep more-or-less self-contained directories in /opt. So I started with:

    (more…)

  • For the purpose of writing this article I’m going to use the following definition of “operating system”. There are other definitions and I’m not claiming this is the right one. An operating system is a unit of software that you can install in a computer and will let you use the computer, thought a set of utilities or program in one way or another. (more…)

  • Recently my friend Juanjo pointed out how much activity my blog has been having recently. Thinking about it, he is right and there are two reasons why this may be the case:

    • I’m more inspired than usual. I’m not sure if this is the case, and even if it is, it’s not helpful for me to communicate it unless I’ve found a way to find inspiration easily.
    • I’m writing in parallel. Now this is something to talk about, because it is a technique that can be applied by everyone and I recommend to any blogger.

    (more…)

  • Squeak is by far the best and most complex Smalltalk implementation out there. It may not play well with other operating systems because it is an operating system by itself. It is also one of the most impressive development environments I ever seen. OK, the most impressive.

    The only thing that bothers me is that Squeak is not really free software (search for Squeak in that page). Fortunately, some people are working on making it proper free software. Hurrah! I hope the succeed soon!
  • I’ve made an image to describe Common Lisp method composition (or CLOS method composition if you want):

  • I have just made a new release of Score Reading Trainer, 0.1.4. This release has a very important bug fix, thanks to Julian Kniephoff. The fix allows to use notes below the first line of the staff without getting the extra lines mixed and eventually crashing. It was also upgraded to compile correctly and easily to a current KDE, version 3.

  • After watching the OpenID community grow for years, I finally joined them. I’ve liked the idea from the first day I’ve read about it; aren’t we all tired, after all, of having to remember hundreds of usernames, passwords (sometimes with conflicting constraints: a password must have numbers, a password can’t have numbers)?

    From OpenID’s web site:

    OpenID means the elimination of multiple user names and passwords and a smoother, more secure, online experience. For businesses, this means a lower cost of password or account management, the opportunity for easier and higher numbers of new user registrations and the elimination of missed transactions because of user frustration with lost and forgotten passwords. OpenID allows for innovation in the authentication space beyond just using a password to “unlock” your OpenID identity, but the ability to strongly protect your OpenID and have that benefit move with you everywhere you go online.

    For me, joining the revolution was very easy. First I open an account on MyOpenID, then I installed the OpenID Delegate WordPress Plugin in my wordpress blog so my OpenID address is, actually, pupeno.com. So even thought I’m using a third party service, if they disappear I just pick another one (or become my own OpenID provider) and go on using the same address, pupeno.com. Isn’t it great? There are many other OpenID providers and many sites already supporting OpenID.

  • SCons is a program designed to replace make and autotools. SCons being a new tool is built with all the knowledge of what problem really this kind of tool should be solving, while make and autotools were built while discovering the real problem. It is natural to expect SCons to have a better design that covers the big picture. (more…)

  • I recently stated what I believe is the biggest problem with Lisp, you can’t make programs with it. In my quest, my first solution is a very simplistic Makefile that does the job using cl-launch, a very interesting program that can turn a Common Lisp program into a Bash script. Other solutions are likely to use cl-launch as well.

    So, we’ll play with this little program:

    [sourcecode]
    (defun main ()
      (format t "Hello world!~%"))

    (main)
    [/sourcecode]

    Very trivial indeed. And to “compile it”, we’d use this trivial Makefile:

    [sourcecode]
    %: %.lisp
            cl-launch –output $@ –file $&<

    hello-world: hello-world.lisp
    [/sourcecode]

    All we have to do now is run make:

    [sourcecode]
    $ make
    cl-launch –output hello-world –file hello-world.lisp
    [/sourcecode]

    And we now have a runable hello-world:

    [sourcecode]
    $ ./hello-world
    Hello world!
    [/sourcecode]

    It run! it worked! it’s portable! Isn’t it great?

    Obviously all the logic is hidden inside cl-launch (thank you Fare Rideau). The problems with this simple solution is that using only make makes programs harder to port and package for different distributions and operating systems. That’s why the autotools where invented. Remember those days when to compile something we had to open a Makefile and set up variables? well, this simplistic solution is going back to those days. We can do better, I hope I can do better.

    Now, for the curious, this is how the hello-world script looks like (I’d say its quite remarkable):

    [sourcecode lang=”bash”]#!/bin/sh
    #| CL-LAUNCH 2.03 CONFIGURATION
    SOFTWARE_FILE=.
    SOFTWARE_SYSTEM=
    SOFTWARE_INIT_FORMS=
    SYSTEMS_PATHS=
    INCLUDE_PATH=/usr/share/common-lisp/source/cl-launch
    LISPS="cmucl sbcl clisp ecl openmcl gclcvs allegro lisp gcl"
    WRAPPER_CODE=
    DUMP=
    RESTART=
    IMAGE_BASE=
    IMAGE_DIR=
    IMAGE=

    # END OF CL-LAUNCH CONFIGURATION
    # This file was generated by CL-Launch 2.03
    # This file was automatically generated and contains parts of CL-Launch
    #
    PROG=""
    . /usr/share/common-lisp/source/cl-launch/wrapper.sh

    launch_self "$@"

    ABORT

    # |#

    (load "/usr/share/common-lisp/source/cl-launch/header.lisp" :verbose nil :print nil)

    ;;;; CL-LAUNCH LISP INITIALIZATION CODE

    #-cl-launched
    (cl-launch::run :load :self)

    ;;;; END OF CL-LAUNCH LISP INITIALIZATION CODE

    ;;; 65bcc57c2179aad145614ec328ce5ba8 SOFTWARE WRAPPED BY CL-LAUNCH BEGINS HERE:

    (defun main ()
    (format t "Hello world!~%"))

    (main)
    [/sourcecode]

  • I’m not really going to talk about the problem with Lisp, but only a problem. And I’m not really going to talk about Lisp, but Common Lisp. So this post should be called “A problem with Common Lisp”, but the current title is more catchy, isn’t it?

    You are still with me? nice. Because I believe I have something important to say. A problem with Common Lisp is that you can’t make programs with it. That may have been another nice catchy title: “You can’t make programs with Lisp”. (more…)