Archive for the ‘Geekery’ Category

Triangle Game Conference 2010.

So I’m home after the Triangle Game Conference 2010.  I wasn’t sure if I was going to go considering it has a pretty steep entrance fee for non-students.  In the end though, I went and I am glad that I did.

First, I should say that this wasn’t really a gathering for hiring.  It was for people to come together to learn about various areas of game development, technologies, and general networking.  Looking at the conference in that light, it was really great.

The place was crawling with students though.  I’ve written plenty in the past of the wretchedness of engineers in social settings, and these past two days were like living in unwelcome drug flashbacks of poor hygiene and awkward social interaction.  Thankfully the hotel had their  AC cranked so body odor didn’t linger long.  I also noted that a lot of the merchandise involved breath mints.  Smart move on their part.

Despite the throngs of fail walking around, I did hear some really great talks by great people.  Insomniac was probably the single largest game developer there and led most of the bigger talks.  This was really good actually as they have earned the respect of a lot of developers over the years and do things differently enough to have very interesting takes on game development.

I don’t remember all of the people I talked to, but one gentleman gave a great talk on user testing and how important it is, how it is done poorly, and how it can be done well without a huge budget.  Another was a no-bullshit talk about making a game and why every excuse you can give is utter crap.  He was from Republic of Fun and was very good.  One of the few women whose talk I attended was based on educational and intergenerational interactions.  I really enjoyed her talk, because it reminded me a lot of the process I used to make games in Japan for teaching English.  One guy I talked to specializes in rapid game development.  By rapid I mean 48 hours.  He was really great to hear and eased the fear of, “Making a shitty game,” by saying, “Oh, you’ll make a shitty game, but at least it only wasted 48 hours of your life instead of more.”  There was a guy from Neogence games who talked about game immersion who said a lot of the things I’ve felt, and I spent a little time afterwards picking his brain about various immersion techniques.

I tried to talk to everyone who was interested in talking back to me and aside from the speakers who were easily cornered, the Spark Plug Games group were fantastic.  They came with everything they needed to develop a game within the two days at the conference.  They had an artist with an eisle and a programmer with a computer.  There was also a really great guy there who was in production that I talked to quite extensively about the game market, his past, my direction, and all of that.  The programmer was squirrelly and awkward, but very gifted.  The artist was very personable and also very gifted.  It was pretty eye-opening to see professionals kicking-ass at what they do right in front of you.

All in all it was a great experience, and even though I couldn’t give my resume out to anyone, I was really glad that I went.

Thursday, April 8th, 2010

Command Line Wizardry 2: Example.

So, after all that stuff I wrote a few minutes ago, I thought a real life example might be helpful.  So here is something I wrote with a brief explanation.

#!/usr/local/bin/bash
grep 12.129.157.67 namedb/* | awk '{print $1}' | awk -F / '{print $2}' | awk -F ":" '{print $1}' | uniq > sites/w1.sites
grep 12.129.157.68 namedb/* | awk '{print $1}' | awk -F / '{print $2}' | awk -F ":" '{print $1}' | uniq > sites/w2.sites
grep 12.129.157.69 namedb/* | awk '{print $1}' | awk -F / '{print $2}' | awk -F ":" '{print $1}' | uniq > sites/w3.sites
grep 12.129.157.70 namedb/* | awk '{print $1}' | awk -F / '{print $2}' | awk -F ":" '{print $1}' | uniq > sites/w4.sites
grep 12.129.157.71 namedb/* | awk '{print $1}' | awk -F / '{print $2}' | awk -F ":" '{print $1}' | uniq > sites/w5.sites
grep 12.129.157.72 namedb/* | awk '{print $1}' | awk -F / '{print $2}' | awk -F ":" '{print $1}' | uniq > sites/w6.sites

grep 12.129.157.75 namedb/* | awk '{print $1}' | awk -F / '{print $2}' | awk -F ":" '{print $1}' | uniq > sites/loadbalanced.sites

What is all of this?  Well, say you own a lot of domain names and websites and they are spread across numerous servers?  What this does is checks the DNS entries and outputs the domain.com entry for each one based on IP address.  So lets break one of these down.

grep 12.129.157.67 namedb/* | awk '{print $1}' | awk -F / '{print $2}' | awk -F ":" '{print $1}' | uniq > sites/w1.sites

First is grep.  It searches all of the files in namedb/ for any lines matching 12.129.157.69 and outputs those lines to the console.  Except, that there is a pipe so all of the output is fed into awk which simply prints out the first column of data. Which would look like this:

namedb/domain.com:www

I don’t care about that namedb part, so that output is piped into another awk comand.  The -F says to basically separate columns of data on the / character that I specified.  So then $1 is namedb and $2 is domain.com:www.  So that awk command prints $2 and gives this:

domain.com:www

I don’t care about the www so the output is piped into a final awk command which uses -F : to say to split things up on the :.  So if I print $1 that will give me:

domain.com

Finally!  The output I’ve been looking for.  Now I know that domain.com resides on whichever IP address.  Since there are lots of domains and subdomains possible like www.domain.com or mail.domain.com, and I only want to know the base domain I pipe all of that input to uniq.  Which only displays unique entries.  So if before the uniq I had 30 domain.com’s listed, uniq will only give me one.

Then, I have > sites/w1.sites.  That says to direct the output to the sites/w1.sites file.  So I don’t get output, it is written to that file.  So all I have to do is run that script, and I suddenly know where all of my domains reside.

Friday, February 12th, 2010

Command Line Wizardry 2.

Today, I thought I might just write about some general commands that help navigate files safely.

Now, the commands in the arsenal of what we’ll be using are:cat, more, grep, awk, sed, and vim

(more…)

Friday, February 12th, 2010

Command-Line Wizardry

So with the System Administration work I do now I write a lot of convoluted commands. I think there is a kind of poetry involved with it. So here are some commands I’ve used recently and a synopsis of their purpose

grep -liR --exclude='cow' foo /bar/* >> foobar.txt  &

Grep searches the content of files to match a pattern. liR tells it to only output the filenames that match, ignore the case of the pattern to match, and to search recursively through files and directories. The exclude pattern does that, anything that is ‘cow’ is ignored. Finally the output is appended to the foobar.txt file. That little & at the end tells it to run in the background. Helpful if you have more work to do.

Next is this:
rsync -avvze 'ssh' --stats --exclude-from='foobar.txt' foo.bar:/foo/ /foo/

Now for those who don’t know rsync. It is an amazing program. It’s purpose is to perform network file copies intelligently. Specifically it will only move the differences between files. It can do nearly anything under the sun related to that task.

This command in particular is going to copy everything from the remote server foo.bar to the local directory on the computer we run the command from. Now, along the way it will compare files between the two and only move ones that are different. The –excludes-from will read a file of things to ignore in this process. The -avvze ‘ssh’ does a couple of things. The two v’s increase the output to level 2, the e tells rsync to tunnel everthing through ssh, the z compresses all the data before it sends it, and the a is a shortcut for a lot of other options that make it really great for making backups.

Now, the reason I put those two commands together is simple.  You can use the grep command to find files that you don’t want to move, lets say they have sensitive login information.  Those files you don’t want rsynced are listed in a text file that you can use on the rsync command so that they will be ignored.  So rsync will copy everything but those files, so the sensitive information is preserved.

Clear as mud, right?

Thursday, February 4th, 2010

Boundaries.

There was a time when I was not very socially adjusted. Some people (Mom) might still think that. However, at some point I figured out that more people respond to a solid conversation more than discussing, “Big-O,” for various algorithms.

“Big-O” is not something you do with your girlfriend. Not in this case anyway.

Despite all of my efforts, I still get pretty cranky inside about plenty of things thanks to my need for clean and elegant solutions. The classic boundary problem is one that gets me frazzled all the time.

If I said that I was going to be at your house at 12AM Saturday, when would you be expecting me? Would you wait around at 11:59PM Friday in joyous expectation, or would you expect to see me late Saturday night?

Sure, there is an answer to that question, but the problem is that most people don’t use it correctly. Instead a lot of people use midnight to describe the second scenario and 12AM to describe the first.

I swear I’ve had debates at work about what day the actual midnight showing was for a movie. That isn’t to say they’re stupid, but rather it’s an unclear problem that nobody has reconciled yet.

In my wacky mind I think of 12:01AM the official start of the next day, 11:59PM as the last minute of the last, and 12AM the oddball minute where people go insane and start chanting, “Ia Ia.”

Kudos to whoever gets that reference.

Aside from all of that though, I really love our new place with our ample amounts of stuff. I’m especially enjoying cooking. I tolerate a lot of cooking shows, enjoy Alton Brown, and grovel at the feet of Jacuqes Pepin. The man is a wizard.

Thursday, December 17th, 2009

  • Archives

  • Categories

  • Meta