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.

Take Apart A Computer: Follow-Up Post

(If you’re here because you want to know what to do with your shiny new Linux DVD, you can skip about the first third of this.)

Today I attended Take Apart A Computer Day, hosted by the Women In Computing club here at my university. This was a test run for a potentially larger event later on.

I worked together with two other girls (if you’re reading and want your names here, let me know–but I don’t generally mention names on this blog unless asked, for people’s privacy) on a huge old box. We have no clue if it worked beforehand (the consensus after two professors and all three of us took a crack at testing it was no), but it definitely isn’t working now, so I guess that’s a success. After all, the event isn’t called “Put a Computer Back Together in Full Working Order Day,” and we did get it apart. Eventually.

So, we learned a couple things from the beta run for next time:

  1. Test all the machines beforehand–after moving them.
  2. The test monitors that the computers also need to be tested on a known working box, so we know our testers work. Nothing like screwy monitor settings to make you crazy wondering what’s up with the computer.
  3. Two people is probably a good number for working on a computer together… three is a bit much. Having a partner makes things easier, but six hands is pretty awkward even if the people are friendly.
  4. WHERE IS THE RIGHT SCREWDRIVER. WHAT EVEN IS THE RIGHT SCREWDRIVER. NONE OF THESE SCREWDRIVERS WORK. HOW.
  5. Juice boxes! Yes, this is kind of a tradition with me now: bring juice into a place where it would be very bad to spill juice. But they were still all consumed! On the other hand, we need more people willing to take home pizza that’s been sitting out for a few hours…
  6. Having extra Linux install DVDs to hand out is a good thing! Not necessary, but good–people are curious!

Anyway, I’m sending this post around the WIC mailing list (er… Google group? It’s different from the CedarLUG list, which is legitimately an old-fashioned mailing list). About five of you folks from this event now have Linux test/install DVDs. If I remember right, I handed out a Xubuntu, a Mint, two versions of Debian, and… something else? Maybe that was it.

I’m pretty sure I’ve used each of them at one point, and they should all work even if they’re not all the newest and greatest; I think they’re all the long-term-stable releases so they’ll be fine. If they don’t work for whatever reason, don’t sweat it; email me or whatever and I’ll make more, or if you have blank DVDs lying around (or are willing to buy a pack for $5 at an office supply store), you can make one.

 

Anyway, when I give people techie stuff, I like to make sure they can easily figure out how to use it. (Doesn’t always happen, but I try to.)

So! If you’re curious about Linux and maybe just got a DVD from me, here’s a guide to all the guides I’ve written on the subject:

If you didn’t get a DVD or yours turned out to be a non-functional dud, here’s how to make one.

If you don’t have an optical drive in your computer, or want a more permanent plaything than the DVD, here’s how to make a virtual machine instead.

If you’re confused about the Linux ecosystem, here’s how I learned what I know.

If you’re just confused, period, here’s the FAQ I wrote for another event which involved lots of Linux newbies.

If you just want to run Linux off your DVD to play with it a little, it’s simple. Stick it in the optical drive of your computer, and restart the computer. While it boots, tap F12 (it’s probably F12, but keep an eye out for what key you’re supposed to press for menu options during your computer’s boot sequence) and select “Boot from CD/DVD” in the menu.

The difference between doing that and making a virtual machine is that a virtual machine will save any files you create from session to session (unless you do magic to configure it otherwise). An install DVD won’t save anything, so you get a fresh, clean system every time you start it up.

If that’s not working for you, email me in the list or comment on this post and I’ll try to help. If that still doesn’t work for you, bring the offending computer to the next WIC meeting if it’s portable (let me know what you’re doing so I make sure to come), or invite me over to your place if it’s not/if you can’t attend the meeting. I will help you get a Linux running if that’s something you want.

I’ve installed Linux on some weird old machines and gotten at least workable solutions out of them. Sometimes a setting needs to be tweaked or Google needs to be scoured for information. Sometimes a certain distro just doesn’t like your hardware, and you need to try a different one or download extra driver files or plug your computer into a wired Internet connection or something weird. Such is technology.

That’s usually not the case though. Most installs these days go really smoothly, especially with Mint or Xubuntu.

Speaking of installs, CedarLUG–UNI’s Linux Users Group–is holding a Backup Day pretty soon, and an Install Day sometime after that. If you want in on that, here’s the web site (I coded that! The penguin at the top is a bit of a giveaway…). Subscribing to that mailing list will get you updates on those events, and the occasional computer puzzle.

Happy Linux-ing!

Rebekah

How to make a Linux CD

A CD or DVD with Linux on it is a useful thing to have! There are quite a few things you can do with it:

  • You can try Linux out without installing it. Just putting the CD in the optical drive and running Linux from there won’t touch your main operating system or files. Using it like this can actually help you fix a Windows computer–you can still access the hard drive and back up all the files that are on it from Linux even if Windows is acting weird. (You can also use it to kind of crack into your machine if you’ve been locked out for some reason, but don’t try it on a network because the sysadmin will notice and they won’t be pleased. You didn’t hear this from me.)
  • You can install Linux alongside or instead of your main OS–be careful about your files if you’re doing a wipe-and-install, of course, and be careful about partitioning your drive too. Make sure you have a backup of at least everything important if you do it this way!
  • You can also install Linux on a virtual machine, although using the .iso file you download from the Internet and burn to the CD works just as well for this.

So how do you make one? It’s pretty easy:

Get yourself a blank CD or DVD.

Some distros won’t fit on a CD and you’ll have to use a DVD. When in doubt, use a DVD.

Pick a Linux distribution (or “distro”).

There are lots of different “flavors” of Linux. They might look a little different, or be designed for special systems or specific groups of users.

If you’re new to all this, I suggest Mint or Xubuntu. They look a lot like Windows, so they’ll seem familiar, but they’re way better! And they’re a breeze to install. Normal Ubuntu I wouldn’t recommend as a first distro, actually; the user interface it comes with is kind of clunky. The only difference Xubuntu has is that it looks simpler and that makes it a little easier to use.

If you’re curious or you’ve tried this before, try searching around for a distro that’s particularly suited to you. I’m quite fond of Debian, but I’ve been playing with Elementary, which looks more like Mac OS X than the normal Windowsy-looking interfaces.

Mint and Xubuntu are great general-purpose distros. Xubuntu is probably the better one on older computers–I’ve made a ten-year-old box on two gigs of RAM run like a decent computer by installing Xubuntu. If your computer is THAT old, you’ll want 32-bit; otherwise, use 64-bit.

[Note from 2022 Rebekah: unfortunately, that ancient computer did continue to run for several years after this post was written. I think my older brother finally managed to convince my dad to swap it for a slightly less ancient computer. I really do mean slightly; it’s hard to pin a year on any computer coming from my older brother, for Ship of Theseus reasons, but the “new” one is still kind of a dinosaur.]

A word about some terms you’ll see. Unless you’re developing or testing for the distro as a project–in other words, if you’re a normal user–you won’t want to use the development versions. Anything that says “nightly release” or whatever, stay away from using those as a main operating system because it’s still in testing.

“LTS” means “long term stable.” That is a GOOD thing to download. It may not be the very most recent version, but it’s a well-tested one that’s going to be supported for a reasonably long time. Make sure to download all the updates when you get it running, though.

You can also just get the most recent stable release. Those or LTS releases will be fine.

Download the .iso file

Either from the Internet directly or as a torrent. Googling the name of your distro should make it pop up. Where possible, always use a download link suggested on the project web site. There are probably multiple “mirrors” to download from; try to choose one that is on the same continent as you.

Any computer with 4 gigs of RAM or more should be using 64-bit operating systems. Unless you’re using a Raspberry Pi, or a virtual machine with less than 4GB of RAM allotted, or some other niche situation (in which case you probably know you have <4GB RAM), default to using 64-bit.

If this is your first time, I’ll make it easy on you. Here’s the download page for the latest Mint (64-bit, Cinnamon desktop), and here’s the download page for Xubuntu. [Links updated in 2022.] Both are easy starter distros, so honestly, just pick the one you think is prettier. (Your rival will, of course, choose the one that has type advantage over yours, but it’s okay because you can just choose the damage dealing move over and over until their distro faints. Wait…)

A torrent is a more reliable way of getting a distro if you have a torrent client set up. They’ll keep going even if they’re interrupted, and they’re less expensive for the maintainers. However, the clients can be tricky to set up. There’s nothing wrong or sketchy about torrenting Linux distros–you can use torrent clients to get hold of sketchy Internet stuff, but that’s not what we’re doing here, this is just another way to get your .iso file. You’re not only allowed but encouraged to share these files!

Burn the .iso file to the CD

You probably know how to do this on your computer. If not, Google it. It’s pretty simple.

Label the CD, and maybe put it in a paper sleeve

Lots of people forget to do this, and it gets really confusing! Make sure you mark your CD with the distro name (e.g. Linux Mint), the version number (e.g. 18), and whether it’s 32- or 64-bit (probably 64).

Optional but fun: Burn more CDs for your friends

Self-explanatory.

“Did you get it to do that thing you were trying?”

“I figured out how to install programs!”

“I found a tutorial about the command line!”

“My resolution is acting funny, anyone have ideas about that?”

This is why Linux User Groups exist. Get enough nerds in one room playing with a shiny toy and something fun is going to happen.

Happy hacking!

An update, a project, a new book

I apologize for this post coming a week later than I’d planned! To be honest, life happened and I forgot I’d left you hanging until I got an email about a reader’s comment on it. Sorry about that!

No more suspense, then. Saturday’s event was a complete success! We didn’t have all seventy kids, though. We had thirty-five or so again, and since we’d scheduled for seventy, they were a lot more spaced-out. It was a lot more laid-back than the day before (when we’d scheduled to pack the house), and let us work with smaller classes. Which, as any teacher will tell you, is an easier crowd to handle.

This time, we also handed out live Linux CDs with mass-printed disclaimers on them about not installing on the host computer, etc etc, disclaimer of warranty/responsibility/legal cya stuff. We also passed out slips with the URLs of my FAQ and the GitHub where the game I used lives. (I’ve been meaning to write some decent non-techie documentation for how to use that thing…)

I had originally volunteered to be part of the Hour of Code portion of the event on Saturday, rather than the Linux part, but stuff got a little mixed up. The teacher who was going to take the Linux event hadn’t looked at the Hour of Code activities for a year or two and hadn’t realized that it had changed; it now looks like Scratch or Alice, not a text-based activity like she’d thought. She’d planned on letting the kids play around with Scratch (because it’s a good intro to code, which is why HoC uses a similar system) on their Linux live CDs.

When she emailed me with her plans a day or so before her event, I didn’t connect the dots immediately–it took me a few hours before I emailed back to warn her that she had a duplicate activity on her hands, and by then it was rather late. She showed up on Saturday as we were starting to prep the Linux room (I was kind of early and was helping another teacher who had been in the building for a while). I warned her again about her duplicate and she pulled up a computer to look at the HoC activity. But before she could really panic, I reminded her again that I had a different setup that I’d already used, and which had worked well. So I swapped places with another volunteer who was going to help in the Linux room (he went to HoC instead) and kind of took over working my system.

And that’s how I ended up mostly in charge of that event again. Combined with the Raspberry Pi she’d brought, I feel it’s safe to say it was a really good experience for everyone involved.

Mind, this teacher is totally competent and a great teacher–she’s no newbie, she just happened to be relying on old info and I just happened to have something good up my sleeve. I got to squeeze more use out of my script game, and I earned major brownie points with someone I respect. 😉

As the participants fiddled with the game, I stood up and gave a little background info about Linux and the open-source world. I’m actually a decent speaker, believe it or not, when I’m speaking on something I know well. I’m still a much better writer than speaker, but I’m reasonably good at giving impromptu lectures if I know the subject matter. I read audiences fairly well, and though I have plenty of other fears and self-doubts, public speaking isn’t really one of them. (What I’m actually awful at is video. I can’t read a camera. It’s not a good audience.)

The people liked my game so much. A good number of them thought it was funny–one of the older girls got to the part about forfeiting your firstborn son to Microsoft (it’s deliberately campy) and couldn’t stop laughing until I gave her a juice box. Her friend, in turn, discovered the potential to create text-based adventure fanfic. (What have I done??) It was only too difficult for one person, a young girl about eight years old who put up a valiant but losing battle against it until I redirected her to the games that came with the operating system instead and she started playing Potato Guy. (It’s a virtual Mr. Potato Head. The kids seemed to like it a lot.)

One of our other volunteers, a second teacher with minimal (nonexistent?) Linux experience, seemed to not like me very much on the first day. Don’t ask me to name her, because I won’t. I think we got off on the wrong foot, and it was exacerbated by the reality of how disorganized the first run through the activity was, which had been partially preventable if my (and everyone else’s, honestly) brain hadn’t been scrambling around like a drunken monkey. It’s not like we had a dress rehearsal for this sort of thing. I think the kicker was that I’d dropped her online class earlier this semester, and it’s hard not to take that personally; I know that it was because of work overload from my other classes and how well I don’t do with online stuff, but she couldn’t know that.

Whatever the cause, she seemed to kind of radiate disapproval the whole day; I tried to meet her halfway in my speaking to her, trying to apologize for the disarray, but I guess she wasn’t in a good mood. I gave up and got on with what I was doing. The second group was much better handled, at least.

But on the second day, she came back with what seemed like new respect for me, even before I took things over. Maybe it was the presence of the other teacher (the competent Linux teacher), who already had respect for me; maybe she’d spent the previous evening trying to fact-check my FAQ and decided that I was competent after all; maybe she decided that the way I bounced back on the second group the previous day meant I could run things all right after all. Maybe she’d just taken that second cup of coffee and the barista complimented her outfit, so she was in a better mood. There’s no way of knowing, I guess. But she was a lot more helpful then.

I rarely see people change their mind the way she did, and to me, that engenders respect in return–not stubbornly holding on to an ill opinion of someone like a lot of people do. I don’t know her very well, but I was pleased to have her help. So few people have the willingness to change a poor opinion of someone. I’m not trying to be condescending or even implying that I’m any better than average about that. Just… major kudos.

Anyway, that’s enough about the STEM thing.

I’m still kind of designing and turning over the job site in my mind. (I talk about the idea and my design changes for it here.) I want to build it, but I’m not sure where to start. I have basic, slightly dated knowledge of HTML and CSS, and of course I know Python, and I’d like to build the site on those. I think I’d rather not use big frameworks or anything like that–no Django, no Rails, DEFINITELY NO .NET, although I’ve cloned Django and I might poke through the code for ideas if I need to. I want to keep my code fast and lean and I want to know what everything does.

My experience with web design has been pretty limited since I was 13-15. Even this blog is just a plain old WordPress site. Still, it’s not the front of the web site I’m worried about; it’s the backend. Databases? Files? Search? It’s the real code design stuff that I just don’t have the experience to be confident with, which school can’t teach, and the backend stuff, that school won’t teach because it’s too preoccupied with showing you how Microsoft’s latest product “solves that problem for you” and teaching that instead. Paradoxically, this is a very good argument for trying to get into it and screwing it up so badly that I learn.

I’ve got notes in my design notebook about the stuff I plan to do better, which is a lot easier than actually trying to do it better. But I need to get to the latter sooner or later.

I’m reading a new book. It’s called The Charisma Myth–it’s all about how charisma isn’t inborn and can be taught, and then turned on and off like a switch. It’s a really good book.

It says that charisma is composed of three main components: presence, or how in-the-moment you are and how focused you are on other people when you speak with them; power, or how much influence you have to potentially change people’s situations for better or worse; and warmth, which is how compassionate and empathetic you are towards people.

Basically, others assess 1) whether they have your attention, 2) whether you have the power to do stuff for them, and 3) whether you seem like you’d want to. If the answer is “yes” across the board, you have their immediate attention and they want to be around you.

Then the book goes on to say what actions you should take to increase those three qualities. Focus on the feelings in your toes to bring you back to the moment and increase your presence. Visualization and thought exercises to increase your apparent power and warmth. So much of charisma is in body language, and body language is so hard to fake, that you have to learn to manipulate your brain into feeling confident and powerful, and warm and full of goodwill, so that your body language follows. None of those are bad things and none of them change your personality–they just make you kind of a more attractive person to be around. They make others feel better about talking to you.

The book goes on to explain that there are four styles of charisma (actually, it hints at more, but these are what it touches on).

  1. Focus: people are drawn to you because you pay attention to them, because you seem genuinely interested in what they have to say and respect their ideas and opinions.
  2. Visionary: people are drawn to you because you have some big idea you’re intent on bringing about, perhaps something that promises to improve people’s lives. They feel inspired by what you say and more creative after talking to you.
  3. Kindness: people are drawn to you because you broadcast loving acceptance of them for who they are. They feel they can be themselves around you.
  4. Authority: people are drawn to you because you’re in charge. You seem like an impressive decision-maker with some sort of power, so they think you might be able to help them or do things for them.

Everyone has some kind of charisma to some degree, often a mix of them. You shouldn’t try to adopt a style that is alien and unnatural for you, and you need to be wary that you use the right style in the right situation. You should also try to cultivate as many as you can, so you’re adaptable.

I naturally have a fair bit of visionary charisma, particularly in my writing. (But you knew that, didn’t you, you clever thing?) But I think I’ve been walking around with a lot more authority than I’ve realized. I think that’s a big part of why people were so wary of me in high school and thought I was unapproachable. I wear nice clothes–I don’t generally leave the house in sweats or yoga pants unless I’m sick or in costume, and I’m lucky enough that my family can provide me with more expensive, good-quality clothes.

I used to be able to sneak into the school library to sit out a period I technically wasn’t supposed to have free under the usual rules, without leaving the paper trail of signing in, by walking past in my wool trenchcoat with a gait that suggested I was supposed to be there (I copied the quick, confident walk of the school administrators). The librarian rarely looked up, and when she did, she ignored me. Even though I had turquoise hair at the time. My body language just said that I was not to be stopped and bothered, so she didn’t. And when I sat around reading and knitting, nobody thought I was out of place.

This mostly went away when I got to college, where nobody knew I was underage until they got to know me a little better and had already seen that I wasn’t so unapproachable. And the average level of confidence is higher around here, so I didn’t stand out quite so much.

So, apparently I channel authority well? But… that’s not the most appealing of the charisma styles to me. I’d rather make people feel respected (focus) and then inspire them to go do great things (visionary). I don’t really want to boss people around. If other people rely on you to give orders, they can’t handle not having you around, and they can’t go off and do great things on their own. Besides, it’s more fun to be doing great things too rather than making other people do them. I prefer the power that comes from controlling things (like computers), rather than that of controlling people, and I’d rather persuade than barge with my ideas. I’d be okay with directing and organizing a bunch of people to do something they want to do, though. There’s a lot of overhead and grunt work in organizing a collaborative effort. But it probably wouldn’t be as fun as doing things myself.

Uh… looking back on that paragraph… I wonder if I’ve just read Ender’s Game one too many times or if there was a seriously deep reason I connected with it the first time I read it. Anyway.

Focus isn’t something I currently do well, because my mind wanders so much. Even if it’s wandering on something the other person just said, it doesn’t make them feel so great if it looks like I’m zoning out. I’ve decided I’m going to work on cultivating that.

As for kindness charisma–I actually do care about people and try to think the best of others. I also happen to be completely awful at expressing it. (It’s an INTP thing.) I’m actually a pretty warm person, but the associated body language isn’t really wired well into my brain. (Authority’s wired in instead. I’m so girly.) I tend to surprise people by doing nice things for them instead, which catches them completely off guard.

Here’s another story. I was taking a college Psych course in my senior year of HS, and I was working on knitting a super-long pink scarf as a Christmas present for one of my friends. After having worked on it during class for a couple days, a girl comes up to me and asks, “Hey, will you knit me a scarf?” In retrospect I think she meant it jokingly, but I was so caught off guard that someone had talked to me that I blinked and said, “Uh… sure. What’s your favorite color?” It took a minute for her to recover and reply. The next day, she asks, again jokingly, “Hey, have you finished my scarf yet?” I say no, I want her opinion on the color first, explaining that I don’t have any light purple yarn and offer a skein of baby blue instead. She’s taken aback but accepts it and I start knitting. I give it to her a few days later (I was really fast at that point through practice). By then of course she was totally cool with it and thanked me.

Knitting seemed to make me look more approachable, I think. A lot of people were more willing to talk to me while I was doing something so low-key. Especially working on something as absurdly pink as that scarf was. (It was a copy of the really long, bright pink scarf from Homestuck. It was like eight feet long or something crazy and took me… I think well over a month?)

I know that book isn’t technology related, except in the sense that people skills are important in this field, as in any. But psychology is also one of my interests, as are self-analysis and social analysis, so I hope my readers don’t mind my going off on tangents like this.

For sticking with this really long post, here’s a set of Muse songs. These three were among my very favorites for their incorporation of beautiful classical music. Part 3 is particularly striking.

It seems there’s also a Part 4 on YouTube that I’ve never heard before? I’ll investigate it when it isn’t 3 AM.

 

 

 

Friday’s STEM event is over

There’s another round tomorrow, twice as big. I’m not sure how well we’re going to handle that. This group was big enough!

They were mostly 7th graders. There were three HS freshmen in the group, I’m told. They all looked really young and the main group was huge–ostensibly 35 kids, but it seemed like more. After Hour of Code, they were divided into two groups between the virtual reality room and my Linux room and spent half an hour in each. Both rounds, the group I got filled nearly every working computer in the room.

And they… liked my game?

When I learned I was getting a younger group than I thought I was getting, I started wondering how a really nerdy text-based adventure was going to go over. But they either liked it enough or wanted to impress me enough that things went really smoothly. I’m not questioning it.

I’m exhausted. I’ll update with more details later.

I made a thing!

I wrote this text-based adventure script to introduce some basic Linux commands. It’s mainly for the Linux thingy I’m doing on Friday with the Plant Yourself In STEM event, but it’s probably useful to more people than that.

I only got the idea earlier today (err… yesterday now), so I haven’t spent a TON of time on it. I spent more time writing the story than putting it into the code, which is brain-dead simple (validation of specific, static commands). There are certainly more commands I could include and better ways to write it out there, but right now it’s functional and goofy and not boring or over-technical. I’m quite pleased with it.

It lives here and it’s MIT licensed, so you can play it for yourself and/or improve it as you please.

Plant Yourself in STEM: Linux FAQ

I. Questions about Linux

Q: I want to play with Linux some more.

A: Great! You have a few options.

  1. Use a virtual machine. Here are my instructions on how to make one. I recommend this one most because you can run the software well on most modern systems, and there’s no risk of accidentally overwriting Windows or whatever you’re running, and losing all your files in the process. Also, if you break a virtual machine, you can reload it from a snapshot or just make it over again. VMs take a little patience to make the first time, which is why I wrote that tutorial. (It contains a lot of stuff I had to learn by trial and error.)
  2. Use a live CD or USB. Google is your friend on making these, but check at least two tutorials when you make Linux-related stuff. Be careful not to install it over your current system.
  3. If you have money: get a Raspberry Pi and its associated accessories. This can be fun, but you’ll probably end up dropping quite a bit of cash on it. If you want to anyway, again, Google it.
  4. If you REALLY know what you’re doing and this is your own computer, not your parents’, you can make a Linux partition. Be careful with this one. You have to be a little more technical to get it right, and it’s risky to get it wrong. You might want to choose your distro a little more carefully with this option too, to make sure it’s one you like.

Q: What’s with all these different “distributions”?

A: Linux distributions, or distros, are just different varieties of Linux. They all have the same stuff running at the core of the system, roughly, but they can have different software installed and sometimes different commands. Each distro is meant to serve a particular purpose.

Ubuntu and its variants (Kubuntu, Xubuntu, Lubuntu, etc) are meant as a beginner’s Linux–they’re designed to look roughly like Windows and be as easy to use as possible. Linux Mint has a clean design for users and programmers who want something simple, elegant and effective, without tons of shiny graphics. Debian and Fedora are often used in servers or on the personal computers of programmers. Kali is for network security administrators. There are even advanced distros such as Arch and Gentoo, for increased customizability or transparency to the core system below–Arch doesn’t even come with a desktop environment installed, you start out with just the command line interface.

It’s best to start with a simpler distro, like Mint or Xubuntu (which is preferable to normal Ubuntu because of the interface it comes with–it runs faster and I think it looks better). I’m fond of Debian, personally. GNOME 3, the window system it comes with, is rather heavyweight but very shiny. You can put different interfaces on it, though.

Q: Wait, what do you mean “interfaces”? What’s a “window system”? Are they different things?

A: In Linux, the command line is the default interface that’s built into the system. But you can put window systems over the top of it. You know how Mac desktops look different from Windows desktops? Like, the windows look different and Mac has the dock instead of the taskbar? That’s because they use a different window system. Linux has tons of these and you can just swap them around.

“Interface” is a more general term than “window system”–the command line is an interface but not a window system. (Apart from that distinction, they’re interchangeable as far as I know.) That’s semantics, though.

Q: What makes Linux so great, anyway?

A: Lots of things! There are so many reasons to use Linux over Windows (and, to a slightly lesser degree, over Mac)–ranging from the practical to the aesthetic to the philosophical. Here, I’ll list a few of the reasons you probably care most about, but understand that this list is by no means exhaustive.

  1. It’s free! Not only are the vast majority of distros free to download and use, but you can change them however you like or make contributions to them.
  2. Linux is faster, especially on old hardware.
  3. It’s far, far more secure than Windows. Linux very rarely gets viruses, even more rarely than Mac OS X, and when viruses for Linux do appear, an update comes out very quickly to protect the system. But it’s hard to write viruses for Linux because it’s designed so well.
  4. They’re easier to program on. Linux comes with better tools for coders and makes things a lot easier. Tools like git and shell scripting make Linux a far better choice than Windows for a coder.
  5. Linux has a powerful command line, which Windows lacks. (Mac’s command line is okay though.)
  6. Package managers make it easy to install and remove software without leftover files like you get on Windows and Mac. This saves space on your hard drive and keeps your programs working well.
  7. Linux is easy to use and customize! You CAN learn to use Linux without touching the command line (although you’d be missing out on a feature, and if you’re coding you should know it). The basic controls aren’t that different from any other operating system–it just has a few extra tricks it can do.
  8. Linux is becoming a platform for gaming! It’s not totally there yet, but there’s serious progress being made. Steam has certainly jumped on this bandwagon with Steam OS. Personally, Humble Bundle is my favorite place to find Linux games, and it’s for a good cause. And remember what I said about Linux being faster? Your games will perform better. It’s pretty awesome.
  9. Free software–you don’t have to pay for Microsoft Word or Photoshop, as Linux has open-source software that does the same thing. LibreOffice and GIMP are great programs.
  10. It’ll teach you about how computers work! Linux is a great behind-the-scenes of how computers function. To me, that’s really important and cool.
  11. Free support from a great community. Got a question? Google it, and if you can’t find anything to help you, there are forums full of people who’ll help you out for kicks–they just like fixing stuff and making users happy because it’s challenging.
  12. The power to fix your computer when it breaks. Windows doesn’t let you see where stuff is failing, it just pops up with the box that says it’s trying to diagnose the problem and fix it–and I’ve never heard of that working for anyone. Linux lets you see what’s going wrong, if you know where to look, and lets you fix it instead of making you give up. Linux boxes don’t really get the kind of issues that can be solved by rebooting–they work too well for that–but they do occasionally run into bigger blocks where Windows would just throw up its hands and tell you to reinstall.

I’m stopping there. Twelve is a nice round number, and I don’t want this to go on forever.

Q: How do I learn Linux?

A: This is actually a really good question. I was asking the same thing about a year ago. Now that I know from experience, I’ve covered it to send you in the right direction.

II. Questions about coding

Q: How do I start learning to code?

A: Starting to code is easy! There are great sites out there to help people take the first step into programming–I like codecademy–and there are plenty of books too–like this one, which is available for free (although I suggest buying a hard copy or tipping the author if you can). If you’re intimidated, you can start with HTML and CSS and make some basic web pages, in which case I recommend this book.

Q: I’ve been coding for a while… I know a language or two, but I feel like I’m missing something. Open source is really hard to get into and everything is confusing.

A: Basically everyone feels like this after working with books and classes and tutorials for a while. It doesn’t go away with more books and classes and tutorials. It starts to go away once you try to build stuff on your own. Keep your eyes peeled for stuff you think you might be able to build, and then try to build those things. Even if they’re terrible at first. Trust your ability to learn what you don’t need in order to finish your projects.

You’ll feel stupid. You’ll think your program sucks. You’ll get frustrated working on a problem and walk away. But then you’ll figure out something that might be the answer while you’re making dinner and you’ll rush back, and you’ll put it in, and maybe it won’t work but sometimes it does and sometimes it helps you figure out what works, and everything is exciting again. And you’ll forget you were making dinner, and you’ll keep coding and forget to eat at all while your cat eats the lunch meat you left out.

If you love it anyway, you should keep coding.

At some point, after months spent alternating between frustration and excitement, it’ll hit you that six months ago you would have absolutely no clue about anything you’re doing now. You’ll realize that, although you may not be as good as the open-source folks yet, you do know a lot of valuable things that would massively confuse most people.

Q: Uh… really? It’s that hard? But I bought a book that says I can learn Java in a week.

A: You might be able to learn Java syntax in a week, but it’s really just another tutorial. Programming is a separate skill, agnostic of any one language but tied to all of them, and it takes time and effort and trial and error to learn. Also, don’t start with Java. Start with Python, Ruby, or web development.

Q: Is HTML a programming language?

A: Not technically, but you can still call yourself a programmer if you want, I won’t jump on you. HTML is a markup language (HyperText Markup Language), and it isn’t Turing-complete. That is, it lacks the different logic structures that programming has. HTML is more just a way to tell the computer how to display stuff, and the things you write with HTML aren’t interactive. To make interactive web sites, you need to use a programming language like Python, Java, PHP, Ruby… etc. You don’t think about it, but most websites you use on a regular basis have tons of programming behind them–it’s not just HTML and CSS.

Someone’s going to tell you you’re not a real programmer if you only code HTML and CSS. Ignore them. What matters is that you’re making stuff.

III. Inevitable diversions

These are here because I don’t want to spend activity time on them.

Q: Can I use Linux to be a l33t hax0r and break into computers?

A: Yeah, if you’re an idiot who can’t figure out anything more fun to do with your computer than break into someone else’s. It’s a lot more technically difficult and interesting to build things rather than destroy them, and it also pays more and doesn’t get you into legal trouble.

Also, that’s not what a hacker is. You’re thinking of crackers. Hackers are the people who build open-source stuff, and they don’t like it when you mix up their names with criminals.

Q: Will you teach me cracking?

A: No.

Q: Should I use Kali Linux as my desktop OS?

A: If you want to be a white-hat, it makes sense to know Kali and the network security tools it comes with. I wouldn’t recommend it as a desktop OS, though. A lot of people are attracted to Kali because it sounds edgy, though, and that’s not a good reason to use it. Don’t do anything stupid with Kali.

Q: What are the best energy drinks? Is Monster good?

A: I covered this, actually. And no, Monster is toxic waste–Full Throttle, NOS, or Venom are much better.

 

Shell scripts and planned projects

I’m working on a script to automate the setup I go through for new Debian VMs. Debian is my favorite Linux distro so far; I’ve tried out a good handful, but by no means all of them, or even all the common ones.

I also like GNOME 3. Not a terribly popular opinion, I’m aware. I know GNOME 3 is not the fastest or leanest interface out there, but it is shiny and reminds me a bit of Mac OS X and I like it. (Implied: for desktop use. If you’re using Debian for servers you should be using the command line.)

I’m pretty sure I have an old shell script around here somewhere that has an example of the next thing I have to do in this script, which involves sed and is a pain. I’m trying to grab the kernel version from the output of uname -a, which is formatted roughly as #.#.#-[stuff]. I just want to get sed to work on some variables–find the string I want out of one variable and stick it in the other–but sed and variables in scripts looks complicated so I’m kind of putting it off. I don’t really want to use files for this because then you have to name them and delete them afterwards and that could cause problems. Also, trimming things based on whitespace isn’t going to work; uname -a says the kernel version is the fourth output argument but I tested it and it’s the third on my system.

Anyway, this is taking longer than I thought it would. I’m doing this because I plan to use Debian VMs as test machines for other projects, and I want to make them efficiently… and because it’d be a nice addition to my tutorial on making VMs if I stuck it on GitHub.

#Disclaimer included for my greener readers
I want to stress that if you download this kind of script from GitHub, you better bloody know what it’s doing before you run it–or at least you should be running it only on a VM you don’t mind blowing away. Especially if you have to be root to run it.

I’ve really got to get going on my schoolwork and should probably be writing papers instead of scripts. The first one took longer than I thought it would. I’m doing my next on Django, I think. I don’t know much about Django, but I’ve been considering learning it for the job site I’ve been kind of designing in the back of my head for a month or so.

I know Rails is really popular too, but I’m considering Django over it for two reasons.

  1. I know Python but not Ruby. This wouldn’t be enough to steer me away if it weren’t for…
  2. Rails, from my reading, does more magic automation than Python, and it sounds like maybe the automation includes some stuff I’ve struggled with. I need to get over that. So it sounds like Rails is a tool for when I’m a better developer than I am.

Rails does have a bigger dev community, though, so I may yet change my mind. I’m just not sure about how much I want to learn a new framework and a new language at the same time, even if both are well-designed. I’m still relatively green at programming, in the grand scheme of things.

I’ve also still got my mind on the idea of a dev-setup program for newbie coders. This script I’m making is kind of a training run for me on shell scripting, although I’m thinking about poking my nose into how to use Python for the things I’m using shell scripts to do. The GUI and script builder will of course be written in Python/Kivy, because I know those and they’ll actually be really good tools for this. I kind of want the program itself to be beginner-readable. Not just the shell scripts but the script builder. Maybe it’ll end up being the first open source project someone contributes to. (Apart from being the first big open source thing I make. The only thing on my GitHub right now is tinypapers, and it’s not even posted correctly. I haven’t gotten around to sorting out the timeline.)

I do feel a little regret over abandoning tinypapers, but not for the obvious reason. I don’t feel bad about leaving it behind, I just think you guys were kind of invested in it? Like, a lot of people seemed to be really enjoying following its progress. That’s just how it goes sometimes, though. “Plan to throw one away; you will, anyhow.” I could finish it… but I could also go on and create something else that hasn’t already been invented. Don’t worry, I’ll get back into a real project once I tie up some loose ends here.

One more weird idea for the night. This idea has been in the back of my mind for a while, and it’s so bizarre that I’m not even sure where to start with it. You know how fast food restaurants always sound kinda like hospital rooms because all the equipment is beeping all the time? It’s really annoying. Sometimes it’s really loud. But the cooks and so on need to know that this beeping noise means the fries are done, this beeping noise means the cappuccinos are ready, etc, etc. I had this idea that you should replace all the different beeping noises made by the different machines with jazz instruments.

Yeah… hear me out.

You’d have one metronome on the network and then each machine would get assigned an instrument. There seems to be one machine that’s constantly beeping, right? It gets the bass. When the fries are done, instead of beeping, they just add a saxophone sound to the bass. When the coffee is ready, it throws in violin. And then when the microwave goes off it lets the world know with a harmonica sound.

This would make fast food work so much more relaxing, right? Not to mention eating there.

Jazz works because it’s unstructured. You still follow the beat, but apart from that, nothing will raise red flags. You need a decent library of musical loops, some machinery to test things on, a fast private WiFi network, and a central Raspberry Pi or something (in a really good case, to shield it from the grease).

I’m not sure how well this would work as a startup idea. The different machinery each chain uses is kind of a serious trade secret, and it’s expensive. You’d either have to have influence with the people manufacturing the machinery, or a blind fast-food manager who doesn’t notice that you’re hacking around with the machines before you lock up.

My mom pointed out that maybe this would find a nobler purpose in actual hospital rooms, where jazz music would be a lot less stressful on patients than all the beeping. I have to admit it’s a good idea… although it might make some people hate jazz by association, and I’m not sure how much the staff relies on the specific noises the machines make. *shrug* It runs into the same problem, though: medical equipment to tinker with is expensive. I’m not sure how you could break into the idea.

That’s it for the night, guys. I have a little bit of a feeling that once I publish this post, people are going to start giving me suggestions in the comments on the script I’m writing. And I welcome that! Once I spew out a crappy untested v1, though, I’ll stick it up on GitHub (covered in warnings) so smarter people can tell me what I’m doing wrong more easily. XD

Thoughts (“I can’t come up with a title”)

First, my latest music addiction. I’ll just leave that there.

Writing for school is nowhere near as fun as writing for you guys, and a lot slower. For you guys, I still do a lot of editing and so on… but I also don’t have to worry about sounding formal or making sure you understand basic concepts. For school papers, I write for a “common denominator” sort of audience. I imagine it’s less this way at four-year colleges, where it’s implied that your readers know a little bit about your topic at least. I guess part of it is that I’m supposed to pretend I don’t know anything about my topic and that’s why I’m supposed to be researching it.

I feel like the paper I published last night was not among the best I’ve written. There’s nothing really wrong with it, and by the standards of the class I’m writing for it’s probably above what was asked. It’s just that I knew so much about the topic already, I felt the need to cover everything I knew, and it was too big to put in the proper organization within the time I have. Maybe I’ll polish it up later, but I think I’ll probably be busy with something else by the time I have the option to.

A week ago or so I cloned a set of scripts from GitHub meant to help one set up a Mac as a dev machine. The idea was that one would customize and run the scripts and could walk away from the machine, and you could save your script for the next machine you needed to configure. I didn’t spend long reading them–scripts like this are not generally that interesting–but it seemed to me like it was solving slightly the wrong problem. The scripts assumed that you knew what you were doing, as you were supposed to modify them by hand, but it strikes me that cloning, sifting through, and modifying them is actually more work than writing your own script. Whereas if it had an interface of some sort–whether a simple command-line menu or a little GUI that asked you what you wanted (it may be that it had this and I didn’t find it in my poking around; I didn’t run it because I have what I need already installed on my computer).

Basically… nice thought, but it solved the wrong thing, or solved a sort of right thing not very well.

But there is a more useful idea in there: what if you’re a beginner? What if you don’t know what tools to install, or the proper commands to install them? What if your toolkit doesn’t need to be big or diverse–maybe just tools for Python or Ruby and nothing else? Some of Python’s tools are really hard to install properly if you don’t know what you’re doing. (At least they are on Mac, but I think they are on Linux too.) What if you don’t even know what all the tools you need are supposed to do?

The ideal program to solve that problem, which obviously exists if you look at StackOverflow questions about pip, is to have a friendly little GUI or at least some CLI menus that:

  1. Ask what sort of dev environment you’re trying to install (e.g., Python)
  2. Tell you all about the tools it thinks you should install–and these should be sane defaults–but give you the option to uncheck them if you really want to.
  3. Generate a script based on Step 2. Save it somewhere sensible, like the home directory.
  4. Give you the option to read the script generated before running it, or to close the program and run it by hand from the terminal, or to auto-run the script and walk away until it’s done.
  5. Provide a text file with current links to documentation on all the stuff it installed.

Kivy would be a great tool for making the GUI. It doesn’t need to be fast, just quick and simple, and Kivy would be a great way to temporarily save myself the pain of, um, learning to make GUIs by hand. :/ Sorry, not into that struggle right now; real front-end dev skills will have to wait.

Basically, this program would be more documentation and tutorial than actual code. As much as I like writing guides and so on, it’ll be a while before I tackle this one. And if/when I do, it’ll be for Linux systems, not Mac. It’s good to encourage the use of Linux, especially among new devs, and it’s easier to test with virtual machines.

 

Hey, Shan, this is for you ;)

Shan Reddy commented on How I Learned Linux:

I’ve landed here from Steve’s page. Great post. It was so neat, helpful, clean like a crystal. I’ve bookmarked all the links which you’ve included. That’s such a great help. Oh yeah! your blog as well and I’d be following regularly to check the updates and read more. Your writing skills are excellent. Appreciate it. Wish someday I could write as well and share my info all that I learn with the rest of the world like you.

I liked the part where you said that someone if they weren’t interested or not confident they could do it would not have read through so much. I was so happy to read that. ‘Cause for me my programming journey was very steep but once I picked up I could find the intellect in me moving much faster. And now I’m looking to learn hacking and that’s how I landed on Steve’s page and here finally from there. I’m currently on Windows but after reading this article and understanding the importance from Steve’s I’m determined to learn the whole of Linux no matter how hard/long it takes. And the other languages which Steve has mentioned in his article. I’m currently programming in Java but learning more web technologies as well.

I look forward to more great articles from you and hope to stay in touch. Cheers!!!

Thanks for your comment, Shan! You brought up a few things that I wanted to discuss not only with you, but with others in your situation.

Programming can be really tough at first glance. It depends on how you were introduced to it. I started off with HTML and CSS when I was 13 (not counting my RPG Maker XP experiments a year before that) and I think that helped make other languages seem not so intimidating. HTML is kind of the gateway drug to programming, haha.

In your case, I’d suggest that Java hasn’t made it any easier on you. Java is not a great first language. Java isn’t a spectacular language anyway; it can be very useful, and sometimes it’s the right tool for the job, but it’s not the first tool that a programmer with a varied language skill set will reach for. Python is cleanly designed, easy to read, and won’t give you fifty lines of error messages because you forgot a semicolon.

(Also, contrary to popular opinion, starting with a more difficult language is not necessarily going to make you a better programmer. It may just make you a more frustrated programmer. In other words–don’t start off with C or Lisp either, even if knowing those later on *will* make you a better programmer.)

Furthermore, you expect learning Linux to be a long, hard slog because you started off with Java and that was a long, hard slog. This is likely to MAKE learning Linux a long, hard slog. And that doesn’t help you! Don’t be so pessimistic. Programming is fun!

So, learn HTML5 and CSS, and tinker with it a while. That should keep you busy for about, oh, three weeks. Maybe more, maybe less. Then head over to learn Python. That’ll take you… mm, six weeks maybe. Maybe more, more likely less. Don’t let yourself get bored with either of these tasks–if you’re bored, then either make it interesting or move on, because if you’re bored, you aren’t working at your full efficiency.

(Bored || frustrated || mentally tired) programmers == ineffective programmers.

THEN come back to Java. Wow, it’s a lot easier, right?

It’s like this. Imagine a guy walking down a path. He comes across a boulder in the middle of the path, and thinks, “I should move this boulder so I can move on.” He could go around the boulder, but he sort of wants to try to move it because he thinks moving the boulder will make him stronger and thus be a better option than going around. So he shoves and pushes and presses all his weight and muscle against it for hours, until his muscles are extremely sore and he is hungry, thirsty and exhausted. He gives up for the night and goes home.

From here, the story splits into two parallel universes.

In Universe 1, the man goes back the next day. He pushes and pushes the boulder until, like the previous night, he’s sore and exhausted.

In Universe 1a, he gives up and goes home to watch TV and drink beer. He’s pretty happy about that but he never got to go on his hike. This is the more likely outcome from Universe 1, really.

In Universe 1b, he doesn’t give up. He goes back to the boulder every day, and while he gets stronger and stronger from trying to move it, he’s started to hate going out onto the path to push against it. One day he goes out and is finally strong enough to move the boulder, but is too fed up with just the sight of his path that he goes home to watch TV and drink beer anyway. Besides, the seasons [current technology] have changed and the mountain the path led up is five feet deep in snow.

In Universe 2, he just goes around the boulder… and finds a pickaxe. He uses it to get rid of the boulder and then goes on his hike. The hike is long and in places difficult, but at the end, he is as strong as he would have been from trying to push the boulder, and he’s enjoyed his time out in the fresh air.

You see where I’m going with this?

Yet there are a lot of teachers (and old programmers! and competenprogrammers!) who will insist that the best way to get the metaphorical boulder out of your way is to push and push until you hate the path, even if there’s a more efficient way to move it and a more enjoyable way to become strong.

Anyway, I’ve heard a lot of people struggle with this problem, so I wanted to write about it.

The bottom line is that Linux, and programming in general, won’t be as hard for you as you think it is as long as you use the right tools in the right order.

If you get told that the ONLY way to move a boulder is with a pickaxe, though, but it doesn’t work for you, try a crowbar or something instead. Not everyone’s creative brain works the same way; if they did, we’d have a billion copies of Mona Lisa and no “Starry Night”s or “The Scream”s or “Persistence of Memory”s. And sometimes you just need a break from trying a certain approach.

So, even as I give you advice to learn HTML5/CSS and Python (a set of introductory but objectively useful tools which has indeed worked for many programmers), I warn you that it may not be the right beginner’s set for you. But be warned away from anything that’s specifically meant as a teaching tool; these generally aren’t worth learning because you can’t use them for anything bigger than a 50-line toy program.

Anyway, get yourself a VirtualBox download and set up a Linux VM. I’ll warn you that BASH scripting is annoying to work with, but you should learn it at some point. You know where to go for links on learning the command line and stuff, of course 😉

Oh, and if you ever make a blog to share what you learn, send along the URL and I’ll link you on here.

Happy hacking!