+created_at: 2012-12-23 18:46:08 -0500
+tags: [python, php, personal, work]
+summary: "What I have been up to in 2012."
+Wow…the last article I posted was created on January 4, 2012. Almost a year ago. I doubt many people have been wondering where I was this time, but the simple answer is: work.
+Specifically, during the year 2012, I have held two separate programming jobs: an internship at [ITECS](http://www.itecs.ncsu.edu/), the Engineering IT department at [NC State](http://www.ncsu.edu/), which was part-time during the spring and full-time over summer, and a co-op at [Extreme Networks](http://www.extremenetworks.com/), a company which manufactures [purple switches](http://www.extremenetworks.com/products/products-hub.aspx), which was full-time this fall. These were my first professional programming jobs, unless [nanoc](http://nanoc.stoneship.org/)-assisted Web design counts.
+Both were Web development in PHP, and while I still prefer Python, I have grown to respect and tolerate PHP (though there may be a certain amount of Stockholm syndrome involved). This was partially due to the amazing tools developed by the [Symfony](http://www.symfony.com/) community, which are in many cases better than a lot of the stuff we have in "superior" languages like Python.
+Though while (everything else being equal) I would have preferred to be coding in Python, both jobs were incredibly useful in my professional development. I learned many important lessons about:
+* Project management (scope creep is easy, and your time estimates are always wrong)
+* Application design (overcomplication is easy, and your original design rarely works)
+* Algorithmic techniques (formal logic is a lot more useful than you think in Web applications)
+* Data processing (if you didn't create the data, it's full of holes and inconsistencies)
+* The internal workings both of corporations and universities (both are somewhat dysfunctional)
+* Working with others (no cynical one-liner here, all of my coworkers were great)
+However, despite all of this work away from the Python community, that's not to say I was completely out of sync. For one, I attended and gave a talk at the first ever [PyCarolinas](http://www.pycarolinas.org/), which was an absolutely amazing experience, and has inspired me to try and gather the resources to attend PyCon US.
+In fact, I would go so far to say that while I created far less Python code this year than I have in previous years, I was more involved in the Python community than ever before. So, when I saw Tarek Ziadé post [his version of the 2012 Python Meme](http://blog.ziade.org/2012/12/23/new-years-python-meme-2012/), I decided it would be fun to fill one out (though I have normalized the grammar somewhat).
+**1. What’s the coolest Python application, framework or library that you discovered in 2012?**
+Easily Kenneth Reitz's [Requests](http://www.python-requests.org/). Not because I used it that often, but more for the underlying principles behind it -- a simple library with an elegant and well-designed API. (For more on this, see Kenneth's talk which he gave basically everywhere in the world, [Python for Humans](https://speakerdeck.com/kennethreitz/python-for-humans).)
+(While I'm on the topic of "cool software I discovered in 2012," even though it's written in Perl, [ack](http://www.betterthangrep.com/). It is literally indispensable to me now. Every programmer should download it on every system they use.)
+**2. What new programming techniques did you learn in 2012?**
+* How to apply formal logic and discrete mathematics to programming
+* How to use relational databases effectively (I recommend [SQL Antipatterns by Bill Karwin](http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/))
+* How to use dependency injection (through working with [Symfony](http://www.symfony.com/))
+* How to talk to devices over SNMP
+In addition, I learned how to program in C thanks to my CSC 230 course (combined with reading the source of cool projects like [Lua](http://www.lua.org/) and [Redis](http://www.redis.io/)), and how to write basic Tcl scripts as part of my project at Extreme Networks.
+**3. Which open source project did you contribute to the most in 2012? What did you do?**
+This one isn't exactly an "open source project" in the traditional sense, but it is open source, and it is a project. It's the [new Web site for the LUG @ NC State](https://github.com/ncsulug/ncsulug-website). (It's not live yet, because I keep forgetting to ask Jack Neeley to update the DNS.) It's a fairly standard Django project, and I basically wrote the whole blasted thing. ;-)
+However, through the project, I was able to help my good friend [Barry "IsharaComix" Peddycord III](http://www.isharacomix.org/) learn a few things about Django. And it's nice to work on a Python project that I can actually see people using for once. :-P
+**4. Which Python blog or website did you read the most in 2012?**
+This doesn't exactly count, but my largest source of Python-related reading material was Twitter -- specifically, @mitsuhiko, @kennethreitz, @jessenoller, @jacobian, @DasIch, and others.
+Also in the category of things that don't exactly count, [Hacker News](http://news.ycombinator.com/). There are *many* things wrong with the Hacker News community (including sexism, obsession with VCs and financing, and a loathing of PHP beyond all rational justification), but there are enough solid technical articles to make reading HN worth it, and I discovered a lot of cool software and cool tricks that I wouldn't have encountered otherwise.
+**5. What are the three top things you want to learn in 2013?**
+First, **how to teach**. I haven't mentioned this on my blog before (at least, I don't remember doing so), but my long-term goal is to be a professor of computer science. I will be one step closer to this goal next semester, as I have obtained *yet another* job as a teaching assistant for CSC 116 (the class which I [roundly criticized about a year ago](http://leafstorm.us/articles/csc-116-critiqued/), but is the only class besides E 115 a random CSC undergrad can get a TA for). I'm not sure how *much* teaching experience I'll get out of it, but it's a solid first step.
+Second, **assembly and OS development**. This was inspired both by reading the book [*Code*, by Charles Petzold](http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/) (which is awesome and you should totally read it), and by Notch's work on the DCPU-16. (Also by the fact that I am taking CSC 236 and 246 -- assembly and OS, respectively -- in the upcoming semesters.)
+Third, **working out**. This isn't a "learning" thing as much as the others, but while I keep an eye on what I eat, and walk and run a lot, I am not as strong as I would like. (This becomes painfully apparent when I try to lift heavy sound equipment into the van after church.) I think it's finally time to put my student fees to good use and start legitimately working out. (If you have any advice, feel free to [tweet it at me](https://www.twitter.com/LeafStorm).)
+**6. What is the top software, application, or library you wish someone would write in 2013?**
+I feel like as far as command-line interfaces are concerned, the Python community is in the same place it was for HTTP before Requests: two options in the standard library, but both broken in different ways. And many third-party options, some of which are a lot closer to being right, but with little momentum behind any of them.
+However, the difference is that I don't think a single library will pierce the darkness. It's more likely to come (or at least, I would prefer if it came) in a Flask/Werkzeug pair -- a Werkzeug-like library with reusable, generic functionality for option parsing, ANSI output generation, etc., and a Flask-like framework designed to make writing command-line tools dead simple. Maybe something like:
+ def install(io, apps, options):
+ Installs an application from the catalog.
+ Usage: install <app: string>…
+ -s --select Select application as default
+ io.log("Installing " + ", ".join(apps))
+([Symfony\Component\Console](https://github.com/symfony/symfony/tree/master/src/Symfony/Component/Console) has a lot of the functionality I would want in such a library, as does Denis Defreyne's [Cri](https://github.com/ddfreyne/cri).)
+That was a lot. If you're interested in doing something similar, write a blog post answering the same 6 questions, and tweet it with the hashtag `#2012pythonmeme`.