Category: Rants

  1. Fool me once, shame on you, fool me twice, shame on me
  2. Google has shown it will make ideologically based decisions against users
  3. Even if you agree with Google’s ideology today, you might not tomorrow
  4. Are you willing to bet money you and Google will always agree?

Not too long ago Google closed the gmail account of Jordan Peterson. It doesn’t matter what you think of him. The facts of the matter are simple. His entire online life was through google and gmail, that includes his business email. That means all his password recovery emails.

Imagine for a moment. You have a business. That means a Cloudflare Login, maybe a Moniker login, various different accounts. What if you lost not just access to those accounts, but access, permanently, to the recovery email address? All because you have a different political opinion. To hell with it. Maybe you’re just a horrible human being who likes drowning puppies. It wouldn’t matter. This is about self-interest.

If you use Google for your business email, you are betting money and time that you and Google will always agree. It wouldn’t matter if they promised never to do it again. The cat is out of the bag. This isn’t baseball, this is your livelihood. This is one strike and you’re out.

This isn’t about a private corporation’s right to censor its users. This is about your fucking money.

Which do you prefer, your money, or Google’s abstract right to cost you money by exercising its right? What you want is a company committed to utter ambivalence. You want a company that doesn’t care if you help old ladies across the street, or drown kittens in battery acid. Google has a right to ban you if you abuse their service. If you send out spam, or send and receive kiddie pr0n. That’s fair game. But when they poke into your private life, or public life, that is outside of their service and decide they don’t like what you say, or who you associate with, that’s another matter.

I used to use Google for my business email. Now I don’t, and I never will again. I’ve switched to Proton Mail. No, they don’t pay me any money to plug them.

Google dropped the ball, and they should never, ever, get to touch that ball again. They failed. If you ever trust your business to google, you are a fool.

Few words can describe the sheer frustration of coming to Common Lisp from not merely an imperative background, but a background of modern languages. Everything from the documentation to implementation details have the stench of old and crusty all over it. If you aren’t dealing with the well meant condescension of Lisp gurus who seem have never actually had to write an application for end-users (and why would they, no one writes end-user applications in Lisp) then you’re dealing with documentation that was pretty much a copy and paste from the implementer’s specification created by a bureaucratic standards organization.

How do you explain to someone that an ANSI Standard document is not documentation.

You can’t, because only an asshole would think that. And you can’t explain pragmatism to an asshole.

Your language is not a race, it’s a game

An issue with many languages, and especially Lispers, is that they treat programming in Lisp a bit like you would treat a sports competition, or a chess match. To them, if you “haven’t done the prep” you deserve to lose.

But a language, or platform for developing software, is not like a chess tournament, it’s like a neighborhood game. And new programmers are like the new kid on the block. When they walk up to you and ask if they can play too, your response should “Sure, here are the rules.” If you don’t, you’d just an asshole.

A simple example is QuickLisp. QuickLisp took the idea of Ruby Gems, or NPM, and basically implemented it like an asshole would implement it. Because if you follow every step on the Getting Started page you will not end up with a working, interfaceable library.

If you are designing a packaging system, or library system you must do these things:

  1. Explain installation of your manager
  2. Explain installation of arbitrary libraries
  3. Demonstrate how to include libraries
  4. Demonstrate how to use libraries

Some steps are obviously redundant, redundancy is a feature. There may already be some established method of interacting with a library that you should know. Which makes the person who doesn’t know feel like a frustrated schlub, because everyone expects that he should know, so no one tells him. It’s a catch 22, you come into a language community and you can’t get jump-started. It’s sink or swim, and from the numbers with Lisp, most people sink.

The idea that it is or should be intuitive is stupid because I didn’t intuit it. It may just be that I am stupid. But it’s probably because you’re an asshole.

By the way, the answer to how to use a library, especially one with a long or complicated name and many functions, is this for say the xhtmlambda package. Took awhile to search it out, and finally found the answer in Peter Seibel’s book.

(in-package :xhtmlambda) ; this is the magic line 
; so you don't have to prepend xhtmlambda: to every function
(htmlise (:syntax :compact)
                 ((body :style "color: red")
                  (p "Some text here"
                     (ul (loop for i below 5
                                  collect (li () (format nil "Line ~D" i))))))
                 )
(in-package :cl-user) ; and this gets you back into your script

Windows is not Linux. Do not ever, EVER, use Windows specific functions to detect safe places to put configuration files. There is NO DIRECT PATH to AppData. It’s never where you put a config file. It is a stupid location for cached data, or a database people aren’t supposed to touch. Even then, it’s useless.

If your application has an RC file that’s supposed to go to /home/user/.myapprc, don’t assume that you can stick that into any old directory in Windows, you fucking can’t. It causes so many headaches. Just chop off the fucking ‘.’ and stick it into the same fucking directory as the .exe of your app. Don’t get fancy. Don’t get cute.

Drives me up the wall.

DON’T PUT IT IN THE HOME DIRECTORY. Windows users don’t have homes. It’s a stupid name for a superfluous concept. They have Desktops, Documents, Pictures, and so on. There’s not even an obvious way to get to your home directory in windows! There’s no “Home” link. You have to click a special dropdown, and then find it in a context menu. FUCK.

Well, I really thought I had seen the worst SOAP API with eBay Trading, but that API is like heaven compared to the terse, complicated, and pointlessly documented UPS API. The Developer Docs look like the person was getting paid by the word, if you take my meaning. That is, they’re verbose, but useless. Everything is broken down into small parts, with copious PDFs and Introductions.

Then you’ll get this, alot: Error Code: 1002 – The XML Document is well formed, but this document is invalid.

Oh really? How? Where’s the mistake? I haven’t found it yet and I’ve gone line by line to compare the differences between a successful call and a failed call.

I’ll update this post if I ever figure it out…

I’ve been thinking about this problem for awhile, and I have an idea of one of the major factors preventing LISP adoption: EMACS.

Emacs is, well, complete shit. Vim is also shit. They are the awesomest pieces of shit ever. There are people who love EMACS, and people who love Vim (I like Vim actually), but everyone today uses a real IDE, like Netbeans (I hate it) or at least SublimeTEXT(I love it).

The truth is, you can use something like SublimeTEXT with SublimeREPL plugin and get interactive scripting behavior.

So how is EMACS a barrier? Because when you are a newbie to LISP, and you go looking for information about LISP, the first thing everyone says is: Install EMACS. Most newbies stop reading there. “To hell with that!” they say. EMACS is one of those editors that was a really great idea, 20-30 years ago when computers were way different. The problems that they solved are barely relevant today.

No one uses Macros, no one needs weird navigation with the keyboard. A modern IDE needs clickable tabs, not confusing buffer lists, they need file system tree displays, and project management functions built in, not from some confusing 3rd party lib.

The features an IDE must have:

  1. Tabs
  2. Split Layout
  3. PRegex Find and Replace
  4. Highlighting and indenting

The features that are nice to have:

  1. Column Select
  2. Plugin Architecture

Most modern IDEs have all of these, and more. So if you want to learn LISP, forget about EMACS, EMACS sucks, it sucks clown shoes. People who like EMACS are ugly, and stupid, and they need to wake up and join all of us in the 21st century. However LISP is not ugly, or stupid, and it is already in the 23rd Century.