Programming it Up!

Lately, I’ve been on a bit of a programming upswing. Thanks to Codecademy I’ve been able to work on my learning throughout the work day as well. Python has been on a bit of a back burner while I concentrate on the JavaScript heavy lessons featured on Codecademy, but I am all caught on lessons with nothing to do!

So, soon it will be back to Python. I’m nearly done with “Invent Your Own Computer Games with Python” and it has been a fantastic break from “Learn Python the Hard Way”. It isn’t challenging and holds your hand the whole way through, which is what I needed, a bit of baby stepping to get me through some of the tutorials. I stopped “Learn Python the Hard Way” at the point where I had to create my own game. It wasn’t that I couldn’t do what it was asking me, but that I wanted to do more. I was trying to create a control scheme for my game and wasn’t quite getting it, which is how I ended up at PyGame, which is also how I learned about “Invent Your Own Computer Games with Python” in the first place. Wow, what a cicle!

Now that I’ve been working with a different language I can also more clearly see how the structure of a program doesn’t change much from one place to another. The JavaScript I’ve been learning is only going to help enhance my understanding of Python.

There’s another great game-making tool out there called Melon.js. It is a game-making framework for JavaScript. It’s still in development, but is quickly updated with new features and bug fixes. There is also a nice Google Group where questions can be asked and are usually answered quickly at MelonJS Google Group.

Speaking of Google Groups I have joined a number of them, which has also helped me keep up with the latest goings on of various people’s projects. Living in Minnesota I joined PyMNtos, which is the Python meeting group for Minnesota. I have also joined PyGame, Django, Google App Engine, and various others. And, I’ve signed up for some fantastic email lists like Hacker News, JQuery, JavaScript Weekly, Python Weekly, PHP Master (which I’m not sure if I’m ever really going to bother to learn), Sitepoint and others.

Basically, I’ve mostly been reading. Reading, practicing and reading. What I need to do is decide on a project and a language and just have at it. I believe once I complete “Invent Your Own Computer Games with Python” I will go ahead and do just that. I have grand ambitions for a game, but will start more simply. I would like to create a simple, graphical game based on a board game. I love Boggle (so much!) so I think I’ll start by making a Boggle clone. Awesome idea dude! Oh yeah!

Advertisements

Fight Against SOPA and PIPA

The following is a letter I sent to my Minnesota Senators concerning SOPA and PIPA

Dear Senators Amy Klobuchar and Al Franken,

I worry about the scope of both SOPA and PIPA. I know that you have both stated that you are against SOPA, but you are both co-sponsors of PIPA. I urge you to read a couple of articles about what happens when sites are found to be infringing. It might be an eye opener and it might require you to better understand and learn about how hosting companies and DNS, Domain Name Servers, work.

The following is an article about a website named Pajiba straight from the horse’s petoot. Their website happened to be hosted on the same hard disk as an infringing website that was shut down by DHS years ago. The hard disk which contained their entire website and all of their backups of their website was confiscated because a completely unrelated website was also hosted on that server disk.

http://www.pajiba.com/miscellaneous/the-department-of-homeland-security-has-shut-us-down.php

Imagine that happening to thousands of people if SOPA or PIPA passed. Thousands, perhaps tens of thousands. We don’t know how few or how many this bill might affect, but I guarantee innocent websites will face indirect consequences of this legislation.

Also, a blog dajaz1.com was shut down for over a year for hosting infringing content when, it turns out, they hosted no infringing content.
http://www.prisonplanet.com/dhs-shut-down-blog-for-a-year-on-false-pretenses.html

They were told they could go through the motion to regain control of their website, which they did, which took them over a year to prove they’d done nothing wrong before they could be operational again.

These are just two examples of what WILL happen if PIPA gets passed. Innocent sites will accidentally be targeted, shut down, erased, dumped. The government is not a tool of any industry. Stand up and fight for honorable people. We already have bad-enough laws, the DMCA, that allows the government to take these actions against infringing websites. Don’t make it worse.

In fact, you can make it better. Instead of removing these sites without a trace why not allow thirty days, or sixty days for a website or person to prove that they are not infringing. Drastically removing innocent people’s and companies’ websites before they’ve been proven guilty is foolish and will lead to terrible consequences for the internet and website operators and maintainers.

Please reconsider your stance on this legislation and all future legislation that aims to curb piracy. It needs to be written clearly, with the help of people who understand the internet and due process, and not by lobbyists in the entertainment industry.

I appreciate your time,
Thank you,

Joseph Halvarson
Minneapolis, Minnesota

Details

I’ve started a new job. I’m doing electronic discovery for law firms. It’s been going well so far. Still in the learning stages. However, I’m starting to see patterns in programming related work. It’s all about the details…and the process.

These details and processes are not limited to just computer work, but are all around the world as well. There are processes that we follow each and every day and my eyes are becoming more open to all of these processes, and I’m beginning to question the efficiency of those processes.

I follow a pattern in my day. I wake up, I make coffee. I drink coffee, I smoke a cigarette. I shower. I get in my car. I start my car. I pull forward and to the right, then reverse into the alley. I drive to work along the same path, with an occasional deviation for various reasons. Road closure, convenience store stop. I arrive at work and I read my RSS feeds. I check my email. Then I go about learning my job. This is my M-F process. Is it efficient? I’m attempting to figure that out. What will make my life more efficient and easier?

This is just one tiny process in my life and just like programming I must follow the process and the details otherwise something will error in my brain. I will feel as though I forgot something, because I did. Just as if I forget a detail in programming the program will error and I must investigate where that error came from.

This slight change in my observation in the world, I believe, will allow me to further my learning of how to interact with the computer when programming. Structure, details, process. Pay attention. Be efficient.

A Long Time Gone

Well, since my last update it’s been quite the whirlwind of activity. I had lived in Seoul, South Korea for two years, but quit my job, flew to Vietnam for a week and a half to visit friends and am now back in Minneapolis, MN two years and three weeks after I first left. I’ve been busily looking for jobs, and unfortunately I still don’t know enough about either programming or web development to find work in those fields. There is an explosion of available work, but you apparently need some kind of skill. I have accepted a job to be a Service Desk dude for an IT outsourcing company. I start on Monday.

So, with that out of the way I’m moving on. I’ve made it up to lesson 36 in Learn Python the Hard Way, which asks to design a simple text-based adventure game similar to the game created in lesson 35. I made a plan, planned out the structure of my game and the goal of the player, but I found myself stuck. The game we made felt too simple, so I decided to try to create a text-parser for my game. It hasn’t gone so well so far. I couldn’t really think of how to begin. I thought I could just define all of the possible verbs and go from there. Then I realized how will the program know what to do when a verb is entered. How can I define North to only go through the “North” exit? I figured I could just create flags inside of each room, but so far it hasn’t been working. I ended up downloading a text-adventure system for Python called PAWS, so I could dig through what they did, and hooooo boy, it is complicated.

I’m not going to go into what I found in PAWS, mostly I just found that at this point I’m not able to create a system of such depth and finesse, but it gives me something to aspire to. Wait, who am I kidding, when it comes to programming it’s all something to aspire to right now. So, I’m working on my game and I’ll post what I end up with at the end of the week that’s supposed to be dedicated to it. I started on Sunday the 11th, so hopefully I’ll have something compiled and playable this Sunday the 18th.

Web Design and Development

Lately, I’ve been reading a lot about web design and development. I’ve seen some fantastic website designs lately and it’s gotten me reengaged with designing and developing websites. I made a website for Seoul Players and since I pushed it live sometime in February I have been slowly combing through my awful mashup of CSS code attempting to filter out the chaff and make things cleaner and more responsive. If you look at the Seoul Player’s CSS code, you’ll see I still have a lot of work to do.

What I love about web development is that it’s a constant learning experience. Maybe some would argue about that, especially veterans of the field who didn’t have a whole lot to learn between 1998 and 2004(5)ish, but lately there has been great potential unfolding with CSS3 becoming more widely implemented and HTML5 taking form. It’s a fun time to be in development but it also raises some questions:

1. Why in the world is it taking so long to develop standards to produce a proper layout on a page? http://www.dzone.com/links/rss/the_future_of_css_layouts.html

2. Why is so much fluff being added to CSS and by way, HTML? http://designshack.co.uk/articles/css/return-of-the-loading-bar-are-css3-and-html5-the-new-flash/

3. What is wrong with Apple that they help develop HTML5 and CSS3 specs only to turn around and attempt to patent what they try to implement? Apple HTML5 patent angers W3C and W3 Consortium to Invalidate Apple’s HTML5 Patents
I don’t know the answers, it’s just quite bizarre to me.

So, my Python learning experience is a bit on hold as I attempt to clean up my various website’s code. Once I get my head wrapped around that I’ll be diving right back into learning Python. While my Python experimentation is on hold I have been studying the Python library, which will hopefully be helpful when I get back to it.

What Have I Learned?

Now that introductions are out of the way, let me get into what I have learned. In Ruby, I learned that the syntax it uses is easy to remember. However, after not working with it for three months, ask me how to say Hello World, and I can’t remember. So, easy lesson number 1 is I’d better keep practicing, or I won’t remember how to do a damn simple thing. Alright, lesson learned, keep practicing, keep working, keep trying.

Well, now I’ve moved onto Python. I’ve been following a tutorial called “Learn Python| The Hard Way” and it has been helpful. I’m up to exercise 17. It’s titled More Files and it’s currently trying to get me to learn about the import function in Python. Import allows me to import other people’s code into my script so that I don’t have to code a bunch of stuff that’s already been done. Cool. I like it. It’s overwhelming.

There’s so much going on in programming that I don’t understand how anyone can master a language. I know I’ve read that no one ever “masters” a language because it’s constantly evolving, but to become so proficient is daunting. I’m in the baby steps of remembering how to structure my Python code and to get slapped with import just seems unfair. How do people even know when something has already been done for them? I suppose you just search, but how do you even know what it is you need from the code? Right now it baffles me. I believe I’ll get it. But, it will take time.

So, onto something a little more uplifting. In each of the exercises on “Learn Python| The Hard Way,” there is an extra credit section. Although I haven’t figured out all of the extra credits, which are extra tasks that can be done but aren’t explained, I have managed to wrangle out a few. Once I finish this tutorial I hope to go back through it and nail each and everyone of these extra credits. I’ll definitely update with my success later 😉

So, Python it is. Python it will be. This feels good. This feels right. There is a strong community, an active community, and a bajillion different tutorials I have found. I plan to go through each and every one until I’m confident and capable of figuring out this friggin’ thing!

Which Language?

I began uncertain of where to begin. I tried to jump into things, but had no idea where to start. My first step was to search, “Which programming language should I learn first,” which ended up being unhelpful. Everyone had different opinions and ideas for where to begin. At the time, the buzz was all about Ruby. So, I thought, what the heck, I’ll start with Ruby. This was three years ago. I began by reading http://rubylearning.com/satishtalim/tutorial.html. I quickly became overwhelmed by the tutorial and sought out other help. I eventually found http://mislav.uniqpath.com/poignant-guide/book/, which was being talked about by the Ruby community.

I went through Why’s Poignant Guide to Ruby and read about six chapters, but eventually it became less and less helpful. It got more esoteric and general as the book continued. It wasn’t until I made it through about half of the book that I realized the purpose of the book wasn’t to teach Ruby, but to help people understand the mentality, and viewpoint of a Ruby programmer. I decided to take a break from learning programming as I had to make a website for my father, www.cookiesonupperredlake.com. That break ended up lasting two and a half years.

I finally got going again in November of 2010. I went back to Ruby and tried a different tutorial, http://pine.fm/LearnToProgram/. I made it through most of Learn to Program, but again, didn’t feel like I connected with what I was trying to learn. After two months of reading and re-reading I had to take a break to make another website for an organization I’m involved in. That website is www.seoulplayers.com. I worked on that for three months and finally was ready to start programming again. I wanted to try a different language, so I searched again, “Which programming language should I learn first.” This time I found something helpful. http://lifehacker.com/5401954/programmer-101-teach-yourself-how-to-code. Ahh, so the language doesn’t matter, the understanding is all that matters. Very zen.

So, I jumped into the past and followed my heart into Python. I searched far and wide for tutorials and came up with about a bajillion. I chose one at random, a short tutorial by Richard G. Baldwin at http://www.developer.com/lang/other/article.php/625901/Learn-to-Program-using-Python-Lesson-1-Getting-Started.htm. This was supposed to have a series of tutorials, but I don’t believe the others were ever written. So, I ended lesson 1 no wiser to programming than I began.

Finally I found a tutorial that seemed perfectly suited to me. http://learnpythonthehardway.org/ by Zed A. Shaw. So far it’s been helpful and informative and has a good learning curve. It is recently revised and so I started over to go through the tutorial from the beginning again. Now that I have a good grasp of where I am in my adventures in programming I will discuss what I have learned so far, the troubles I’ve run into in learning programming and where I hope to go. Programming has been a satisfying adventure so far.

The Journey to Program has Begun

Actually, that’s not true. This journey began in 1998. I finally had my first computer and was beyond excited about the prospects. The first thing I bought was Half-Life and I immediately played through it despite my mom protesting about the violent content. I was fascinated with this world. I downloaded Counter-Strike. I played as well as my 56k AOL connection would allow. I learned how the OS worked by breaking it and fixing it. I deleted things I shouldn’t have and downloaded things I shouldn’t have and I wanted to understand. But I didn’t

But I tried. I downloaded the map creation tools for Half-Life. I started designing my own maps. I went through tutorials. I built rooms. I connected the rooms! I textured the walls! I was flying through. I played through my level. It was empty. I was lonely. I wanted something to shoot. I mean that in both ways. My character had nothing in his hand. I added an enemy. It stood there. It looked at me. It started, eyes agape, soulless. I wanted to give it vitality then I wanted to destroy it. I couldn’t figure out how to give my character a gun. But, I got caught up trying to model some objects for my map and slowly I stopped working on my map. My enemy would remain motionless inside that level. Alone.

Later, I was trying to learn how to create my own games. I searched for ways to begin and then I found it. On Ebay. It was a 3-D game maker CD. It was only 5 dollars! I had to have it. I bought it. I waited. I waited…I waited…I forgot about it. I contacted the seller. They said they sent it. I’m still waiting for my 3-D game maker CD. I could have made explosive, charming, hilarious games. I could have. But it was lost.

Programming desires fell off as I finished high school. I went to Graphic Design school. I lasted a year. I didn’t quite have the eye for design I thought I did. I transferred to a University and I decided to go after three! majors! Woah, I was ambitious. I would be an English, Art, and Computer Science major. Four years later, I still did not know how to program. My art was as lifeless as that head crab zombie in my Half-Life map. But hey, I could write a well-structured, grammatically correct essay. That’s an important and valuable life skill…right? Surprisingly, no. Not at all.

From the time I got my first computer I loved adventure games. I played the Monkey Islands, the Maniac Mansions (which was actually my first adventure game experience playing it on the NES), Full Throttle, Loom, Discworld, Hero Quest, King’s Quest, and on and on. When I was in the fifth grade I created an awesome comic book character named Super Wonder Pig. He had fantastic, violent adventures involving Elvis, an evil cow, a tiny hamster, and a giant chicken. I still had those comics. It was time to make an adventure game and I found just the tool. Adventure Game Studio.

I created all the graphics for the game. I was on top of it. I read the tutorials, I completed the tutorials. I understood the scripting. It made sense. I was making progress. Then, I wanted the characters to start interacting, for the player to start making adventurey choices…and it all went to pot. Okay, Super Wonder Pig tell Super Evil Cow that you hate her and she broke your heart. *Click* Uhh, why did you crash. Code check. Everything is fine. No missing parenthesis, no missing brackets, no missing anything. Try again. Crash. Okay, that’s okay. There’s a huge community to help rescue me from ineptitude. Check, “Nope don’t see anything wrong.” “Works for me.” “Nothing wrong, work’s for me.” Frustration. Must punch hard drive. And as if just for thinking it the hard drive crashed. All that work gone. Must start over. Not enough resolve to start again.

Fast forward three more years and here I am. With resolve. Resolve to try again. Join me as I track my journey to finally understand how to program. I’ll be posting my trials and tribulations, but mostly successes and helpful information I find along the road. This is my journey, and it has an end. That end is my journey to program.