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

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

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

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

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

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

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

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

Other tips:

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

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

Happy hacking!

Rebekah

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!

Encouragement

There are loads of Internet people who will tell you how to do stuff, or give you cheesy motivation posts that are all the same except for their peppering of spurious advice that rotates in and out depending on the latest fads (“Get up early! Drink 8 glasses of water daily! Do a juice cleanse!”). This isn’t that.

If you’re trying to learn to code (that is, you’ve decided you still want to, not because other people have pressured you into learning), this post is for you to bookmark and return to when you’re feeling apathetic.

Because if you’re feeling apathetic, we lose something important. Your work is important.

What you’re doing is developing the kind of abilities that let you tinker with the world around you. Your ideas, if you choose to pursue them, can change how other people live. You can extend what humans are capable of.

You’re a maker. You’re powerful. You fix things. You solve problems. You’re capable. You’re creative. You’re clever. You’re sitting on a lot of potential. Whether you can feel it right now or not, you have all this pent-up energy waiting to be released into something.

Your code is art. With your mind alone you can make things that are not only beautiful and elegant, but serve a purpose.

Half the companies in America want to hire people like you because of the things you can do. No matter how you seem on the outside, your mind is a powerful tool. You’re among the relative few who understand a chunk of what’s going on with computers. Your skill set is prized and not common enough to fill the massive, gaping need for the things you can create.

And you’re getting better and better.

You can’t be apathetic. You can’t put yourself down. If coding is what you want to do, you can’t keep putting it off.

We need you too much.

We need the people who developed and maintained Kiva Loans so that struggling business owners and entrepreneurs in countries around the world could move out of poverty.

We need this guy and OptiKey, his open source software project that uses optical tracking to let people with motor and speech limitations use computers.

We need the people who are running OpenMRS, a medical record system designed for use in developing countries and now used basically everywhere.

We need the many, many open courseware projects that provide education to people around the world who might not otherwise have access to that knowledge.

We need the people who are building a bridge into a world that is way better than the one we live in now.

We need you, and those learning around you, to hold up the bridge with us. It’s a very important bridge and lots of people need to walk across.

Every time you build something, or answer someone’s question, or successfully learn something new, you are creating something incredibly valuable that didn’t exist before. And especially when you give away something other people will use, or even that other people are paying you for making (assuming they’re not terrible people)–that means you have changed a piece of the world.

Never forget how powerful you are.

I believe in you.

My idea file

If ideas were actually worth something–as people say when they say things like, “I’ve got a $10M idea”–I’d have been rich a long time ago.

Since they’re not, their worth is mostly in the sharing. So I’m dipping into my project ideas file and pulling out wads and wads of what is unfortunately not cash, because there’s no way I’m going to get to everything.

Most recently updated June 29.

A phone app that splits restaurant bills among a group of friends

People complain about this all the time. Let’s make our smartphone into a somewhat more objective judge, kill the argument, and maybe help our wait staff get better tips.

I kind of want to do this one. Most of the issues are in UI design. It doesn’t seem too difficult. Maybe this should be my next GitHub project.

edit: of course, this has been done, and it looks like exactly how I would have done it. I wonder if it’s on Android though.

Todo-list app

But not the normal kind. What we need is something a little more interactive. We need to make todo software with a messaging protocol in the back that lets other people request additions to your todo list. You would then be able to accept or reject them. Designing this software would take a lot of user research and understanding of psychology, in order to program the right features. For instance, should the person requesting a task be allowed to see when it’s scheduled to be done, or what priority it has? There are both benefits and awfulness in that suggestion. (Mostly awfulness, I think.)

I think it should also have priority, deadline, and/or likely completion time data attached to each list item, and if the user indicates that a certain time slice of their day is open, it should suggest the optimal task or tasks to fill that spot. The algorithm might well be kind of tricky, though; it’d have to work around not always having all three data points.

Also, it would probably be fun to add game elements to this app. Maybe it should award points for tasks completed, and award more points for higher-priority tasks. This probably would result in people losing productivity due to playing with the app and fiddling to get more points, though–like breaking up tasks into tiny pieces they can “accomplish,” or ranking everything as high priority. You could choose to only award points for tasks set by other people, but then they’d rank everything so as to give you the most points, thus making their task appealing to complete.

(Software development has seen time and time again that if you award points for stuff, even if they’re worthless, people will do crazy things to get them. No one has much of an explanation as to why.)

Oh, speaking of which. You’d probably have to come up with some way to make people not mark all their assignments to others as super important–some way to weight each person’s additions to others’ to-do lists so there’s a normal distribution of priority among what they send, and they’re not marking everything important. But that causes its own problems.

This is a really neat piece of software for design issues. I kind of like it. Also, Paul Graham has asked for someone to build this a couple times (although he didn’t go into this detail).

Air conditioned motorcycle helmets

I don’t ride motorcycles, but I’ve noticed people tend to not like wearing helmets on hot days. Why don’t people make full motorcycle helmets–the really protective, full face shield kind–with air conditioning? We have, like, those single-can fridges; can’t we put a rechargeable battery in a helmet and make it work? I know batteries are heavy, but… so are those helmets, anyway.

Low-commitment freelance comics

A web site that connects comic writers with comic artists, for the purposes of making one strip at a time. Comics don’t have to go on hiatus because one of the creators has fallen ill or quit.

ReceiptStash (I have dibs on this one)

An app that stores receipt data instead of forcing businesses to use so much wasteful paper. Bonus points if it’s attached to the user’s debit card # rather than a username, because this would mean it could be used as a tool to recognize card theft. It’d also be really easy to load the data for use in a budget tracking app, which might solve a lot of people’s problems in that area.

Penguin Phone

Make a cell phone that runs Linux. Not Android, but pure Linux, with a command line and a filesystem and no unnecessary pre-installed apps.

I think our phones could do more “laptop stuff” than they currently do. Sometimes you need to make little corrections to code–fix broken links and so on. Why not use your phone? It’s as powerful, hardware-wise, as a computer. Why isn’t it as powerful software-wise?

Happy Nickels

When people experience something that makes them happy, they like to post about it on social media. (Along with a lot of other, less happy things they post about.) What if there were a social media app that was intended first of all for phone use, where every time something made you happy, you pull out your phone and post about it on this dedicated social media app.

But to do so, you have to donate a nickel to charity, in order to share your happiness with someone else. No one cares about a single nickel. You can’t buy anything with it, really. It isn’t important. Until you get a million people posting and spending nickels three times a day. Ideally, this app would be monitored to make sure that people were only posting things they’re happy about, so it’s a pleasant social media app to peruse.

True Cloud Computing

A web site that stores an individual’s computer settings in a lightweight format. Like, a Dropbox for the files, a simple word processor, some games, some other apps. Like a phone that just runs in a browser and everything’s stored on the server. Kind of like Chrome OS, without the attachment to an individual machine. It needs a really good API for people to develop for it, too. You could make a Linux distro that makes the browser part more transparent–it would still be different from Chrome OS, because Chrome OS starts from the individual computer and works onto the Web (and it’s not accessible everywhere) and this would start on the Web and just happen to work with an individual machine–any individual machine.

Real-Time, Real-World (I really considered making this one but it’s set aside for now)

A game where you take care of a third-world/impoverished family, and you can buy upgrades to get them technology that makes their lives better. What you buy actually goes to buying that technology for third-world families. If like 300 gamers buy a steel food cabinet or a well or a hygienic latrine or medicine for their virtual family, a real family somewhere gets the same thing.

Sheet Music Is Annoying

An app for musicians that displays sheet music, chords, or tabs, and can be controlled by a pair of Bluetooth-enabled pedals which flip the pages without the musician using his or her hands. Actually there are lots of ways to do this.

RSS, Get Off My Desktop

RSS, but not broken any more. It should use browser extensions or web pages rather than desktop software. It should use Internet history by date and caching to determine what content a user has seen.

Whizgig

I hate how job sites are laid out. They’re mostly just designed and commissioned by MBAs, and they suck because their search doesn’t work and the format isn’t effective. I think I could do better if I put my mind to it.

I think they should be laid out so that when someone posts a job, it feels like filling out a social media profile, and when someone looks for a job, it feels like shopping at an online site. That sounds obvious when you say it, but if you look at job sites, they really aren’t laid out like that.

Even Dice relies on kind of awful tags and whatnot–for example, “senior level” means very different things to different employers and you don’t know what you’re getting. Even on Dice, it’s hard to filter out the jobs you’re qualified for. Nobody can decide on a standard set of job titles, either, so someone searching for “Junior Python programmer” might totally miss the listing for a “Python Charmer” or “Code Ninja” or whatever weird thing they’re calling their job.

Their search is terribly broken, too. I’m a programmer, not a registered nurse–so why have I seen postings for RNs while searching for a job? That has actually happened, I think more than once.
There’s a lot to fix here if I put the time into it.

Jazz Band Beeping (this idea is something I want to see happen, but I don’t know how to do it personally)

Fast food restaurants and hospitals have one very annoying thing in common: repetitive beeping sounds. These are annoying to customers, and stressful to patients, workers, and nurses. But why beeping sounds? There’s nothing special about them that any other noise couldn’t do.

So, if you want to change it, here’s an idea.

A restaurant or a hospital room might have several different machines. Maybe two or three, maybe eight. To distinguish them, you assign each a musical instrument that would fit into a jazz band–violin, harmonica, cello, drums. You give the bass to the one that’s always running. (There’s always one. Heart monitor or whatever.) You assign the local network (the room or the restaurant) a metronome machine that keeps the instruments in sync. All the other machines in the room get their own instruments to represent them, and the nurses get instruction that hearing a harmonica is a Very Bad Thing, and hate harmonicas forever after that.

Aside from harmonica hatred, it would make those environments much more relaxing. Jazz is unstructured enough that as long as the rhythm is maintained, musical instruments popping in and out of the melody are A-OK.

The trick with this is that it would need generous funding, because you’d probably need to get a hold of medical equipment, which is expensive, and/or fast food equipment, which is expensive and often proprietary and secret. But I think it’s one of those good ideas that sounds really weird when you first hear about it.

This one probably exists as an open-source project somewhere

You know what would be really cool? A script or gedit/Sublime extension that changed your text so it fit within eighty columns. Same for code, it should be able to recognize file extensions and put in the appropriate thingy to continue the line of code. That sounds a little more difficult though.

(Ooooh, maybe I’ll write this one in Clojure later.)

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.

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.