What's all this about, then?
Simplicity. Clarity. Power. I want to write software that's easy to use, and does its job well. I want to use tools that will help me produce the finest software in the shortest amount of time. I don't want to hope my software works, I want to know for sure. This is where I keep my notes about software development and anything else that comes to mind.Lambda the Ultimate Killfile
Lambda the Ultimate is an outstanding programming languages weblog that I read frequently. Lately, though, the signal-to-noise ratio has been dropping, and I've felt the need for a way to eliminate some of the chaff. So, I created Lambda the Ultimate Killfile, which is a Greasemonkey script that prunes out entries from people whose comments you'd rather not read. Simply install, then use Greasemonkey's "Manage User Scripts" dialog to edit the script. Add the names of the users you don't want to see to the "users" array, and you're off and running.
Dynamic Applications From the Ground Up
This paper describes an application architecture using hs-plugins which enables Haskell programs to dynamically load and reload modules. Hs-plugins also provides "eval" functionality. The resulting architecture allows for hot-swapping modules in a running program without any loss of data or state.
The authors describe using this plugin-based architecture to implement a text editor and an IRC robot. Each program only has a statically compiled core of around 100 lines of code; everything else is dynamically loaded. Of course, this is still Haskell - even though you're loading things dynamically, you still get the same type checking at module load time that you would get if you compiled it statically. Really outstanding work.
I especially liked this quote:
At this point, Haskell offers significant advantage over languages which encourage the use of global state. Unrestricted use of global state leads to a multitude of values scattered throughout the program; hence, bookkeeping of such a dispersed state becomes difficult and potentially infeasible. Hot swapping is only practical if the application already has disciplined use of global state as is the case by default in Haskell programs. Without restricted state, runtime system or operating system support seems necessary to deal with the state problem.
Settling down and choosing a language
I've been interested in programming languages for a long time now, and it's been good for me. I've learned a lot of new ideas, broadened my horizons. However, I've noticed I don't seem to write much software for myself anymore, only what I'm paid to write at work. Whenever I spend my own time on computers, it's always reading some academic paper or book, never actually writing programs. I used to write software on my own time, for fun. I enjoyed that, and I think I'd like to do some more of it. The problem is, after you've been exposed to so many languages, how do you pick one and really dig into it?
After thinking about it for some time, I've decided to settle down and focus all my spare computing time on a single language: Haskell. I'm not saying it's the end-all-be-all of languages; it's got some warts. It's hard to find good documentation, though that's getting better. It's hard to do dynamic things - reflection, plugins, etc., though that's getting better, too. The thing is, I've noticed that the code I write in Haskell is usually more elegant than the code I write in other languages, and since this is my time, I can choose what's important. Crisp, elegant code is important to me.
So I'm going to give it a go. It doesn't mean I won't be keeping an eye on a dozen or so of my other interesting languages, but from a distance - as a spectator. It does mean I'm going to start writing code again, and that feels good.
Factor
I'm surprised to see I've never mentioned Factor here before. It's a concatenative (i.e., Forth-like) language with strong influences from Joy. It's also progressing by leaps and bounds. They just released version 0.76, which supports an interactive tutorial that's quite impressive for such a young language. Install is dirt simple, and so far works fine on Windows. Very cool.
New math site: Arsmathematica.net
Just yesterday, arsmathematica.net, a new website that aims to be like Lambda the Ultimate for mathematics was launched:
This site is dedicated to the mathematical arts: mathematics itself, and its many children. Mathematics, even the most abstruse, is now pervasive throughout physics, computer science, economics, and other fields. We explore these topics, in lieu of doing our jobs or conversing with our loved ones.
Haskell-related blog
Recently noticed a Haskell related blog: The Haskell Sequence
Cabal build system works well!
There's a common standard for packaging Haskell libraries now, called Cabal (Common Architecture for Building Applications and Libraries). Basically, the application/library designer creates a simpe project specification that says which modules are to be provided, what executables to create, etc., and puts that together with a little Haskell code that just calls into the Cabal library to do the heavy lifting. Then you, the user, just unpack the tarball, do:
ghc -package Cabal Setup.lhs -o setup setup configure setup build setup install
Voila, the package is installed. This is really nice, since people in Haskell-land have sometimes been a little too Unix-centric, so their packages wouldn't build on my Windows box. However, every Cabalized package I've installed so far has gone smoothly. If you develop a Haskell package or application, PLEASE package it with Cabal! Windows users (and probably everyone else for that matter) thank you!
Desert Spring-Time
Desert Spring-Time is a project to create an Objective Caml-based operating system. Looks like very early days, but they're already getting started on basic GUI stuff. See also House, a similar project for GHC Haskell which is a bit further along.
Reading Math
Patrick points out an interesting snippet on Paul Graham's site:
I found, when I was studying mathematics, that 2 things were true: (1) the teacher was not too good and (2) the book was not too good. So I would always buy a half-dozen books on the topic and try to get the full picture by reading the same sections in each book. The combination helped me understand much more than the sum of the content. Also, I was never opposed to reading something as much as 10 times until I squeezed everything out of it.
I've also had this problem. I've also done a lot of math reading on my own time, and the biggest single thing I can recommend for reading math books is this: Force yourself to read every single line carefully. Some more than once. I always want to read math like I read other books, that is, very quickly. Math is more dense. Don't worry, you're not wasting time, you're not worse at math than you are at other things. It's just more information in less space. Take your time.
Older news
- PLNews
- Python to lose reduce()
- Higher Order Perl
- Nice 0.9.10 Released
- Darcs infected
- Seaside gets a new website
- Solved: personal firewall
- Haskell's overlooked object system
- Living with Linux
- Interview with David Roundy, creator of Darcs
- Nice appears in the alt.lang.jre series
- Haskell Performance
- Changes to RSS feed
- Nice Programming Language 0.9.9 released
- A slice of Nice
- A plan for NullPointerExceptions
- Courtesy Implementation in Nice
- More personality quizzes
- Groovy features in Nice, part 2
- Groovy features in Nice
- Nice programming language mode for JEdit
- Narrowing down editor choices
- Denial of Service
- Partial continuations
- Continuations in Java
- Epigram - a new language with dependent typing
- Boo - a new .Net language
- André Pang comments on "Modern Static Typing: Less Code, Better Code"
- Thoughts on a Nice database API
- Nice Programming Language 0.9.8 released
- Lambda the Ultimate has moved
- How dynamic typing will save the world (not).
- The Seventh ICFP Programming Contest
- It's all clear to me now.
- Type Inference in Nice
- Creator of the Nice Programming Language gets a blog
- An Ideal Source Code Management System
- darcs - a thoughtful replacement for CVS
- Macro envy
- Nice generator library in CVS
- Type safety in Nice
- Better logging - how Nice!
- The Scala Language
- Financial contracts - commercial software in Caml
- Two interesting new books on computer science
- Site upgrade for Mozilla users
- Context, metadata, and zip()
- Smooth dynamic typing in Nice
- Inching Toward Blogdom (again)
- Loops in Haskell
- Send a programmer to do a graphic artist's job...
- Template Haskell Example
- A Most Excellent Monad Tutorial
- Picothreads - lightweight threading for Java
- Rhino gets continuations
- Haskell even more concise than Python...
- Inching Toward Blogdom
- Two new GUI toolkits for Haskell
- Reflections on O'Reilly OSCon 2003
- O'Reilly OSCon 2003
- Partial application/curry module for Python
- Modern Static Typing: Less Code, Better Code
(or: How Java/C++/C# Ruin Static Typing for the Rest of Us) - Back to Nice
- A Haskell CSV parser
- Skinning Haskell
Technorati Profile
