Minor content audit

Hello, old friends!

I was surprised to log back in and discover that this site still gets readers now and then. Wild! I haven’t even been here in… four years? Whoof.

Well, I’ll admit it: I’m part of the statistic about girls dropping out of the tech field. I still use Linux as my main OS, and I do still want to learn Clojure someday, but I’m no longer hoping to go into tech as a career. I’m honestly very burned out on programming.

I’m back to writing novels and bits of nonfiction, and I’m signed up for a copyediting program this spring. Writing is one of the few things I can confidently say I’m good at–with real confidence, not my old teenage BS confidence (which, if you’ve been through the archives, you’re probably very familiar with).

Speaking of which, I’m about to clean a few things up around here. The stuff you love isn’t going away, but a few old tutorials need disclaimers added about their age and other notes about things I’ve learned since I first wrote them. Some posts that are no longer useful, like the ones where I pointed toward Humble Bundle book deals that are now years expired, will be archived. Others, I’ll probably be reining in my teenage self’s more… uh, annoying writing habits. (We’ll just call it that.)

The tutorial posts you love won’t be going away. They could use some touch-ups, though, so I’m going to spend a few hours today giving them some love.

As always, happy hacking!

Rebekah

“Earning Your Labels”

I was just thinking about the problem of elitism and gatekeeping in the software community. You know, the “You’re not a real programmer if you [use Notepad++ || only code HTML and CSS || only know Python || still use Windows* || don’t know about pointers || etc etc etc]” arguments. Most of these boil down to a pissing contest about who can use the most bare-metal programming language, do bit hacking to get a .0001% increase in optimization, and use butterflies and wind currents to write their programs.

So, where do you draw the line? How high-level do you have to get before you’re “not a real programmer?”

*Yes, I’m a huge Linux advocate. But come on. You can program on Windows. I personally don’t like doing so, but you can. If you have to bash on someone for using the OS they know, it’s because you don’t feel secure and confident in your own skills. All you’re doing is making someone feel like trash and not want to build things. It’s immature. Cut it out.

“Real Programmers”

My initial reaction is that, if you’re writing code to tell computers what you want them to do, you’re a programmer. It doesn’t really matter how many layers of interpreters you have to go through in order to get the command across. My line is drawn past HTML and CSS (that’s legit), but before Wix (…picking out templates and arranging a couple things isn’t programming).

What about Dreamweaver? Are people who use Dreamweaver programmers? (If you’re cringing, it’s likely that you too have not used DW in a few years. I hear it’s gotten loads better. I still don’t really want to touch it though. Bad taste in my mouth.) They don’t necessarily write the actual code, but they are using creativity and intelligence to design and build software.

If you think the answer is, “No, that’s not real programming,” I ask: what about programs that are really just a couple library calls stitched together? Sure, you have to know what they do, and you have to know some syntax to get them to cooperate, but is that programming? What about Excel macros?

This is a loaded question, because “programmer” is an identity tag. There are lots of levels of expertise, and people put loads of effort into learning. They also often put effort towards feeling “worthy” of the label. To let someone else just waltz into your exclusive club of smarty-pantses feels like some kind of glove-slap. But the only reason you feel weird about letting someone new use the label is that you wanted to be in the club at one point, and whoever was already in it made you feel weird about not having “earned it.”

This is pointless. It’s so pointless.

My line, you might notice, isn’t too solid. Programming is a skill; to call yourself a programmer you need to have invested at least some time in learning how to tell computers to do things. But telling computers to do things is something everyone does, every day, even if it’s just posting cat pictures to the Internet, and one intuitively understands that that isn’t programming. So the definition of programming needs another component: you need to be using creativity to build something useful. I also feel that you should have a modicum of closeness to the computer that the average user doesn’t see. You should be typing code of some sort, probably. Yet at the same time, I still consider Scratch users programmers.

This is all kind of weird and fuzzy and I don’t have a solid answer. Let’s aim for something a little more abstract.

Who is a hacker?

This feels like easier ground to cover. A hacker is someone who makes stuff, usually involving code, always involving skill and creativity. So, can Dreamweaver users be considered hackers?

I’ll admit, I have the same knee-jerk response of “no,” but that’s because of my opinion on Dreamweaver. Let’s try again.

Imagine there’s a program that uses a WYSIWYG editor to build software, and it actually somehow outputs sensibly-structured code, which you may or may not have to tweak. You need to tell the computer, through this editor, how you want things to look and what they do. You design the visuals and the functionality yourself. Is someone who uses that a hacker?

I think yes. I wouldn’t consider that person a programmer, unless they tweak the code a lot. But I’m willing to extend the label “hacker,” because they’re building something.

In other words, I consider designers hackers, particularly if they design functionality as well as visuals. A solid designer goes to a programmer with a startup idea and both contribute substantially to the final product–they’re both hackers.

So, I know there’s someone who disagrees with me. ESR’s “How to Become a Hacker” FAQ, linked in the sidebar from the glider symbol, outlines the minimum amount of skill he considers necessary to be thought of as a hacker. In fact, my most well known post is linked from that guide, and probably a lot of my readers got here from it. But I think the guide, while helpful and very much in the hacker spirit, is showing its age just a bit.

C, Java, Perl, Python, and Lisp as the main languages one should learn definitely seems outdated. These days you’re probably better off learning JavaScript, Kotlin instead of Java, Ruby or Python, and… probably still Lisp, but maybe one of its dialects. And HTML/CSS, obviously. A lot of us don’t need C any more. Software is increasingly hosted on browsers rather than as native applications, and if hacker time is valuable as the guide purports, then we shouldn’t spend it on learning a complicated language unless we intend to specialize in what it’s used for. There’s something to be said for knowing the kinds of things C would teach you, but it seems a stretch to call it necessary.

Similarly, I think using “hacker” as a title of status isn’t the way to go these days. Once upon a time, this made sense. These days… ehh. Especially the idea that you have to be called a hacker by a “well-known” hacker. The community’s too big for us to define that kind of thing now, so what it gets us is this scrabbling for status, and an in-group. Does making “hacker” a title help our cause? Does making an in-group speed the creation of open source software?

It did once, because few people wanted to be part of the group, and hackers needed something to be proud of because no one else held them in high esteem. Times have changed. It’s more important to welcome new members than it is to describe an elite.

Open Source

But wait, don’t you have to contribute to open source to be a hacker?

… Good question. It’s been part of the definition for ages, and for good reason. But we have to respect that in a lot of hackerly fields, there’s not too much of an open source infrastructure. There’s no official way, that I know of, to go post a functionality spec and some back-end code online and say, “I’m looking for a volunteer visual designer for this open source project,” and get one. There’s not really a GitHub that’s geared toward PSD files and so on. I think Adobe’s been trying to make something similar, but I have my doubts about the prognosis of this attempt. (You can use GitHub for this kind of thing, technically, but it’s not usually done. There’s no community that thinks of that as normal. Ergo, no infrastructure.)

I think we can loosen up on this a bit. Let’s say that, in order to be a hacker, you have to be helpful to other hackers. Open source produces better software, yes, but much of its function is just hackers helping each other build stuff. This addition to the definition seems to cover the chaotic-good benevolence that’s kind of integral to hackerliness. So, if you’re a designer and you provide friendly critique and advice, write articles/draw tutorials/make videos about your work, contribute to public domain or creative commons, maintain documentation for your tools, or anything that kind of runs in that vein, consider yourself a hacker.

So, to be a programmer, I think you should be writing code. Don’t care what language, what editor, or even if it’s very good quality code.

To be a hacker, you should be using your skill and creativity to build new things, usually with code but not always, and you should help others who are building things.

One more thing. Your learning shouldn’t be stagnant, for either category. A programmer who’s been spewing out bad COBOL since the eighties is barely a programmer, and definitely not a hacker. And a hacker who’s not refining their technique through focused practice and frequently poking their nose into the bandwagon to see what’s up with the newest shiny tech or trade technique or tool, is just… not a hacker, by definition. You have to be building stuff to be a hacker, which means you’re refining your skills as you do so. Technically, you could be writing the same CRUD app over and over and over again, but even that has some room for improvement, and it’s really really hard to imagine creative builder types limiting themselves to that for long.

These are just my views. I think a lot of the friendlier people in the community would find them reasonable, though.

Competition and impostor syndrome

I think the lack of this elitism is why I’m happier in design classes than programming classes. It’s not that I like design *better.* It’s that I don’t like programming classes, because the air tends to be heavy with the feeling of judgment.

Ever try asking a question on Stack Overflow? 80% chance you’ll be told it’s a stupid question, you aren’t using the right language and framework, you should have Googled x y and z, and your coding style is crap too while we’re at it. Sure, you shouldn’t ask other hackers to fish you answers that out of the API docs, and if you’re asking other people to read your code snippet then you should bother to indent it and comment anything that’s not obvious. I’m not talking about stuff like that. Even questions that seem to me perfectly legitimate get this kind of treatment. It’s just hostile and unnecessary.

If you’re not a white guy, you’re especially likely to be seen as incompetent until proven otherwise. When that isn’t actively happening, you feel on edge a lot of the time because you’re waiting for it. Even if the people around you consider open harassment and condescension Not Cool, you’re still watching them tear each other down and wondering what they’re thinking about you that they aren’t saying, and how that’s going to cause problems for you later. And is it really constructive to cut anyone down, even if they do look like the stereotypical National Lampoon nerd? This attitude of hostility and competition isn’t healthy, no matter who the target is.

Designers seem more chill–they aren’t so competitive they feel the need to cut each other down, as far as I’ve seen. There’s still a lot of skill-based insecurity and comparing everyone else’s work to your own and trying to improve, but they aren’t nasty to each other the way so many programmers are. I can relate. No matter what, I always feel like I haven’t built enough, I don’t know enough, I’m not good enough. This isn’t new, really, it’s just something creative types have to deal with and practically everyone has the same self-dialogue. But when people can’t deal with this by dismissing it and just continuing to work, and instead decide to handle it by throwing their insecurities onto someone else, you just get this warped echo chamber of impostor syndrome and a really toxic environment.

I think a lot of the problem is that not everyone in the field realizes we’re a creative field, not a science or engineering discipline. If we all knew that, we’d know about this dynamic already because all the other creative fields have already been there and done that and learned how to deal with it. I happen to be an artist, writer, musician, cook, and designer as well as a programmer, so I’m fortunate enough to recognize what’s going on, which gives me some protection from it. (Notice I’m not a mathematician, chemistry whiz, or engineer. Funny how that works, isn’t it?)

Where’s this coming from?

This train of thought is heavily inspired by my getting more into freeCodeCamp. I’ve been reading their Medium articles off and on for… gosh… two years? Or more. But I didn’t get involved with the actual organization or their tutorials and stuff, because they’re very web focused and I wasn’t sure that was the direction I wanted to go. (If you’ve been here a while, you might remember I was more focused on mobile apps and desktop programming.)

Anyway, fCC is very anti-elitism, and I really like that about them. It’s why they’ve always been my favorite Medium column/publication/whatever they’re called. It’s very much an “anyone can learn this, yes you are smart enough so no excuses, come here and I’ll show you” organization.

I think this helpful non-competition is something the rest of the field should adopt. It’s not going to devalue your skills, because they have objective value. You can still be proud of how much you know without being a jerk about it. Actually, truly skillful hackers will be held in even higher esteem if more people learn to program, because they’ll recognize the difficulty of what you’re doing and want to emulate you.

Can we drop the popularity contest?

Someone out there is going to read this and think I’m not a senior enough hacker for this request to be taken seriously, that I don’t have enough cred myself to kick the door open for other people. I don’t think I have to explain the irony.

Anyway, I guess this post isn’t really for those people anyway. It’s for my larval-stage readers, who are the worst affected by this phenomenon. I just want to make you aware of this message that’s constantly being thrown at you, and let you know it’s total bull.

Make stuff. Learn things. Help people.

You’re a hacker. It’s what you do.

System update: AAAAAAAAAAA <3

AAAAAAAAAAAAAAAAAAA!!!

I have Linux back!

I missed you, my darling. Win10 is just tolerable, but you’re beautiful. It took me an hour or two to figure out how to release you from the clutches of secure boot, fast startup, and proprietary drivers–mostly the first one, as you handled the NVIDIA drivers exceptionally well this time around–and it was worth it.

Ugh it feels so good to be back. It’s so much more… comfortable.

Love letters aside, I now have Mint “Sylvia” and Cinnamon running on the lion’s share of my terabyte drive. Win10 is still on the other 400GB or whatever I gave it, mostly because it runs Adobe Suite for my graphic design class (which is also why it has that much of the drive; those files can end up pretty big).

I don’t know if this is a difference between Debian and Mint, but Mint handled the NVIDIA driver installation way more smoothly. I didn’t have to open xorg.conf or anything. One of the CS professors at my university likes to joke that Ubuntu is an African word meaning “can’t configure Debian.” Well, in this case, I suppose he’s right. I spent somewhere between 6-8 hours trying to configure the darn thing, and I’ve been using Linux off and on for years, the off parts mostly being OS X, which still has a Unixy structure you can fiddle around with to some degree.

So, what prompted me to try again? Two things.

One, I want to pick up my Clojure book again at some point soon, and I absolutely refuse to program using the Windows command line. It feels… weird. As if you’re trying to converse with something that should be intelligent, but not only is it eerily robotic and kind of oblivious, there’s a language barrier and only half your words are understood. Feels icky.

Web dev is fine on Windows because you usually don’t have to touch the OS anyway, everything’s in the browser and text editor. But my workflow for basically any other kind of coding has relied so heavily on the command line for years that I don’t actually know how to use anything else any more. IDEs? What are those?*

And two, I’ve been drooling over the idea of getting it back for a day or two since I answered a reader’s question. I remembered that Debian isn’t the only system I like, and in reminding my fellow (larval?) hacker that Mint is easier on a newbie, I stopped to consider that Mint might be able to handle my drivers better. And it did! Again, I don’t know if this is a Mint thing or a time thing–it could be a time thing, because I do remember trying to use a Debian utility to install the drivers for me, and I’ve given the hardware a few months to age–but the problem I had is magically gone.

I’m not going to question it. Everything is working. Linux is magical. Mint is my Valentine this year.

Speaking of which, I spent Valentine’s Day playing Doki Doki Literature Club. That’s what single nerd girls do on Valentine’s Day, right? Play psychological horror games disguised as anime waifu dating simulators, and set up dual-boot Linux? Well, this one does!

Do heed the content warnings. The game is very graphic, overtly emotionally manipulative, does a pretty good job of portraying mental illness at its most horrifying, and just because it doesn’t bother me definitely does not mean that other people with depression will also be okay with it. People without depression have a solid chance of not being okay with it. This game absolutely will do horrible things to nice people and try its best to make you feel terrible about your part in the events. (I am not easily persuaded on this front. I thought it was pretty funny, actually.)

If you’re not sure about whether you should play, either don’t, or watch someone else play it on YouTube. That way you’re not responsible for any of the decisions, so the game can’t guilt you about them. I did this with OFF after some friends told me it was really messed up, but I didn’t think it was that bad. Doki Doki Literature Club is. Actually, it’s everything I wanted out of OFF, flavored with deconstructed anime tropes and fourth-wall-breaking creepiness. It’s a work of art. Do not get attached.

Well, I’ve got other stuff to do (like… sleeping…) so I’m going to leave this here for now. Just a small update really, and not very helpful, unless perhaps you’re dealing with NVIDIA driver issues yourself…?

Happy hacking!


*Irritating, that’s what. Don’t let me dissuade you if that’s what you’ve been using, though–I’m not the elitist type who’ll say you can’t use them because Command Line Is Always Better!!!!!!!–I just really hate having to learn how IDEs work, or juggling one for every language. Honestly, the reason my default is a really simple code editor (nano, Sublime, gedit, etc) + command line is that I’m too lazy to learn all the integrated systems. I’ve procrastinated even picking up Atom because it does more than, like, text highlighting. I use Sublime sometimes and I know it can do more, but I’ve never really used those features. This goes for the traditional nerd systems as well: I can’t stand vim or emacs. Maybe one day an IDE will melt my jaded nerd heart, or I’ll get a job where I need to use one (in which case its features might actually be useful), but until then… I just don’t need that kind of complication in my life.

Hacking for Designers #1: HTML

(Apologies to David Kadavy. I stole his title. :P)

A note: “Hacking” among programmers just means you’re building something new, usually with code (but not always!). It’s not the kind where you just type a bunch and then say “I’m in.” Programmers refer to those people as “crackers,” and they don’t think very much of them; partly because it doesn’t actually take that much intelligence to break into stuff, and partly because what kind of uncreative programmer can’t find something better to do? Honestly. The exception is of course pentesters, or “white hats,” whose job it is to try to break into systems to find out where they’re vulnerable and secure those vulnerabilities. Pentesters are quite highly regarded. Developing security and finding obscure weaknesses to shield is much more difficult than what most crackers do, and much more valuable.

So, you have the ability to make stuff look awesome through design. It’s important! We need people like you, because otherwise technology would be a royal pain in the butt to use. Design is the reason Apple succeeds even though they don’t always have the best tech, and lack of it is why it took Linux forever to get off the ground as a user’s OS despite being awesome at the code level.

But not being able to code at all can be a bit… limiting. There’s a learning curve, yes, but fortunately the basics aren’t anywhere near as intimidating as they look. You’re definitely smart enough to pick this up. The main barrier is how scary and weird code can look to a neophyte.

The good news is that hacking is a lot more similar to your own field than you think! People draw a dichotomy between software devs and designers like they’re total opposites. Even geographically, our classes are on the opposite side of campus next to the physics and chemistry departments (here at UNI). But this is super weird! We have zero to do with science. They call us computer scientists, but that’s just to make us look fancy. What we are is makers, and the way we learn and the way we work are much more similar to painters and writers and… designers!

So, I’m whipping up a quick guide for you last minute. It’s really not going to take you long to pick this stuff up. Coding doesn’t get difficult until you’re deeper into the field, and if you get that far, you’re probably addicted so it doesn’t matter 😉

This only covers web development. There are lots of other specialties in the field, but this is the one that’s most useful to you.

First Stop on the Nerd Train: HTML

You’re gonna need this. Pure HTML is butt-ugly; you need CSS to do any kind of layouts or colors. But you can’t learn CSS until you learn some basic HTML, because you need something to style. Trying to learn CSS first would be like trying to format a book without the actual text.

HTML is for content and structure, CSS is for layout and styling. Don’t fall into the trap of using tables for layout. People did that a lot in the 90s, and it makes your site ridiculously difficult to code and maintain. Also it’s likely to wreak havoc with responsive design these days. Fortunately, there are a few newer tools that fix this problem and let you use grid layouts without getting into the whole <table> mess. We’ll get there. HTML first. Just wanted to warn you off this pitfall in case you see it somewhere else.

First off, you’re gonna need a code editor. Right now, the hacker favorite for web dev is Brackets. It’s free, it’s open-source, and you can download it here.

Got that?

Okay, so here’s the basic skeleton for an HTML5 project. Copypaste at will; I’ll explain what all this does in a minute.

<!DOCTYPE html>
<html>
    <head>
        <title>Welcome to Website!</title>
        <meta charset="UTF-8">
        <link rel="stylesheet" type="text/css" href="thisisyourcssfile.css" />
    </head>
    <body>
    </body>
</html>

If you save this as an HTML file and run it in Brackets’ live preview (use the lightning bolt button on the top of the right sidebar), you’re going to see a blank white page. That’s normal! You should also see “Welcome to Website!” in the tab’s label in your browser. That’s because I set it as a placeholder title; you can put whatever you want in there.

About those indents–they’re not strictly necessary in HTML, but they make your code way easier to read! You could put everything on one line if you really wanted, but it would be a pain.

A standard indent is four spaces. However, Brackets does this neat little trick where it turns a tab keypress into four spaces, so you don’t have to wear your thumbs out!

I think the only thing I still haven’t explained is the <!DOCTYPE html> thing. That just tells the browser you’re using HTML5. Nothing weird!

Wait, How Does Any Of This Work?

Skip if you already know about how browsers and servers interact. If not, here’s a quick explanation.

A “live” site (one that can be accessed from anyone’s browser, like google.com) lives on a server. That’s a computer, somewhere, which can talk to other computers and knows how to hand out web pages when other computers ask for them.

When you type a URL into your browser (browser = Firefox, Chrome, etc), it uses your Internet connection to go ask that server for the files that make up the web site you want. Usually this means an HTML file, a CSS file (or possibly more than one), a handful of images, and probably some scripts (programs) too, especially if the web site is one you can post stuff on and interact with rather than just read and browse.

The URL you type in is pointing to a location and filename on the server. If you just type the domain name, like somethingsomething.com, then what the server will return is the index.html file (and anything linked to it, like stylesheets and images). You’d still get the same page if you typed in somethingsomething.com/index.html because it’s the same thing. So, as a web developer, you should always name your homepage index.html so the browser can find it.

All those files are basically just instructions for your browser, telling it how to display all the stuff on the web page and what should happen when you click on stuff. Sometimes you enter text into forms and whatnot, and your browser can send that back to the server, asking for whatever response to that data is appropriate.

For now though, we’ll start with static web pages: that is, pages that are just HTML, CSS, and images. If you need more interactivity, you’ll have to either learn a programming language, or find and work with someone who does. JavaScript and PHP are popular for this, but languages like Python and Ruby also offer good tools and frameworks for web programming and might be easier to learn. I encourage you to try learning to code! Picking up the basics is pretty easy and lets you do more, plus it looks fantastic on your resume.

Adding Stuff: How Elements Work

Most of your other code is going to go in between the <body> tags. That’s where you put all your content. <head> is a separate element. It isn’t the page header! That’s something different, and you’ll put it in the <body> tags with the rest of your content. <head> is only for metadata, which is stuff that you put in to tell browsers and search engines stuff about your site, like what character set to use, keywords to help searches find your site, and how to find your CSS file.

So, what can you put in the <body>?

Elements!

Here’s the basic structure of most elements: an opening tag, like <p>, then some content, like some text or images, then a closing tag, like </p>. Closing tags have that slash before the letters. It tells the browser that that’s the end of the element (the end of the paragraph, in this case). There are a few elements that only need one tag, like the charset declaration in the head, or image elements, but most need two!

You can have elements inside elements, and that works like this:

<p><a href=”heylookalink.com”>Here’s a link!</a></p>

You never do it like this:

<p><a href=”heylookalink.com”>Here’s a link!</p></a>

Always nest elements inside each other, don’t let them cross through each other like that!

Meet Some Elements

Here are a few elements to get you started. There are a lot of elements, and you can find out how all of them work from w3cschools.com, but here are the ones you probably want at first. They’re all linked to their respective W3C Schools pages, so just go there to find out how they’re used. Everything has examples and stuff!

Divs and other style-related dividers

<header> and other semantic elements

These elements are just boxes to put your stuff in so you can style them up later. Like, <header> is for the header in your design, that shows up at the top of the page. It’s an invisible box at first, but you can use CSS to paint the box different colors, or change its size, add borders, stuff like that. Go to the semantic elements link for the whole thing, there’s a bunch like this: <nav>, <article>, <section>, <aside>, <footer>, and so on.

<div>

These are like the semantic elements, but they’re custom! You can give them classes, for when you have a bunch of divs to style the same way, like <div class=”product”>, or you can give them IDs, for when you want there to be only one div in that style, like <div id=”left-sidebar”>. (We’ll talk more about classes and IDs when we get into CSS.) Divs used to be the only kind of “styling boxes” available, but HTML5 introduced the semantic elements above.

Text formatting elements

<h1> <h2> <h3> … <h6>

These are also referred to as header elements, but they’re not just boxes. You put text inside, and the browser recognizes that it’s a header and styles it accordingly. By default, h1 is huge and h6 is pretty small (but still bold, so it’s different than other text). Here’s what my blog’s styling turns them into:

h1

h2

h3

h4

h5
h6

<p>

Paragraph tag. Pretty straightforward!

<ol><ul><li>

1. 2. 3. “ordered” lists, bullet-point “unordered” lists, and the list items you put in them, respectively

<a>

Links (they need an href=”linkurl.com” to work tho, so your browser knows where it’s supposed to go)

Other stuff

<!– comments –>

This is an important tag, and one you’ll probably want to use a lot, especially at first. It’s a special one: it lets you make notes to yourself or other developers. Anything inside a comment tag is totally ignored by computers reading your code.

It’s an unusual looking tag, so here’s how it works.

<!-- blaaaaaah it doesn't matter what I put here! the browser doesn't care as long as it's between these tags! -->

You can use comments to warn future readers about some weird hack you put in your code, or you can use them as a to-do list, or you can use them to remind yourself how something works. Or you can put dorky ASCII art or silly jokes in it, so if someone comes along and decides to read your code, it’s like an Easter egg for nerds. There’s a proud tradition of leaving silly comments in source code.

Occasionally you’ll hear developers brag that no one should need comments because code should be written so it’s “self-documenting”; in other words, one should master the art of precise and meaningful names for variables, classes, etc. This is bullshit: sometimes you just need comments, and usually the developer making said claim is NOT one whose code is “self-documenting.” It’s just an excuse for them to be lazy and not write comments. You’ll find that programmers are very lazy–especially the ones who are either very bad at programming, or very very good.

Either way, just go ahead and write your comments.

<hr>

This makes a line across the page. You can change what the line looks like using CSS, so it’s a more versatile design element than you might expect.

<meta>

Meta tags are how you tell other machines things about your code. They always go in between the <head> tags, not the <body>. You can tell your browser what character set to use (this gets important when your site has international visitors; it keeps those weird character boxes from showing up instead of your text). You can tell search engines who the author of the page is, and give them information about what’s on the page by listing keywords. You can also tell your browser to notice how wide the device is, and change the page’s formatting accordingly–this will get more important as you get into responsive design.

None of the stuff in <meta> will actually show up on your page, but machines will be able to read it. The only way your site visitors will see any of it is if they use their browser’s developer tools to manually look through your source code. Also, <meta> are single-tag elements. You’ll never need to type </meta>.

If this element sounds like a weird grab bag of semi-related stuff, it kind of is. W3C can elaborate on the stuff you can do with <meta>. At some point, you’ll need to know about what <meta> can do, but for now it’s okay to skip it and come back later.

<!DOCTYPE html>

That tag is called a doctype declaration. Browsers will generally still render stuff just fine without it as long as HTML5 is current, but as the web page gets older and the standards change, it might start to get buggy unless the browser has a doctype declaration to tell it which standards you’re using in your code. The way we code for the web changes over the years.

This tag has to be the very first line of your HTML file. Don’t try to put it anywhere else.


I’m still working on this post, as it’s going to take a bit to cover everything you’ll need to get started, but I’m confident I can get it down to a manageable and relatively non-intimidating post. Yes, I’m publishing it before it’s 100% finished. A blog post isn’t a book, and nothing that’s going to be here should make the post misleading due to its initial omission. In other words, all the chunks of info on here should be fairly self-contained.

Happy hacking!

Here are the new toys I’m playing with right now

So, you might remember that I’m on a web design kick right now. Right now I’ve picked up two or three new things (edit after writing the rest of the post: hahahahahaha) and I’m learning them all at once, because that’s just kind of how I work. Though, this is more sensible than that time in high school I took my fourth year of French and my first year of German at the same time and kept mixing the two up until I forgot how to speak English because my thoughts were running the mutant child of the foreign languages I was learning, haha.

jQuery: About time I got around to some kind of JS framework. I don’t actually know much JavaScript yet but you don’t need to for the course, and anyway it’s not like picking up a new code language is that much of a stretch after your first one or two. Here’s the free video course I’ve been watching. You don’t need to know anything more than basic HTML/CSS as a prerequisite to that course, and the guy is friendly and not condescending, so go for it. It’s really light and easy, you can watch it while eating lunch or whatever.

CSS Grid: I’m. Fangirling. Over this code design. It’s so sensible. CSS has featured a distinct and glaring lack of any reasonable layout system for years. I am definitely not the only one who’s spent two hours trying to get floats to cooperate. Remember when people tried to use tables as layout structures? Ever try to develop on top of one of those? Hahahahahahaha. It was not fun.

Grid is basically the layout system from Kivy. You do most of your layout in CSS; the actual order of the elements you list in your HTML document can be completely overridden if you like (but there are some ways that Grid makes use of them if you let it). Every programmer who likes to prototype and redesign and tweak major design components in code, rather than designing in Mockplus or whatever first, is going to absolutely love Grid.

It’s supported almost everywhere. The holdout is of course Internet Exploder Microsoft Edge, but the dev team for that has announced they’re working on it. Oh, and apparently mobile Opera doesn’t like Grid either, but… I didn’t even know you could download Opera on a phone??? Who’s using that?

Anyway once it’s supported everywhere, the standards will solidify a bit and we can use it for important stuff. Betcha all the techie companies are going to immediately be after devs who can use it. There are probably some good jobs on the not so distant horizon, folks.

But even if not… the API is so beautiful it makes me want to cry. You should read it just for the soul soothing qualities of a sensible design.

Mockplus: I’m taking a course that’s about designing for web. An actual college course. Thing is, my classmates are all designers, not devs… next class we’re going over the basics of HTML. If we didn’t have a strict attendance policy I’d be tempted to skip. I’d probably still go though because I like swapping skills with people. They can actually use Adobe products without the constant hiss-and-spit dynamics I’ve always enjoyed. But I digress.

Prof asked us to do some wireframes the other week, and I pulled up the free version of Mockplus and figured out how to use the basic stuff. I didn’t need the actual interactive design features it has, just the drag and drop bits, so this barely makes the “learning something” list. Feels like putting Microsoft Office on your resume. Prof freaked out over how detailed everything was, thinking it was going to take me forever… would have taken too long to explain that programmers are waaaaay too lazy to draw out vector graphics crap for the same basic design elements over and over, so it’s drag and drop software. She really didn’t want to hear about my weird nerd program, haha. It looks way more technical than it is though. Give it a shot, it’s a nice way to play with more complicated designs without fiddling around in the code, wasting loads of paper, or trying to get an Adobe product to behave.

Design For Hackers: I’m a couple chapters into this and so far it’s gone over kind of a lot of stuff I knew, but it’s still interesting. If you’re not already a weird designer/programmer hybrid like I am, it’d be a valuable book to have as a visual design guide. If you think visual design isn’t important, I’ll ask you: why did Windows take off and not Linux? Why is Linux becoming more popular now? Good visual design makes a better and friendlier user experience. Don’t sneer at designers. Their website designs may require someone with coding skills in order to exist meaningfully, but great code with an awful interface isn’t much better because no one wants to use it.

A Practical Guide To Designing For The Web: This is a free ebook and you can get it here. The bottom of that page hosts the ebook download links, or you can just read it in your browser. I imported it into the Kindle app on my Android phone for easier reading. I’m only 4% into it but I’d say that at the very least it’s worth flipping around in.

The Tangled Web: I was looking for a book that would discuss how to develop secure web sites, and this came up over and over and over again. Then I saw it was a No Starch book and I instantly wanted it. No Starch is up there with O’Reilly, for me. It’s slow reading and quite technical, but it’s interesting. It… hasn’t actually gone over much code yet, a lot of historical discussion of how the back end of the Internet developed and the inherent security issues caused by the old browser wars.

It was hard enough to find a book on “web security” that wasn’t about breaking into stuff (sigh). I’m hoping No Starch won’t let me down here and there’ll be some practical advice on how to deal with security issues later on in the book.

Yeah, I know, I can’t stick to just one book at a time. I’d probably be farther into each of these if I were. And my old Clojure book is still calling to me, reminding me that it’s been well over a year and I still haven’t gotten into it… so tempting. But. I’ll curb my spacey, dabbler tendencies for now and wait until I’m more solid on my web stuff.

Also, yes, it’s 4AM as I’m writing this. My sleep pattern is kind of jacked up right now–I clocked out at 8PM yesterday and woke up at midnight. Then I read bits of DfH and PGtDFtW, wandered over to the computer and watched some jQuery videos, thought about compiling a list of resources for my designer classmates (a handful of my regular hacker readers might not have gotten into web stuff yet anyway, so it’d likely be useful for you folks too), wandered over here, answered a question in my typical long winded fashion, and wound up writing this bizarre list. To be honest this is the first time I realized I was reading/learning/using so many different things at once… whoops. When did that happen? Wait, has it been a month since I started really digging into this? When did that happen? (Spoiler alert: a month ago.)

Okay, uh, I’m getting tired and silly again so I should probably go back to bed. I’ll leave you with yet another list-of-resources post (are you guys getting tired of these? I think I do these a lot?) and say:

Happy hacking!

(And good night.)

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 on 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? Those buttons on the side of the menu are customizable, if I remember right; you can put your favorite stuff in there.

Ugh, 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 are still crappy. Anyway.)

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

Happy hacking!

Rebekah

My war with NVIDIA, and what I’m working on now

So, I have a new graphics card. But.

I made the perhaps questionable decision of a) getting a NVIDIA card, and b) getting a fairly new one. On a Linux system. My research had turned up the idea that this wouldn’t matter. Popular opinion, what are you doing letting me down like this?

Anyway. Six hours of trying to install proprietary drivers, disabling nouveau, getting black screens on startup, fiddling with the BIOS, and reinstalling the operating system, and going through exactly the same process later…

I remembered that my school provides Windows 10 licenses for free and I was planning to dual boot this system anyway because I need the Adobe suite for my graphic design class. (Which is expensive, but I’m sort of loving it. Adobe and I have a love-hate relationship and always have, but I’m learning all its weird quirks and overblown UIs and giving it a little more patience. It turns out I’m a really good graphic designer. I think I could get a job with this. Maybe it’s the fact that my teacher is really good, but I seem to pick this stuff up really quickly. Vector graphics are a lot of fun.)

[note from years-future Rebekah, editing old posts: ah, the Dunning-Kruger effect in action. By the way, I did eventually get my Linux partition sorted out.]

So. Windows is working for now. And apart from my nerd annoyance at its lack of a good command line, I’m ok with using it until I have the time to fight NVIDIA again and get Linux installed on the other half of my terabyte drive.

I’m actually working on some web design stuff right now. I’m running out of college money (and frankly kind of getting impatient with the educational system again… long time readers will know that school and I have never exactly agreed with each other). So in true LGL fashion, I went online to catch up on a bunch of web design stuff that’s developed since I last really studied it on my own. And hoo boy, there’s a lot. Responsive design is a big thing and that’s what I’m working on learning.

The web design is my personal portfolio site. My educational and work history is a little weird, so I figure if I want a job I should skip through the paper credentials and showcase the much more convincing argument that I can actually build and make stuff. It’s hard to hire programmers precisely because paper credentials aren’t that convincing. So I’m pulling together some of my better (read: finished) designs and code and artwork and showcasing ’em.

I’m building the site from the ground up. Of course I could use Drupal or WordPress, but anyone can use the basics of those systems. I want to show off.

I’m using the Brackets code editor, another anomaly for me. I started building the site in my usual bare-bones text editor… but I kept hearing about Brackets. It’s basically an IDE but simpler. It’s designed specifically for web development and it has a feature that shows you a live preview of your site as you code it. This makes it about 10x easier to design something when you’re still tinkering with it. It’s made by Adobe, but it looks a lot like Atom. It doesn’t have a whole load of crusty UI junk.

So, this is the post of “how the heck did I get here?”. Me, using Windows, using an IDE made by Adobe… well. Not usual.

On the other hand! Windows doesn’t have a problem with NVIDIA’s graphics card, so I finally got to play Slime Rancher. Which is a fun game, even if it gave me sim sickness until I messed with the view settings and finally got used to it. (Sort of.)

I’ll fight the driver issue later, when I have the time and energy to do so. I still really want Debian or at least Mint on this system. It’s just so much easier to program when you’ve got bash: installing tools and languages, using git, keeping projects organized… I’m sure I could program on Windows if I wanted to, but it’s just not the same. Web design doesn’t count, that’s basically all through the browser so it doesn’t matter.

I want to get back to the thing I’m working on, so I’ll keep this short. What are you guys busy making right now? I know you’re smarty-pantses, so have a brag in the comments below. I’d love to hear about it.

Happy hacking!

Rebekah

Box Project #2: Guess what I’m using to write this post!

Hint: it’s not something I got at Best Buy (except for the power supply, monitor, and keyboard anyway), and it’s definitely running Debian.

So, my build worked first time! I put the fire extinguisher away after it passed the smoke test. (Safety precaution. I didn’t actually expect it to burst into flames, but, well, you never know.)

The only thing that didn’t immediately work was one of the case fans, which I saw in the BIOS wasn’t on. I opened up the case again, rechecked the connection, and I don’t know if it’s on right now (I’ll probably check at some point) but nothing seems to be overheating so I call that a result. It’s surprisingly quiet, too! You have to really listen to hear either the case fans or the stock CPU cooler. I guess they’re better than they used to be. Of course using an Antec case does help. It was really nice to work with, especially compared to Take Apart A Computer Day (which I wrote about earlier). Though, I don’t know if the computers sold whole to schools are actually meant to be taken apart. Probably you’re just supposed to buy 50 new computers. -_- Although I think assembly is just easier than disassembly, and for good reason, or computers would just fall apart in shipping.

[note from years-future Rebekah, editing old posts: this Antec really is the best case ever. I’ve opened it several times over the years with a can of duster in hand, and it’s never as filthy as I expect it to be, even though my very fuzzy cat likes to sleep right next to it.]

I was pleasantly surprised by the number of Steam games in my library that are actually compatible with Debian. I’ll be asking for a graphics card for Christmas though–integrated graphics really can’t handle Don’t Starve and some of the other stuff in my library. It can, however, handle Cave Story+ perfectly, a game I haven’t played in years. (Classic RPGs tend not to demand much of graphics cards.) I missed Cave Story. Years ago I beat the Hell levels (several times, actually) because I was just That Determined to save Curly Brace. And then I did it again in Curly Mode, to find all the secrets. If you haven’t played this game, you need to. There’s a free version available for download online and there’s a Steam version (which may or may not still support Mac, I’m not sure.)

It’s okay that my box can’t handle the other games immediately, though. After all, my MacBook still works, although compared with the sleekness of the new rig it feels outdated and sounds asthmatic. I haven’t tried working on digital art yet with it, but I’m working on getting that set up.

I picked up and put down several assembly guides over the course of the project, but this one is the best I found: https://choosemypc.net/assemblyguide/

Other tips:

  • Install the motherboard port shield the right way up before getting confused about why the mobo isn’t fitting. I spent two minutes trying to figure out what was wrong and another five feeling really dumb.
  • I cut some cardboard from the box my case came in to put down on my workspace so my coffee table wouldn’t get scratched, and another piece to kneel on because a) it’s comfortable to have some padding and b) my apartment is all carpet and I was hoping it’d reduce the static.
  • I used an ice cube tray to separate screws. There are lots of screws and you don’t need them all. My extras are in a pickle jar along with the tube of thermal compound, the extra hard drive brackets, my green sticks, the protector cover that comes on the motherboard over the processor contacts, etc etc.
  • There aren’t instructions on which screws are used for what. You have to guess. My motherboard used two types of screws in different holes, too. Just be careful with your trial and error.
  • Sometimes Google is better at finding stuff in your motherboard manual than you are. Manuals are online, and it took me forever to find where you’re supposed to plug in the power button and reset and stuff–it’s easily overlooked in the manual but search is good at finding it.
  • Don’t be afraid to slide a side panel back on (to keep your cat out) and get some sleep. Even letting it sit for a few days isn’t going to hurt it if you can make sure it won’t be disturbed.
  • It helps to have a frozen dinner ready in your freezer that evening. Either it’ll take you a while because it’s your first time, and you’ll be tired and need a break and food and not want to cook, or you’ll have a new computer and you’ll want to set it up right away.
  • Fiddle with the buttons on your monitor until you can get it to auto-adjust or otherwise cooperate with your OS.
  • A wired connection, at least at first, doesn’t hurt. I tried one of those wireless USB adapter sticks and I don’t think it’s going to help. Debian doesn’t know what it is. I figured that was a nonfree driver issue, but it has bizarre install instructions for Linux and the manufacturers maybe don’t know the difference between Fedora and Debian systems? I don’t know what’s up with that, and I may look into it later, but for now I just bought a long CAT6 cable to run around the edge of the room and be done with it.

That’s that for now. I’m really pleased with this setup, and of course I have something to brag about when I go back to classes 🙂

Happy hacking!

Rebekah

Box Project #1

When did computers turn into a machine with so few individual components? Feels like I’m buying chunks of the machine already partway put together.

Here’s my parts list. Only seven items.

Plenty of room for upgrades in this, I know. That’s why the case isn’t one of those ridiculously tiny things the size of a sweater box. Those things… kind of weird me out, tbh. To me a computer is a big fifty-pound thing encased in sheet metal. But I digress.

Reasoning behind the parts list:

  • Integrated graphics is fine to start with. I’m not a rabid gamer. I could go out and buy someone’s 18-month-old external graphics card if I decided it wasn’t good enough, though. The case has room.
  • There’s no Windows license included. This should be obvious. It’s going to run Debian, of course. (I’ve had Elementary OS on a partition on my laptop for months… I’m kinda neutral on it. Shrug.) Windows might get a VM or a corner of the hard drive if my school has it for free, but otherwise…
  • Processor is quad-core, decent speed but not the fastest available. I like my VMs. The fans it comes with should be fine since I don’t feel the need to overclock it.
  • Antec case because I’m not a masochist–I want something nice to work in. It’s a sleek, sort of minimalist black, no weird lights or anything–and it’s $48 from Amazon.
  • A solid Antec power supply with the 80+ eco-whatever certification that means it’s efficient. I’ve had enough issues with laptop power supplies that I’m just super done with cheapness in this component.
  • 8GB RAM is solid enough for a Linux box, although there’s obviously room for upgrades. If I were building this to run mainly Windows I’d want 16GB.
  • Terabyte hard drive. I considered buying an SSD instead, or even a tiny one for just the operating system, but for now I’m putting that under the header of potential upgrades. They’re getting cheaper all the time, so it may be smart to wait, and this is good enough for me for now.
  • Nothing special about the CD/DVD drive. It reads, it writes, it’s $20.
  • Motherboards are kind of confusing to me. I don’t know what I’m looking for and they’re all labelled “gaming.” This one looks good though. ASUS is a good brand, it has enough RAM bays and outputs, and I’m pretty sure I looked up what the integrated graphics card was like when I picked it out months ago. My older brother (who built loads and loads of computers in the late nineties/early naughties and still takes stuff apart sometimes) thinks it looks good too so I’m running with it.

That’s my build–I’m ordering it now. It comes to about $600, which is a reasonable price for a computer where ALL the components are good quality, rather than just the ones that get showcased on the label (you ever hear a big-box computer store boast that their case and power supply are good quality? or that their computers are this upgradeable?). In other words, a “business” computer. That’s code for “it isn’t totally crap.”

Also, I don’t have to pay the Windows tax. ò_ó

I’ll let you all know when I get this done and can report on the experience and the performance of the result, so you can use or tweak my build example for your own purposes. I’ve never built a computer before but I’ve watched them being built and fixed, and lots of people are saying it’s gotten easier over the years. Anyway, I’m pretty jazzed about my new tech and this should be really neat!

Happy hacking!

Rebekah

 

Edit: Lucky I wasn’t being too literal when I said I was off to order it now. Martin in the comments is pointing out that I’m paying for way too much motherboard power and way too much power supply wattage. (I probably thought I was being careful when I picked these out and overestimated it.) I was not aware that there were calculators available for power supply needs–I didn’t see it in the PC building manual I bought or the online articles I read, and this seems a little on the bizarre side. If this were more my thing, I’d probably write my own, but I doubt I’ll have call to build more computers any time soon so I probably won’t be developing this skill much. Unless I go work for a repair shop or something, cleaning viruses and bad virus software out of PCs, and end up in that department. (Something I considered doing earlier this year.)

Anyway. I punched in the specs into the Cooler Master calculator and…

That is decidedly not a 650W kind of need. I’m going to try a couple of these calculators just to be sure but… uh. I think a cheaper power supply might be in order.

Edit #2: Newegg’s calculator says 400W for this build. I think a 500W with good efficiency will do it then…? Again, lots of potential upgrades. I don’t want to repurchase this component.

Edit #3: New build here. I added some trimmings and necessities so I don’t forget them. Also added a Mac keyboard, which I like because they’re aluminum, you can get keyboard condoms for them, they feel good to type on, and I don’t have to fight different muscle memory impulses for my laptop and desktop re: command vs. control. Worth $50 as long as it works correctly. My keyboard cover on my MacBook has saved my keys from all kinds of junk gumming them up.

Edit #4, from the far future (2022): I’m using a mechanical keyboard these days. It’s satisfying to be able to pry off all the keys individually and really clean the thing out, but you should buy a more expensive one than mine ($40?) because sometimes it just Decides that a key is going to not work half the time even though it’s clean underneath. There’s probably a fix for this, I haven’t researched it yet.

Personal: On learning to be healthy again.

It’s been a while, hackers.

Depression is a sneaky little bastard. At some point during the last two years–I’m not sure when–my antidepressant stopped working. Yes, that can happen. This spring, I had to sacrifice my classes to work on treating my mental health and finding a medication that works. Again.

Of course, I didn’t realize immediately that it had stopped working. After all, I’d been on the same one for three years. I just thought I needed a higher dose of what I was already on, because the winter weather was getting to me and seasonal affective disorder is like that grumpy aunt who always visits around Christmas and never has anything good to say about you.

I eventually had an epiphany: there wasn’t actually anything very stressful about the situation I was in, and there wasn’t anything wrong with me personally. I realized that the medication had actually stopped working somewhere along the line and I’d started running to keep up with what I assumed were more stressful external circumstances, and then berating myself for being unable to keep up with them. To be fair, I had been dealing with some nasty drama with the community college, then I was looking for a transfer university, then I was moving, then I was adjusting to having moved away from my family. It wasn’t an unreasonable assumption.

But the depression hung around, because somewhere in this mess I stopped getting the chemicals that I (and every human being on the planet, whether they buy store-bought like I do or their brain is capable of producing its own) rely on to have a functional brain.

It is not normal to get anxiety attacks when approaching assignments or going to class. It is not normal to lack the mental focus required to study. It is not normal to lack the physical energy required to leave your house more than once a week. It is not normal to struggle to eat a decent meal every day because you’re not at all hungry and forgot to eat. It is not normal to think, “I need to do this thing, I want to do this thing, I have the energy and ability to do this thing” and lack the executive function to actually get up and do it.

It is not normal for someone who normally has a programmer’s memory–you know, the kind of person who doesn’t use grocery lists–to forget most of what they did that day. Did I do this today or yesterday or the day before–or not at all? (Maybe I just thought really hard about it.) Have I taken my medication today? Have I eaten? When did I shower? What day of the week is it?

That’s not normal. See a doctor.

When I finally started trying new meds, I thought I knew the drill: you try one for 6-8 weeks, and it may work or it may not.

I was mistaken in a few different ways; the good news was that as long as I was trying new SSRIs, the trial period could be cut down to 4 weeks because when you go from one SSRI to another, the new one starts working faster. The bad news is that “working” and “not working” are not the only options. There’s also “backfiring.”

That was what happened with the first new medication I tried. I can’t remember if I actually got the flu during that month (depression memory is very foggy), but for several weeks I felt like I had it all the same. I barely had the energy–the physical energy–to stand, let alone go to class.

Fortunately, the next one actually worked. I was pleasantly surprised; I had been expecting to go through four or five duds. Not only did it work, I started feeling better in about a week. That’s what I’m taking now.

I’ve taken a retroactive medical withdrawal on all my classes (I’ll skip over the running around and bureaucracy and piles of paperwork I had to get through to get that done) and now I have actual energy and am making stuff and doing things again.

I had completely forgotten what being creative and energetic and functional was like. For a while, it was so different that I sort of didn’t trust my brain about it. I was expecting some kind of crash.

I’d been down for so long I’d forgotten what normal was, and coming back to normal confused me. Can I actually run on 8 hours of sleep instead of 12? Since when do I have the energy to do things all day instead of having to choose a maximum of three tasks to cross off my list? I was worried I was hypomanic.

 

It’s funny, because I do have a therapist through the school. I don’t really need her because I don’t have the kind of shame and unhealthy thought processes that plague a lot of people, mentally ill or not–and this is what a therapist works with patients on changing–and my depression happens to be purely chemical and genetic. (Though her services are free to me, and she was helpful in getting the mountain of paperwork to pass the office.) She’s off for the summer and I actually needed her more to help cope with being healthy than I needed her help to cope with being depressed.

You know, for a while I wondered if someone like me should not be trying to found a company. I’ve never really discussed that in previous blog posts, I know a few of you were probably thinking it, and I know some people on the Internet are like “I would never hire someone with mental illness in a startup.” But the thing about that is… founders end up with mental illness all the time. Depression, anxiety, bipolar, OCD, eating disorders… the stress of starting a company plays a big role in either developing or bringing to the surface all kinds of mental illnesses. You may not hear about it, but if you read enough books (not articles, books) in the industry, then you’ll run into this. (In particular I want to recommend this one. Not an affiliate link.) The difference is that I know what mine is, I’m aware of it, I know how to treat it, I even know what it looks like when treatment fails. This is not a defect. This is an edge.

Finally.

I’m doing stuff again, and I have several projects I’m working on now. I attended TechWeek in Chicago (I’ll be writing about it but spoiler alert: not worth it). I’ve also started learning React. And right now, I’m pretty stoked about the fact that I now have the funds to build my desktop computer. Yeah, you heard that right. I’m gonna tag the posts “box project”. Keep an eye out for it.

Let’s go make stuff.

——

Update, Nov 2017: my new meds still work way better. Keep at it, hackers. Don’t give up.