The Blog

Posts from August 2011

Aug 22

My grandfather is on Facebook, why aren't you?

By Leslie Brezslin

The world is changing. It’s a blue sphere in constant motion; every second of the day produces a new life changing thought. Whether that thought is acted upon or publicized however, is debatable. Considering that fact, one of the greatest things about human nature is that we are prone to adaptation. As our environments change (consequently we are normally the cause of change), we find ways to change with. Now that that’s out of the way, marketing is a topic that’s been around since the establishment of trade. How else would you draw people to your wooden establishment and convince them that your corn is better than your neighbor’s?

The reality is that marketing has been an essential part of history and those who effectively master the far from dying art, are the most successful. Lets look at Apple for example. Their focus has been brand management since CEO Steve Jobs hopped on board. Because of this, they’ve gone from near bankruptcy to one of the top companies in the world. As of August 1, they held more cash on hand than the United States treasury. Are they selling any products that are necessary for survival of mankind? Are their products much different from those on the market?

The answer to both questions in my opinion, is no. I consciously know that there are phones that can do much more than the iPhone can. I also know that there are phones that are much more customizable and free from Apple’s unreasonable restrictions, but I want an iPhone. I know that a Windows computer has the same capabilities if not more than Mac computers, but I want the Mac even though it costs more. Why do think that is?

It’s all about the way Apple markets their products. They’ve successfully made it to the point where it’s sort of a social “norm” to have certain items. Apple products are now for the most part, fashion statements. I remember when the iPod first came out. Everyone at school wore them on their belt buckles with their shirts just above the clip so that it could be seen. Guess what, if you didn’t have one, you felt left out. Fast-forward to a few years later and it’s on a greater scale, meanwhile the main beneficiary is Apple.

So now that we’ve established the importance of marketing, how has it changed over the years? Well for one thing, you’re dealing with a new generation. Before, you had all the power and control when it came to your audience. Flash the ads on the television or radio and no matter how reluctant a viewer, the reality was that they had no choice but to watch. That was then, nowadays, people have much more control. With things like Tivo and the Internet, your audience decides what to watch and when to watch it (same goes for all other types of media). Not only that, the generation isn’t on the floor with their mom and dad, watching The Brady Bunch anymore. They’re on Facebook, Twitter or YouTube and spending countless numbers of hours a month there (I know because I am one of them). So how can you reach an audience that is no longer passive and won’t sit through your boring pitches? It’s simple, change your tactics.

First, go to where they are; don’t wait for them to come to you. Second, ask what they would like to see or what types of products they’d like to see advertised. If your product isn’t included on their lists, then you save you time and money. The fact is, people are unlikely to buy a product that they’re not in the market for. There’s been several times on YouTube where I’d be watching an ad and right before the time is up, they ask if I found the ad relevant. I normally said no in hopes of eliminating them completely but if it were for a product that I was in the market for, I would have definitely said yes.

If you look at some of the ads on those videos, they are a lot of the times relevant to what the video is showing. The fact of the matter is, if I typed in “ how to play blackbird” into YouTube, there is a huge probability that I’m interested in the guitar. Maybe I want a new one or maybe I want local lessons. At this point I don’t even watch television anymore so I, like many others, won’t sit and endure just any product pitch.

As far as Facebook and twitter, those are respectively the 2nd and 9th ranked sites on the Internet. That being said, there is a high probability that your market is there, so why aren’t you? Every company should have a Facebook and Twitter profile in my opinion, even if it is just informative. The point of those sites is self-expression. As it is “cool” to own Apple products (I think I might be on my way to becoming a fan boy), I want to “like” Apple on Facebook so that my network knows, “ hey, I’m cool”. As dorky as that sounds, that is the simplified version of the image you need to create for your company. People should want to be associated with it. Additionally, I’ll add that if you have people on your Facebook constantly pitching products at me, I will “de-friend” or “unlike” you.

That brings us on to the Twitter regime. Twitter is an amazing way to interact with your customers (the key to modern marketing – interaction). With it, you can easily find out what they like, their issues and inform them of your upcoming products. Like anything however, it can easily be abused. Consider this situation, you are following 50 people; one of those is a company. We’ll say that the remaining 49 update their statuses about 5 times a day. If you as a company are updating you status every thirty minutes, you’re spamming that person’s feed. So what’s the result? Your number of followers goes down by one whether or not they liked you. One of our practices at Agora is to update the status every 2 hours and respond to questions every hour. This way we remain visible and give our community an efficient response time without spamming everyone else.

So what are the lessons to be learned here? Target your market, go to the places that they spend most of their time and be courteous. They now have the power to choose what they will allow themselves to be exposed to so keep it relevant. Additionally, one last piece of advice, don’t use them to market your products alone. Give people information that they would like to know about as well. For example, we do not work with nor endorse Game Informer in any way shape or form. However, they post information on their site that is relevant to our audience, information that we do not specialize in producing. Since the majority of our community are gamers and would like to be kept informed, we link to some of their updates. So now that you know what it takes to formulate a success like Apple’s, what will you do with it? Let us know in the comments below or on Twitter.

Aug 12

What is it like interning with MLG?

By Brian Corrigan

What is it like Interning at Major League Gaming?

“I honestly can’t find the difference between an intern and a regular employee. Employees get one trip to a related conference every year; I was also sent to one. Employees may go to MLG events and I’ve been to two. I deploy apps to production on a daily basis, make design decisions when required and am involved in the process from top to bottom. That is why I feel MLG has been a great experience, because I’ve been completely immersed in the software development process. “– Matt Perry (Intern)

You’ve learned a bit in school, but don’t know if you’re ready for the elite work force. Well, most of us have been there so we understand. I guess one of the royalties of an internship is that you’re not expected to know everything. School has set the foundation for you and now its time to start conditioning your catalogue with experience. That’s the exact same feeling that troubled me in the beginning of this summer, so I figured that my perspective might be useful to anyone considering an internship at Major League Gaming.

To begin, you’re treated and welcomed like any other employee. Also aside from compensation, the main difference between an intern and a full time person is that the interns are expected to make basic mistakes. They know that most of us lack experience and probably won’t know exactly what we’re doing so we’re granted mentors. Additionally, the work that you are given is not very different from the projects that you’d be working on as a full time employee. So, with that in mind, exude the thought that you’ll be assigned tasks like operating the fax machine, making coffee, or fetching the mail when it arrives. The work that you are assigned is very valuable and is usually necessary for projects to progress.

“When you first start, you are taught the basic processes that allow to you integrate with the MLG workflow. After you’ve become familiar with these processes, depending on your role, you may start tending to issue tracking tickets, working on independent projects or working with your team on high-level projects. One thing is for sure: you will be challenged, so bring your A-game.” – Cameron Cope (Intern)

At some point they we’re all students so they understand the pressures and troublesome schedules that you’ll show up with. As long as you’re willing to apply yourself and learn, they are willing to work with you. Also, a lot of the current employees started out as interns so there’s always the possibility of being hired full time. It all really depends on your aspirations.

Aug 11

What do Zombies, devs and 300 have in common? Hack-a-thon!!

By Brian Corrigan

August 4th 3:00 PM: Excitement looms in their eyes as they await the fourth coming. An extraordinary combination of producers, interns, devs and more, unify to kick off the event of the century: Hack-A-thon 4. What is a Hack-a-thon you ask? Well, I’m glad you did because only the foolish can live in ignorance of the mankind’s greatest celebration. It is only that moment that we’ve all dreamed of and considered impossible as children. The one moment that all of our parents told us about, but never truly believed we’d actually see. The period when you’re granted the highest level of honor and allowed 24 hours to work on any project that should strike your chord of desire. Brilliant, isn’t it? Now, the Agorians are an interesting people. Masters of the event is only the least that could be said of their Hack-a-thon abilities.

Seeking the guiding words that will resound with them through the night’s perils, they sit restlessly as they await the official orders of the commander.

In a flash, he enters and our leader speaks. The speech rebounds off of the walls with power and echos through everyone’s mind. Simultaneously, he is demanding yet asking, telling yet not, requiring but not really. More or less something like this:

http://www.youtube.com/watch?v=TeNGVS2T_Rk

Having internalized the words that would hype them up to a sense of self-belief and desire to work, the diverse people of the Agora rejoice. They then disperse to attack the monstrous tasks that they have chosen to resolve.

Agust 4th 7:00PM: Although four hours have passed, the Agorians are still hard at work. Their determination prevents any pesky amount of noise or discomfort from discouraging them and preventing the success of the vision at hand. They have a task to fulfill and intend to do so. Bright eyed and in high spirit, they continue to bang away at their instruments.

Some have even been inspired to a level where chairs are irrelevant; working while standing up, an unnecessary yet amazing triumph.

August 5th 1:00 AM: Signs of tire begins to appear as the day progresses…

August 5th 5:00AM: The Agorians have taken the ultimate form of humankind. The zombie. Driven by their goals, the Agorian continues. He continues working without the slightest thought of rest.

Having diligently continued regardless of the obstacles, 3:00 PM arrives and the event is concluded. All of the Agorians meet at the same place that their tasks were appointed to speak of their successes and failures. Another grand Hack-a-thon has been successfully completed. Many accomplishments came out of this event and will be implemented into the natural flow of life soon. Visit our Facebook for more photos and because we’re cool.

Aug 10

Chef Explosion

By Waldo Grunenwald

Here at MLG, we use a product from Opscode called Chef to manage our server environments. Chef allows us to reliably manage our infrastructure by providing us with the ability to write code that describes how a server should be configured. While not perfect, it has served us well.

Chef leverages CouchDB for it’s datastore. CouchDB is “NoSQL” database product, similar in concept to MongoDB. CouchDB provides a lot of features and usability, but as a tradeoff for versioning, speed, and convenience it sacrifices disk space. In OpsCode’s documentation, they do helpfully point out in the “CouchDB Administration for Chef Server” page that you should periodically run a Compaction. Basically what this does is remove some of the older versions of documents.

Following their advice, we set it up as a weekly cron (in our Cron cookbook, naturally), and so it looks like this:

cron 'Compact Chef DB' do
  user 'nobody'
  weekday '1'
  hour '4'
  minute '0'
  command 'curl -X POST http://localhost:5984/chef/_compact'
end

which results in a crontab entry that looks like this:

# Chef Name: Compact Chef DB
 0 4 \* \* 1 curl -X POST http://localhost:5984/chef/_compact

One fine summer morning I came in one morning to several thousand emails saying “Chef Run Failed.” This, as you may understand, severely degraded my opinion of the morning.

Cue the Swedish Chef crying “Bork Bork Bork!”

After I determined that a full disk was the problem and deleting an old unneeded backup file to get some headroom, I found that the biggest contributor was the /var/lib/couchdb/0.10.0/.chef_design directory.

root@chefserver:/var/lib/couchdb/0.10.0/.chef_design# ls -lh
 total 96G
 -rw-rw-r-- 1 couchdb couchdb 30M 2011-07-21 18:26 07ccb0c12664d1f1ca746003182b521a.view
 -rw-r--r-- 1 couchdb couchdb 1.7G 2011-05-11 12:03 178087e2a7c06ff437482555acf60bab.view
 -rw-rw-r-- 1 couchdb couchdb 8.5G 2011-07-22 08:24 18757f7428c465dd0504ac3d5d7ce577.view
 -rw-rw-r-- 1 couchdb couchdb 8.9G 2011-07-22 08:24 367772ed026257ff1f88a1011576c9c3.view
 -rw-rw-r-- 1 couchdb couchdb 6.6M 2011-07-21 15:52 3970d32b6acb424bb4d19684bdf9aff1.view
 -rw-r--r-- 1 couchdb couchdb 8.6M 2011-07-22 08:11 91188e3c7d61bdf079eee6ca719be05c.view
 -rw-rw-r-- 1 couchdb couchdb 6.0G 2011-03-16 16:44 9f39fce5f578a23cc8cad7b3fe9b8ce9.view
 -rw-r--r-- 1 couchdb couchdb 1.4G 2011-07-22 08:24 af280ad217f6edca6276d1d1bcbc069d.view
 -rw-rw-r-- 1 couchdb couchdb 19G 2011-05-11 12:00 b96879fe1377e2b91f228109f3aac384.view
 -rw-rw-r-- 1 couchdb couchdb 565K 2011-07-20 09:31 be708387555557a5b4886292346da6bb.view
 -rw-rw-r-- 1 couchdb couchdb 3.0M 2011-07-20 11:27 d381d1f4b207dc3d9624720a7e88f881.view
 -rw-r--r-- 1 couchdb couchdb 51G 2011-07-22 08:20 fe06cf9119d23dd7fec2492b79e7ebef.view

I was surprised that there was so much disk use, since we had been running the Chef Compactions, and expected this kind of thing to be taken care of. Wondering if it was throwing some kind of error that we weren’t seeing (since it’s running as a cron), I ran it manually:

root@chefserver:~# curl -H "Content-Type: application/json" -X POST http://localhost:5984/chef/_view_cleanup
 {"ok":true}

Which yielded:

root@chefserver:/var/lib/couchdb/0.10.0/.chef_design# ls -lh
 total 70G
 -rw-rw-r-- 1 couchdb couchdb 30M 2011-07-22 08:43 07ccb0c12664d1f1ca746003182b521a.view
 -rw-rw-r-- 1 couchdb couchdb 8.5G 2011-07-22 08:43 18757f7428c465dd0504ac3d5d7ce577.view
 -rw-rw-r-- 1 couchdb couchdb 8.9G 2011-07-22 08:43 367772ed026257ff1f88a1011576c9c3.view
 -rw-rw-r-- 1 couchdb couchdb 6.6M 2011-07-22 08:43 3970d32b6acb424bb4d19684bdf9aff1.view
 -rw-r--r-- 1 couchdb couchdb 51 2011-07-22 08:42 7bbcbf585caef33abc0733282f40a22a.view
 -rw-r--r-- 1 couchdb couchdb 8.6M 2011-07-22 08:43 91188e3c7d61bdf079eee6ca719be05c.view
 -rw-r--r-- 1 couchdb couchdb 1.4G 2011-07-22 08:42 af280ad217f6edca6276d1d1bcbc069d.view
 -rw-rw-r-- 1 couchdb couchdb 573K 2011-07-22 08:43 be708387555557a5b4886292346da6bb.view
 -rw-rw-r-- 1 couchdb couchdb 3.0M 2011-07-22 08:43 d381d1f4b207dc3d9624720a7e88f881.view
 -rw-r--r-- 1 couchdb couchdb 51G 2011-07-22 08:26 fe06cf9119d23dd7fec2492b79e7ebef.view

Well, that was a significant but only partial win. Why do I still have 70GB in .view files?

What Opscode hasn’t told us about is that CouchDB has a thing called “Views”, and these can - over time - come to take up space. A lot of space. (CouchDB views are the “primary tool used for querying and reporting on CouchDB documents” according to the CouchDB Wiki.) Opscode also hadn’t mentioned that CouchDB says that these, too, need to be compacted.

The good folks on the internet, notably the CouchDB docs and a question on StackOverflow “CouchDB .view file growing out of control”.

Among our findings we came upon this link to the Compaction page in the CouchDB Documentation.

My compatriot Jeff Hagadorn and I were both looking into identifing the design view names, and he beat me to the solution:

bash -c \'for x in checksums clients cookbooks data_bags environments id_map nodes roles sandboxes users; do curl -H "Content-Type: application/json" -X POST http://localhost:5984/chef/_compact/$x ; done\'

(I had found a posting on the couchdbkit Google Group describing a script a user had written to solve this very problem here, if you prefer a Python-based solution which doesn’t require you to know your view names.)

After doing that, our disk was in a much healthier state, and our chef-db-compact recipe now looks like this:

cron 'Compact Chef DB' do
  user 'nobody'
  weekday '1'
  hour '4'
  minute '0'
  command 'curl -X POST http://localhost:5984/chef/_compact'
end

 cron 'Compact Chef Views' do
   user 'nobody'
   weekday '1'
   hour '5'
   minutes '0'
   command 'bash -c \'for x in checksums clients cookbooks data_bags environments id_map nodes roles sandboxes users; do curl -H "Content-Type: application/json" -X POST http://localhost:5984/chef/_compact/$x ; done\''
 end

which produces a crontab that looks like this:

# Chef Name: Compact Chef DB
 0 4 \* \* 1 curl -X POST http://localhost:5984/chef/_compact
 # Chef Name: Compact Chef Views
 0 5 \* \* 1 bash -c 'for x in checksums clients cookbooks data_bags environments id_map nodes roles sandboxes users; do curl -H "Content-Type: application/json" -X POST http://localhost:5984/chef/_compact/$x ; done'

Now, you may suggest that we mount this location on a separate disk. The answer is that we had. /var/lib/couchdb is a separate 100GB physical disk. The problem was that /var/log is on the / partition, and that is only a 7GB disk. Once the views had filled their disk, the couchdb and chef logfiles had swelled with errors, and even mighty logrotate could only held them off for so long.

Bear in mind that there was no impact to Production during this event; the only outcome was that new changes would not have been able to be pushed out via Chef, and a couple of filled inboxes. Nevertheless, this highlighted some of our flaws. The most important of which is that our monitoring of the server was imperfect, and we missed the alerts that the CouchDB disk was filling. Had we not missed those alerts we could have diagnosed this before it was a problem.

As an aside, in addition to just alerting when disk reaches a certain capacity, you should also watch for sudden increases in utilization. If a particular disk normally runs at 20% capacity, but overnight a logfile swells the disk to 73%, it won’t trigger your “75% Full” alert, but there is very likely a problem. One way to solve this is to record a “previous percentage” and compare that to the “current percentage” and alert in the event that there is a sudden increase.

(NOTE: Server Names have been changed to protect the guilty.)

UPDATE: I’m notified by the Senior Systems Admin at Opscode that they have added these compactions to the chef-server recipe. Their implementation is quite a bit different than ours, but no matter.

Harold “Waldo” Grunenwald Systems Engineer @gwaldo

Aug 4

Play and Learn

By Brian Corrigan

When I was in grade school, I had your typical learning experience. My teacher stood up in front of us everyday and lectured about something that I usually found utterly boring. Fast-forward to college and its still pretty much the same ordeal, except now there are more students. Having said that, you can understand the significant amount of envy that poured from my eyes as I read about the new ways that classes are being taught; one of which is video games. Imagine you went to school excited everyday because calculus was no longer your boring system of numbers and formulas. To add to it, you’ve also sparked a desire to learn because it now becomes a fun challenge. Well that’s the situation with these 6th graders who are learning via the Jason Experiment.

http://www.youtube.com/watch?v=2tB5MQwErzo

Of course, gaming is still dominated by its entertainment persona, but today we’ve seen it evolve and disperse into several different categories. One of these is education. Nowadays, a simple Google search will easily lead you to sites that specialize in this area. We’ve also witnessed it make its way into the mobile phone section and become one of the benchmarks of its category list. Educational gaming has been an aid in the Jason project, which focuses on learning through interactivity. The concept has also been used to support learning of subjects like energy flow or even adult popular subjects like politics or finance. Residing in its early stages of practical, productive use, can you see gaming evolving to become sufficient in other aspects of society?