What I Did in 2015

The Muse suggested I write one of these to highlight my professional accomplishments, especially since this blog is listed on my resume (I don’t know if that looks kind of tacky, but LGL does give a good idea of what I’ve been doing and what skills I have, so it is practical). I guess it feels a little odd for me, because I can’t remember everything offhand myself. Fortunately, I can flip back through my archives and see what’s been up based on my blog posts.

I’m not sure who this is for, honestly. Mostly, my accomplishments last year were not exactly professional, more just personal projects and so on.

Divided up into sections which are roughly the same length, for easier reading. Not all have the same number of months. Roughly chronological order because I’m using old posts to help me remember all the stuff I did last year. (It was a lot.)

January-March

Attending community college to earn an Associate of Arts and Sciences degree in Programming (have been since the previous fall).

I was in the Linux learning stages myself, and also learning to use VirtualBox. It seems like a lot longer ago than it was. I made this blog, and wrote a post describing how to set up a Linux VM. I discovered Debian and it became my favorite distro so far. I tried learning to program in C, but didn’t go very far with it because my classes became pretty difficult right after I started getting into it, and haven’t come back to it yet because I haven’t had anything I want to make that requires low-level programming. I’m still learning the high-level stuff for now.

April-May

Took a Linux class and surprised myself with how much of the material I already knew from a few months’ odd tinkering here and there. Read Eric S. Raymond’s paper “Cathedral and the Bazaar” and wrote a bit of commentary on it. Converted a Windows box into a mostly-Linux box (it has had very few problems to date, mostly from the age of old files that needed transferring). Started looking for jobs, but as I wasn’t of age until late June, most turned me away on the spot.

Oh, and I got some kind of honor award or something because I’d gotten straight As that semester. I forget what it was. President’s List or something.

June

Started poking around in the book Head First Design Patterns. (I should come back to that.) Decided I was pretty competent with Linux and wrote the post that made this blog popular–it was actually a long time in planning, starting with a cold email to ESR about whether there was a book on learning to use Linux, and a casual remark that if not, I’d throw my links on a WordPress blog or something and send it to him so he could send it to all the other teenage nerds who were probably emailing him the same question. Instead, he put it on his “How to Become a Hacker” page–which is a courtesy I was not expecting, and suddenly this blog gained a whole bunch of readers. So many that my link above is basically superfluous, because nearly all of the people reading this are reading because of that page. I can’t thank ESR enough for this, my readers are awesome.

Anyway, June was a busy month, and I definitely didn’t stop there.

I discovered Paul Graham’s essay page and started binge-reading. I decided I wanted to start a startup (which I still do, but am putting off due to a lack of cofounder candidates until I go to a 4yr university) and began mentally designing my product. I discovered TechWeek and arranged with my parents to go during September to the Kansas City event.

Also, I turned 18.

July

Finished reading the last of PG’s essay archive. Started building a cross-platform app called tinypapers, which was to be an app to store notes, business cards, receipts, and all the other clutter paper that ends up in wallets and pockets. I spent a lot of time on that. Also wrote some casual essays on the blog based on reader comments and whatnot.

August

Wrote some more essays, including a long, rambling one about software licensing and how to compromise on it for businesses that want to make money from selling software. I probably overthought that.

Worked on tinypapers some more, had several major impostor syndrome episodes, went back to work, fixed bugs, etc.

Got my first job that had paperwork attached: a 3-month internship at an engineering company. To be honest, it wasn’t really a programming job as I’d believed, and it wasn’t something I would have wanted to keep long-term for reasons I won’t elaborate on, but it was a job, it paid more than minimum wage, and it wasn’t retail or food service, so on balance it wasn’t a bad deal.

When I went back to school later in August, I started working on Raspberry Signage. If you haven’t read about it on the blog yet, Raspberry Signage is a project I designed in response to a school official’s announcement in one of my classes that our digital bulletin boards were on some very shaky, unsupported ground, because the company that the school had been paying lots of money to maintain the boards had gone out of business.

I designed a solution in which the monitors would each get a $35 Raspberry Pi minicomputer attached to them, which would be programmed to visit a WordPress website in Chome’s Presentation Mode (which hides the navigation bar). This web site would simply display a slideshow of whatever signs we needed to show around the school.

This project is my baby, and it’s almost finished. We’re going to need some real hosting, rather than just the little Apache server I set up back in one of our labs. We’ll probably want a dedicated Internet connection for them–or at least getting them hooked up to the tablet network, which is a mysterious secret thing where only dedicated people are allowed to know the credentials and whatnot, so if we go this route, I sure hope one of their dedicated people knows how to stick together some code on a Linux box. I wish I could say the school doesn’t have anyone who’d faint at the idea of using a terminal-based text editor on Linux config files so as to give the machine access to the school network… but I can’t, because there’s bound to be at least a few people who would look at that and think we were cracking the network. And then there’s the ordeal of configuring aaaalllll the different monitors with their different screen resolutions, because I don’t think I’ve seen two around the school that are alike, and RPis are not the best at auto-configuring screen resolution, so you kind of have to do it by hand.

(I probably would not have understood most of that giant paragraph I just typed a year and a half ago. My, how far we’ve come.)

Most of the programming is done, though. I just need to tweak the image I have.

Kudos to my brother Tim Yoder for doing big, big chunks of the work on this. I didn’t have access to an RPi or anything when I came up with this idea, so he was the one who found out which config files to edit. He even poked around until he found a WP slideshow theme that fit our needs. I was going to code one by hand, being green enough not to look for the pre-invented wheel first.

September-November

Attended TechWeek in Kansas City, and visited UMKC. I really liked Kansas City and decided to apply to UMKC. (My other three choices are Chicago colleges. Chicago is pretty awesome too.)

I discovered that tinypapers was basically Evernote, and “officially” stopped working on it, as I decided I didn’t need to reinvent the wheel. (Unofficially, I’d been busy with a combination of my job and a very stressful set of classes, and hadn’t been working on it for a while.) I guess I’m still kind of holding a candle for the idea that I’ll finish it as an open-source project, but I can probably find more productive things to make.

I applied to Y Combinator with a different idea that had been in the back of my head for a while, even though I had no cofounder and they’re really reluctant to accept one-person companies (they’ve only taken a few). I got turned down; oh, well. I’ll find someone who wants to make neat stuff with me eventually.

Made a GitHub account and put tinypapers up on it. Not properly, because I had no idea how to use git at the time. It’s since been cleaned up.

December

Volunteered at my school’s “Plant Yourself in STEM” event, where we make a day out of the Hour of Code program and run other programs on the same day. I ran a Linux activity both days we held the event. My activity consisted of this game I wrote, this FAQ I wrote, and my giving a little mini-speech on what Linux and open-source was all about. It was a very successful event, and I’m proud of the work I did to help make it happen!

I also learned the basics of git and cleaned up tinypapers’s GitHub repository.

—–

Anyway, that’s what I did last year! Which also makes a history of this blog, basically, since it started in March. That reminds me: I have to figure something out for the blog’s first birthday.

It was really interesting reading through some of my old posts. I have poor emotional memory, but I’m also a good writer, so it brought back a lot. I’m remembering how much fun it was to work on a big project with big aspirations, and it’s making me want to go back to that. Maybe it won’t be tinypapers, but I want to get back into something big I can work on for eight hours straight on weekends and stuff, because that was a lot of fun.

Post in the comments below: what did you do last year that you were most proud of? It can be your proudest programming-related moment, or just your favorite accomplishment.

Signing off, and happy hacking!

–Rebekah

 

Advertisements

There’s a cool new open source project in town

It lives here and it looks neat 😀

It’s called braindump (also capitalized BrainDump), and for now, it’s a note app on that web site. However, the creator, Levlaz, says it’s just a proof of concept; he wants to make a “notes platform” out of it. I’m not entirely sure what that means, but he’s planning to elaborate about it later, over at his dev blog.

For your code curiosity convenience, braindump’s website and GitHub repo are linked over at my Links page, so you don’t have to hunt down this post if you lose a bookmark or whatever.

It is certainly not perfect. To me, this is part of what makes it fun, though–that it’s alpha-release, small enough to tinker with, easy to see what it’s supposed to do, and that it still has bugs to hunt down.

Have fun, readers! 😉

I poked around and learned something new

Story of our lives 🙂

I’ve been fiddling around trying to figure out git, which so far isn’t as complicated as I thought it was going to be–but I haven’t really done anything difficult with it yet. However, I did fix the crummy job I did of putting my tinypapers code on GitHub. My previous versioning system was done with directories rather than git, and while it worked okay for what I was doing, I really should know how to use git.

Anyway, I haven’t changed the name of the GitHub repo (although I did delete it and reconstruct it), so any links on the blog should still work. For your convenience, though, it’s here if you want to poke around and see what I was doing or if you’re learning Kivy and want some example code. I still haven’t specified licensing because I’m not sure what to do with it and don’t feel like reading up on what license I’d put on it. If someone here wants to use what I wrote as part of something else, tell me in the comments. I don’t think it’s worth much to other people as it is right now, though.

Valuable to me, though. Looks like it’s still teaching me things 🙂

Oh, by the way–I had been trying to use the GUI application for GitHub before. It’s actually a pain, don’t bother with it. Using the command line is a lot simpler and cleaner.

I want to write up my activity plan for the Linux thing but my uterus is throwing its monthly temper tantrum and I’m not feeling the greatest. Tomorrow should be better. Here, have some nightcore.

I think I’m going to rewatch Death Note and knit.

Shell scripts and planned projects

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

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

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

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

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

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

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

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

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

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

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

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

Yeah… hear me out.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Find me on GitHub!

Hey, look, it’s my 50th post! That’s great, because I’ve got something extra special for you tonight 😀

Since tinypapers is something that’s already been done by Evernote, I figure we should at least make the best use of the code I wrote that we can, and the best way I know to do that is to let you see it. So… find me on GitHub!

I haven’t decided on licensing and am not going to get to that tonight, but go ahead and poke around.

Click Robotocat here to go right to tinypapers’s repository. I did my versioning outside GitHub as I wasn’t sure if you could use GH for versioning without publishing the code, so my different versions are just in different folders because that’s how I kept them before. I know GitHub usually does it differently but I don’t have time tonight.

Robotocat

I didn’t make that image, by the way. It’s from GitHub’s Octodex, which is adorable and you should look at it.

Have fun!