Soccer and Me

Some that know me, know that I’ve taken an absurdly large interest in soccer as of late. In truth, I’ve always liked soccer since playing it as a child in little leagues. However, in St. Louis, there simply wasn’t much love for the sport of soccer. We had a soccer team there that most of the city, or even the state, was completely unaware of. SLU had a decent soccer pedigree though, giving us stars such as Brian McBride. Still though, the city was mostly unaware of soccer, and was vastly devoted to baseball. It wasn’t until I was out my own, and paying my own cable bills that I ended up with Fox Soccer Channel.

Suddenly, my weekends became infused with nonstop soccer from England in the mornings. I started taking a liking towards Chelsea, probably because they seemed to be consistently on the television. This carried on for some time, and I slowly became a Chelsea fan. Yeah, I became a EuroSnob. Eventually we moved to Chicago, and I found that people actually like soccer here. I made a few trips to the Globe Pub to catch a few English Premier League games, drink a beer, and eat a nice English breakfast. I became aware of the Chicago Fire, our local soccer team that competes in MLS. Still, in our first year I only passively watched a few games here and there. I liked them, it just wasn’t a big deal.

I still kept up with highlights, statistics, and so on, just wasn’t wildly involved with the games. Rarely did I watch them live, typically recording them and just catching them when I had spare time to kill. That continued on into the early part of this year. Then I stumbled upon the MLS SubReddit. There I found a community to talk about MLS with, discuss strategies, etc, etc. I felt like I finally found that community that makes sense for me. People that liked all sorts of geeky stuff, Internet memes, and most of all American soccer. I quickly became quite enthralled with this community, and more importantly with the MLS itself.

Before long, I was following Chicago Fire and Section8Chicago on twitter. The former obviously is the official twitter feed, while the latter is the supporter’s group for the Fire. Now, for those not familiar, soccer is a lot different than other sports. We have supporter groups which are basically your die hard fans, but all grouped together in one section. Section 8 sits right behind goal chanting, orchestrating tifo displays, and heckling opposing players. Well, one day I noticed that Section 8 was hosting a sale where for $15 you got to see us play against New England, and then a couple weeks afterwards, the L.A. Galaxy. Kristie and I debated it for a bit, but inevitably we couldn’t pass up such an amazing deal.

Within the first ten minutes of that first game, I knew I had found something that was going to continue to be quite special to me. I’m normally a quiet, shy little geek. In reality, up until the first kick I think I still was that quiet, shy person. We followed our capo (the people on the raised platform, leading the chants), and blended into the crowd of Fire faithful. It’s hard to explain. It sort of took me back to being a teenager and seeing Nine Inch Nails for the first time. It felt like I was somewhere I’d belong, except I of course grew out of being a weird goth kid. I think.

In some really, really loose ways, I look at it as my religion. Part of the allure of religion, I feel at least, is feeling like you’re a part of something bigger than yourself. Obviously, there are many ways to interpret that, but I think with traditional religion you feel like you’re a part of an overarching community. Most that know me, know that I am an Atheist (don’t worry, I’m not one of the asshole ones). I haven’t had religion for many years, so I can’t make comparisons to solidly. However, being at that New England game for me might be comparable to one singing in choir on a Sunday. Surrounded by people with a common goal or desire, and being outwardly excited about that is a fairly special thing. Letting go and enjoying a moment is pretty amazing.

I think what America sports traditionally lose is the emotion of the game. The constant action, the constant scoring, the constant need for *something* to be happening in most of our sports sucks out the ability for tension or drama to really build. I love basketball, and as the MLS playoffs wind down, I’m sure I’ll be watching much more of it. Still though, I can’t help but feel that it’s missing something. With so much going on, point swings back and forth, and so on, everything becomes insignificant until the fourth quarter. A missed shot in the first quarter means nothing at the end of the full 48. In soccer, that missed opportunity might be your last. The game might shift, you never know. Every second matters.

I’m glad to have found a community I can enjoy soccer with on Reddit, and here with the Chicago Fire. We have season tickets for next year, and I’m simply overjoyed with the idea that I’m going to see at least 17 games next year. That excitement, the laughter, the let downs, the goals and the lack thereof, I can’t wait.

The Chapter Continues

So it’s been over half a year since I posted last, and about 6 months since I started working for Medtelligent. I figured this would be as good of a time as any to reflect on what life’s been like for the past six months. Quite a bit has changed. We’ve gone to Chicago Fire soccer games, bought season tickets, and just generally became quite wrapped up in the world of American soccer. Pretty excited about all of that, but that’s basically a blog post (or perhaps a whole blog) of its own. We also moved into a new apartment that’s suiting us much, much better than our previous tiny apartment. Now we have room to move around, have guests over, and the space to even have relatives stay with us. The location is great too; close to the El, grocery store, Target, and so on. Can’t really complain much at all about that.

Really though, I kind of wanted to continue from where I left off with my last blog post. I was in the midst of changing jobs, leaving Imaginary Landscape, and going to Medtelligent. These companies are so incredibly different. As I came up on six months, I was reflecting and trying to gauge if I had made the “right decision”. In some ways even comparing the two situations is difficult just because they’re such different beasts. I’m quite happy at Medtelligent, but I was happy to some degree at Imaginary Landscape at one point as well.

Now that the first couple months of “OMG this is the best company evah!” that I had at Medtelligent, things have settled a bit. The biggest thing I like about them is that they seem to just “get it”. They understand the importance of testing, refactoring old code, rapid prototyping, and they have a strive to constantly be better. Having the right idea, doesn’t always mean you have the right execution though. We’ve had some odd cases where a prototype suddenly became treated like a production environment. Instead of making strong pushes to fix that, we kept adding features instead of trying to find a state of stability.

I get it though, I really do. You can’t always have things go perfectly. The part that keeps me happy is they realize their mistakes, and do truly work to adjust and get better. Medtelligent really tends to remind me of Contegix in how they operate. There’s always this feeling of a zillion things to do without any real end in sight. Sometimes it feels like you’re never really getting ahead, because you spend a lot of times trying to put out “fires”. On the upside, we’re getting closer and closer to stabilizing, and dealing with less fires, and producing better products as a result.

I think the best part about Medtelligent is that I get to do some pretty cool stuff. Right now we’re doing natural language processing of large volumes of data. We’re able to take data from a variety of different social media services, process it, and give users an idea of what’s being said in the set of data. As a result I get to play with nltk, MongoDB, celeryd, and RabbitMQ. It’s a fun tech stack, and working to get it to scale to process excessively large data volumes has been quite exciting. Right now the web front end to it sits on an old framework they had built before I worked there that sat on top of TurboGears 1. We’re currently in the process of converting it all to Django, so we’re also leveraging django-nonrel and the like.

I’d say probably the weirdest part about working here though, is the “culture”. They’re a small company, and there are only 4 of us that are actually in the office every single day. There is normally five of us though. The projects I work on, I’m the sole developer of. Sometimes my boss chips in here and there, but the Django conversion I’ve mentioned, I’m the only person to have viewed the source I think. The other 3 work on different projects entirely that don’t have any relation to each other, or to me. We don’t have any form of set schedules, so people come in, go to lunch, and leave at all sorts of different times. You end up with this situation where I’ve gone entire days without hearing a person speak at work.

On the upside, they do try to fix this by setting up outings. I think they realize it’s an issue, but I’m not sure they know exactly what to do about it. We’ve had a couple “happy hours” now, but with the odd scheduling situation, they end up starting sort of late. One we had on a Wednesday, we were supposed to head to a nearby bar at 5:30, but by the time everyone got together and out the door it was more like 6:45. These things happen, I understand, but for me it turned into me working “overtime” to go out for a drink. Of the three outings we’ve had now, work itself has gotten in the way of having the outing causing us to start late. I appreciate the effort, don’t get me wrong. I get the idea of “word hard, play hard”. I don’t know, I guess I find tardiness to be incredibly disrespectful. I understand five or ten minutes on occasion, but here everything runs 30-60 minutes late (meetings, parties, etc). Guess I just feel like instead of working late to have a beer, I could just go home and have a beer.

That’s one aspect that Imaginary Landscape got right. That place felt like a family, asked how my weekend was, asked how my wife was, etc. People talked to each other, went to lunch together, and had monthly meetings where everyone got together and discussed stuff to some degree. Every month there was a happy hour at 5PM, everyone stopped whatever they were doing and had a few beers there in the office rather than having to round everyone up to get them out the door. I had people to bounce ideas off of, and was probably kept a bit more honest in my code since I knew it’d be seen on occasion by other people.

I should probably wrap this up though, as it’s getting pretty length. Overall, I’m happy with the decision I’ve made, and plan on sticking with Medtelligent for quite some time. It’s a bit all work and no play, but it’s a job not a playground. I get to play with some pretty cool tech, and learn a lot of new stuff. Hopefully I’ll start blogging some more soon too. I’d like to talk about some of the stuff I’m doing with Mongo in the future, and also I’d like to talk way too much about soccer. Hell, maybe another blog for all my soccer talk is in order.

Opening a New Chapter

I’ve pined (or whined) about my current situation to some minor degree in past blog posts. I’m not generally one to just sit back, and complain about a situation though. I’m usually pretty vocal, but at the same time I work towards solving my problems, rather than wallowing in them. As such, I decided that it was in my best interests to look into new opportunities to see what my options were. I ended up with options to go back to Contegix in St. Louis where I formally worked, to work with a company here in Chicago named Medtelligent, or to wait it out longer at my current job to see what the future my end up holding.

Contegix seemed like a really good fit, but involved moving back to St. Louis. With that comes a variety of expenses, and there was some (totally justifiable) concern on their end that I was using them as a meal ticket back to St. Louis. I understand that concern, it makes sense. It’d make more sense if there was anything else in St. Louis worth exploring in the IT sector other than Contegix though :). Ultimately, that actually played a pivotal role in my staying in Chicago. I can fail here, and my potential for finding another job is significantly higher than in St. Louis. I looked a lot at the job market in St. Louis, and was worried that if something did go wrong, that I was out of luck. After all, I’m in Chicago now, because I couldn’t find work in St. Louis originally when I first left Contegix. At the end of the day, I still have a ton of respect for Contegix and what they do. They’re still the best managed Linux host money can buy, and you can’t do that without getting a lot of things right.

Staying at Imaginary Landscape wasn’t a bad option. My biggest concern was that my skill set was going to continue to languish there, as there hasn’t been a lot of work lately. At the end of the day, we just weren’t a great fit for each other in a long term situation. I still have a lot of the Contegix mindset engrained in my work ethics. My desire is to constantly push to be better, and to consistently go above and beyond. That didn’t translate very well to Imaginary Landscape. They’ve been around for awhile, and they have their way of doing things, and there’s nothing wrong with their methods per se. They are a pretty awesome company, and for the most part, really know how to treat their employees.

That leaves the option of Medtelligent, which as of May 3rd will be my new employer. I’m really excited about this opportunity. It really seems like this is the right fit for me finally! It’s a small company, which I prefer. The people there that I’ve talked with/met seem pretty cool. The methods they follow fit my style. They operate in an agile (Scrum) method for developing software, which I love. It just seemed like they “get it”. Obviously, I won’t know that for another month or so, after I’ve had some time to work with them. That’s the chance you take when changing jobs though. I’m excited about having some tougher challenges thrown my way, and learning new (to me) stuff like mongodb and the like.

Anyways, I’m looking forward to this new chapter. Maybe it’ll bring upon some inspiration, and I’ll get myself more active in open source again. This could mean less Django for me though, but that’s not necessarily a bad thing. I love Django, but I’d rather be a true, well-rounded Pythonista, than be pigeon holed solely as a Django developer. No offense to the Django people, because Django’s fantastic, and I plan on using it more in my future. I just don’t want my resume to be Django specific. I’ll be sure to update more as time passes, and I’ll let you know how the transition goes. Can’t wait!

Zootool.com API Wrapper - Pyzootool

I recently came across a site named Zootool, which as far as I can gather is basically like Delicious. My usage of such sites always works out to be basically the same. I think “Oh wow, this will be really useful for when I find sites I like, can’t read right now, but will want to tag to read later on a different PC”. The problem is that it never actually works out that way. I tag things, and never remember tagging them, and never end up actually reading whatever I tag. It boils down to a week of “Wow this is super cool!”, and then I never visit again. It’s not the site’s fault, I’m just inept.

That mini-rant aside, I noticed that the creators of Zootool were kind enough to build a small, but very useful, API on to their site. At the time I realized the only wrapper that had been written for this API was in PHP. Not wanting to see Python under represented, I decided to embark on wrapping their API up in Python. I’m pleased to say that thus far it’s turned out fairly well. I have the entire API wrapped in Python now, and everything seems to work fairly well.

Their API is REST-like, so I used httplib2 to do most of my wrappings. The library allows you to do all of the following:

  • Retrieve user data
  • Retrieve items by their uid
  • Retrieve items by popularity in the last week, day, month, or year
  • Retrieve personal items (if authenticated)
  • Retrieve a user’s friends
  • Retrieve a user’s followers
  • Add items to your zoo (if authenticated)
It’s been pretty painless to do all the wrappings, but there’s still some cleanup left to do in the code. I’d like to add some test cases, just to cover myself if nothing else. Also, there’s a few areas where you could potentially end up with some nasty exceptions on edge cases. Still, I’m pretty happy with what’s been accomplished thus far in a short amount of time.

When I was writing it, I was really trying to model how it functions after tweepy, because I’ve always enjoyed how it functions. Thanks to the maker(s) of tweepy for the inspiration. Hopefully someone finds some uses for pyzootool though, never know when you might need to do some social media data mining against it :) All the code for it can be found at my github repo, and if you just want to install it you should be able to just do “pip install pyzootool”, and enjoy.

If anyone has any feedback, criticisms, or suggestions, please let me know!

Keeping ‘Rock Stars’: Plausible?

Now, I don’t necessarily consider myself a ‘rock star’ engineer/programmer/developer/code monkey, so this isn’t some arrogant post about how awesome I am. I am awesome though, just sayin’. I recently read an article by Joe Stump, HOWTO: Maintain a Rock Star Culture, which spawned some thoughts of my own. If you haven’t read his post, go do it, it’s a great read. I think it might be better titled: “HOWTO: Keeping Your Rock Stars”, personally.

I think what shocks me a bit is how much of his post seems common sense, yet still needs to be said. Maslow’s Hierarchy of Needs has been around since 1943, makes a lot of sense, and can be applied to just about any profession. Stump’s article mainly expands and focuses that hierarchy of needs specifically for software developers, and not just any developer but ‘rock stars’. Obviously, depending on your field the type of people you will employ will be rather similar, and thus have generally similar goals. Your ‘rock stars’ are going to focus the most on the ‘Self-actualization’ and ‘Esteem’ aspects of the hierarchy of needs. Love and belonging isn’t something as an employer you can always have an impact on, other than creating a friendly environment where you employees can get along and build friendships. Safety, not much of an issue in software development really. Other than some nasty PHP code making my head nearly implode, I generally feel rather safe at a keyboard. Finally, physiological isn’t entirely relevant, you’re paying them well, that covers that.

So, self-actualization and esteem are easily the most important bits with your typical developer. Yet, for some reason, these are so often overlooked. Stump points out a lot of items that helps his developers realize these needs:

  • Engineers should drive feature development
  • Allow flexibility on how/when/where your engineers work
  • Enforce reasonable hours
  • Encourage “I don’t know” as an answer
  • Make them comfortable (desk, chair, equipment, etc)
All of them make a lot of sense. Doesn’t take a rocket scientist to connect the dots to show that a happy, comfortable employee, makes for a more productive employee.

Here’s where my curiosity comes in though. All of his tips and tricks make a lot of sense, but how does that work over the long haul? If you truly have ‘rock stars’, then you have head hunters chasing those ‘rock stars’. Some would say that the person quitting is inevitable anyways, which is probably quite true (read: Up or Out: Solving the IT Turnover Crisis). How long can these perks actually keep the employee around? Perhaps the real point is keeping awesome engineers for a couple of years, and then recruiting new ones to replace them, when the original engineer inevitably quits.

Turnover is expensive though, especially when you’re shelling out $3000 to each new developer for them to purchase their own equipment. Hence, you never want your developers to really end up leaving you, which is sort of a no-brainer. I look at my current situation, where when I came on board it felt like there were a lot of awesome perks about working with Imaginary Landscape. To be fair, there are some awesome perks. I have an incredibly cushy situation. However, I also look into the past and see a graveyard of great developers (Ian Bicking, Chris Webber, Tamas CantRememberHisLastName), which has always been a bit of a concern of mine.

I think overall what I’ve learned recently from the two articles previously mentioned is that skilled workers are always going to a quit. It really is just a question of when, not if. The life of a developer is one where the proverbial glass ceiling will always exist. You’ll always reach the point where the company you’re with will eventually run out of challenges to offer you. Really, as a tech company you’re never trying to “keep” engineers, you’re trying to prolong the amount of time that they end up sticking with you.

I think Joe Stump’s idea of building a ‘Rock Star’ culture is a step in the redirection for prolonging the amount of time you get to hang on to a great engineer. I think ultimately though, the key is to never stagnate, always encourage innovation, and constantly move forward. Essentially, all the perks in the world can create temporary happiness, but challenging (reasonable) work always ends up being more important. Perhaps it’s because many developers grow up as introverts, that playing to their ego and making them feel important seems to work so well.

Oh well, enough mindless rambling on this subject. I highly recommend reading the linked articles though. They’re really good, and quite thought-provoking.