logo: drawing of an eevee lounging atop the website

fuzzy notepad

Blog

Page 16
Atom feed

[articles] Next steps for beginning programmers

Last month @zandrmartin asked me on Twitter:

i would love to read a post about things you would recommend newish programmers learn, esp those coming from a php web background

not even tutorials as such, just like ‘you should learn about x and how to implement it effectively’ would be great

like when you were talking about bit masks a while back, i have no idea what those are or why you’d use them, but i want to

I’ve opined on this sort of thing briefly in various impermanent places, but somehow never tried to consolidate it at all. So here you go, some stream of consciousness on being more better at computers.

[articles] My search history is now full of illegal drug terms

Someone has generously pledged a pile of money and asked me to write about the War on Drugs. Preliminary research reveals that this is not actually anything to do with programming, which confuses and bewilders me, but I’ll give it a try anyway.

My gut reaction is to say “it’s bad”, on the basis of victimless crime and right to private action and all that, but that doesn’t make for a very interesting post, and there are plenty of thinkpieces along those lines anyway. I’ll try to do a teeny bit of research, so I’m not just paraphrasing Wikipedia.

[process] Making Mario

I bought Super Mario Maker a few days ago. I was a little iffy on blowing $60 on a level editor, but I really like level editors, so here we are.

[updates] Mario Maker: Tiny–Huge Island

A953-0000-0055-15BA
Difficulty: medium, has some annoying spots
Quality: ★★★☆☆
Secrets: 🍄🍄🍄🍄

I love any kind of parallel-areas gimmick, and since you can make large versions of basically any critter in Mario Maker, it was begging for this. It’s named for a world in Mario 64, which I played only briefly but found memorable anyway.

It’s surprisingly difficult to come up with puzzles that actually require large monsters, and even harder to come up with ones that require small monsters. In the end, I think all but one of the puzzles can be solved in either world, though one way is always considerably easier than the other. I like alternate solutions, and heavily dislike when game designers add obvious artificial roadblocks to seal off alternate solutions, so I’m fine with this.

There are some places that are a little harder than they ought to be, which is a shame, but it’s my most popular level nonetheless. I’m itching to make a sequel, but this was incredibly tedious to do, because you can’t actually copy anything across areas. All of it was done manually.

[updates] Mario Maker: Spoopy Manor

CA39-0000-004B-FF52
Difficulty: slightly tricky, not in a good way
Quality: ★★★☆☆
Secrets: 🍄🍄 + “secret exit”

Boo houses are cool. Mario Maker adds a Boo house theme for the classic Mario tileset. Awesome.

I tried to make this moderately confusing and weird, as Boo houses ought to be. I think I may have overshadowed that a little bit with some annoying jumps into Boo circles, though. And unfortunately this predates checkpoints, though it direly needs one.

Still, I enjoy playing it just for the strange environment, so maybe you will too.

[updates] Mario Maker: Test Flight

55A7-0000-0049-50DD
Difficulty: tricky, not in a good way
Quality: ★★☆☆☆
Secrets: 🍄🍄🍄

This is my first Mario level, hence the title. It… is not particularly great.

The concept was okay: you start out in what seems like a cheerful easy level, then you suddenly hit a wall. You have to go down a pipe to progress, and surprise! It’s not so cheery any more.

Unfortunately it’s a bit worse than “not cheery”; it’s cramped and kind of annoying. The original idea was actually worse than how it came out — I’d intended that you have to cross the entire second area, get a cape upgrade, and then backtrack without losing the cape. You need the cape to reach the exit, so if you lost it, you were screwed. I found out that you could actually skip all the backtracking pretty easily, and I was relieved enough that I left it in.

Suffice to say, I would do this very differently if I did it again now.

[articles] The sad state of web app deployment

I spent a good chunk of the last four days installing an Internet web forum, which claims it can be up and running in 30 minutes.

I like to think I’m pretty alright at computers. So what went wrong here? Well let me tell you.

[articles] Dark corners of Unicode

I’m assuming, if you are on the Internet and reading kind of a nerdy blog, that you know what Unicode is. At the very least, you have a very general understanding of it — maybe “it’s what gives us emoji”.

That’s about as far as most people’s understanding extends, in my experience, even among programmers. And that’s a tragedy, because Unicode has a lot of… ah, depth to it. Not to say that Unicode is a terrible disaster — more that human language is a terrible disaster, and anything with the lofty goals of representing all of it is going to have some wrinkles.

So here is a collection of curiosities I’ve encountered in dealing with Unicode that you generally only find out about through experience. Enjoy.

Also, I strongly recommend you install the Symbola font, which contains basic glyphs for a vast number of characters. They may not be pretty, but they’re better than seeing the infamous Unicode lego.

[articles] Security through misanthropy

I love programming. It’s like playing with Lego — here are some blocks, see what you can build with them.

That sounds a bit less impressive now, but when I was a kid walking uphill both ways, I only had a very generic Lego set where all the pieces were cuboids. If I wanted to build a house with a sloped roof, well, that was too bad. I could cheat a little, though, by making several layers in a terrace pattern. It wasn’t actually sloped, but it did the job well enough by making creative use of the tools I had within the constraints I was given. You might call it a hack.

Self-identified hackers will often lament how “hack” now has two meanings and everyone assumes the wrong one. I think there’s really only one meaning, and the “break into computers” sense is a special case. It’s not like breaking into a system is magic, or done by running hack.exe; it’s just a creative use of the tools you have within the constraints you’re given. Like when the constraint is “your username is placed in a string of SQL” and you decide to place a couple quotation marks in your username.

So I’m always a little surprised when programmers don’t get security issues or how to defend against them, because to me, it requires exactly the same mindset as programming. And I suspect the problem is a quiet assumption most people tend to make: no one is that much of an asshole.

That’s not entirely unreasonable. Every stranger you pass on the street could be a hired assassin, but that’s fairly unlikely, and we have punishments to discourage that sort of thing. Ultimately we have to have some level of trust in other people in order to be around them at all.

And yet.

[articles] Frozen peaches, sour grapes

I’ve started and restarted writing this post so many times. I’ve spent a week agonizing over it. It’s so hard to write. There’s so much I want to say, and I don’t know how to say most of it or how to thread it together sensibly or how to draw any useful conclusions.

The hardest part is that I want to give examples — and I have loads in mind — but I don’t want to pick on anyone in particular. It’d be sort of counter-productive, given the subject matter.

I considered abandoning it altogether and just compressing the thoughts into an example-free tweetstorm, which sounded much easier. But it occurred to me I could just do that in vim and call it a blog post, and maybe it would end up less wordy besides. So here goes the somewhat compressed version. Ahem.

Something is very wrong with Internet discourse. It rapidly devolves into being bitter and spiteful and hostile, and this is only becoming more frequent. I don’t know where this is leading us or what to do about it. I don’t know dick about sociology but here are my perceptions anyway.

[personal] I quit the tech industry

This Friday, June 12, will be my last day at Yelp.

I don’t intend to look for another tech job.

Or another job at all.

Ever.

[articles] Text editor rundown

As part of my experiment to monetize my personal brand, or however we’re describing this now, I have a milestone that lets a patron impose a blog topic of their choosing on me. What could possibly go wrong?

And so, this month, Russ brings us:

You should totally write about text editors.

I totally should. I mean, wait, no I shouldn’t. I haven’t seriously used a text editor other than Vim for years.

Thankfully this was a moderately vague request, so here’s what I’ve done: I’ve subjected myself to all these hip shiny text editors that I haven’t been bothering with and taken notes of my initial impressions. I only had a few hours to devote to each, so this won’t really be a fair comparison… but you know, life isn’t fair, so eat your peas and do your homework.

[articles] I stared into the fontconfig, and the fontconfig stared back at me

Wow! My Patreon experiment has been successful enough that I’m finally obliged to write one post per month, and this is the first such post. Let us celebrate with a post about something near and dear to everyone’s heart: fonts. Or rather, about fontconfig.

fontconfig is a pretty impressive piece of work. If you’re on Linux, it’s probably the thing that picks default fonts, handles Unicode fallback, and magically notices when new fonts are installed without having to restart anything. It’s invisible and great.

And unfortunately once in a great while it’s wrong. There is no common GUI for configuring fontconfig, so you’re stuck manually editing XML configuration files — for which the documentation is atrocious.

Lucky for you, and unlucky for me, I have twice now had to delve down this rabbit hole. Here is my story, that others may be saved from this madness.

[articles] Just enough Git to be (less) dangerous

Do you just hate Git? Are you perfectly happy with Mercurial (or, yikes, Subversion) but once a month you have to brave Git because everyone and their damn dog is now using GitHub? Are you vaguely aware that about half of all Git commands will probably delete all your work forever, but you don’t know which ones and you don’t want to spend three weeks poring over the documentation?

Good news! I wrote you this amazing Internet post. I hope I can mash just enough Git into your face that you will be less likely to set things on fire, and also less terrified that you might set things on fire. This should also be enough to make the Git documentation a little more comprehensible; it’s extremely thorough, but also overwhelming and nonsensical if you haven’t already read half of it.

I’m trying to keep this brief but also potentially useful to people who have never touched version control at all, so there are some 101 bits sprinkled throughout. Fear not! I don’t actually think Mercurial users have no idea what a patch is.

[articles] Sylph: the programming language I want

Creating a programming language is apparently all the rage these days, and it’s got me thinking about what I would really like to see in one. I’m starting to suspect the things I want are either impossible or mutually incompatible, so I’d better write them down and let smarter people tell me why I can’t have everything and also a pony.

I’m strongly influenced by my love of Python, my aversion to C and C++, my fascination with Rust, and the bits of Haskell I understand. I very recently read an overview of Nim, which is part of what got my juices flowing. Also I have a lot of fond memories of what Perl 6 could have been, so, fair warning.

This is a brain dump, not a linear narrative, so some of this might be mutually referential or causally reversed or even complete nonsense. Please pardon the dust.

[process] Starbound airlock

Starbound is a 2D exploration and building game currently in development. Yes, yes, it’s like Minecraft, except 2D, and with actual art, and fun.

A recent update added wiring (or perhaps upgraded it into being useful?), which lets you wire anything into anything. A notable feature of Starbound’s wiring over Terraria’s or Minecraft’s is that logic gates are actual objects, not emergent behavior. So you don’t have to build everything out of goddamn NANDs. Also, the wires aren’t physical objects; they’re just straight lines connecting an input to an output, they take up no space in the world, they don’t participate in any form of collision detection, and they appear on a separate layer that you only see when you’re using the wiring tool.

There’s not a whole lot you can do with the wiring in Starbound yet. The devices you can control are, for the most part, lights and doors. Other players can just destroy anything you build, anyway. So it’s really only useful for visual effect right now, much like everything else you can build.

Still, there are a couple mechanisms of interest. Last night I built an airlock, and while it’s not an astounding feat of electrical engineering, I thought it was an interesting enough problem that someone else might enjoy reading about it. So here I am, blogging for once. I hope you’re happy.

[personal] Eevee gained 2269 experience points

Eevee grew to level 28!

I’m a bit late; my birthday was on the 12th. Oh, well.

I don’t know what to say about 2014, really, so let’s just start typing and see what happens.

  • Bought the house, finally divorced myself of the old one. Paid half of it off.

  • I made some (one and a half?) ZDoom maps. I first got into the ZDoom community over a decade ago — I found articles on the ZDoom wiki with my own edits in them from that long ago — and only now have created a map that’s actually playable. By which I mean it has an exit.

    In the course of doing this, I also wrote a bunch of patches for SLADE, the editor I’m using and the only one that really exists for Linux.

  • I released a couple more tiny modules on PyPI: cgettext, classtools.

  • I actually got my dream roguelike, flax, to the point that it’s playable.

  • I started trying to draw, on and off, again. I’ve recently gotten in the habit of doing a little daily comic, since my partner is doing the same.

  • I learned Inform 7 and wrote some of a text adventure. I also made a whole lot of aborted attempts at writing fictional prose for my partner’s Flora universe; it turns out fiction is hard, maybe.

I feel like I’ve grown a lot, but I can’t quite explain how. I tried a lot of things I haven’t really tried before, and they’re all informing how I think about things now. I don’t feel like I have a lot to show for all of them, though. Hm.


For once, I’m also considering what I would like to do this coming year.

  • Write more. I only wrote six posts last year! I blame this mostly on my emphasizing this as a “real” blog — I’m now unsatisfied with posting anything that isn’t as long and informative as, let’s face it, the PHP post. I need to knock that off. Back in my LiveJournal days, I once wrote a post every day for a month; perhaps another such month is in order.

  • Do a bit more with this domain. Ever since I bought it, I half-intended to also host separate pages for things I’ve made, and I don’t mean just cramming them onto a single “projects” page. I don’t know what form this will take yet, but as long as the domain is actually my name, I’d like for it to be something that more accurately reflects me.

  • Finish a game. Probably not flax, but hopefully this text adventure. It would be great if I had a website where I could host a text adventure, too… hmm…

  • Write a book. Or at least a significant chunk of one. I have a lot of ideas for a programming book (series?).

  • Make money. I have a salary from a “real” job, of course, but I would really like to prove that I could someday support myself with my own endeavors. Any of the above are possible candidates.

Only five things in a year. How hard can it be?