Tuesday, November 21, 2006

Things that Andy and Dylan showed me

  • Andy's blog (get it from the source).
  • Wil Wheaton's blog. You know, from Star Trek? He talks about old episodes. Very amusing.
  • Engines of Democracy - an article about a great place to work.
  • In Defense of PowerPoint - An article that briefly talks about a good way to give talks. I agree a lot with this article, although I think his anger against Tufte is misdirected.
  • The Show with Ze Frank. Awesome show.
  • A blog entry (and also podcast) by my friend Chris Manion. OK, this wasn't from Dylan or Andy, but it links to my other blog entry about wikis :)  
  • Monday, November 6, 2006

    Three Wiki Uses

    Over the last few years, I've been pretty immersed in the world of wikis. A wiki is like a collaborative web site; it lets several people view and edit a web page and link to other pages, maybe new pages that they themselves create.
    Wikis let tech-savvy people all over the world collaborate on a single web page, a single document. That's a pretty powerful idea, really. The obvious thing to do once an idea like wikis appears is to attempt to cram all of humanity's knowledge into it. Well that's just crazy enough to work.
    Wikipedia is the gold standard of wikis. It's a collaborative encyclopedia with lots and lots of articles. As the gold standard, it influences people's thinking about wikis in ways that might not be quite true.
    If Wikipedia were the only wiki you'd ever heard of, you might think that wikis are used to create encyclopedias. If that were true, you'd really only need one of them.
    If Wikipedia were the only wiki you'd ever heard of, you might be under the false impression that all wikis everywhere are editable by anyone. So if you create a wiki page, it's no longer yours. Other people can scribble on it. Well, some kinds of documents perhaps just aren't suitable for being edited by anyone, and the good news is that you can build a wiki for you and your classmates, or you and your coworkers, and you can decide who gets to edit what.
    I want to think about a few distinct uses for wikis in different contexts. The most common use is of course to create a knowledge repository; a collection of information written by people who know what they're talking about. That's what Wikipedia is, mostly. That's what the Haskell Prime wiki (which I run) is. And the excellent wiki about the game of Go, Sensei's Library, is also a knowledge repository.
    But there are other uses for wikis that are pretty cool. I often have to work on proposals with my coworkers. One (horrible) way to do this is to write the first draft in MS Word, email it to everyone, who might edit it and email it back. Of course, only one person can actually edit it at a time, otherwise I have to figure out what everyone did and merge their changes by hand. That's what we, in the computer industry, call teh suck.
    A better way to do this is to use a version control system, which lets multiple people work on a document at one time. Of course, if you're editing evil document formats like Word, still only one person can edit it at a time, but at least you cut out email, so things are a bit better organized.
    But wikis are actually a really great way to work on a document with another person. Two or more people can each collaborate on the document using the wiki software over the web. What becomes of the document at that point depends on its ultimate use. Maybe you have to convert it to MS Word or PDF at the end. That's a bit of a bummer.
    So there are two uses of wikis that I've mentioned: building a knowledge repository, and collaborative writing.
    Google started a service for collaborating on documents called Google Docs & Spreadsheets, which is probably useful for collaborative writing, but not knowledge repositories. They also acquired a wiki startup a few days ago, so they are clearly trying to get all over this space.
    There's another very interesting use of wikis that I'll call situation awareness. You can get a really vivid picture of this use of wikis if you take a look at the wikipedia article on the July 2005 London bombings. By the way, I didn't discover this excellent example of situation awareness using wikis. I saw it in the slides for a talk, but I don't know the original source at this point.
    If you go to that link, you'll see an excellent and up-to-date encyclopedia article about the London bombings. It's not a news article. Go to Google News and try to find a news article from a major news source which is this detailed, up-to-date, and well organized. Most articles you'll find are a snapshot, taken at a particular point in time (when the article was published) that most likely contains an account of the latest developments, and usually brief background in case you missed previous stories.
    The wikipedia article isn't a snapshot, it's an article that explains things in a logical order, which isn't necessarily chronological.
    Each wikipedia article contains a link to its own history. You can look back over time and see the article evolve. If you look at the early edit history of that London bombing article, you'll notice something fascinating. The article was created shortly after the bombing, with an account of the information that was known at that time. Within an hour, many people had edited the article, adding information they know about. If you were refreshing that wikipedia entry over & over (or if you were subscribed to it using RSS), you'd see not an account of just the latest developments, but an evolving, logical understanding of the attacks. The article started evolving right away, and it continues to evolve to this moment.
    That's what I'm calling situation awareness. Don't get me wrong, the mainstream news media is quite good at situation awareness. They do it a bit differently, and their articles or TV stories don't become integrated into a knowledge repository like wikipedia.
    I've enumerated three somewhat overlapping uses for wikis that I think are pretty interesting to examine:
  • Knowledge Repositories, which are a lot like encyclopedias,
  • Collaborative writing, which is a bit like a more elegant version of emailing word documents, and
  • Situation awareness, which isn't so different from the news; it draws from the news as a source, it can also be authored by the eye-witnesses themselves, and each story becomes an integral part of a knowledge repository. I don't claim that these are an exhaustive, nor are they a partition: Wikis are also used for bug tracking and as web discussion forums, for instance. What other categories can you think of? Email me if you have ideas.  
  • Wednesday, October 25, 2006

    The Fun of Functional Infrastructure

    Say the word "infrastructure" and you conjure up the images of paved roads, hot water, and that series of tubes that makes up the Internet.
    In other words, infrastructure is that necessary stuff that lets you get your job done, but it doesn't seem sexy. Every open source project needs a high-quality infrastructure, though, and it turns out that building infrastructure is extremely fun, even though it's not as sexy as building "the next killer app".
    I've spent a lot of time building software infrastructure. The Debian project is (mostly) not about building new applications. It's about brining together projects with a solid infrastructure so that real people can use it. The Haskell Cabal is a piece of infrastructure that helps other people to compile and distribute applications.
    So what makes building software infrastructure seem less fun, even though it's really great? It's the idea of measuring the results of your work indirectly. It's easy to say that we wrote n lines of code this year, or that "my application" has n users. Depending on the size of n, that might make us feel good, or feel bad. But measuring results indirectly is much harder. You have to be content to say things like, "I helped 10 programmers build 15 applications for 5000 users, but I only helped each one a little bit." That's an indirect result.
    But if you are more interested in the result than in who creates it, then you're in a good position to let yourself have fun building infrastructure. If you are more interested in fun than in glory, then you're in a good position to get fulfillment in life :)
    In fact, infrastructure is really fun to build, at least in computing. You get to take a series of tubes and put them together in a new way. You get to lay the groundwork for many projects that come behind you. There's a bit of systems administration, a bit of hacking, and a lot of contact with the your peers in the community. People will help you figure out what to build since they're chasing right behind you using your stuff (at least in the open source world). People will respect and even occasionally thank you for helping them to do their job.
    Of course, some pieces of infrastructure become sexy. Debian's apt-get is considered pretty darn cool among those in the know. Writing awesome compilers that real people use (like GHC or Cryptol) is the dream of a lot of computing science academics. The Internet itself is actually cool these days, or so I hear.
    The Haskell language and community is badly in need of infrastructure right now. We need people to flesh out and improve the existing debuggers, code coverage tools, and IDE support. We need a robust package database, sysadmin support, and project repositories. We need folks to make Debian and Gentoo packages from Haskell packages.
    If you like people, and want people to get to know you and to appreciate your work, then go out there and discover an important piece of infrastructure that people need. Ask them what exactly they want, how they would build it, but be sure to bring your own vision to the project as well. Most of all, have fun building something with your friends.  

    Tuesday, October 17, 2006

    Haskell Packages 6.6?

    I'm excited because we're pretty well along the way to getting cabal-install and friends working nicely. We've got almost 30 packages in the database.
    Let's imagine something that would be awesome for the Haskell community. A set of Haskell packages which are all known to work together with a particular version of cabal (the one that GHC comes with), and a particular version of GHC.
    GHC version 6.6 was just released, and I think we should try to make this happen.
    Currently, we have a set of 27 "unstable" packages. They may or may not work with each-other.
    I just created an empty directory "testing". I propose that we start testing packages, starting with the Cabal release that'll went into GHC 6.6, and make sure they work nicely together. Once they're known to work, we can migrate them from the "unstable" directory to the "testing" directory.
    Once we have a sufficient collection of packages, and once ghc 6.6 is released, we can make a snapshot of this directory, call it "stable-6.6" or something. Then if you have ghc 6.6 and cabal-install, you should be able to "cabal-install p" for any package, and it'll definitely work.
    So what will we need for this to happen?
  • An installed version of ghc 6.6 on the hackage/darcs server. Maybe in a chroot or something. Maybe from the nightly build tree or the previous snapshot?
  • Some initial set of packages (maybe just cabal-install) to start off.
  • Some script that goes through and builds all of the "unstable" packages in dependency order. I think cabal-install can do this already. In fact, it would be ideal if we used cabal-install for this.
  • The script should also run ./setup haddock and ./setup test. If the packages seem to work w/ 6.6 and the other packages in "testing", it should get migrated from "unstable" to "testing".
  • A web interface (lemmih is working on it)
  • A script to upload packages to "unstable" (Paolo is working on it).
  • Someone to spearhead all of this! We need volunteers. Please email me if you think you can head this up.  
  • Sunday, June 11, 2006

    Will God Testify in the Tom DeLay Trial?

    At long last, Tom Delay has left congress. He is under indictment for money laundering related to his anti-democratic attacks on the people of Texas via redistricting.
    He gave a really revealing speech on Friday that I just had to write about. Here's some interesting (and negative) analysis about his view toward compromise, and also some positive analysis by the Right's second most influential drug addict.
    As is typical with the Right, DeLay invoked God in his speech, and I just couldn't let this one pass. He said, "I have scraped and clawed for every vote, every amendment, for every word of every bill that I believed in my heart would protect human freedom and defend human dignity. I have done so at all times honorably and honestly, Mr. Speaker, as God is my witness and history is my judge. And if given the chance to do it all again, there's only one thing I would change: I would fight even harder."
    Of course, "As God is my witness" is a famous quote from "Gone with the Wind" (which I've never seen). According to the Interweb, Scarlett O'Hara says, "As God is my witness, as God is my witness they're not going to lick me. I'm going to live through this and when it's all over, I'll never be hungry again. No, nor any of my folk. If I have to lie, steal, cheat or kill. As God is my witness, I'll never be hungry again."
    Leaving aside the lying, cheating, and stealing, I think it's interesting how these two ways of invoking God as witness are very different. Scarlett seems to be asking God to witness her oath about future events, whereas DeLay seems to be asking God to testify as a witness for his past deeds.
    They're both wrong, actually. Let's deal with Scarlett first. In Matthew 5:33, Jesus says not to make vows or oaths in God's name, "Again, you have heard that it was said to the people long ago, 'Do not break your oath, but keep the oaths you have made to the Lord.' But I tell you, Do not swear at all: either by heaven, for it is God's throne; or by the earth, for it is his footstool; or by Jerusalem, for it is the city of the Great King. And do not swear by your head, for you cannot make even one hair white or black. Simply let your 'Yes' be 'Yes,' and your 'No,' 'No'; anything beyond this comes from the evil one."
    As with lots of what Jesus says, this is good sense as well as an instruction about how to treat God's name. It almost sounds to me like he's saying to watch out to people who have to swear by something rather than just letting their own word stand for itself. You shouldn't bring God into the picture because you need to know the difference between your own words and God's. I think he's saying that you are bound by your word, whether you "swear" or "promise" them or just speak them.
    Unlike Scarlett, DeLay isn't making a promise for the future, he's making an assertion about the past, and he asks God to testify for him as a witness. Unfortunately, God hasn't taken the stand in the DeLay case, and I don't think God will. Therefore, we're left with DeLay's hearsay about what God would say, and of course hearsay is inadmissible in court, unless you're Jesus himself (John 8), of course.
    The Message Bible (an "every day" English translation) translates the above mentioned Matthew 5 in a manner that covers both cases, "don't say anything you don't mean. This counsel is embedded deep in our traditions. You only make things worse when you lay down a smoke screen of pious talk, saying 'I'll pray for you,' and never doing it, or saying, 'God be with you,' and not meaning it. You don't make your words true by embellishing them with religious lace. In making your speech sound more religious, it becomes less true. Just say 'yes' and 'no.' When you manipulate words to get your own way, you go wrong."
    This version points out the danger in writing or speaking in a way that uses religion to back up your point. Whenever you do so, you had better be careful about it, and I hope I have been careful here.
    Tom DeLay said, "as God is my witness and history is my judge," but we all know that it's the other way around. God won't testify on his behalf. History will record and remember what he has said and done. God will judge in the end, not man.  

    Saturday, April 22, 2006

    Haskell' Summary and Status

    I'll try to update the Haskell community periodically on the status of the Haskell' language standard.
    As mentioned previously, we are currently focusing on two topics, concurrency and the class system. If you feel that you have anything important to contribute to those topics, now is the time to review the proposals, join in the Haskell' mailing list and let us know what you know!
    Stephanie Weirich has posted a summary of the class system discussion.
    Stephanie says:
         This page is important because it lists all of the proposals not
         related to MPTCs as well as trying to capture the big picture
         about where we stand with respect to MPTCs. I've been trying to
         not duplicate text that appears elsewhere in the wiki, but just
         provide a consistent picture of the state of the discussions on
         the mailing list.
         Please take a look at this page and help me fill it out. In
         particular, I've been trying to take a pulse of where we stand on
         some of these issues, and some of you may not agree! Tell me if
         I'm off the wall. Also, I've (mostly) concentrated on issues that
         have tickets, so I may have missed some issues that were only
         discussed in the mailing list.  Please let me know if there is
         anything I've forgotten.
    Simon Marlow has posted a summary of the concurrency discussion.
    Simon says:
         I have tried to summarise the various points that have arisen
         during the discussion.  If anyone feels they have been
         mis-paraphrased, or I have forgotten something, please feel free
         to edit, or send me some text for inclusion.  I don't want to
         include long gobs of text in here, though: just summarise the
         main points, and if necessary link to relevant mailing list
    Thanks, Simon & Stephanie for keeping things moving forward!  

    Saturday, April 15, 2006

    Halfs, a Haskell Filesystem

    I'm very exited this week because the company I work for just released a piece of open source software, Halfs, a Haskell Filesystem.
    There are a few groups thinking of using it, including darcs, a revision control system, and house an operating system written in Haskell.
    Since it requires kernel modules and a very specific Linux kernel (for now), I decided to release a virtual machine image that folks can download and just use on any architecture as described in the "virtualization environment" section of the quick start guide.  

    Wednesday, March 22, 2006

    Planet Haskell?

    I think someone should volunteer to set up "Planet Haskell" or "Functional Planet" (which would include other languages) ala Planet Debian, Planet Gnome, Planet Lisp (which is made with secret alien technology), Planet Perl, etc.
    These sites are "Blog aggregators". Basically they just collect the RSS feeds of the community and post their blogs to a web page in a cute format (the gnome one is especially cute, but you probably could have guessed that).
    There are already sites like The Haskell Sequence and Lambda the Ultimate which have a similar purpose, though not quite the same.
    There's already software out there for this, so nothing new needs to be written. I think we need a volunteer to set this up somewhere? Preferably someone with their own server, and we'll worry about setting up the DNS later :)  

    Sunday, March 19, 2006

    Cold Climbing

    Anna and I tried to go out to "French's Dome" a rock climbing crag near Mt. Hood. Although the town it is near, ZigZag, was plenty warm and had no snow, I didn't realize that 6.2 miles away was 6.2 miles that went up hill, and so by the time we got to the crag the road was impassable due to the snow.
    We turned around and went to Salmon River Slab instead, which is very nearby. It was lower elevation and warm enough to climb. It was really nice, but it was a bit wet. There was a 9+ that I climbed which I felt was more like a 10+. It was a nice challenge, as I had to find a different route to avoid the wet.
    It's Jenn's birthday tomorrow, so we're going to go to dinner with her & Carlos. Hurray!

    Thursday, January 26, 2006

    Clergy Sign an Open Letter Concerning Religion and Science

    I found the following open letter from Christian clergy to be very true. I was really pleased to see that my priest from Ohio signed it, as did my father and his wife. My father always taught me that God created evolution.
    On another topic entirely is that my former representative, now jailed, makes paintings.
    An Open Letter Concerning Religion and Science:
    Within the community of Christian believers there are areas of dispute and disagreement, including the proper way to interpret Holy Scripture. While virtually all Christians take the Bible seriously and hold it to be authoritative in matters of faith and practice, the overwhelming majority do not read the Bible literally, as they would a science textbook. Many of the beloved stories found in the Bible, the Creation, Adam and Eve, Noah and the ark, convey timeless truths about God, human beings, and the proper relationship between Creator and creation expressed in the only form capable of transmitting these truths from generation to generation. Religious truth is of a different order from scientific truth. Its purpose is not to convey scientific information but to transform hearts.
    We the undersigned, Christian clergy from many different traditions, believe that the timeless truths of the Bible and the discoveries of modern science may comfortably coexist. We believe that the theory of evolution is a foundational scientific truth, one that has stood up to rigorous scrutiny and upon which much of human knowledge and achievement rests. To reject this truth or to treat it as "one theory among others" is to deliberately embrace scientific ignorance and transmit such ignorance to our children. We believe that among God's good gifts are human minds capable of critical thought and that the failure to fully employ this gift is a rejection of the will of our Creator. To argue that God's loving plan of salvation for humanity precludes the full employment of the God-given faculty of reason is to attempt to limit God, an act of hubris. We urge school board members to preserve the integrity of the science curriculum by affirming the teaching of the theory of evolution as a core component of human knowledge. We ask that science remain science and that religion remain religion, two very different, but complementary, forms of truth.

    Saturday, January 21, 2006

    Announcing Haskell'

    let haskell' = succ haskell98 in
    Announcing the Haskell' ("Haskell-Prime") process.  A short time ago,
    I asked for volunteers to help with the next Haskell standard.  A
    brave group has spoken up, and we've organized ourselves into a
    committee in order to coordinate the community's work.  It will be the
    committee's task to bring together the very best ideas and work of the
    broader community in an "open-source" way, and to fill in any gaps in
    order to make Haskell' as coherent and elegant as Haskell 98.
    Our task is broadly defined by our mission statement:
        The Haskell programming language is more-or-less divided into two
        "branches".  The Haskell 98 standard is the "stable" branch of the
        language, and that has been a big success.  A lot of progress has been
        made over the last few years in the "research" branch of the Haskell
        language.  It is constantly advancing, and we feel that it is time for
        a new standard which reflects those advancements.
        Haskell' will be a conservative refinement of Haskell 98. It will
        be the work of this committee to adopt a set of language
        extensions and modifications and to standardize a new set of
        We will strive to only include tried-and-true language features,
        and to define them at least as rigorously as Haskell 98 was
        defined. This standard will reflect the realities of developing
        practical applications in the Haskell language. We will work closely
        with the rest of the Haskell community to create this standard.
    Your Haskell' Committee is as follows (slightly munged email addresses
     * Manuel M T Chakravarty <chak at cse.unsw.edu.au>
     * John Goerzen <jgoerzen at complete.org>
     * Bastiaan Heeren <bastiaan at cs.uu.nl>
     * Isaac Jones <ijones at galois.com>
     * John Launchbury <john at galois.com>
     * Andres Loeh <loeh at iai.uni-bonn.de>
     * Simon Marlow <simonmar at microsoft.com>
     * John Meacham <john at repetae.net>
     * Ravi Nanavati <ravi at bluespec.com>
     * Henrik Nilsson <nhn at cs.nott.ac.uk>
     * Ross Paterson <ross at soi.city.ac.uk>
     * Simon Peyton-Jones <simonpj at microsoft.com>
     * Don Stewart <dons at cse.unsw.edu.au>
     * Audrey Tang <autrijus at gmail.com>
     * Simon J. Thompson <S.J.Thompson at kent.ac.uk>
     * Malcolm Wallace <Malcolm.Wallace at cs.york.ac.uk>
     * Stephanie Weirich <sweirich at cis.upenn.edu>
    The editors are Isaac Jones and John Launchbury.
    Feel free to contact any of us with any concerns or questions.  If you
    don't know who to direct your questions to, email Isaac Jones
    ijones at syntaxpolice.org.
    Community involvement is vital to our task, and there will be a way
    for members of the community to make formal proposals.  In the opening
    phases, please use these more informal resources to help us coordinate
     * The haskell-prime mailing list.  All technical discussion will take
       place here, or (if other meetings take place) be reported here.  Anyone
       can subscribe, and any subscriber can post questions and comments,
       and participate in discussions.  Anyone can read the list archives.
     * A wiki / issue tracking system to document consensus and to track
       ongoing tasks.  This system is publicly readable, but only
       committee writable so that we may present it as the "official"
       output of the committee.  If you ever feel that the wiki is not
       accurate as to the consensus, please alert the committee!
     * A darcs code repository for experiments, proposed libraries,and
       complex examples.  darcs is a decentralized system, so anyone can use
       it, but patches should be sent to Isaac Jones:
    Please join us in making Haskell' a success.