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!

 

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.

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 UNI. This was kind of a beta test run for a potentially larger event later on.

I worked together with two other girls (if you ladies are 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!

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 flip out. 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. If you don’t know what this means yet, get 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.

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 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.

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. That’s probably what you want unless your computer is really old.

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.

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 are kind of tricky to set up, at least in my experience. 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 super innocent and it’s just another way to get your .iso file.

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’s 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!

Resources for a project

Contents

  1. Command Line
  2. Version Control
    1. Installing
    2. Learning
  3. Python
    1. Installing
    2. Learning
  4. Kivy
    1. Installing
    2. Learning

Our GitHub repository

 

My mobile app development class is making a production app for an organization in a nearby city. We’re mostly pretty inexperienced though. I’ve done enough reading and tinkering to know roughly how this should go, but I’m kind of guessing too. I know what software we need, but I’m not very good at explaining why, so a lot of conversations have gone like this recently:

Me: We should use this thing.

Others: We’ve never heard of that thing. What does it do?

Me: It helps you keep track of the thing, and also these things.

Others: So it’s kind of like this other thing?

Me: Kind of, but also not.

Others: …

Me: It’s best practice in the industry.

Quiet guy who is probably more knowledgeable than I am but also too smart to stick his neck out and accumulate a bunch of work: *tries to explain*

Others: So it is like the thing?

Me: Yeah, sort of.

Quiet guy: *shrugs*

Others: Let’s use the thing.

Later:

Others: How do we use the thing?

Me: Uhhhhh…

Anyway, that’s what this post is for. My regular readers may find it useful for something, but I’ve probably covered a lot of this in previous posts and I’ve noticed that you folks like to binge-read my archives when you discover my blog (I’m like that too when I find blogs/comics/whatever).

 

Command Line

The one thing on this list you already have! The command line is a powerful development tool, especially under Unix-like systems. You’ll also find that git is easiest to use from the command line. Here’s a good, quick tutorial.

Learn Python the Hard Way’s command line crash course

 

Version control

We’re using git and GitHub. Git is version control software, which means that it can keep track of and solve conflicts between code changes made by (in our case) half a dozen people.

It has features like code branching, which lets you work on making new features in a separate copy of all the code without having to always change the main branch before your feature is stable, and when changes are made on a file, it points out what changes were made so you don’t have to look through the whole file to find them. You can also look back at old versions of the code, which is useful if stuff breaks or you want to know what the heck you were thinking.

This is going to sound confusing until we start using it.

Installing

Windows doesn’t come with git itself (the command line tool). Kivy’s site recommends Git for Windows, which has a GUI application for Git as well as a bunch of other features. You’re probably fine taking the default

The customer has cleared us to use GitHub publicly, so you all need to create GitHub accounts.

Make a GitHub account

Learning

You also need to know how to use GitHub. The best tutorial for learning I’ve found is on Codecademy. It’s free, but you’ll need a Codecademy account to save your progress. Then you can go through the tutorial. This will explain all the commands step-by-step, a lot better than I could in person, so please pester the Internet and not me about it because you’ll get better results.

Make a Codecademy account

Codecademy’s Git tutorial

Sometimes, what you need is a reference and not a tutorial, and CC’s step-by-step instructions are a real pain when you just wanted to know that one command you forgot. A good reference is here instead.

Git reference

Once you’re comfortable with the commands, clone the repository I made on GitHub, which is here:

https://github.com/RebekahAimee/ypn-app

 

Python

Installing

First, if you’re running Windows, you’re going to need to install Python. (Mac and Linux come with Python, so don’t worry about it if you’re running those.)

First, you need to download Python. We want 2.7.11 (as of this writing), not 3.whatever, in order to work with Kivy. You probably want the last link from this list.

Please pay attention while you’re installing that. There’s a feature in the installer you can select that adds Python to $PATH for you, and if you select it, you can save yourself the next set of instructions. If you’ve already installed, or can’t find the feature, here’s how to fix the owie that not selecting that feature leaves you.

On Windows, you need to modify the $PATH variable in order to get your command line to recognize Python. $PATH is an environment variable that tells your command line where to find your development tools, and by default, when you install Python, it isn’t changed (in case you have multiple Python versions on the same computer).

Here’s how to modify your $PATH variable; you need to add this chunk of code

C:\Python27\;C:\Python27\Scripts

to the front (don’t delete the rest). If you’re not so sure about doing that, Hitchhiker’s Guide to Python has a tutorial; it gives you a command you can paste into PowerShell. (I haven’t personally tried it, but I’ve had good experiences with that web site.)

Learning

If you don’t know Python, it’s really easy to pick up. Here are two tutorials:

Learn Python the Hard Way (a published book, online version is free)

Codecademy’s Python tutorial

 

Kivy

Kivy is a cross-platform, open-source Python framework that we can use to build mobile apps. In fact, it cuts our work in half because we don’t need to build a separate app for Android and iOS… and it’s better designed because the framework’s code is beautifully orthogonal to anything we create with it. You don’t need a special IDE and a long tutorial about what all those auto-generated files do in order to run Kivy. Heck, you could write Kivy in Notepad if you really wanted to. It’s also much better documented than the normal Android SDK, and nearly everyone likes Python better than Java.

Installing

For Windows, the magic commands here take care of everything. Keep in mind you’ve already installed Python.

Installing Kivy on Windows

If you’re running Mac or Linux, you’ll want to refer to their respective instructions. You can still use pip if you want, or you can download and install a tarball.

Installing Kivy main download page

Learning

Kivy has a much easier learning curve than the Android SDK. But you still need to learn how to use it. There’s an excellent textbook for $10-$20 from O’Reilly:

Creating Apps in Kivy (Amazon)

There’s great API documentation from the Kivy developers:

Getting Started

API Reference

There are also beginner apps that you can create, demonstrated on the Kivy site. I didn’t like them nearly as much as the book–they kind of ran me into a wall with trying to do other stuff based on the code. I found the book more useful, but I’ll link to the pong app anyway:

A First App

 

 

This post will get updated as we end up using more resources.

Let’s Learn Git

I’ve only started on this fairly recently, so this post will probably start out kind of sparse and get updated and change over time.

Git is a version control system, as you probably know. You may or may not know that it doesn’t just live on GitHub. Git can live on just your computer, privately, and you can make git repositories without ever uploading them to GitHub. Or you can use git on your personal machine and later put the repository on GitHub.

Basically everyone uses git, so it’s definitely something you need to learn.

I started here. https://www.codecademy.com/learn/learn-git

If you don’t have a Codecademy account, you should make one. Codecademy has tons of awesome tutorials, none of which I’ve ever finished, and if you’re patient you’ll get through them and have a basic understanding of what they’re teaching, or if you’re impatient you’ll get halfway through them and wander off to tinker or program or learn something else, because that’s just how some of us are, okay.

I’ll admit, the reason I’m not the most patient with CC is the same reason I’ve never gotten all the way through a Head First book. It likes to go slow and steady, with plenty of beginner hand-holding, and while it’s a totally solid way to learn, I think it’s more fun to barge straight into the “coding something” part as soon as possible and just read StackOverflow or come back to the lessons if I have problems.

Unfortunately, this is also why I got through like the first section of that tutorial and then trial-and-error/StackOverflow solved for the bumps until I got tinypapers’s repo straightened out. (Did I mention I did that? I did that last month or something.) So I don’t have a big stash of links.

Here’s what I can remember using, though.

https://help.github.com/articles/set-up-git/

http://stackoverflow.com/questions/1443210/updating-a-local-repository-with-changes-from-a-github-repository

I may have more stuff later though, because I forget things and look them up again and bam, purple links. Those will show up here when I get to them.

Have fun!

Pitfalls in learning to program

Tim H. commented:

[…] do you have any advice based on personal experience from when you first started coding? Things to do (or avoid doing) or perhaps something that you know now that you wish you had known when you first started?

Oh, please. I wish I could say that I took all the right turns while learning–if I had, I’d be a much better coder than I am–but that’s not the case.

This is probably more than you bargained for, but here–you’re now the… third? commenter to get a full post in reply to a question.

Building on your own

The biggest thing is that building stuff outside the books and classes is the most important thing to do. I’ve been coding in some form or another since I was about twelve: RPG Maker XP at 12, basic web design at 13-14, VB at 15, Java at 16, and then I went to college–I didn’t choose all my tools, most of this is an expression of what classes/books/programs were available to me at the time. But I usually didn’t go out and build stuff with what I learned in my classes.

I did try to make some games with RPGXP, but I was pretty awful at it because I didn’t know Ruby (the game maker has a Scratch-like interface that generates syntax) and the English documentation was very lacking (I looked). And I put together a few web sites for my parents’ birthdays that… were actually pretty nice-looking, but never got published. I was kind of lukewarm about VB, and I had a hard time coding in Java on my own computer for some reason–something about NetBeans not wanting to work.

–Basically, I tended to use the stuff I self-taught (RPGXP and HTML/CSS) more than the stuff I learned in classes (VB and Java). I did have a class on HTML/CSS, but not before I self-taught it, which was good because the class was horribly outdated. That repeated itself with the Linux class–which was taught very well and was up to date, but didn’t teach me as much as I’d learned by tinkering.

School isn’t as useful as you think

This pattern has held consistently through college: I learn better, and learn more relevant stuff, by screwing around with stuff on my own than by sitting in a class.

What I learned in class: Flash, old Dreamweaver (which was as bad as Flash), VB, Java, pseudocode markup, flowcharts (as if I couldn’t make those before), Windows networking, shell scripting, C#, .NET programming (sort of–the class had serious technical difficulties)

What I’ve self-taught: RPGXP (sort of), HTML/CSS, Linux, Python, working with an API, and a tiny bit of FileZilla and phpMyAdmin for freelance web work. Plus all the stuff I read online about programming and startups and businesses and new technology and other awesomeness of that stripe.

What I’ve used: the second list (minus RPGXP really)

What I feel like I know well: the second list (minus RPGXP again)

I’ve long maintained that I’m going to college to get a degree (formal credentials) and to meet people. I’m much less there to learn, because if that were my only priority, I could accomplish it more cheaply and efficiently by sitting around in an ethnic restaurant of my choice with some books and my laptop every day.

Although, probably the teacher who’s taught me the most is Mr. Noord, because he rarely stays on topic for more than half an hour, and the stuff he ends up talking about tends to be more useful and interesting. Don’t tell the school board.

It’s totally different for networking students though. Then classes are way more worthwhile because the school has the hardware they need to work with, and networking is easier to teach in a class.

Programming is an art form that can’t be taught in a class. Programming is a separate skill from knowing the syntax of programming languages, which can be taught in classes. Knowing the syntax is like memorizing a French textbook. But to learn French, you have to speak it (write programs), listen to other people speak it (read programs), let them correct your speech (take criticism from older programmers), learn the current grammar and slang rules (style and best practices), and keep using your skills.

Classes just don’t usually let you mess around with stuff, and when they do, they put lots of restrictions in place: how long you get to work, how fast you have to work, what you can make, and what other things you have to do or write in order to discuss what you learned so someone can prove you learned it and somehow quantify what you did. It’s a real pain. And then you have to pay for them, instead of getting to spend the money on new books or tools or hardware.

I’m not saying that schools can’t be useful. They can be! They can teach the basics and introduce you to other programmers, and they introduce you to some great teachers and other students. They just won’t teach you the sort of skill that makes a great programmer.

Books are quite a bit better, but still watch out

Books still won’t get you all the way; you have to build on your own. But, at least for me, they’re definitely more productive than classes, in terms of learning a new technology or language.

Books tend to a) be cheaper, b) invite you to mess around freely and without restrictions on time or what you do with the example code or stuff like that, and c) let you choose your tools. When you buy a book, there aren’t required classes. You get to study what you want.

The tools you choose are important

The main reason I’ve never used VB or C# or Flash or the other stuff I took classes on isn’t necessarily because the teacher was bad or the curriculum was awful. On the contrary–I’ve had mostly great teachers.

But the technologies are pretty crap, to be honest.

If you’ve been around very long, you know about my burning hatred of Visual Studio. I didn’t always hate it so much. I used to be lukewarm towards it, back in the days I was using VS 2012 for my Visual Basic classes. We had technical difficulties with it even then, and it liked to crash and all sorts of crap, although nothing like the temper tantrums it’s thrown in my more recent classes.

But now that I know what programming is actually like, I look back on it and realize how boring and tedious it was. It sucked! No wonder I wanted to go into psychology instead. I thought coding was cool, but sometimes I wondered if I just thought the idea of coding was cool and I liked the romantic techie-nerd image it let me imagine, because what I was doing was not that much fun.

(Straight-up HTML and CSS isn’t very fun either, to be honest. Once you get good at it, both the novelty and the challenge kind of wear off. I’m looking forward to learning to code dynamic web pages, though.)

Java was okay, but we didn’t get very far into it, the coding examples were largely busywork, and it was really complex. I think we just got a bad textbook, honestly.

The books you choose are important

The difference between a bad textbook and a good textbook is like the difference between a bad teacher and a good teacher.

Here are the different kinds of books:

Diving Into ASP.NET, MVC, TLA, GPS, and SAT by J. Random Microserf

This will probably have some geometric feature on the cover. It’ll look deceptively shiny and colorful, but it’s as engaging a read as the Terms of Use agreement for the technology it’s purporting to teach. Said technology will of course be the kind that has a Terms of Use agreement, because these books are usually made in order to sell both the book and the IDE or language or whatever the book is about, plus all the attached certifications (which probably all have test prep books of their own).

They’re written by someone who probably does not like the technology they’re writing about, even if they say otherwise in the intro. This will translate into the writing, and you will end up not liking it either.

Generally, these books are best used as eBay fodder or, if the technology described therein has already flunked out (it will soon if it hasn’t), as expensive firewood.

Learn Foo in 24 Hours!!!!

You will not learn foo in 24 hours.

You may get a basic but deceptively broad understanding of foo. But you will not have learned foo.

This book is not quite firewood. It may be helpful, if not so in-depth.

Weird homebrew-looking e-book sold on Amazon

?????

Head First Foo

Made by O’Reilly. This will have a lot of pictures and silly jokes. They’re great for learning from if you need to get a complete understanding of a technology quickly, or if you’re a beginner and you’re kind of intimidated.

I lose patience with them, though, under two circumstances:

  1. I have something I want to build, and I don’t want to sift through 50 pages of pictures of tigers and pizza before I find the bit of information I’m looking for. What I need is not exactly a reference book; I just want the info in a more dense and organized form.
  2. I’m trying to read it as an ebook. They don’t translate well to the format. Don’t buy these as ebooks.

Notably, they’re bad reference books, as you might have gathered. Don’t get them for that either.

Making Stuff with Foo

This could be “Building Dynamic Websites with Django”, “Creating Apps with Kivy” (<3), et cetera.

It’ll contain something like this in the intro.

I’ve been using this technology for foo amount of time, and I think it’s a great tool for doing bar because of how it bazzes the quuxilators. I tried some other ways of doing bar and overall, I like this one the best because it’s well-designed and has great features.

Anyway, I thought a lot about how to write this book, and you might notice that the example code (which is on GitHub at [URL], by the way) is actually not a bunch of different projects–it’s just a couple projects, and we change them over the different chapters so you can see the development cycle better.

I really hope you have fun making stuff with foo using this book. If you find any errors along the way, send me an email at foo@gmail.com.

Not exactly, necessarily, but approximately that tone–you get the idea. The tone of the book will be friendly, but practical and not too goofy. These are great books!

It has a picture of an animal on the front?

That is probably an O’Reilly book. It is worth its weight in gold.

These are very often the “Making Stuff with Foo” variety.

If O’Reilly doesn’t make a book about a technology that is well known enough to have school classes taught on it for, say, a year… that technology may not be worth learning. Unless you can find someone else who wrote a good “Making Stuff with Foo” book about it, and then it might be okay.

Dry Internet documentation

For when you already know what you’re doing. Confusing, frustrating, and boring if you don’t. Buy a book.

Good Internet documentation

Save your bookmarks!

Make stuff. Solve problems. Meet other nerds. Eat cake. Browse GitHub. Play a board game. Tinker with stuff. Install Linux on something. Eat cake again. Hang with your nerd friends.

Have fun.

Happy hacking!

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: No, not really. 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.

CSS isn’t a programming language, either. Same deal, I’m afraid.

One could argue that they are both coding languages, though, in that you’re using an artificial language designed for computers in order to tell computers what to do. That’s valid. One speaks of “HTML code” after all.

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: Do girls code and game in their underwear?

A: Yes, but where you get it wrong is in thinking that it looks remotely attractive.

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.