Older blog entries for SyntaxPolice (starting at number 37)

Secure apt updates:

I sent off the patch that walters and I have been working on. It implements secure updates for apt. It was only 2000 lines of unified diff, (but it had to be the right 2000 lines). I promised myself that I'd wait until this was done before buying a laptop. Now I should be able to get one soon :) See my home page for slightly more information and a link to the patch. I sent it out this morning and we're waiting for some feedback. I'm sure there will be more to do.

Misc:

  • The open source club I founded has been taken over by free software radicals

  • I'm in somewhat agreement with robocoder about april 1st. The above joke was really pretty funny as an inside joke (I actually don't know who pulled it off) but I had to wonder for a short period whether or not the server had been hacked. I actually had hoped for a little while that this was some sort of "agressive Linux marketing" thing we were planning.

  • bgeiger good to see you're learning Go! I don't know much about my rating yet, but I have been playing for about a year and recently started going to a club.

  • At OSU, it was previously believed that the best thing to yell out the window of a car was "Woooooooh!", but further research shows that its actually "MUTEX!".

  • I'd like to come up with a rule that tells me when its better to use which of the following two types in Haskell. I typically use the later:
    type Foo = (A, B, C)
    data Foo = Foo A B C
  • A friend of mine recently had his laptop stolen. Since he can't really afford a new one at the moment, he wants me to put Linux on an unused desktop machine for him. I'm planning to use knoppix to get information from lspci about the machine, then reboot with the debian installer. I have to get my new CD burner working first, though so I can make the CDs. Rebuilding my kernel now.

  • I heard about an aquantence of mine in Cleveland that was arrested at an anti-war protest. This is coming 2nd or 3rd hand, but supposedly she was pushed into the street by an undercover cop (how did she know it was an undercover cop?) then "body slammed" and arrested for blocking the street. She was handcuffed for over 24 hours, has a cracked wrist (from the cuffs?) and was left in the cell with a "crack addict". I don't know if any of this is true, but it is a very disturbing story.

    Good Weekend

  • Got to see J.C. Superstar live here in Columbus. Sebastian Bach was supposed to play J.C., but had an understudy instead. It was quite good, though.

  • Did some good work with walters and we are very close to finishing our little project. This is exciting.

    Last week

  • I found out that instead of said java project I'll be working on a Haskell project after all!

  • On Thursday, I helped a friend replace his car's starter. This was actually pretty fun, though I've never done anything this complex w/ a car before, he pretty much knew what he was doing.
  • chalst As a guess, I would agree that Lisp is used more in industry than Erlang. I get the feeling that the author is actually trying to express something else, something about how and why Erlang was invented and used, and why it is successful. Erlang is often used to prove the point that functional languages are useful in practice, and I think when trying to convince someone of that, they don't want to hear about Lisp.

  • The gimp can be a little frustrating, and I never want to RTFM because I only ever want to do "one little thing". In the long run, I'm sure I'd save time if I learned it properly. In searching for answers, I came across this sarcastic little tutorial. It did tell me what I wanted to know, though.

  • I had a great time hacking with walters last night. I think we're very close to finishing our patch to Apt.

  • Working on a wiki for my church. We want a way to have a lot of people collaborate on our church history. I want to link together people's personal histories with the church or with religion to the over-all history of the building, the congregation, etc. A wiki seems perfect. I also hope it could be a place where people can put some thoughts on religion, stuff they wrote, questions, discussions, etc. There doesn't seem to be a defacto piece of software for this (I keep hearing that there are too many wiki implementations). I'm playing with UseMod at the moment. Anyone have recommendations for software? Preferrably in Debian. The ones I see listed are:
    • aswiki
    • usemod-wiki
    • moin
    • emacs-wiki
    • phpwiki
    • twiki
    • zope-zwiki

  • A new version of Hat, the Haskell Tracer came out yesterday, and it does Multi-Parameter Typeclasses! This has been a problem for me lately as I've been doing some heavy debugging of Haskell code where there was no tracer that would work with MPTC (which is an extention to Haskell). I've been using lots of Debug.Trace statements. Now as you saw in my previous entry, I reached a milestone in my development / debugging so I won't be doing it as much. Ah well, I'm sure I'll use Hat soon.
  • 25 Mar 2003 (updated 25 Mar 2003 at 23:25 UTC) »
  • I got to a good milestone on my big Haskell project today. Woohoo!

  • Neat: someone wrote a History of Haskell

  • I'm working on gathering requirements for a short-term "cleanup and document" type project. It can be tricky to grasp the functionality of a complex program in order to document it in a short period.

  • While helping someone figure out do notation on #haskell today, I realized how much I enjoy helping people learn, especially programming. Maybe its partly an ego thing (showing off?), maybe procrastination since this particular problem was very easy for me, or maybe its just plain fun.

  • The Onion has their perspective on the war.

  • Galeon is still not working for me in Debian :( don't feel like tracking down the problem.

  • I went to a go playing club this weekend and had a nice game, but my handicap was too big so I won by too much.

  • robocoder RE: a tool to analyze content for potential liability, maybe you could make a google pluggin where you enter a company's name and it searches the internet for things you could sue them for.
  • I seem to have failed to post this entry some time ago:

  • Commited my changes to the Control.Monad.State documentation for Haskell. Not sure when it'll be deployed.

  • Yesterday at the climbing place, I found out that they had no record of my ever being there before. They apparently deleted my record from the computer. I've been going on and off for years and got a 6 month membership a few months ago. No one noticed until now because people always gave up looking through the list of Joneses and just let me in. They were nice enough about it, but I couldn't tell if they were going to try to send me another bill.

  • osullivj Thats a strange web site (the one w/ One True Language or something). Maybe a joke? I'd go with Haskell :)

  • Looks like I'll have to be doing more Java and less Haskell for a while.
  • Out of necessity I implemented partition to work in a monad:
    
    -- |Like 'List.partition' but works on Monads.  Uses 'Monad.filterM'.
    partitionM :: (Monad m) => (a -> m Bool) -> [a] -> m ([a], [a])
    partitionM f l = do a <- filterM f l
    		    b <- filterM (notM . f) l
    		    return (a,b)
    
    -- |Like 'not' but works on monads.
    notM :: (Monad m) => m Bool -> m Bool
    notM n = do n' <- n
    	    return (not n')
    

  • Also wrote a little more funcionality for an elisp interface to advogato. Its pretty ghetto though and untested (see previous diary entries)
    (defun advogato-post-buffer-as-diary-get-info (buffername username &optional password in-index)
      "Post the current buffer as your diary entry"
     (interactive "bPost What Buffer: \nsUsername: ")
     (if (null password)
         (let ((password (comint-read-noecho "Password: " t)))
           (save-excursion
    	 (set-buffer (get-buffer buffername))
    	 (advogato-post-string-as-diary (buffer-string)
    					(advogato-get-cookie username password)
    					in-index)))))
    
  • 11 Mar 2003 (updated 11 Mar 2003 at 16:39 UTC) »
  • Sorry for anyone seeing double on my last diary entry. I was under the false impression that if you posted an entry one day, subsequent entries on the same day would overwrite the previous entry.

  • So the idea, hatched by walters is to have the diary echoed on my home page, partly so I have a local backup.

  • Did I mention that I'm reading War & Peace?

  • Very sorry to hear about walter's laptop. Walters, I know you're looking at Mac laptops, but since I've been looking around a bit, I thought I'd share what I learned about buying non-mac laptops. Two places that apparently sell laptops w/ either Linux or no OS are here and here.

    I'm planning to look through this site to find information about laptops and supported features since I definitely want a working DVD player and built in wireless.

    Also, there was recently a slashdot thread on buying a linux laptop without paying the MS tax.

  • I saw Rilo Kiley last night with my gf and her sister. This is one of her sister's favorite bands.

  • Still really want a laptop linux machine.

  • Brian took some action shots from indoor rock climbing recently. Sorry they're big. I'll resize them eventually. It features my gf trying very hard to get over an edge, me cimbing both freestyle, on a rope, and with ice climbing equipment, lots of silly faces from Brian, and quite a number of random people, some of whom found the camera and created their own art. ;

  • I'm going to attempt to post this buffer as a test of my elisp ; "advogato-post-buffer-as-diary" function. Perhaps this has been done before, but who cares. ;
    
    (setq advogato-username "SyntaxPolice")
    (setq advogato-url "http://www.advogato.org/XMLRPC")
    
    (defun advogato-get-most-recent (&optional in-user)
      "Gets the last diary entry" (interactive)
      (let ((user (if in-user in-user advogato-username)))
    	(let ((lastIndex (- (xml-rpc-method-call advogato-url 'diary.len user) 1)))
    	  (xml-rpc-method-call advogato-url 'diary.get user lastIndex))))
    
    (defun advogato-insert-most-recent (&optional in-user)
      "Inserts the most recent diary entry." (interactive)
      (let ((user (if in-user in-user advogato-username)))
        (insert-string (advogato-get-most-recent user))))
    
    (defun advogato-post-string-as-diary (diary-str cookie &optional in-index)
      "Post the given string as the diary entry.  Use -1 as an index for a new entry."
      (let ((index (if in-index in-index -1)))
        (xml-rpc-method-call advogato-url 'diary.set cookie index diary-str)))
    
    (defun advogato-post-buffer-as-diary (cookie &optional in-index)
      "Post the current buffer as your diary entry"
      (advogato-post-string-as-diary (buffer-string) cookie in-index))
    
    (defun advogato-get-cookie (ad-username ad-password)
    ;    (setq advogato-username username)
        (xml-rpc-method-call advogato-url 'authenticate ad-username ad-password))
    
    ; ------------------------------------------------------------
    ; Below is for testing:
    (setq foo (advogato-insert-most-recent "SyntaxPolice"))
    (advogato-post-buffer-as-diary cookie)
    
    (defun advogato-get-most-recent2 (user)
      "Gets the last diary entry" (interactive)
      (let ((lastIndex (- (xml-rpc-method-call advogato-url 'diary.len user) 1))
    	)
        (xml-rpc-method-call advogato-url 'diary.get user lastIndex)))
    
    (advogato-get-most-recent2 "SyntaxPolice")
    
    
    (setq advogato-password "asdf")
    
    
    
    ;
  • I saw Rilo Kiley last night with my gf and her sister. This is one of her sister's favorite bands.

  • Still really want a laptop linux machine.

  • Brian took some action shots from indoor rock climbing recently. Sorry they're big. I'll resize them eventually. It features my gf trying very hard to get over an edge, me cimbing both freestyle, on a rope, and with ice climbing equipment, lots of silly faces from Brian, and quite a number of random people, some of whom found the camera and created their own art. ;

  • I'm going to attempt to post this buffer as a test of my elisp ; "advogato-post-buffer-as-diary" function. ;
    
    (setq advogato-username "SyntaxPolice")
    (setq advogato-url "http://www.advogato.org/XMLRPC")
    
    (defun advogato-get-most-recent (&optional in-user)
      "Gets the last diary entry" (interactive)
      (let ((user (if in-user in-user advogato-username)))
    	(let ((lastIndex (- (xml-rpc-method-call advogato-url 'diary.len user) 1)))
    	  (xml-rpc-method-call advogato-url 'diary.get user lastIndex))))
    
    (defun advogato-insert-most-recent (&optional in-user)
      "Inserts the most recent diary entry." (interactive)
      (let ((user (if in-user in-user advogato-username)))
        (insert-string (advogato-get-most-recent user))))
    
    (defun advogato-post-string-as-diary (diary-str cookie &optional in-index)
      "Post the given string as the diary entry.  Use -1 as an index for a new entry."
      (let ((index (if in-index in-index -1)))
        (xml-rpc-method-call advogato-url 'diary.set cookie index diary-str)))
    
    (defun advogato-post-buffer-as-diary (cookie &optional in-index)
      "Post the current buffer as your diary entry"
      (advogato-post-string-as-diary (buffer-string) cookie in-index))
    
    (defun advogato-get-cookie (ad-username ad-password)
    ;    (setq advogato-username username)
        (xml-rpc-method-call advogato-url 'authenticate ad-username ad-password))
    
    ; ------------------------------------------------------------
    ; Below is for testing:
    (setq foo (advogato-insert-most-recent "SyntaxPolice"))
    (advogato-post-buffer-as-diary cookie)
    
    (defun advogato-get-most-recent2 (user)
      "Gets the last diary entry" (interactive)
      (let ((lastIndex (- (xml-rpc-method-call advogato-url 'diary.len user) 1))
    	)
        (xml-rpc-method-call advogato-url 'diary.get user lastIndex)))
    
    (advogato-get-most-recent2 "SyntaxPolice")
    
    
    (setq advogato-password "asdf")
    
    
    
    ;
  • I saw Rilo Kiley last night with my gf and her sister. This is one of her sister's favorite bands.

  • Still really want a laptop linux machine.

  • Brian took some action shots from indoor rock climbing recently. Sorry they're big. I'll resize them eventually. It features my gf trying very hard to get over an edge, me cimbing both freestyle, on a rope, and with ice climbing equipment, lots of silly faces from Brian, and quite a number of random people, some of whom found the camera and created their own art. ;
  • I'm going to attempt to post this buffer as a test of my elisp ; "advogato-post-buffer-as-diary" function. ;
    
    (setq advogato-username "SyntaxPolice")
    (setq advogato-url "http://www.advogato.org/XMLRPC")
    
    (defun advogato-get-most-recent (&optional in-user)
      "Gets the last diary entry" (interactive)
      (let ((user (if in-user in-user advogato-username)))
    	(let ((lastIndex (- (xml-rpc-method-call advogato-url 'diary.len user) 1)))
    	  (xml-rpc-method-call advogato-url 'diary.get user lastIndex))))
    
    (defun advogato-insert-most-recent (&optional in-user)
      "Inserts the most recent diary entry." (interactive)
      (let ((user (if in-user in-user advogato-username)))
        (insert-string (advogato-get-most-recent user))))
    
    (defun advogato-post-string-as-diary (diary-str cookie &optional in-index)
      "Post the given string as the diary entry.  Use -1 as an index for a new entry."
      (let ((index (if in-index in-index -1)))
        (xml-rpc-method-call advogato-url 'diary.set cookie index diary-str)))
    
    (defun advogato-post-buffer-as-diary (cookie &optional in-index)
      "Post the current buffer as your diary entry"
      (advogato-post-string-as-diary (buffer-string) cookie in-index))
    
    (defun advogato-get-cookie (ad-username ad-password)
    ;    (setq advogato-username username)
        (xml-rpc-method-call advogato-url 'authenticate ad-username ad-password))
    
    ; ------------------------------------------------------------
    ; Below is for testing:
    (setq foo (advogato-insert-most-recent "SyntaxPolice"))
    (advogato-post-buffer-as-diary cookie)
    
    (defun advogato-get-most-recent2 (user)
      "Gets the last diary entry" (interactive)
      (let ((lastIndex (- (xml-rpc-method-call advogato-url 'diary.len user) 1))
    	)
        (xml-rpc-method-call advogato-url 'diary.get user lastIndex)))
    
    (advogato-get-most-recent2 "SyntaxPolice")
    
    
    (setq advogato-password "asdf")
    
    
    
    ;
  • 28 older entries...

    New Advogato Features

    New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

    Keep up with the latest Advogato features by reading the Advogato status blog.

    If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!