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!

New toy? Kotlin!

Kotlin

I read about this language on Medium, and I’ll let you go read that instead of writing about it here. Basically, it’s trying to be Java cleaned up, with all the libraries and support and the JVM intact. I have no clue how well that’s working.

In addition to the features listed in that article, semicolons are optional in Kotlin–and it’s kind of funny-sad how keen the web site is to point this feature out.

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.

Should You Learn To Code?

This happened recently: https://techcrunch.com/2016/05/10/please-dont-learn-to-code/

Then this happened too: https://medium.freecodecamp.com/please-do-learn-to-code-233597dd141c#.ppljou5z1

It’s not new. Exactly the same debate happened in 2012: https://blog.codinghorror.com/please-dont-learn-to-code/

Then: http://decafbad.com/blog/2012/05/16/please-learn-to-code/

Here’s pretty much the conversation that’s going on.

“Not everyone needs to learn to code. It’s a fairly niche technical skill set, used in one kind of career. Insisting that everyone learn to code is like saying everyone needs to know plumbing.” (For some reason, both articles used this analogy; maybe the second one was just ripping off Jeff Atwood’s?)

“But computers are everywhere, they break often, they’re not well understood, and the world runs on them. Even if you don’t want to be a software developer, it might be smart to have a passing knowledge of code.”

“It’s just not necessary; people have other things that require their time and energy. Besides, there are all these newbies coming out of coding bootcamps, thinking they know everything and are entitled to a job. Then they’re either horribly let down, or they go out and write bad code the rest of us have to deal with.”

“Only some bootcamps are like that, and only some students. Often bootcamp students make good open-source contributors, too. Besides, many of these students intend to go into other fields anyway–they just want to kind of know what they’re doing around software.”

“The software field is way too romanticized. People want to be a software developer because they want to look smart and get a high-paying job. In reality you’re often overworked and the job is very stressful. Lots of students enter this field with an overly optimistic idea of what it’s like.”

“True, but we also have a massive lack of coders in America. There are lots of great jobs out there, and a big reason for the overwork is that we don’t have more people in those jobs.”

Yep, that’s about it: people who are already in the field, arguing whether newbies should be encouraged to join the club.

Personally, I think these people need to calm the #%#$ down, if you’ll excuse my cartoon language.

Here’s the question that determines whether you want to code.

It’s not “Are you dedicated?”

It’s not “Do you actually like computers?”

It’s not “You’re not just in this for money or prestige, right?”

It’s this:

Do you want to?

That’s it. That’s literally the only question you should be asking. This pretentious judgment of newcomers based on their “dedication” or “talent” or any other bull as judged by an outsider who has no clue who you even are? That shouldn’t matter to you. At all. If you want to code, code. If you want to learn, learn.

If you don’t, you don’t have to, and you shouldn’t. The people who are trying to pressure you into learning anyway–saying it’s “the new literacy” or whatever–aren’t you, any more than the people who are all like “stay out of our clubhouse.” The idea that either camp can or should tell you what to do is pretentious nonsense.

But if you still want in? Welcome to the clubhouse.

I don’t care if you have kids. I don’t care if you’re not a dev by trade. I don’t care if you start off thinking you know everything–you’ll learn soon enough, unless you’re generally a jerk, in which case you have bigger problems than whether you’re good with JavaScript.

The technology field has enough natural barriers to entry without people building more. In fact, the natural barriers hold too many people back who would otherwise be great coders; that’s why there are so many bootcamps, tutorials, intro-to-programming websites, and even blogs (ahem) to help newbies in this field.

Technology doesn’t need to be only in the hands of this “elite few” that “Please Don’t Learn To Code” article writers seem to be trying to protect. (Ironically? These people are going to be the same people who’ll complain that their manager has no clue about anything they do.)

I do have this to say on the topic.

You know how in schools, we have music classes? Even though most people are not likely to become professional musicians, they’re given a class where they… probably learn to sing better, and take some lessons in music appreciation.

Why?

Because music is an art form, and studying it is its own reward.

Writing good code is making art. It’s not “like” making art. It is making art. You can write beautiful code, and it’s a joy to do so.

So if you agree with taking music lessons in seventh grade in order to better appreciate an art form, you should also be cool with the idea of people learning to code enough to recognize a beautiful piece of software. Not everyone who takes music ends up a very good singer, or is expected to end up singing professionally. If they love it and are good at it, maybe they will–or not. And that’s fine.

Isn’t that how it should be?

I’m not going to tell you that you should or shouldn’t learn to code. That’s for you to decide–based not on the opinion of some pompous person on the Internet who brags about their IQ score.

Wanting to learn is enough.

Happy hacking.

Todo: Go backpacking

I wrote about a todo-list app idea I had in my post “My Idea File.”

DaniS said:

I can think of quite a few todo list websites and apps off the top of my head, and the time-filling aspect looks like it’s heading towards the knapsack problem, so this idea is a bit too big and scary for me right now, I think. Your mention of priory assignment is cool, though, and reminded me of a chapter from Cryptonomicon by Neal Stephenson, which I don’t know whether you’ve read but is great.

I do know of lots of todo apps. I don’t know of any (without having looked) that let other people request additions to your list, or work with prioritization. Anyone can write a todo list app that sits on the phone and everything’s inputted by one person. It’s called a text editor.

I’m thinking of the people whose email inbox looks a lot like a todo list, because that’s how people ask them to do stuff. But that’s a kluge. I know these people exist because they’re usually complaining about it, and email clients are always trying to build in features to accommodate emails that are really todo-list items. What we really need is a new system, preferably one that integrates with the old one–maybe we should come up with a way to parse tasks from emails? That sounds complicated, but maybe it’s not impossible.

I get what you mean about the knapsack thing, but NP-complete problems aren’t generally difficult for small n. I’m talking about filling a few hours with a couple different tasks which might take 15min-1h. It gets way easier if your “specify how long this will take” function works in 15m increments. Then you’re working with, “I have 6 slots before my dentist appointment; find me 6 slots worth of stuff to do.” Also, if you don’t HAVE to fill every bit of time, the problem gets way easier. If the algorithm generally works, people won’t mind if it leaves 15m of free time or whatever–especially since the time estimates are necessarily estimates, and tasks often take longer than people think.

Also, if people have long stretches of time open, you generally want to make sure you get the longer tasks done then. If you have six hours of free time and doing taxes or something takes five hours, you need to prioritize that because big chunks of available time can be hard to come by. If you have a big swath of time and no long tasks, it’s a matter of sorting by priority. You decide which tasks to do to fill the spot, and then you prioritize them.

When it gets tricky is if you offer the user the option to split up big tasks. Say cleaning your kid’s room (which is a disaster) will take three hours. If you have a phone call scheduled early in the day and a hair appointment two hours later and you’re making lunch right after that and then your show is on an hour after that and the kitchen needs to be mopped sometime today… you’re probably not going to clean the room all in one sitting. Plus, you’d be pretty tired if you did it all at once anyway! So if you offer the option to break that up, then you’re approaching knapsack complications.

The solution to that would be to decide the smallest useful chunk of time to work in. 15 minutes is not really enough to pick up all the toys, and people tend to work better in slots of maybe an hour anyway. So if you split it up into 30m or 1h segments, then you’re back to relatively small n and you can work with that.

You also don’t have to use brute force–there are of course better algorithms for this–and you don’t have to get THE optimal solution. You just have to get one that works, and allow the intuitive human brain of the user to make changes to the suggested schedule.

This is a fun problem! Thoughts?

Comments!

Some of you dropped a line over here, and I’d like to respond somewhere where it’ll be easier to read than the little comments section, because there are some very good questions and I like to answer completely.

For these first two commenters, I have a long and hopefully not boring story in answer/return comment. I wasn’t sure where to break it–merby would mostly be interested in the latter half–but it doesn’t separate nicely, so I’ll leave it as one piece.

Tally said:

Hi, I’m Tally!
Just wanted to share how glad I am to have found your blog, it’s gotten me interested in making my own page to document my experiences with tech, too. You seem brilliant and really knowledgeable about hacker culture; forgive me for asking if this is already stated on your blog, as I’ve just discovered it, but I’m curious to know what about programming inspired you to study it and tech? Did it have anything to do with the O’Reilly book?

Hope you keep on writing, all the best!

merby said:

Hi Rebekah,

I discovered your blog a few days ago via ESR’s website; I’ve read through several of your posts and I just wanted to drop you a line and say how helpful they’ve been to me. I too started programming with HTML fairly young (I was 15 or so) and then went to college to study computer science. By the time I was a junior, the structure of school, even though it’s a good program at my university, had essentially killed any desire I had to work with computers. It was kind of a rough time for me in general, and I think I might just be better suited to learning this stuff outside a classroom setting. Anyway, I just graduated (NOT with a CS degree), and now, ironically, I seem to have rediscovered my once compelling urge to hack stuff. Your blog has been very encouraging and motivating for me to get back in the saddle, not to mention informative as I take the plunge into Linux. So thanks!

Also, I can totally relate to being the only girl in the CS classes and the occasional target of sexist pigs. So irritating. Good luck at the new school!

Awgh compliments ^^; Thank you! I like to think I’m pretty smart, but I’d say the people who are most knowledgeable on what I’m writing about are the people who are on GitHub doing it way more than I am, instead of writing about it. I’m kind of a n00b actually. I think basically everyone feels like a n00b for a long time in this field. It takes a lot of time and effort to become competent! But the payoff of building things is worth it.

Don’t feel shy about asking questions. Questions are the best!

 

Technology has been a big thing in my household for as long as I can remember. When I was really little, I used to sit over the shoulder of my older brother Tim as he took apart, repaired, and reassembled computers. He had kind of a little business going with it! He also, if I remember right, built me my first computer–a desktop box with a CRT monitor that sat in the living room, its main purpose serving the Hamster Dance web page to me on a regular basis, because I was three at the time.

When I was ten I took up writing long stories on the computer. It started off as kind of a little ambition–I wanted to write fairy tales and publish them for other kids to read. I wanted to send them off to a publishing agent and everything, and I did all this research and stuff. By the time I was finished with my first batch, it was a year later and 35,000 words long, if I remember right. But by then I’d just finished it so I could focus on the next project I had in mind–one I’d already begun–which took another year and another 56,000 words  (I looked it up) plus a bunch of rewriting (I was never satisfied with it).

By this point, Tim had gotten used to my habit of emailing him the latest chapters. In an effort to make this process more efficient (or perhaps in the hope of distracting me with a project and maybe even a different audience), he created a WordPress blog for me. It’s still up, but I don’t think I’ll tell you exactly where it is unless I get it into my head to revamp it and post my current writing. There’s really nothing there worth reading, just bad fantasy and high school angst. I did eventually get better, but I also stopped publishing online because I was hoping to publish my next project. Then my focus shifted to coding and interrupted its progress. My mom’s really hoping I’ll go back and finish it though.

Probably a wise move on Tim’s part, because the next two were 45K (…per revision, of which there were three–I didn’t like that one much either after I’d finished it) and 69K. My mom used to comment on the way I’d go on writing for months and months, then decide it wasn’t good enough and just about start over with the same story.

I comment on this because of two things: one, that writing fantasy novels shares a lot with writing software (remembering little details and logic and characters and motivations and items and rules of magic and making the whole thing make sense and be beautiful and entertaining to a reader–and also that length sounded impressive, but when it came to quality it just meant you had more to rewrite), and two, because my WordPress blog was my introduction to the idea that I could manipulate computers beyond just using software. (Yeah, I know, WP is software I was manipulating. Occasionally I had to look at HTML code. When you’re twelve, though, that’s kind of important. Links took me altogether too long to figure out.) But I didn’t know anyone who had a blog, and that set working with computers, in my mind, as a kind of Thing I Could Do.

Later that year, I found a program called RPG Maker XP. It was a game engine designed to make those old-looking grid RPGs–you know, they look kinda like this:

rpg screenshot

(That’s from a RPGVX game, but they’re very similar–it’s the same idea)

I found RPG Maker XP on sale for $30 once, and convinced my mom to pay for half of it. So I spent hours poring over a screen that basically looked like this:

RPG Maker XP screenshot

Once you made a “map,” as pictured above, you could double-click the little squares and create “events.” These drove gameplay–you couldn’t really do anything without them. And they were basically programming.

Each event has a “trigger” that sets it off. The one above (a screenshot from a tutorial for the more recent engine VX Ace) is for character naming, and triggers automatically. But you can also make them happen only when the player character walks up and presses Enter, or walks onto a certain square, or merely touches the event. You can choose graphics for the event–for instance, it could look like a person walking around, and the thing it does is the person talking to you. Or they might give you an item. Or open a shop menu. Or attack you.

Each of those actions would have to be programmed in. You technically didn’t have to write code. …Technically. You had to generate code using the tools. Line by line. Basically, it typed the code for you, and the whole thing ran on this big game engine that was already in place. I think it ran Ruby? But I didn’t know that then.

I did, however, think it was extremely cool, and spent many hours in front of a CRT monitor making my eyesight worse because of it. I tried to find documentation for it, but I couldn’t, and there was none (or none worth reading) in the program itself, and it wasn’t the most user-friendly, so I figured out a great many basic programming concepts on my own by trial and error. Variables. Loops. Coordinates. Timing. I learned you couldn’t have too many events on one page, or it would run really slowly (these were the Windows XP days–Vista was out I think, but we hadn’t downgraded).

That is where I learned programming concepts. That was one of the periods when I was really, truly excited about programming. So far, those periods have come to me only when I was working outside class on a project I was excited about, and I’ve never gotten that engaged in school. It’s kind of why I feel less excited about going to UNI than I think I should be.

The next year, Tim would get me a book called Head First HTML with CSS & XHTML for my birthday. I was really pleased with it–my mom half-joked that only Tim would know that what I really wanted for my birthday was a textbook. He started to go through it with me, and he’s a pretty good teacher–but I think he thought I wasn’t excited about it when he started to carefully, thoroughly explain the basics and try to make me not afraid of code. I wasn’t uninterested. I was just past the point when that level of fix was enough. By then, it took a much stronger dose to satisfy me.

I ditched RPGXP after a couple months, though. After I’d figured out the basics, I tried to do things with them–that meant trying to make the fantasy novel of that time period into a game. It didn’t work too well. I tried to write something else, but it got abandoned too.

I didn’t worry too much about this. I had lots of dud stories on my hard drive. But it was more work to abandon games. I left it alone, and started making web sites instead.

A year after that, I would take my first formal college class on coding–web design, specifically–and find out that they were getting basically everything wrong. We spent a third of the class on Flash, which I hated to the core of my being. The next third was spent learning to manually code HTML and CSS… to a far outdated standard, including scrolling marquees and gratuitous use of clipart as project requirements, and we weren’t being taught to use validators (the HTML version of a debugger; when you’re learning, it’s almost essential for catching your mistakes). The last third of the class was on the use of DreamWeaver, which at the time was just as bad as Flash. (I understand it’s grown up considerably since.)

After that, classes on VB and so forth kind of made sure my attention stayed on writing, art, and psychology rather than coding. I still enjoyed the idea of making things and the cool image of having coding skills, but it felt like work far more than play. I’m still trying to reclaim my enthusiasm. Sometimes it comes back, but… not for school stuff. Even if I liked the teacher.

DaniS said:

You ever read a blog and really empathise with a person? Virtual supportive and encouragement vibes, or something. Badly engineered education + sensitive engineering design sense + depression is not a fun combo. But it sounds like you’ve gotten through the really bad bit, at least.

And let me know, once you get back to coding, whether you ever want someone to rant at or work with. I’m still learning, but damn if it isn’t easier to do that when you’ve got something to make.

I’m working on this right now: https://github.com/RebekahAimee/ypn-app

It’s part of my “legacy” that I’m wrapping up. Not because I like the project, but because I promised to do it. I’m going to have the design docs up soon. It doesn’t have an open source license on it because it’s for an organization, and my communication with them on this particular topic was kind of vague. I’m really just building up the codebase so it’s worth it for someone else to inherit.

That’s boring though. So for you, I updated my idea file. Here you go! I’m seriously considering that bill-splitting app, but someone might have already done it.

Jan Coetsee said:

Send me an email and I will send you a link to some very cool stuff

Keep up the spirit!

Convince me you aren’t an email address harvester first. I won’t snub you if you’re a real reader, but this is the sort of generic message I’d normally stick in spam. So, if you recommend your favorite Jargon File entry, or remind me of the three virtues of a great programmer as told by Larry Wall, or tell me a very short story about a goat named Jerry, I’ll totally talk with you over email. 🙂

Or, if your links aren’t private material, feel free to post them here. 😀

Back to crazy

It’s been a while, folks. I’ve had a long post drafted up for about a month, and several times I’ve gone back to write on it, and then abandoned it for another week or two telling myself I’ll come back to it. Well, I don’t think it’s ever going to be finished, so I’m scrapping it and giving you the gist.

What’s been happening?

I’m out of school, obviously.

I left community college in late May. I didn’t graduate. I’m two classes away from the degree, but I’ve decided not to pump any more money into these jerks’ pockets–the program is a real ripoff. Still carefully not naming the school.

Why’d you quit so close to the degree?

Community college is not a good option for programmers. It’s too hard to find people with all the qualifications to teach at community college–unless they’re either flipping insane, like my favorite professor, or so inept (technically and/or socially) they can’t hold down any other job in the field. And when I say socially inept, I don’t mean, “oh haha he forgot to shower and wears weird Hawaiian shirts all the time”–I mean he does stuff like say to the only girl in the class, “You want to start a business? Like what, a scarf knitting business?”–when she’s studying programming. (He threw some patronizing little remark like that at me every day. I could have written one of those calendars.)

You don’t want to end up with one of those.

The ones who don’t know what they’re doing technically aren’t always a whole lot better. The school is running out of teachers–they overwork their best people (the “insane” teachers who are there because they like teaching or something) and everyone else seems to be fleeing the place like a filthy cat who hears the bath running. Last semester they hired this networking teacher to teach web programming like, “oh she used to run this business’s… well, everything, and she made sites for bands and stuff, let’s just stick her in front of this class.” But she wasn’t a programmer. She was a networker. This wasn’t her specialty.

Then they gave her the worst textbook ever–horrible technical design choices, no sense of code beauty, and no sense of how to write a textbook either (poorly organized, puts crucial details in easily-overlooked sidebars, poorly explained instructions, that kind of thing). The code ran, but it made my skin crawl. It did something to my brain. Two pages of instructions would take hours to complete because I’d stare at the book, stare at the screen, stare at my fish, stare at the book again, stare out the window, stare at the screen, come to my senses and try to parse the instructions, get a headache because of the weird grammar or terminology or whatever it was this time, give up, stand up, and go get some food or refill my drink. Then I’d come back and repeat the process.

This is not an efficient algorithm to follow. [citation needed]

The problem was that I was expecting to understand the book, because–here’s the kicker–I already know how to do everything it was asking. I just couldn’t figure out what it was asking without serious effort. It was like a customer with bad requirements, or Jeopardy! questions that are designed to be tough to parse even if they’re not tough to answer.

But–the other problem was that I learned good design, from an O’Reilly book, on my own, years ago. So, invariably, the way I would approach the problem posed was always different from the book’s. The book always had some weird complicated thing it wanted to do, and once I figured it out each time, I thought, “This would be near impossible to document.” Obviously–they couldn’t produce clear instructions on what they wanted you to code, which is basically documentation in a different shape.

The teacher had no clue what was wrong with the book. This was what she’d learned from, and look, it runs. None of the other students are having problems like this with the book, so why are you?

Because I know basically what good code design looks like, and it’s extremely stressful to do it this far wrong. I make TONS of stupid design mistakes myself, but those are mine and nobody’s saying they’re some kind of standard–I don’t want someone else’s forced on me and proclaimed correct. The other students just think they themselves are stupid and can’t learn this thing everyone else is saying is easy. They think it’s the problems that are hard. It’s not. You’re just not being taught well.

Because reading the book doesn’t help. After the first few weeks, I stopped reading the chapter and just skipped to the projects we had to turn in. I relied on W3Schools rather than the chunk of expensive firewood assigned to me. (Actually it was a rental textbook–I had some foresight).

Oh, and because I’m spending half my time traveling and the other half managing a full load of classes. Because this is insane, and my depression is acting up, and I have three other classes which aren’t going a whole lot better because I’m spending all my time trying to catch up in this one.

This teacher made me attempt to explain this to her at 8AM, crying, because she was giving me blowback about dropping her class. She also wasn’t listening to a thing I said, because she made me repeat answers to the same questions. She kept trying to persuade me that dropping (as, by then, a third of the class had) was a mistake.

In retrospect? Still glad I did.

This shit is typical of this school. Something like this happened every semester, if I remember right–I’ve repressed big chunks of it. Depression is weird, it screws royally with your memory, and I can’t even pull up what classes I took each term off the top of my head.

Seriously? Every semester?

I’m tryna think–first semester, that was the sexist pig teacher… second semester I remember I was taking C# because that was what I was procrastinating working on when I was writing one of my early blog posts here. What else was I taking? I think I had a Linux class the latter eight weeks… time to go look it up.

Oh! Yeah! Second semester I tried to take the same web dev class as ranted about above, but it was online from a different teacher, and he went completely off the grid. Wouldn’t answer phone calls, emails, posts on the class web site, anything. Gave us links to malware-laden downloads for programs for class, too–not illegal stuff or anything, it was FileZilla we needed, and that can be gotten easily from the project site, which is a clean download.

Third was the Raspberry Pi project, which is kind of unofficially cancelled. I got to a certain point and then said, “okay, next step is we hook up the Pis to the Internet, how do you want to do that? here are three ways” and all of them were vetoed. Can’t put them on public WiFi because it’s insecure and also really weird to program and thus weird to document–not a good option, didn’t even ask. Can’t put them on the tablet network, the password is super secret and entrusted only to certain individuals… who can’t program Linux, so can’t program it into the Pi image. Can’t build a new network branch that’s connected to the Internet because it’s “too expensive,” whatever that means. And my networking guy who was supposed to be working with me cut out on the project after an evening of hovering over my shoulder while I set up an Apache server. Which also isn’t a good permanent option, because trusting the school with managing its own server is like handing a ten-year-old boy a baby to look after for the day. And he’s an only child.

They also handed me piles of paperwork, because this was supposed to be an honors project (I didn’t want to make it an honors thing, but I let it happen against my better judgement), and the paperwork was supposed to keep me “on track”–writing timelines and crap like that. You know the sort of thing.

I still feel like I should leave documentation or something for the project in case someone sane wants to pick it up–after all, they bought the RPis–but you can’t support a project halfway and then stop. I don’t owe them anything. The coding wasn’t that complicated–they can figure it out if they want to pick this up again. Anyway, that’s what happened with Raspberry Signage. Their digital bulletin boards still suck, and they’ll most likely have to pay someone through the nose to fix the system when it finally breaks for good.

Fourth semester was the nonsense detailed above.

So what happened finally?

I dropped two of my last four classes. I kept the other two because they were things I wanted to learn, and my favorite professor was teaching them. One was Mobile App Development, and the other was Server Side Scripting, which I was horribly behind in because I’d been focusing entirely on the web dev thing.

So much so that in the last weekend before the end of term, I had exactly 2 out of 14 of the assignments done, and they were pretty much the only thing we were graded on.

This resulted in a caffeinated haze of learning PHP over the course of four days. Oddly enough, I didn’t mind it anywhere near as much as I did the web dev thing. Hard problems aren’t so much an issue for me; it’s wrong problems I don’t like. It was grueling work and PHP is kind of weird, but I did about twelve weeks’ worth of work in four days and got a C in the end. …At least that’s what my professor implied. I should go check.

…Nope, their server’s down. Something with the programming, it’s not just down down. Geniuses. I am not making this up.

wow they suck

And they didn’t even make an error page like the config file wants, so their users get this ugly generated crap. My burning desire to see what they think of my PHP skills just kinda fizzled out anyway.

Oh, they’re back up. Ten minutes later.

…Nope, down again. I give. Where was I? Oh, yeah.

So, I passed my two remaining classes (presumably). The other class was the mobile app dev thing. I’ve volunteered to work on the production project we were working with, because the amount of development we’ve (…I’ve) done on the project is at that weird stage where if the next class were to pick it up, it’d be kind of weird and difficult because I used Kivy to help with time constraints, and at this point the design is basically finished and we were starting construction. But the blueprints are kinda hard to pick up. I need to finish the mockups and publish documentation on the customer requirements and design, and program in some functionality if I can–then it’d be a project someone else could pick up. There’s a real person waiting for an app. Actually, it’s a whole organization. They aren’t paying us, but we’ve (our teacher has…) promised to make this thing, so we should keep our word. And by we, I mean me, and one other guy who hasn’t showed up doing anything yet. Dunno what he’s doing, if anything.

The project didn’t make much progress while the class was running. None of us were too hot on the mobile app thing in the first place–the textbook was another dud, it was too outdated to be useful–so we already weren’t too confident. Then the prof is trying to be as hands-off as he can, which is admirable but nobody’s taking responsibility for the project, we don’t know the tech, and we have to code for two platforms, one of which we’ve never touched. So I pop up with Kivy. It’s cross-platform, it uses Python (which is easier to program than Java or Objective-C), and I already know roughly how to use it. I know introducing a new technology to base the project on means taking over responsibility for like the whole thing, but what else was I supposed to do? So, fine. I took responsibility for half a dozen coders.

Then I found out only one of them knows what git is, and most of them don’t have Python installed because they’re running Windows.

So I pull together a big documentation post–you can find it in the archives a few posts back. Instructions on how to set up a dev machine and resources for using the technology that weren’t cost-prohibitive–which, I might say, is more than the option of not using Kivy offered.

Still couldn’t manage to get things set up. I kept asking if people were having problems, so we could work them out. Nooo, we’re fine. Then–Why aren’t we working? The machine won’t set up! I don’t understand git! I don’t have time to look at the tutorials you linked!

Fine.

So we’re here. I’ll try to make something worth learning the codebase to pick up.

So where have you been?

I took a month off of coding. I picked up my ukulele. I watched some anime. I went on a couple dates with my boyfriend. I hunted for apartment furniture. I did paperwork for the school I’m going to this fall (a real school this time). I played some of my Steam games.

Right after the PHP thing and the semester ended, I had a long weekend at my older brother’s house in Chicago. We’re usually pretty laid-back when we visit there. We hang out together, play D&D, cook and eat good food, do a little shopping.

But my brain was still set on programming. It was like when you fall asleep reading Shakespeare and wake up thinking in iambic pentameter. (Anybody else? No? Anyway.) I brought Clojure for the Brave and True and kept trying to set up Emacs. I had gone crazy. It kind of felt good. Fortunately, Emacs was throwing a fit (looked like something with their network?) and I soon gave it up and rested.

I think it’s about time to return to the crazy. I have other stuff that needs to be done–there’s a math placement test I’m not looking forward to, for instance, but I should take it sooner rather than later so I can retake it if I’m not happy with the score. (You can retake it. It’s almost like this school is actively trying not to rip me off.)

But I do intend to keep my word and do some work on the mobile app. I’m working for free, so I’m choosing when to work, but I’m going to at LEAST get the documentation up on the GitHub repository. Then it can be forked and worked on at others’ leisure. (Yes, we got permission from the customer to use GitHub.)

I also kind of want to write a forum, and try to structure it to welcome nice people and discourage jerks, à la Jeff Atwood‘s various advice. I don’t know if that’s ultimately going to happen this summer though. We’ll see.

And I still want to learn Clojure. I also have a used copy of K&R C on my desk right now (a surprisingly small book!), but it’s going to wait a while before I get to it.

So what’s up with the new school?

I’m going to University of Northern Iowa. I feel comfortable saying that because the school has a fantastic reputation–I’ve heard dozens of people say great things about it, and nothing negative. That’s crazy. My old school couldn’t get that if they bribed the whole town.

I’m going part time to start off with, to see how difficult the classes are. I have this nasty habit of taking on more work than I can handle. I get excited about things, forget to say no, don’t know my limits too well (haha), and end up doing stuff like learning a programming language in a weekend and flushing the caffeine out of my system for the next week.

I have an apartment, which I’m moving into in August, and I have all my furniture because my mom subscribes to a local estate sale mailing list (an actual snail-mail list!) and we got a ton of stuff way cheaper than I thought we could. I even have a real couch! Okay, it’s a loveseat, which is like 2/3 of a couch, but still! I have a dining room table! I have most of my kitchen!

Oh, and the place is cat friendly. Jake, my Egyptian Mau, is coming with me. Egyptian Maus are kinda like tabby cats, but with some quirks. They’re patterned with more spots and fewer stripes. They tend to be possessive of one particular person, the hairs in their fur are individually striped, and they’re #@%^ fast and muscular–like, this cat has abs. I’m Jake’s person, so the mayhem that would ensue if I left without him… well, there’s this potted plant in the living room, and whenever he’s really mad, like when we were traveling to visit colleges and I left the house for a few days and left him behind, he pees in it. Right in front of us. He knows what he’s doing. If I left for college without him, the plant would probably die, and he’d have to find something else to do. We don’t need him to get creative.

That reminds me. I need to buy a philodendron before I leave. With a big dish under it. Just in case he gets mad at me.

I think that’s about it. My next big engagement is college orientation on the 22nd. Until then, this is a good enough update, so I’m finally done with this post.

 

Edit from the next day: That server-side scripting class with the PHP that I thought I’d barely passed? I just checked. My professor gave me an A. And I mean he gave me an A. Literally all my assignments were late, and I completed just enough of them to pass percentage-wise. He knew everything that was going on and why I was struggling so much, and he must have poked a loophole in somewhere.

I don’t know what to say.

Optimizing algorithms has never been so fun

I’m here to talk about a programming game called Human Resource Machine. It was recommended on Coding Horror, so when I found it in the latest Humble Bundle, I grabbed it immediately.

https://www.humblebundle.com/eye-candy-bundle

There’s no minimum price to get it, so even if you’re kinda broke you can still grab it.

And dude. It is _so fun._ It’s difficult enough to be kinda confusing and difficult but still doable–the game uses really, really simple commands and the closest thing to recursion/looping are conditional GOTOs. You only get a couple options for the conditions, too. It seems like the best algorithms are either beautiful or mind-bendingly crazy. Readability? Who cares about that stuff? Just stick some masking tape on it. If you’re used to sane code that’s written for humans to read and only incidentally for compilers to execute, prepare to rearrange your priorities in the most fun mad-scientist way possible, pushing the system and making it your plaything.

I’m on level 18 or something after about two hours (according to Steam), and so far I’ve gotten at least one of the optimization challenges on each level that has them. You often can’t get both the speed and size challenges done at once, so they need different approaches, and it’s really difficult to figure out how to change tactics when one solution comes naturally. I seem to get into a mental groove of optimizing for one or the other at a time.

It also has a sense of humor. Instructions from management can get pretty silly. Um, but not sillier than real life–does that still count?

Anyway. Grab the game, support charity, maybe get a game about metro stations along with it (I did, haven’t tried it yet though).

I claim no responsibility for your lost productivity. You have been warned.

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