It is contrary to the natural law to disallow the use of general purpose computers

I think that people, in general, ought to be able to use general purpose computers. In fact, I think it would be a grave moral evil to disallow people to use them, in most circumstances.

Why should one believe something like this?

First, assume that God exists and Aristotelian-Thomist metaphysics is true. It follows from this that the natural law exists. I’m not going to justify these assumptions. That isn’t the purpose of this post.

Second, assume that people are morally obligated to know things, and to further their knowledge of things. Why should you believe this? There are various ways of motivating this belief. One way would be to say that ignorance is a privation, privations are bad, and so, the less ignorant we are, the less bad we are, i.e., the more we know, the more perfect we become. So, knowing things is good, and knowing more things is better.

Third, assume that a general purpose computer is functionally equivalent to a man following a set of rules that allows him to further his knowledge by use of the rules, i.e. a general purpose computer isn’t doing anything above or beyond what a man is doing when he’s writing a proof.

Finally, assume that it’s not the case that it would be contrary to the natural law to disallow people the use of general purpose computers. But if this was the case, then it wouldn’t be contrary to the natural law to disallow people to follow rules that allow them to further their knowledge by use of the rules, but then it wouldn’t be contrary to the natural law to disallow people to write proofs, but then it wouldn’t be contrary to the natural law to keep people from eliminating their ignorance, but then it wouldn’t be contrary to the natural law to inhibit people’s moral perfection, but God wills people to be morally perfected, and so, it’s contrary to the natural law to disallow people the use of general purpose computers.

One direct consequence of this, in conjunction with the assumption that it is pleasing to God for some things to be kept in confidence, is that we are morally obligated to use, and allow the ability to use, encrypted means of communication, in those circumstances that justify it.

Stuff that wasn’t completely obvious to me while I learned Haskell pt 0.01

  1. There are no nullary functions in Haskell. There are nullary functions in the untyped lambda calculus, but Haskell is based off a (the?) typed lambda calculus, and so, not everything is a function.
  2. The way you read types is, the thing after the last ” -> ” is the output, and everything preceding it is (are) input(s). “[String] -> [String]” is read as “a function that takes as inputs lists of strings and outputs lists of strings”. “[String] -> Int -> [String]” is read as “a function that takes as inputs a list of strings, and an Int, and outputs a list of strings “. “[String] -> ([String] -> Int) -> String” is read as “a function that takes as inputs, a list of strings, and, a function from a list of strings to Ints, and outputs a string”.
  3. With filter, it takes as inputs functions and lists, and outputs lists. But the functions must be functions from concrete types, to bools. They’re predicates, like “is red” or “is greater than 50 million” or “has as a factor the number 5”. There aren’t many of these around in the standard prelude. But you don’t want to have to define an entire function for what’s likely to be the one thing you’re trying to filter for, so you use a lambda abstraction, filter (\x -> x > 2) xs, or an operator section, filter (>100) xs.
  4. Currying combined with Polymorphic Types can be surprising. Don’t get caught off guard when learning a function, which has type ” [a] -> [a] “, and the resource you’re using only uses examples where the ” a ” in ” [a] ” is something like ‘Int’ or ‘String’…it can be anything, including functions themselves…i.e. it could operate on a list of functions, and return a list of functions. Currying makes for even more surprises when, in defining a new function using that old one, someone curries the first argument…then you’re left with a list of functions. I \*think\* that lazy evaluation makes this possible, but I can’t be sure.

Full-Proof Guide to Managing Your Passwords

This guide is meant to show you how to keep people who aren’t you out of places they shouldn’t be. We do this using three things: a cloud storage service, keepassx, and your brain.

Why would you want this? Well, to be as secure as you can be, you need to have pretty random usernames and passwords, that are distinct, across all of your devices and accounts. Memorizing all of this is nigh impossible. This take the trouble out. You’ll only need to memorize one thing, a method, that you come up with. That’s all!

  1. First, sign up for a cloud storage service. I use dropbox. But google drive would be ok too. The critical factor is that the service offer an easy way of updating the files across all your devices as they change.
  2. Second, download keepassx.
  3. Keepassx is fairly easy to figure out how to use. You may want to wait until step 4 before proceeding.
  4. Method. The method is pretty simple. You have 4 or 5 passwords that you memorize. They’re going to consist of sentences consisting of uncommon words. The sentences will be long. In addition, you’re going to have a method for updating them that is easy to remember. Here’s an example.

First password to decrypt your hard disk: platters spinning will not stop thieves in the month of mary in the age of two by ten and one and five Second password for sudo/root: elephants stomping will not stop thieves in the month of mary in the age of two by ten and one and five etc.

When the new month approaches and you update, you just change the end…the trick is coming up with unique identifiers for the month, and an easy to remember, but not totally trivial way of expressing the date. The most important thing is never to tell anyone your method!

So, you have one password for your cloud service, one password to decrypt the keepass file, another for sudo/root password, and another to decrypt your disk. The rest of your passwords can be generated using keepassx!

Make sure that dropbox or google drive or wherever you keep your keepass file starts at startup, or discipline yourself to always start it up before accessing your keepass file. The reason this is so is…keepassx generates a read only lock on the file while its being used, so when you update it, there’s only ever one thing being updated. If you didn’t do this, and you updated your file with a new account, none of your other devices would know about it. If you then went on another device and updated the file again, then you’d have two irreconcilable files you’d have to merge by hand. No fun!

How to change default text editor from Geany to emacs-nox on Crunchbang (Debian) Jessie (Testing)


You do not use geany. You use emacs, in the terminal. But you also use crunchbang. You are also strange, and even though you don’t often use the file manager that ships with crunchbang, Thunar, when you do, it always opens stuff in Geany, and you want it to open in emacs. In addition, when you want to edit the config files for Openbox or Conky, they all open in Geany. In addition, when you type Super+e, you get geany, instead of emacs. We shall fix all of these things.


Be sure to have emacs-nox installed. This will only install the CLI version of emacs. The windowed version and all it’s dependencies won’t be downloaded. If you have the normal version of emacs installed instead of emacs-nox, whenever you see ’emacs’ you will have to use ’emacs -nw’. I will alert you the first few times.

sudo apt-get install emacs24-nox

Reassigning keyboard shortcut for Super+e from geany to emacs

1. Open up terminal and type:

emacs ~/.config/openbox/rc.xml

2. Search for the evil geany:

C+s geany Enter

3. Replace that with the following and save:

terminator -x emacs

C+x C+s

4. Reload the config files for openbox’s rc.xml:

M+! killall -USR2 openbox Enter

5. Go wild pressing Super+e spawning terminator’s running emacs.

Updating the Crunchbang Menu Entries to open .config files in emacs-nox instead of geany

1.  If you’re still in emacs do:

C+x C+f ~/.config/openbox/menu.xml Enter

2. Now that we’ve got the menu config file open, we need to find and replace all instances of

<item label=”Edit menu.xml”>
<action name=”Execute”>
geany ~/blahblahblah


terminator –command=”emacs ~/.config/openbox/menu.xml”

So whenever you see menu.xml wanting to edit a config file, and it’s doing the geany crap, replace it with the preceding. Make sure to get the file paths correct for each of the entries.

3. Now that all the config files will be opening with emacs, we need to replace the Text Editor entry in the default menu.

Go to the top of the file:


Search for the offending string:

C+s Text Editor Return




<command>terminator –command=”emacs”</command>

5. Finally, let’s update the Accessories -> Geany Text Editor with something more appropriate.

5.1 Go back to the top of the file.
5.2 Search for “Geany Text Editor”
5.3 Replace that with “Emacs Text Editor”
5.4 Immediately below that, replace:



terminator –command=”emacs”

5.5 Reconfigure the openbox .config files again.
5.6 Rejoice

Make thunar open emacs instead of geany

1. If you’re still in emacs, open (create) the file at the following location:


2. Put the following in it and save it:

[Desktop Entry]
Comment=Edit text files
Exec=terminator -x emacs %F

3. Open ~/.local/share/applications/defaults.list

4. Replace every offending instance of geany.desktop with emacs.desktop and save the file.

5. Logout and log back in for good measure.

6. Text files should default to emacs. If they don’t automatically, right click the file, and click Open With Other Application. Search for emacs-nox in your seemingly randomly assorted list of Other Applications. Click it, and make sure Use as default for this kind of file is checked, and Open the file.

7. Rejoice.