We had the most awful churros ever today.

The day started off with a trip to the dog park and then we took off for Battery Park to go see the Statue of Liberty and Ellis Island. We didn’t get in line for the ferry until about noon and as the line conveniently passed a cart selling churros, it came up that Seth had never eaten a churro before. I had to put an end to this travesty and treated the group to the warm, cinnamon delicacy. The only problem was that these $3 treats were neither warm nor had cinnamon and tasted absolutely terrible.

They tasted so bad, in fact, that after each taking a bite of our respective churro I decided we had to return them to the vendor. I told him they were absolutely terrible and I wanted my money back. The vendor told me he would give me my money back for two of them and I said that would be fine. He gave me $6 back and took two of the churros from me leaving me with one to throw out. Before I could even walk away (are you ready for this?) he placed the two churros back in display case with the other churros. He intended to resell the two returned churros!

I wish I could have seen the face of whoever bought our second-hand churros when they realized that someone else had already taken a bite out of one end.

A couple days ago I was thinking that Christmas was sneaking up on me. I am not sure when it is supposed to “feel” like Christmas, but I wasn’t feeling like it was Christmastime yet. I think the main reason for this is lack of feeling is that it is so warm here in New York. So many of the Christmas movies that take place in NYC involve lots of snow. It is still warm enough for me to go out in a t-shirt many days. A t-shirt! In November!

Then yesterday that all changed. We had a very fun Thanksgiving that began with a trip to the Macy’s Thanksgiving Day Parade and ended with us watching the Christmas classic, Christmas Vacation. I love that movie.

And today the Christmas spirit only got stronger. We started the day off with a trip to Bloomingdale’s to see the Black Friday shoppers. Christmas music and holiday cheer were in continuos supply throughout the entire store. Everyone seemed to be in a great mood, despite the large crowds. We then walked around Fifth Avenue a bit and then went to the American Museum of Natural History. There were a ton of people and not too much holiday cheer so we split after a couple hours and decided to walk through the park. The highlight of the walk was a saxophonist playing Christmas music (just like in the movies!). We intended to make it to the other side of the park and grab a treat at Serendipity 3, but once we made it we found a 3 hour wait. Oh well, Rachel and I will just have to go back and do some shopping while we wait.

When we got back from our day in Manhattan, the new Bob Dylan Christmas in the Heart album greeted us. We dropped it on the player and have been listening to it on repeat ever since we got home.

Rachel, Crusher and I head for Kansas City three weeks from tomorrow. I know the weeks will go by fast as we are all looking forward to seeing our families.

4136693309_9fd801db1d.jpg

We got up early today to go see the Macy’s Thanksgiving Day Parade. There were people everywhere once we made it down to the parade and it was harder to find a place than we expected. After more than an hour of walking and maneuvering we found a place where we could see the floats and balloons from the park.

We were at 64th St, which is up near the start. Apparently, the famous people join the floats at a later point in the parade because we didn’t really have any extra entertainment. From where we were standing, the parade took about an hour to pass.

Even though we did a lot of walking and didn’t get a great view, I had so much fun. It entertaining to see people everywhere in the holiday spirit.

After we returned home from the parade, Rachel started making the meal. It was a fantastic meal. Rachel outdid herself again.

This year (like so many previous years), I am extremely thankful for my amazing wife, Rachel. The year didn’t start out too great, since I didn’t have a job, but Rachel was very positive as we decided to move from a home we loved to New York for me to take a new job. She has done so much work to get us settled in out new city. I am so lucky to have such a perfect wife.

I received a call at my Google Voice number today and since I didn’t recognize the number I let it go to voice mail. I found Google’s transcript to be rather amusing.

Screen shot 2009-11-25 at 9.53.49 PM.png

You be the judge.

Despite the poor transcription, the service is great.

I spend a little time tonight cleaning up the RSS items I subscribe to in Google Reader. Recently I have subscribed to sources that create way too many posts. It was too easy for me to get behind on items and so I would stop going to Reader and checking in on the things I cared about.

So tonight I dropped any feed that I didn’t feel like I had to read in its entirety and now have a much more manageable list.

I mainly dropped tech and advertising feeds that either produce too much garbage or that just post news I can get from other sources.

I am hoping this new strategy will help me keep up to date on the news I care most about.

I downloaded Google’s Chrome OS today and tried it out using VMWare Fusion. I wasn’t anticipating much, but what I saw didn’t come close to meeting my expectations. From what I had read, I knew it was just an operating system with a browser, but I figured that meant there was something else built in that no one was talking about, but no, it is really just a browser. I am confused why anyone would use the free Chrome OS on a computer when they could use Linux, also a free operating system. You could run Google’s Chrome browser in Linux if you really wanted and then have everything Chrome OS has and more.

You do have a network-enabled login, which means once you log in to the computer, you are automatically logged into your Google account. But that was the only special feature I came across.

Clearly I downloaded a preview version and they still have work left to do before they release it for wide adoption. I hope that they add a few more features that make it feel like a operating system. Something like Apple’s Dashboard would allow you to get information quickly and could still be based on the OS’s core rendering engine, Webkit.

Ultimately I was expecting something more like Jolicloud and Chrome OS fell short. It will be interesting to see which direction this OS takes, but I am hoping they add something besides just the browser that it is currently.

Seth, Rachel’s oldest brother, is in town for the week. He arrived this afternoon and we just finished planning our weeklong adventure. I am working Monday through Wednesday, so will only be able to join in the evening activities, but am still quite excited for what we have planned.

On Monday Rachel and Seth are going to the taping of The David Letterman Show. Robin Williams and someone from Twilight are the guests. After the show, we are going to meet at City Hall and walk across the Brooklyn Bridge. At the end of the walk we are going to eat at Grimaldi’s pizza. We did this last week with Shane and Alli and it went well enough for us to try it again.

Tuesday and Wednesday are a still bit up in the air. There will definitely be a few trips to museums and sightseeing, just not sure which ones yet.

On Thursday, we are leaving our apartment around 6:30 to get over to Columbus Circle (59th St right by Central Park) for the parade. After the parade, we are going to come back home and fix a traditional meal and watch a bunch of old movies.

Friday we are going to hit the streets early for some Black Friday deals. We’ve never seen how they do holiday sales and figure we should experience it and least once.

Saturday is Seth’s last full day with us. At this point we are thinking about going to Ellis Island. We haven’t been yet and it seems like one of the important places we really need to visit.

I’ve pushed a few posts this month beyond midnight, but tonight I almost forgot about my daily responsibility. Tonight’s Duck game was a nail-biter right up to the last second and ended with the Ducks coming back from behind on the road against Arizona.

The Ducks started out looking great. I was feeling pretty confident after getting up by 14 quickly. Then not much happened in the way of good plays for quite a while. To pass disappointing drive after disappointing stand, Rachel made delicious cookies and I ate them.

I am still a little too jittery from all the sugar and the great comeback to sleep, but need to tuck in soon. We have a busy day tomorrow. After a morning walk to the park I have a few duties to get ready for Seth to come for his week-long visit. I also hope to get my ad manager deployed and start running some real traffic through it – but there is a lot to do before that can happen.

Swap-bot is in need of a new platform to manage our ads. The previous application we used to manage our inventory recently went through some changes and stopped meeting our needs. As a result, I started looking around for a new system to use. After a some investigation, I decided to build my own and get exactly what we needed instead of adapting to a system that isn’t quite right.

The goal of an ad management platform is to maximize revenue for the publisher, which is done by showing whichever ad will pay the most money at that exact moment to that exact user. That, unfortunately, is much easier said than done. We work with multiple ad networks and have no idea how much they will pay us for each impression until a couple hours or days after it is served. So what do we do?

The basic strategy goes something like this:

  1. Send the first three impressions by a user that day to Network A
  2. Send the next five impressions to Network B
  3. Send the next four impressions to Network C
  4. Send all remaining impressions to Network Z

There currently isn’t a great way to do this. To maximize your revenue takes tedious analysis and lots of trial and error. You never know how many ads a user is going to see, so you want to show the real money makers first.

To see how much each network pays takes time and testing. When evaluating a new network to figure out where in the order they belong you should start by sending it three unique impressions per user per day. After about a week of this you will have a good idea of where the network stands in relation to your other networks. You should run any reports that the new network allows to get a good idea of where you are making most of your money. You should be able to learn which metrics are important to this network and then send it more of what it wants and stop sending it what it doesn’t want.

After doing this for a few years with Swap-bot ads, I have found that geography and obviously frequency are the most important differentiating factors for Swap-bot users. This means that Swap-bot users are similar on any other metrics that are important to advertisers.

Knowing this, I have decided to build a super simple ad manager. To start, my management application is only going to take daily user frequency into account. Even though I know that geography is a factor, I don’t really know where to send the foreign traffic, so adding any sort of geo-decisioning at this point wouldn’t pay off. At some point, I will have enough data to re-evaluate and add any other data decisioning in that would help us make more money.

I plan to talk more about the technical specifics in a later post, but the management app is going to be built using:

  • The Tornado framework for admin ad management and ad tag serving. Tornado is fast to develop in and faster to serve. Even with two datastore look ups per tag request, I’ve got my app up to about 2,000 requests per second on a low-end development machine. Unfortunately, that is more throughput than Swap-bot needs.
  • Nginx for handling incoming requests. Nginx is built on top of libevent and is really fast. Also, since Tornado is single-threaded I will need to run one instance of my app per core and use Nginx to reverse proxy to my four instances.
  • mongoDB for storing possible ads to serve and user cookies. Using mongoDB really makes this an easy project. It has a feature called upsert that makes tracking ad views simple and correct.

In the coming days and weeks I plan to talk more about everything mentioned here. As I build out my new system I will share the decisions I make.

Rachel and crusher doing their exercises together.

These two just make we so happy.