Wilfred Hughes on Macro Systems

Wilfred Hughes has an interesting post, Comparitive Macrology, in which he looks at the macro systems of various languages. For each, he implements two macros:

  • A swap macro to exercise hygiene
  • An anaphoric macro to exercise (intentional) variable capture

He demonstrates the advantages and disadvantages of each language’s macro system.

Hughes starts with C, moves on to Common Lisp, New Lisp, Scheme, Clojure, sweet.js, Rust, and Julia. It’s a really interesting post and well worth reading.

One of the things that struck me was how ugly the syntax of the non-Common Lisp languages are. Even Scheme, which shares most of its syntax with Common Lisp has a really ugly macro language. That’s something worth remembering the next time non-Lispers start grousing about all those parentheses. Just refer them to the syntax of their language.

UPDATE: Wilford → Wilfred

Posted in Programming | Tagged | 3 Comments

BSD Unix Repository

As I’ve written before, I believe that one of the best ways of becoming a master programmer is to study the work of the masters. One of the best sources for this that I know of is the BSD Unix sources. Years ago I purchased a CD with the code for all the BSD releases. It was a great resource and I learned a lot.

The other day, I came across a link to an online SVN repository of the same thing. This is also a great resource. Of course, it’s mostly of use to C programmers or those that want to be. If you’re doing front-end work in Ruby, or JavaScript, or some other higher order language you may not be interested. If you want to find out how the Web and operating systems really work, it’s hard to imagine better material to study.

Posted in Programming | Tagged , | 1 Comment

The Virtue of Practice

Via Jean-Philippe Paradis:

I love this. It represents the attitude of a master who is forever striving to improve.

Posted in General | Tagged | Leave a comment

Privacy for the Rest of Us

A recurrent theme around here has been the need to give crypto-enabled apps a user interface that is transparent to Aunt Millie. This is important because no matter how well-protected the geeks make themselves, no one is truly safe until we, as a society, achieve herd immunity from surveillance by criminals and overreaching governments. As it stands now, anyone taking steps to ensure their privacy is putting on a sign that says, “I’m someone you should look at.”

Sadly, the problem is a hard one. Now, Cory Doctorow is reporting in the Guardian on an effort to solve this problem. The article discusses why this is important to everyone and announces the formation of a new non-profit organization to address the issue. The organization, Simply Secure, has a new Website up that explains what they’re trying to do and solicits user input. They also have a blog Twitter feed and a newsletter so you can follow their progress.

This seems like an excellent effort and one that deserves our support. Visit the site and see if you have skills they can use. We’ll all be better off for it.

Posted in General | Tagged | 1 Comment

The Java Virtual Machine Tax

Via Wilfred Hughes

I’ve often been tempted by Clojure but the JVM tax that Alex Payne talks about is primarily why I’ve resisted.

Posted in Programming | Tagged , | Leave a comment

Spring Fall Cleaning

In a comment to my Mathematics in a Blog Post post, Grant Rettke asked what versions of WordPress and org2blog/wp I was using. It turned out I had a pretty old version of org2blog/wp installed so I decided to upgrade. I had been maintaining a cloned version of its repository but I decided to see if I could get it to work from ELPA. I’d tried that before but it pulls in Org mode and there were problems with getting Org to work from ELPA then.

This time both Org and org2blog/wp worked fine when installed with ELPA so I got rid of my private cloned repositories for them. If you had a similar problem with Org and ELPA it appears to be working well now.

While I was cleaning things up, I decided to get rid of old files and subdirectories in my tools and tars directories. For example, I had half a dozen old copies of SBCL hanging around and even though I didn’t need the space (my iMac has a terabyte of disk space) I was in a housekeeping frame of mood so out they went. Normally when I do this type of thing, I use eshell to remove the files with

rm -rf ~/tools/sbcl-1.2.1

But then it occurred to me that even though I don’t edit any files in the tools directory, there was no reason I couldn’t bring it up in a dired buffer and just mark the subdirectories that I wanted to delete. That worked fine, of course, and was much faster than deleting each one by hand. Unless I’m already in a shell and just need to deal with one or two files, dired is faster and easier—even if it’s a directory that I don’t normally use Emacs with.

Emacs really is a wonderful environment. It is, as I’ve said many times, as close as we can come to using a Lisp machine. Not everyone, I suppose, wants that but I love it and don’t understand why anyone would use anything else.

Posted in General | Tagged | 5 Comments

Rock & Roll and a Rare Personal Item

I don’t often write about myself on Irreal because, really, who cares? I’m going to make a rare exception and share something about myself: I am a HUGE Pink Floyd fan and consider them the best Rock and Roll band in the world. You’re free to disagree, of course, but then you’d be wrong.

Last night I was at the Pizza parlor stocking up on programmer fuel when the (young) clerk noticed my Pink Floyd tee shirt and told me something extraordinary that I had somehow missed. After 20 years, the gods have smiled on us and we have this. I’m overjoyed and can’t wait. Here, in typical fashion, is the announcement.

Posted in General | Leave a comment

Sorting in Dired

Xah Lee just taught me something new about dired sorting. I mostly just sort the list by name but occasionally I want to see the newer entries so I toggle the sorting to “date” by typing 【s】. It turns out, though, that you can also sort by any of the fields supported by ls. This includes such things as displaying file sizes by kilo- or megabytes.

Head on over to Lee’s site for the details. If you’re like me, you’ll mostly want to sort by name or date but when you need it sorted another way, Lee shows you how. You can also set the variable dired-listing-switches to make your changes the default. Very useful post.

Posted in General | Tagged | 1 Comment

Correct Quotation Marks

There are few things as ugly, typographically speaking, as the straight quotation marks that are the default in most fonts. When you’re writing something that’s going to be rendered with proportional fonts, it’s easy to do the right thing and use left and right rounded quotation marks.

Artur Malabarba has a nice post up with a bit of Elisp to insert correct quotation marks in a context aware way. If you want a set it and forget solution, Malabarba’s is a good one. Just add his code to your .emacs or init.el file.

I do something simpler that requires me to decide when I want round quotation marks. I use the key-chord package that allows me to bind commands to key chords. It’s not context aware but it works well for me. When I want to insert proper quotation marks, I just press 【"】twice rapidly. If you want to use this solution, all you have to do after installing the package is add

(defun dq ()
  "Insert double quotes in an org buffer."
  (interactive)
  (insert "“”")
  (backward-char))

(key-chord-define-global "\"\"" 'dq)

to your .emacs or init.el file. If you want to use this, the names of the proper glyphs are:

  • “ – LEFT DOUBLE QUOTATION MARK
  • ” – RIGHT DOUBLE QUOTATION MARK

Now you have two solutions so don’t let me see those ugly quotation marks in your writings anymore.

Posted in General | Tagged | 4 Comments

An Update to Mathematics in a Blog Post

Given that there was a bit more interest than usual in my Mathematics in a Blog Post post, I want to update it with a couple of things I’ve learned in the mean time. This only applies to those using Org mode to write their posts.

It turns out that Org runs its own MathJax server and automatically arranges for it to be called. That’s great if you only occasionally use MathJax but the Org folks ask that if you use it a lot or have a large readership that you serve your own copy or use the MathJax CDN. This means that my suggested solution of adding

#+HTML_HEAD: <script type="text/javascript"
#+HTML_HEAD:  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js">
#+HTML_HEAD: </script>

isn’t optimal. It results in another copy of MathJax being pulled in, which may or may not be the same. One of the advantages of using the MathJax CDN is that you’re guaranteed to get the latest version so unless you have strong reasons to do otherwise, you should use the MathJax CDN.

The proper way to get the CDN version is to add the line

#+HTML_MATHJAX: align:"center" path:"http://cdn.mathjax.org/mathjax/latest/MathJax.js"

to your post’s source file. Alternatively, you can edit the org-html-mathjax-options variable to set it once and for all.

Posted in Blogging | Tagged | Leave a comment