Cheap book alert!

Humble Bundle has an O’Reilly ebook bundle on functional programming and you can get 15 books for $15! It’s not just Clojure, there’s JS, Scala, Haskell, Rust, Erlang, and what looks like some general purpose functional books.

Not an affiliate link, this is just an insta-buy for me 😮

It’s always worth supporting Humble Bundle. Every purchase donates to charity. Usually you can choose either which charity, or how much is donated, or I think sometimes both. Depends on the deal but they’re good charities and the default is at least 10% donated. You can sometimes knock it down to 5% if you want to keep the other 5 for yourself as store credit.

Remember they’re ebooks, not print. So you can read them on your phone or computer or Kindle or whatever. Much lighter than normal textbooks. But if you’re hoping to make a bookshelf look impressive it’s not the deal for you.

Anyway, go learn functional programming! It’s survived for like 66 years, it’s not going away.


On Debian and Mint, and why I like them

I got carried away answering a comment again, but I’m going to leave my reply intact and just make it a post, because I think this question and answer are addressing a barrier to entry point in the Linux world–namely, choosing a distro. This isn’t an attempt to actually answer the whole question, it just explains some opinions.

TL;DR: If you’re new and you’re picking your first distro, I suggest Ubuntu-based Mint (not Debian-based because you have to pick through a lot of Ubuntu Mint docs for it to find the right stuff). Debian is well-loved by a lot of programmers because the design is clean and easy to build on and customize until you’ve worn your own groove into it, so if you’re not new and you’re playing around with distros, try Debian if you haven’t already–it’s a classic.


kirisky asked:

Hi, Rebekah!
May I know why you like Debian?

Sure thing! Debian is well-loved because it’s solid. It’s sensible. It doesn’t include weird design decisions (unless you count the more recent versions of GNOME, the window manager, which some people don’t like–but you can always just install Cinnamon instead and use that. More on window managers in a minute). Both Debian and my other favorite, Mint, have good package managers, they run a lot of stuff natively, they’re easy to debug, they’re comfy to code on, they’re well maintained and documented… just overall they’re well kept and pleasant to use.

To a geek, Debian is the epitome of “we’re just gonna let you do your own thing.” Debian provides a solid base for whatever workflow customization you like. Even if you don’t care to change things, Debian has this clean, restrained design that’s pleasant to use. I’m using language that sounds like graphic design, because I’ve been hanging around designers lately, but I’m actually not talking about visual design.

I’d describe Mint as “friendly.” It’s a comfortable operating system. It’s like the friend who, you show up at their house and they’re wearing a clean but well-loved pair of jeans and an old band T-shirt, and they have chocolate chip cookies. Maybe the house is a little cluttered, but it feels lived-in.

If you’re asking because you want to try Linux for the first time, I’d recommend Mint. Debian is a very geek-oriented system, and sometimes Mint can be a little easier to handle because it’s specifically designed for its user friendliness. Debian is really nice for programmers though.

I’ll also warn you that there’s a third operating system called Debian Mint. Most people, when they talk about “Mint,” mean Ubuntu-based Mint. Debian Mint is a hybrid kind of system where people have taken Mint and tried to take it back to its Debian roots. I know, sounds confusing. Here’s the history.

Ubuntu is based off Debian. It was, and is, a very successful effort to make Debian more approachable to total newbies. Some of the design decisions in Ubuntu weren’t too well liked by the older programmers (well, you can’t please everyone), so they kept using Debian, which is of course still maintained as its own thing. Mint is based off Ubuntu, and it’s just generally well-loved–I’ve never heard anyone rag on Mint. But people have tried to scale back some of the design characteristics it inherited from Ubuntu. Personally, I’m not exactly clear what those are, but it resulted in Debian Mint. From what I understand, it’s stable, and I think I tried it on a VM at one point? But I wouldn’t recommend it as your first, for the simple reason that trying to find *Debian* Mint documentation among all the *Ubuntu* Mint stuff is kind of a pain when you’re trying to set things up. Sure, some of the Ubuntu Mint stuff will work for Debian Mint, but it’s hard to tell the difference between the stuff that will and won’t work immediately, especially if you’re new.

If you’re confused about the term “window manager,” let me clear it up here. The window manager is basically every part of the Linux user interface that ISN’T the command line. Linux can totally be run just via the command line, and you can do some basic stuff like edit text files and change configuration settings and even write programs without ever booting up to a graphic interface. This is because, unlike Windows, the window manager is a totally separate program! So you can pick one you like. There are window managers that put everything in tiles, so instead of a desktop you have to learn to use some keyboard commands to bring up and position stuff. There are window managers that look basically like Windows 7 but cleaner; Cinnamon is one of the nicer ones. Here’s what it looks like as of May 2017 (image is a link to the post it came from). Isn’t it nice looking? It’s got a search bar. Those buttons on the side of the menu are customizable, if I remember right; you can put your favorite stuff in there.

Ugh, I’m drooling, this is making me want to go back to Mint. I wonder if it’d handle my stupid NVIDIA graphics card better than Debian did? Maybe. (Long story. Not really Debian’s fault it can’t handle the extremely odd hoops NVIDIA makes you jump through to make its proprietary drivers work. I bought too new of a card, so the open source drivers were still crappy. Anyway.)

So, I hope that answers your question, kirisky, and hopefully someone else’s too.

Happy hacking!


Some of you dropped a line over here, and I’d like to respond somewhere where it’ll be easier to read than the little comments section, because there are some very good questions and I like to answer completely.

For these first two commenters, I have a long and hopefully not boring story in answer/return comment. I wasn’t sure where to break it–merby would mostly be interested in the latter half–but it doesn’t separate nicely, so I’ll leave it as one piece.

Tally said:

Hi, I’m Tally!
Just wanted to share how glad I am to have found your blog, it’s gotten me interested in making my own page to document my experiences with tech, too. You seem brilliant and really knowledgeable about hacker culture; forgive me for asking if this is already stated on your blog, as I’ve just discovered it, but I’m curious to know what about programming inspired you to study it and tech? Did it have anything to do with the O’Reilly book?

Hope you keep on writing, all the best!

merby said:

Hi Rebekah,

I discovered your blog a few days ago via ESR’s website; I’ve read through several of your posts and I just wanted to drop you a line and say how helpful they’ve been to me. I too started programming with HTML fairly young (I was 15 or so) and then went to college to study computer science. By the time I was a junior, the structure of school, even though it’s a good program at my university, had essentially killed any desire I had to work with computers. It was kind of a rough time for me in general, and I think I might just be better suited to learning this stuff outside a classroom setting. Anyway, I just graduated (NOT with a CS degree), and now, ironically, I seem to have rediscovered my once compelling urge to hack stuff. Your blog has been very encouraging and motivating for me to get back in the saddle, not to mention informative as I take the plunge into Linux. So thanks!

Also, I can totally relate to being the only girl in the CS classes and the occasional target of sexist pigs. So irritating. Good luck at the new school!

Awgh compliments ^^; Thank you! I like to think I’m pretty smart, but I’d say the people who are most knowledgeable on what I’m writing about are the people who are on GitHub doing it way more than I am, instead of writing about it. I’m kind of a n00b actually. I think basically everyone feels like a n00b for a long time in this field. It takes a lot of time and effort to become competent! But the payoff of building things is worth it.

Don’t feel shy about asking questions. Questions are the best!


Technology has been a big thing in my household for as long as I can remember. When I was really little, I used to sit over the shoulder of my older brother Tim as he took apart, repaired, and reassembled computers. He had kind of a little business going with it! He also, if I remember right, built me my first computer–a desktop box with a CRT monitor that sat in the living room, its main purpose serving the Hamster Dance web page to me on a regular basis, because I was three at the time.

When I was ten I took up writing long stories on the computer. It started off as kind of a little ambition–I wanted to write fairy tales and publish them for other kids to read. I wanted to send them off to a publishing agent and everything, and I did all this research and stuff. By the time I was finished with my first batch, it was a year later and 35,000 words long, if I remember right. But by then I’d just finished it so I could focus on the next project I had in mind–one I’d already begun–which took another year and another 56,000 words  (I looked it up) plus a bunch of rewriting (I was never satisfied with it).

By this point, Tim had gotten used to my habit of emailing him the latest chapters. In an effort to make this process more efficient (or perhaps in the hope of distracting me with a project and maybe even a different audience), he created a WordPress blog for me. It’s still up, but I don’t think I’ll tell you exactly where it is unless I get it into my head to revamp it and post my current writing. There’s really nothing there worth reading, just bad fantasy and high school angst. I did eventually get better, but I also stopped publishing online because I was hoping to publish my next project. Then my focus shifted to coding and interrupted its progress. My mom’s really hoping I’ll go back and finish it though.

Probably a wise move on Tim’s part, because the next two were 45K (…per revision, of which there were three–I didn’t like that one much either after I’d finished it) and 69K. My mom used to comment on the way I’d go on writing for months and months, then decide it wasn’t good enough and just about start over with the same story.

I comment on this because of two things: one, that writing fantasy novels shares a lot with writing software (remembering little details and logic and characters and motivations and items and rules of magic and making the whole thing make sense and be beautiful and entertaining to a reader–and also that length sounded impressive, but when it came to quality it just meant you had more to rewrite), and two, because my WordPress blog was my introduction to the idea that I could manipulate computers beyond just using software. (Yeah, I know, WP is software I was manipulating. Occasionally I had to look at HTML code. When you’re twelve, though, that’s kind of important. Links took me altogether too long to figure out.) But I didn’t know anyone who had a blog, and that set working with computers, in my mind, as a kind of Thing I Could Do.

Later that year, I found a program called RPG Maker XP. It was a game engine designed to make those old-looking grid RPGs–you know, they look kinda like this:

rpg screenshot

(That’s from a RPGVX game, but they’re very similar–it’s the same idea)

I found RPG Maker XP on sale for $30 once, and convinced my mom to pay for half of it. So I spent hours poring over a screen that basically looked like this:

RPG Maker XP screenshot

Once you made a “map,” as pictured above, you could double-click the little squares and create “events.” These drove gameplay–you couldn’t really do anything without them. And they were basically programming.

Each event has a “trigger” that sets it off. The one above (a screenshot from a tutorial for the more recent engine VX Ace) is for character naming, and triggers automatically. But you can also make them happen only when the player character walks up and presses Enter, or walks onto a certain square, or merely touches the event. You can choose graphics for the event–for instance, it could look like a person walking around, and the thing it does is the person talking to you. Or they might give you an item. Or open a shop menu. Or attack you.

Each of those actions would have to be programmed in. You technically didn’t have to write code. …Technically. You had to generate code using the tools. Line by line. Basically, it typed the code for you, and the whole thing ran on this big game engine that was already in place. I think it ran Ruby? But I didn’t know that then.

I did, however, think it was extremely cool, and spent many hours in front of a CRT monitor making my eyesight worse because of it. I tried to find documentation for it, but I couldn’t, and there was none (or none worth reading) in the program itself, and it wasn’t the most user-friendly, so I figured out a great many basic programming concepts on my own by trial and error. Variables. Loops. Coordinates. Timing. I learned you couldn’t have too many events on one page, or it would run really slowly (these were the Windows XP days–Vista was out I think, but we hadn’t downgraded).

That is where I learned programming concepts. That was one of the periods when I was really, truly excited about programming. So far, those periods have come to me only when I was working outside class on a project I was excited about, and I’ve never gotten that engaged in school. It’s kind of why I feel less excited about going to UNI than I think I should be.

The next year, Tim would get me a book called Head First HTML with CSS & XHTML for my birthday. I was really pleased with it–my mom half-joked that only Tim would know that what I really wanted for my birthday was a textbook. He started to go through it with me, and he’s a pretty good teacher–but I think he thought I wasn’t excited about it when he started to carefully, thoroughly explain the basics and try to make me not afraid of code. I wasn’t uninterested. I was just past the point when that level of fix was enough. By then, it took a much stronger dose to satisfy me.

I ditched RPGXP after a couple months, though. After I’d figured out the basics, I tried to do things with them–that meant trying to make the fantasy novel of that time period into a game. It didn’t work too well. I tried to write something else, but it got abandoned too.

I didn’t worry too much about this. I had lots of dud stories on my hard drive. But it was more work to abandon games. I left it alone, and started making web sites instead.

A year after that, I would take my first formal college class on coding–web design, specifically–and find out that they were getting basically everything wrong. We spent a third of the class on Flash, which I hated to the core of my being. The next third was spent learning to manually code HTML and CSS… to a far outdated standard, including scrolling marquees and gratuitous use of clipart as project requirements, and we weren’t being taught to use validators (the HTML version of a debugger; when you’re learning, it’s almost essential for catching your mistakes). The last third of the class was on the use of DreamWeaver, which at the time was just as bad as Flash. (I understand it’s grown up considerably since.)

After that, classes on VB and so forth kind of made sure my attention stayed on writing, art, and psychology rather than coding. I still enjoyed the idea of making things and the cool image of having coding skills, but it felt like work far more than play. I’m still trying to reclaim my enthusiasm. Sometimes it comes back, but… not for school stuff. Even if I liked the teacher.

DaniS said:

You ever read a blog and really empathise with a person? Virtual supportive and encouragement vibes, or something. Badly engineered education + sensitive engineering design sense + depression is not a fun combo. But it sounds like you’ve gotten through the really bad bit, at least.

And let me know, once you get back to coding, whether you ever want someone to rant at or work with. I’m still learning, but damn if it isn’t easier to do that when you’ve got something to make.

I’m working on this right now:

It’s part of my “legacy” that I’m wrapping up. Not because I like the project, but because I promised to do it. I’m going to have the design docs up soon. It doesn’t have an open source license on it because it’s for an organization, and my communication with them on this particular topic was kind of vague. I’m really just building up the codebase so it’s worth it for someone else to inherit.

That’s boring though. So for you, I updated my idea file. Here you go! I’m seriously considering that bill-splitting app, but someone might have already done it.

Jan Coetsee said:

Send me an email and I will send you a link to some very cool stuff

Keep up the spirit!

Convince me you aren’t an email address harvester first. I won’t snub you if you’re a real reader, but this is the sort of generic message I’d normally stick in spam. So, if you recommend your favorite Jargon File entry, or remind me of the three virtues of a great programmer as told by Larry Wall, or tell me a very short story about a goat named Jerry, I’ll totally talk with you over email. 🙂

Or, if your links aren’t private material, feel free to post them here. 😀

Optimizing algorithms has never been so fun

I’m here to talk about a programming game called Human Resource Machine. It was recommended on Coding Horror, so when I found it in the latest Humble Bundle, I grabbed it immediately.

There’s no minimum price to get it, so even if you’re kinda broke you can still grab it.

And dude. It is _so fun._ It’s difficult enough to be kinda confusing and difficult but still doable–the game uses really, really simple commands and the closest thing to recursion/looping are conditional GOTOs. You only get a couple options for the conditions, too. It seems like the best algorithms are either beautiful or mind-bendingly crazy. Readability? Who cares about that stuff? Just stick some masking tape on it. If you’re used to sane code that’s written for humans to read and only incidentally for compilers to execute, prepare to rearrange your priorities in the most fun mad-scientist way possible, pushing the system and making it your plaything.

I’m on level 18 or something after about two hours (according to Steam), and so far I’ve gotten at least one of the optimization challenges on each level that has them. You often can’t get both the speed and size challenges done at once, so they need different approaches, and it’s really difficult to figure out how to change tactics when one solution comes naturally. I seem to get into a mental groove of optimizing for one or the other at a time.

It also has a sense of humor. Instructions from management can get pretty silly. Um, but not sillier than real life–does that still count?

Anyway. Grab the game, support charity, maybe get a game about metro stations along with it (I did, haven’t tried it yet though).

I claim no responsibility for your lost productivity. You have been warned.

Belated Merry Christmas!

I don’t know about the lights. Unless they’re LEDs, they’re kind of a fire hazard. But Pinterest doesn’t follow the normal laws of physics.

(Note: I started writing this on Dec. 19. It’s late, but it’s here.)

Wow, I think this is the blog’s first Christmas! To celebrate, here’s a payload of some great stuff from my bookmark stash. This is all silly stuff really, nothing terribly on topic. Basically, it’s a collection of nerd clickbait. Did I promise anything else?


Silly/interesting lists

Shooting yourself in the foot in various programming languages

Personality types of developers

Know Your Sysadmin

Github Octodex

100 Rules of Anime (text only, but not something your kid/boss should read over your shoulder)

Harry Potter theories (these are good)

Evil Overlord Rules (this is a classic, so if you haven’t seen it already, you need to)

Things to do with Command hooks

Design Fails (blatantly pulled from Reddit, but whatever)

Things Mr. Welch can no longer do in an RPG


48. The elf is restricted to decaf for the rest of the adventure.

74. My thief’s battle cry is not “Run And Live”

163. Not allowed to try and make a dire version of any dog of the toy breeds.

313. My British Superspy does not get a reroll on his seduction check if his shirt gets ripped off.

330. The Halfling Paladin does not represent the Lollipop Guild.

Useless entertaining/relaxing websites


Neon Flames

This Is Sand

What color is it?

Weird art websites (epilepsy warning on some of those, use caution)


My favorite chocolate cake recipe

My favorite sugar cookie recipe

Dilbert the animated cartoon (AFAIK, there isn’t another way to watch this)

All the Pokemon episodes you could ever care to watch (and then some) (like, a lot more)

The Secret Life of Dolls (a silly fanfic sort of thing)

Character name generator

A whole slew of random generators (site also has a bunch of articles about writing. Its colors change every couple months so if you have trouble reading them at one point, check back later. Usually not a problem but the theme right now is really bright)

White/pink/brown noise generator, and corresponding rain generator

Another one of these lists (!)

ThinkGeek fortunes

This rant about programming I think is hilarious

Museum of Bad Art

there has to be at one brainless Buzzfeed post in this list


This is called a “chimera” cat

Cats napping in pots

Cats napping in pots, part two, on a different site, cause they’re just that adorable

Cats wearing sweaters (I guess that makes two from Buzzfeed)

This cat snuggling with a bunny


I saved this for last because of how long the list is. I like web comics. No particular order.

xkcd (duh!)

Homestuck (if you want to take a while–I read most of it when I got mono a few years ago, its wordcount surpassed that of War and Peace a long time ago and it’s like eight thousand pages but it’s really funny and involved and makes you think too hard about time travel shenanigans and punch card based alchemy)

Rice Boy (surrealist adventure for a cold winter’s evening)

Beyond the Canopy (silly fantasy)

Cucumber Quest (extra silly fantasy plus cute rabbit people)

Bardsworth (story about a guy going to a parallel dimension through his closet to attend bard/wizard college, shenanigans ensue)

Monster Pulse (more serious fantasy)

Monsterkind (some kind of political commentary, if my memory serves; I liked it enough to bookmark it)

Hark! A Vagrant (mostly silly historical comics, but I bookmarked the weird Shetland pony thing… well, one of the weird Shetland pony things)

Alby (I actually never finished this, I should get around to it)

Questionable Content

PHD Comics (this one is my favorite)

Bug Bash (developer team shenanigans)

Geek Hero (ditto)

Dilbert (obligatory)

Foxtrot (ditto)

User Friendly (goes straight to the ESR as Obi-Wan arc)

Poorly Drawn Lines (just silly)