Airport Security at It’s Finest.

Feb 3rd, 2013

RWW's New Design

ReadWriteWeb’s new design of articles pages is just an unpleasant and overwhelming barrage of text. And it’s mostly text I’m not interested in reading.

They’ve done a great of job of making scrolling distracting, by ensuring that all the content that you don’t want to see (related links, blogroll) does something you don’t expect.

Jan 31st, 2013

Rigoletto

From the WQXR review of Rigoletto at the Met

As much as Verdi has resisted updating, his tale of a nasty hunchback court jester whose daughter is killed by his own need for revenge arrived here in the early-‘80s as a gangster movie courtesy of Jonathan Miller and the visiting English National Opera. More recently in Wales, the Duke of Mantua’s decadent court became the Oval Office. Mayer’s production did everything that a Las Vegas setting threatens to do — colors never seen in nature, pole dancing, glitzy satellite chandeliers (not unlike the Met’s) and even Met titles with modern English colloquialism. Some wondered aloud why the translation even bothered to keep names like “Duke.” Why not Frank and Sammy?

Having never experienced an Opera before, and not knowing anything about the plot of Rigoletto other than what I read in Playbill, the modern setting and translation went a long way in helping me understand Verdi. In general, the few productions I’ve seen in the past few years have had odd elements alongside original text that seemed to have been put there to soften the harshness of unfamiliar colloquialisms. Superhero costumes in Shakespeare, and even the staging of Rigoletto help to make this otherwise stuffy content accessible.

Jan 29th, 2013

SSH Tunnels Made Easy

One of the classic problems in administering databases is providing secure, yet accessible tools for all those who need to run queries or examine production data. Classically, phpMyAdmin has been a great tool for handling MySQL for those who don’t know the command line. However, as any sysadmin worth his salt knows, it’s an extremely insecure tool for a couple of reasons.

  • It requires php, and specific modules, which is just one more thing to install.
  • It requires apache.
  • Apache requires port 80 to be open.

All of these things are bad, since garden variety attackers and script kiddies can potentially find your phpmyadmin installation. Since phpMyAdmin is open- source, and freely available, there always likely to be security holes. One of the best ways around this is to close phpMyAdmin off to the public via firewall, and then use an SSH tunnel to pass traffic through another server. The server hosting mysql and phpMyAdmin can safely stay hidden, with all ports closed.

Diagram, showing the flow of traffic between client and secure mysql server.

Set up looks something like this (on a Mac, at least).

  1. Install MacPorts

  2. Install Xcode command line dev tools.

Open Xcode -> Preferences -> Downloads -> Command Line Tools

  1. Install autossh , which is a tool for opening an ssh connection, and making sure it stays open. I use MacPorts to install it. http://www.macports.org/

$ sudo port install autossh

  1. Once that’s installed, you can run something like this. (Make sure that the port is the port that you configured Apache to accept traffic on.)

autossh -M 20002 -f -L 7422:your.db.served.biz.org:7422 your.jump.server.biz “sleep 99999999999”

  1. From there, you can open phpMyAdmin at a URL like http://localhost:7422/phpMyAdmin. One very convenient way to wrap all this up is to use the automator app.

Automator screenshot

Jan 27th, 2013

Rules for London

A few weeks ago, I took a trip to London and Paris. It was my first trip to Europe. Having never been to Europe, or on a real vacation for the last couple years, I was really looking to maximize my time there. So I had a couple rules while for I was there;

  1. Have a long list of things to do, but no plan.
  2. Walk or take public transportation everywhere.
  3. Get to know the neighborhoods I’m staying in.
  4. If something looks interesting, do it.
  5. Don’t be an #uglyamerican.

As it turns out, those were some really great rules. The last thing I wanted in a vacation was a schedule. Plus, if we got involved in something, and took more time than we thought, it wouldn’t matter. And following rule #2 the entire and rule #4 the entire trip, there were plenty of things that we found along the way that took up more time than we thought. The Camden Stalls, for example, were full of treasures and side alleys to explore.

Rule #2 turned out to be pretty great for a bunch of reasons. The London tube is super efficient, clean, and has wifi. The only drawback of the Underground is that it closes early, as does most of London. Walking a city is really the only way to really get to know a city. Also, getting lost is the best way to find the really cool stuff.

Jan 26th, 2013

FizzBuzz-a-thon

The FizzBuzz test is a simple way of showing that a developer has mastery of basic concepts like loops, variables and operators. Having given the test to other developers several times, I felt like a bit of hypocrite having never actually having taken it myself. I’ve also asked folks to complete the task in php, even though it wasn’t a language they were particularly familiar with. So, I decided it was time to end the hypocrisy, and give myself a little challenge:

Do FizzBuzz in as many languages as I could.

So, what did I learn?

  • With the internet, you can learn the basics of most programming languages in about 5 minutes.
  • Programming knowledge is portable between most common web languages. A loop is a loop, a variable is a variable, etc. Syntax for a task this simple can be learned in a few minutes.
  • FizzBuzz can be done in sql, bitch.
  • Clojure is hard for no reason.
  • Lisp is basically impossible to get running.
  • Languages have uptake because they’re included with the OS and have good documentation and communities. In the end, doing FizzBuzz in 10 languages took around 5 hours. There was, however, significant time taken for screwing around on Twitter, potty breaks, drinking too much coffee, curmedgeon-ing on StackOverflow, drinking beer, and making carnitas. Time was also spent looking for a way to run my FizzBuzzes in bash and benchmark them, which proved fruitless, since OS X doesn’t support nanoseconds in the date command.

For a closer look at the code, take a look at the github repo.

The Care + Feeding of a MongoDB Cluster

Thanks to all those who came to my last two MongoDB Skillshare classes. For those interested, here are the slides.

The Care + Feeding of a Mongodb Cluster from Chris Henry

The Care + Feeding of a Mongodb Cluster from Chris Henry

Oct 14th, 2012

app.net, I Smell a Pattern

After being pummeled into submission by 42924 tweets about app.net, I finally decided it was time to take a look at what seemed like a very popular concept. If (IF) I understand correctly, app.net is an attempt to reboot Twitter. The aim is to build a realtime social feed free from the shackles of advertising, and instead a focus on creating an experience tailored to its users and developers. Also, there seems to be a $50 cover.

Frankly, this undertaking seems ill advised, as does asking a bunch of people for $50 for a username. App.net is taking on the giants of the Internet who have worked for years to build product, developer community, etc. Having worked with Twitter’s APIs, I can say that Twitter has done a fantastic job of advocating for developers and providing them the tools and data to innovate. I can also say that I actually haven’t noticed much impact from advertising, and I consider myself a pretty heavy Twitter user. I also tend to have a hard time differentiating between Rob Delaney’s digital harassment and properly promoted tweets.

Looking back, this project doesn’t seem all that different from Diaspora. A small team aggravated with certain aspects of larger services that they love puts out an app that is viable, but is really a carbon copy of the original, with their own special twist. Diaspora and App.net both want their users to have control over privacy, data, and how much advertising is shoved in their face. Currently, Diaspora seems to be completely off the radar, having made practically no dent in addressing its original goals.

Building a product to address a flaw in someone else’s product seems to be a fools errand, particularly when the giants of real time social feeds are well ensconced. Building a competitor product also doesn’t seem like a great way to convince the Internet that advertising is bad. Also, the Internet doesn’t really need convincing that ads are bad. I’m relatively sure that based on diving click throughs, nonexistent conversion, and the mere existence of banner blindness that Internet advertising industry also knows that its days are numbered. Interestingly enough, the most fertile area of brand awareness actually seems to be around using real time social media to engage in simple, human ways. So I’m not sure how cutting brands out of the business model will help here.

What surprises me most about the existence of app.net is how blatantly it reinvents the wheel. The alpha was put out to show backers there was a real app behind the video. However, aside from proving they can convince folks that advertising control is bad, the actual app doesn’t really do anything innovative or different, at least that I can see. OK, you got me, there’s [data export|http://daltoncaldwell.com/we-did-it]. Realistically, this is an alpha, there’s virtually no data to export, so I would hardly consider this a marvel of engineering. When Diaspora came onto the scene, they had actually built something different, and innovative. Even Identi.ca attempted to differentiate themselves in functionality.

This entire project reeks of misdirected energy, and a “not built here” mentality. Granted, I’m a huge fan of building things that make you happy, it’s part of what keeps me going as a developer. Truthfully, the thing I love most about being a developer is that I can build whatever the fuck I want, whether it helps, hurts, solves a problem, or complicates stuff. However, I just can’t help but feel this entire project is a form of lashing out. It feels destructive to me to rally a group of smart people off of a platform that’s working well because of some flaws. Flaws which are really inherent challenges building business on the Internet. I feel like a more effective method of changing the environment would’ve been creating better ways to monetize without having to resort to advertising.

Aug 19th, 2012

MySQL's INSERT SELECT, Replication, and You

Whenever there are situations where data needs to be copied from table to table, or SELECTing lots of rows to be inserted, the INSERT SELECT is an elegant solution. It reduces the number of queries sent to a MySQL server, and makes for elegant code. Additionally, with INSERT SELECTs, all processing happens on the MySQL side. The app doesn’t have to deal with having any of the data in memory. This means that application servers can be run with less memory.

Unfortunately, INSERT SELECT’s best use cases coincide with cases where the SELECT query has the potential to run a long time. On standalone servers running InnoDB, this can be fine, as reads and writes will continue to execute concurrently. However, if you’re running MyISAM, queries will lock, and nothing will execute. Instead, queries will queue up, your application will come to a dead halt, MySQL will likely hit max_connections and Very Bad Things will happen.

In replicated environments, even well tuned ones running on InnoDB, a long running INSERT SELECT can cause other sorts of problem. MySQL replication is statement based. In other words, every statement that writes to disk on the master is written to a log. The log is then transferred to slave(s), and those statements are replayed on the slaves.

With INSERT SELECTS, every slave needs to run the same SELECT. The master will not simply pass on the results of the SELECT, but rather simply pass the same query to be executed by the slave(s). So in a replicated environment, it’s even more important to keep an eye on how long those INSERT SELECTS are running. Not only is it a waste of processing power to run the SELECT portion of the query across the entire cluster, the SELECT will actually block other statements in the log from executing. This means that the data on the slaves will become out of sync with the master, a condition called slave lag.

INSERT SELECT is a great tool, but beware of the costs of using it in certain situations.

Aug 13th, 2012

Gallow Green Is Still a bit...green

Since seeing Sleep No More a year ago, I’ve been a huge fan of the rich, immersive experience put together by Punchdrunk.  I loved the dreamy feeling of walking through an entire other world, inhabited by scared, angry, jealous shadows running, fighting and going insane. The Manderley bar, within the hotel, was an amazing experience, no less detailed than the rest of the hotel. The absinthe punch, in particular, is a fantastic drink, dark and complex, that perfectly compliments the experience.

Upon hearing that they were opening a rooftop bar at the McKittrick Hotel called Gallow Green, I instantly bought tickets and eagerly awaited the night. The entrance was similar to that of Sleep No More. After a short wait, you’re ushered into a small elevator that opens into a open floor with a coat check and a set of stairs to the roof. The rooftop garden is spacious, romantically lit, and beautifully decorated. Somehow or other, they also managed to get old rail car up there, too.

My night at Gallow Green didn’t quite have the same magic as my previous visits to the McKittrick. While I did not try any of the punches, the cocktails were disappointing. The Third Degree, a gin cocktail, tasted so strongly of warm Tanqueray that it was close to undrinkable. The Pimms Other Cup, a murky mixture of Pimms, dark rum, lemonade and a cucumber slice was potable, but only as a result of the lemonade. I’m not sure if this was the result of a bartender having an off night, or that the cocktails are just poorly conceived.

While the space was beautiful, it seems the night I was there, a private party had booked an event. My wait at the door was plagued by demands of a very entitled gentlemen, who claimed he was very important to the party. After getting cocktails, we sat down at a table marked reserved, assuming our reservation entitled us to a ‘Reserved’ table. A waitress, after asking if we were part of the party, shooed us after a few minutes, leaving Jessica and I scurrying to find a place to sit. Luckily, we found a somewhat hidden swing a few steps away from the bar, which we camped out on all night.

While the right elements are there for Gallow Green to be a fantastic experience, my night did not reflect that. However, I'm likely to go back, given the incredible quality of everything else in the hotel. Hopefully, my next reservation at the McKittrick will occur on a better night.

Jul 28th, 2012