Grants OLPC XO Mind-Share Experiment

The OLPC project’s vision is to “provide children around the world with new opportunities to explore, experiment and express themselves.” To help further their goal, the OLPC folks gave us the opportunity to purchase one laptop for ourselves while at the same time purchasing one for a child. Over the past month I’ve read, talked, and blogged about the XO, played and tinkered on the XO, programmed, hacked, and surfed the web on the XO. It has been a lot of fun, but more importantly, it has changed how I think.
OLPC is pitched as a learning project, but it is so much more than that. When you learn, you change; you make opinions and get ideas and live your life differently. It is a personal growth project. You will collaborate, exchange ideas, and make decisions. You will develop your own philosophy, hear others, and be a better person for it. Whatever path you take on this journey will lead you to the same destination: knowledge.
If you weren’t able to, didn’t want to, or maybe even didn’t know about the XO before today, it is not too late to spend some time getting to know more about both the OLPC project and the wonderful little machine that is part of it. If you are interested, please read on.
Continue reading “Grants OLPC XO Mind-Share Experiment”

Scheme Lisp on the OLPC XO

Out of the box, the OLPC XO comes loaded to the gills with Python, but sadly, no Lisp!
To remedy that situation I enlisted the help of the kind folks on the PLT discussion list to help me write a script to build the PLT DrScheme (Lisp) development environment for the XO.
This script is responsible for preparing the PLT application suite for the OLPC XO laptop computer. The script creates a typical binary, *not* a Sugar application (that is going to take a little more work!). You can download the application itself here, along with the md5 checksum, and the build log. A Flickr photoset is available here.
If you do try it out, please be sure to read the usage notes below, and let me know if anything needs to be added to them. All of the documentation is pre-installed, so once you’ve downloaded it, extracted the archive, and executed ‘drscheme’ (or ‘mzscheme’ if you want command line Lisp) in the bin dir, you should be ready to roll.
Thanks to all of the hard work by both the PLT and OLPC folks, lives will be changed.
Usage Notes

  • The apps run quickly. The slowest part is, of course, the disk I/O.
  • Slideshow works very well; it looks great and runs fast, turning the XO into a wonderful little “personal” presentation machine.
  • Out of the box, there is one setting in Edit->Preferences->Editing->General that is left unchecked: Open files in separate tabs (not separate windows). Left unchecked, opening a file will occur in a new window, and creating a new file will occur in the same editor. Check this feature. It will prevent multiple instances of DrScheme, conserving resources, and perhaps equally as important, it will make DrScheme more fun to use. “Reuse existing frames when opening new files” should not be checked!
  • Help desk works wonderfully with one caveat. When you are running Sugar and you switch between applications, more than one “unknown app circle” will show up in the “Donut”, each one corresponding to a DrScheme window. When you try to return to the help desk, you will find that you are always returned to the DrScheme IDE window. In order to get back to the help desk window, return to the DrScheme IDE window and then use alt+tab to switch to the help desk.
  • In this build of DrScheme, the IDE will resize to accomodate long file names. Although the XO screen has a very high resolution, it is very small, and large fonts are used to accomodate this. As a result, when file names longer than 16 characters are loaded, the IDE will expand off of the right side of the screen. This behavior will not be present in the newer version of DrScheme.
  • The Preferences window buttons “Revert to Defaults”, and “Cancel”, and “Ok” are not visible, appearing just below the bottom bound of the screen. The mouse cursor *can* click these, and in fact when you do click them, you can see the buttons are depressed. “Revert” is on the far left, and then “Cancel”, and finally “Ok” is on the far right, appearing in that order. This is order is different than how it appears on Windows (Revert, Ok, Cancel)!

Addendum 03/22/08:

  • Updated the build script (now tag 004) comments with note about what settings to check in DrScheme, updated the usage notes to reflect this fact
  • Someone asked “By the way, is there a reason that just typing yum install plt-scheme wouldn’t work?”. That is a good question. PLT builds against OpenGL. The XO does not have hardware acceleration. Consequently there are two ways to run PLT on the XO: install Mesa for software-based OpenGL emulation or build PLT without OpenGL support. I chose the latter, without testing the former.
  • In case you are interested in building PLT for the XO using Microsoft Virtual PC, I’ve added my setup notes.

Addendum 05/29/08:
Made a big correction in the order of the preference buttons, also updated the reference to the script which reflects the change.

Code Generation and DSLs in Scheme

Over the years, I have heard some pretty outrageous and tantalizing claims made about the programming language Lisp. For example, “It will change you, forever.” and “You write code that writes code.”. Sadly, no further explanation is ever provided. Perhaps it is impossible to capture the essence of that to which these statements allude? This air of mystery around Lisp is both a blessing and a curse. Some folks will find this aura repugnant; others magical. For me, it was the latter. I wanted in on the secret!
Continue reading “Code Generation and DSLs in Scheme”

What is “real code”?

One common complaint about non-mainstream programming languages is that there hasn’t been any “real code” written in that particular language. One response to this is the Practical Common Lisp book.
Whether or not a MP3 database or a spam filter is “real code” is up for debate. Nonetheless, based on the success of the book, people clearly want to see “real code”.
In your mind, what is “real code”? What is it that you need to see in order to believe that a language can do “real work”?

(F Sharp) An Implementation Of The `Map' Function In F Sharp (.NET)

Here is how map may be implemented in F Sharp. (At the very least, it is my attempt at implementing it!)

You can run this in the interactive shell.

#light;;
let rec my_map fn xs =
    match xs with
    | first::rest -> (fn first) :: (my_map fn rest)
    | [] -> []
;;
my_map (fun x -> x + 1) [1; 2; 3; 4; 5;];;
val it : int list = [2; 3; 4; 5; 6]

F Sharp for the Holidays

F-Sharp in Visual Studio 2008

To help drum up excitement for the recently released Visual Studio .NET 2008 (VS08) at the WI-INETA Holiday Party this year, folks who are passionate about .NET are being encouraged to give 5-minute micro-presentations on new features about which they are particularly excited. One rumor that piqued my interest was that F# would be released as part of VS08.

As it turns out, although F# did not get released with VS08, F# RC 1.9.3.7 is available in the form of a stand alone installer which provides VS08 integration. Installation is fast and easy, and in no time you will be up and running with a powerful functional programming language, a great IDE, and full access to the latest and greatest APIs that Microsoft has to offer. The following is a screenshot with a few niceties highlighted in blue:

[[http://www.flickr.com/photos/21470641@N07/2110080930/][2110080930_9aa8e34e3f_m.jpg]]

Although technically it may fall outside the bounds of the original WI-INETA goal of presenting only on VS08 features, I’m hoping that optionsScalper will return to reprise his role as the local F# evangelist by giving a micro-presentation on F# and VS08.

Enjoy!

How do you practice?

Someone noticed that I’ve learned how to practice guitar. I asked what they meant by that, and they said that I “start slow, memorize the piece, and keep practicing, a little faster each time”. That is what works for me. When it comes to learning how to become a better programmer, I’m not sure that it is so simple (not to say guitar is simple of course!).
How do you practice programming?
I’ve got some ideas on how I do it, but it I’m going to take some time to think about it.
That post is over the hills and far away!

One reason why F Sharp is exciting

One of the most common reasons cited for not learning more about functional programming is the lack of both good libraries and good development environments. This is a little bit surprising, because when it comes to learning a language, these two features are likely to have the least impact on the learning process. Despite that, this lament continues; there must be more to it!
Programmers, like most folks today, are largely short on time. Wherever they invest it, they expect a good return. When it comes to programming, every programmer hopes that the investment he makes in learning a new language has at least a fighting chance at being applied to solving a billable problem.
F# completely blows away these two huge barriers to folks learning more about functional programming: it has complete access to the .NET platform and has excellent integration with Visual Studio .NET.
This is very, very exciting: even if a programmer never ends up using a functional programming language for billing work, he will have had a lot of fun learning a new paradigm, and will be a better programmer for it!