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!

Encouragement

The last of today’s post trio; the three have a common thread.

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.

Greetings from University Town #214

Soooo.

Stuff I’ve done in the past two weeks.

  1. Moved. For the first time in my life; my parents have occupied the same house for longer than I’ve been alive, so I’d never moved before. That was my first time driving that long on the interstate, and I had a cat, a guitar, a ukulele, a younger brother, and a bunch of assorted stuff in the car with me. And people were being idiots on the road, changing their speed way more than was necessary, whipping around and doing stupid stuff. It was not a pleasant drive.
  2. Jacked up my foot. Sorry, feet. I wasn’t aware you could pull muscles in your feet??? But I think I did??? And I got a huge blister between my toes, and wow, yeah, no.
  3. Hauled loads of books, three fishtanks (two of them are small though), a heavy oak desk, a couch, a mattress, an armchair, most of my clothes, a working kitchen, and a whole bunch of other stuff into my apartment. My second-floor apartment. In a building with no elevator. I’m still missing a load of books.
  4. Signed a bunch of paperwork. Mom paid my tuition. I need to get off my butt and find the info I need to sign up for a parking pass for school.
  5. Discovered that I don’t have a dishwasher as I thought I did, but I do have a garbage disposal, which I thought I wouldn’t. This is a highly favorable tradeoff because of how much I cook.
  6. Cooked way more than usual because I do not own a microwave. This is turning out to be good for me, I think. I’m living mostly off of curry rice and stir fried whatever. I haven’t gotten tired of it yet. I did make sugar cookies and shared with my neighbors, though. Also a pease pie, although that’s a weird British thing done according to a recipe I made up inspired by a Terry Pratchett book, so I kept it to myself. It turned out saltier than I would have liked, but tasty all the same.
  7. Mostly re-set up my fishtanks. I still have a bucket of aquarium plants next to me.
  8. Worked on the YPN app. Did I mention that’s open source now??? You can contribute to it! Or just tell me how awful my code is! I know there’s crap in there I will very much hate in a year. Or a few months. Whatever.
  9. Read Lean In. I own both a GitHub account and bras, so it’s been heavily suggested to me for several years that I should read it. Despite the criticisms (and expecting them to be right), I read the book. It rather surprised me. I have a post under construction about it, but feminism is not one of my favorite topics to write about, and I find it hard to write about it in any sort of way I’m satisfied with.
  10. Discovered the cartoon Teen Titans Go! I watch easily more kids’ cartoons than any other kind of television. (British TV is up there.) It’s really funny and kind of brain dead, and that is all I ask of such things.
  11. The apartment smelled weird when I got here (I think they all do?), so I went all stereotypical middle class white girl on it with Bath and Body Works wall plugins and an assortment of scented candles. (I do like candles though.)
  12. Settled my cat in. He took the move pretty well; the biggest thing for him was the people who walk past our door, but he’s mostly gotten over that now. He still gives me the evil eye when it looks like I’m going to leave.
  13. Discovered the best Hy-Vee ever. It’s like a Whole Foods and a Schnuck’s in one building, but it’s a Hy-Vee. I bought some interesting food there to experiment. They had the Indian sauces I’d come for, but they also had legit, decent-quality ramen with no MSG, and some chicken apple sausages, and imitation crab meat (which means it’s mostly pollock, but it’s still tasty). The only things I left without that I wanted were lemongrass paste, which they were sold out of, and snack cakes, because they only sold one kind I didn’t like.
  14. Caught some kind of stupid virus that’s making me dizzy and faint and fuzzy-headed. My parents have caught it too, I think the stress weakened our immune systems. I can’t get work done in this state and it’s driving me mad.
  15. Despite that, watched a steady increase in the stability of my mental state. There was a lot of stress and anxiety floating around before the move, and we were all kind of feeding off each other. Let’s say–my tendency toward depression has a huge genetic component, and I’m glad Mom was there because even though she was pretty stressed out, she’s kind of always stressed out in one way or another and handles herself better than the rest of us. She knows when I’m having an anxiety attack, she knows what to say to make my dad stop being crazy and trying to move huge furniture by himself without even clearing a path first, she knows what will make my little brother feel better about Bekah moving away. Then she feels guilty for the fact that she can’t help us move stuff because of medical reasons, we all tell her that is stupid, she laughs and feels guilty anyway that she’s “not doing anything.”

Most of that was two weeks ago. We all survived.

The YPN app I’ve been working on is chugging along. Here, I’ll make a few screenshots to show you.

Screen Shot 2016-08-13 at 7.14.34 PM
Menu page
Screen Shot 2016-08-13 at 7.14.44 PM
Member discounts page
Screen Shot 2016-08-13 at 7.14.47 PM
Newsletter articles page
Screen Shot 2016-08-13 at 7.14.41 PM
Event calendar page
Screen Shot 2016-08-13 at 7.14.51 PM
About Us page

It looks kinda funny because it’s meant for a phone screen. It resizes just fine, I just forgot to resize the window for the screenshots.

Anyway, I’m the one who coded all this. Some other folks said they wanted to help over the summer, but they’ve forgotten, flaked out, or had Life intervene. (I know the feeling.)

Currently, my battle is with Kivy’s RecycleView: supposed to be a way to make scrolling lists of items using the MVC pattern. Obviously I need this for the discounts and newsletter pages. The problem is that RecycleView is a new and not well documented feature, and doesn’t actually even import properly yet, I assume unless you’re using the bleeding-edge dev version of Kivy. But that’s not for using–it’s too unstable for production use. So maybe I’ll have to use the deprecated (yes, deprecated even before the new one is out) ListView and ScrollView features. I know I’ve gotten those to work once before; I have old code to work from.

I really should merge back the mockups branch, now that I’m working on this. Note to self. I guess I still need to mock up the Search page, but I don’t even know if Kivy has features for that yet?

Also, I want to make it more obvious what page you’re on while you’re using the app. I think it’ll be a header in place of the search bar, in the normal page headers. That’ll be some goofy inheritance stuff to work with, though; I have the header as its own custom widget.

If you don’t know Kivy, the past three paragraphs may be incomprehensible. Sorry about that.

Anyway, the YPN people have no clue what I’ve been doing. I need to send them screenshots or something so they’re not afraid I’ve abandoned the project, too. Someone’s got to follow through on this thing.

I need a nap.

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.