Category: Uncategorized

  • 3000

    I’m a Yankee fan, so I’m obviously rooting for Derek Jeter to get to 3000 hits. It is fashionable to criticize Jeter since his production was way down last year and is this year as well. He certainly gets All Star votes and (especially) Gold Glove votes that he does not deserve, based solely on reputation. He is not the player he used to be.

    Some people have even taken to developing browser extensions to remove Derek Jeter from web pages. That is just flat out hilarious.

    You can hate the Yankees and you can hate Jeter, but you can’t deny the accomplishments.

    Only three players got to this many hits faster than Jeter. That would be Cobb, Aaron and Yount.

    Only three other players have hit 190 hits with a .400 slugging percentage in 10 seasons (Rose, Cobb, Musial).

    Players with 10 season with 190 hits and double figures in both home runs and stolen bases? One. Jeter.

    And let’s not forget the postseason moments. The flip, the dive and Mr. November.

    Of course, the milestone I’m really waiting for is when Rivera becomes the all time save leader. 17 to go…

  • Go Mavs

    OK, like all sports fans who were not already Miami Heat fans or just total LeBron fanboys, I was rooting for the Mavs. Not that I followed them or was a Dirk fan or a Mark Cuban fan (ok, I did like him as an owner, but when did he get so classy?). I was rooting against the Heat, period.

    Of course, as the series went on, the Mavs became a compelling story. A bunch of veterans with no rings. Responding to a very tough loss in the 2006 finals. A real team. Let me repeat that one since it’s important, a real team.

    So LeBron chokes, Dwayne shows little class, Dirk rocks, Jet is crazy good, Carlisle is the new “it” coach, and Jason Kidd finally gets a ring. Seriously good stuff.

    But you just can’t beat Bill Simmons writing about this kind of stuff. I started to highlight my favorite quotes but there were just too many. So I’ll close with this quote:

    When Dirk briefly disappeared under the arena after the final buzzer, presumably to cry and collect himself, it was the most genuine sports moment of the year. He barely made it, you could see him choking up. LeBron would have done it at midcourt in front of everyone, partly for effect, and maybe that’s one of the biggest differences between them right now. You play basketball for you and your teammates, not for everyone else.

    It’s a team game after all…

  • You can’t make this up

    So let me say on the record, any ad which quotes what I said on Sunday is a falsehood, because I have publicly said those words were inaccurate and unfortunate.

    – Newt Gingrich

  • The Wedding

    While I do actually know someone who is invited to the Royal Wedding (he actually dated the bride), strangely my invitation was apparently lost in the mail.

    But no worries, there is an outdoor public viewing under the archway  under the Manhattan Bridge about 100 feet from my office. It’s at 5:30, so I’ll definitely be there.

    Wait, 5:30 AM? Seriously? Oh, never mind…

  • Amazon R&D

    One of the things I’ve always liked about Amazon as a company is their disregard for Wall Street. Their approach has always been, “we’re building a company for the long term and we don’t care about your quarterly estimates”.

    Yesterday Amazon announced financials, and they had a big miss from the Wall Street perspective. See their revenues were $360 million more than expected. Yeah, that’s got to be bad.

    But seriously, their operating income was $43 million below expected and earnings per share $0.17 below expected (that sounds small but is a big miss). Apparently, among other things, Amazon hired a few thousand extra people. So Wall Street initially freaked out.

    Jeff Bezos, their CEO, issued a long commentary. If every CEO on the planet could speak this well about technology we’d be in good shape.

    There was one line that everyone should etch into their brains. And ask how any technology company they work with is applying it:

    Invention is in our DNA and technology is the fundamental tool we wield to evolve and improve every aspect of the experience we provide our customers

    Amen.

    His full text is here.

    And by the way, the next day Amazon stock was up 14%.

  • Time Marches On

    Hard to believe 9 years have passed since 9/11. But to some extent it does seem like a very long time ago. So many things have changed.

    Here’s the link to my old post remember the folks we lost.

    This is the web site that shows the progress being made building the new World Trade Center. In all the recent debates, no one seems to mention that it is up to 36 floors. And this construction web cam clearly shows where the reflecting pools are being built.

    We move forward, but always remember the friends we lost.

  • Android Growth

    The chart below (from admob) shows use of mobile web sites and app from smartphones, based on ads. It’s not a pure usage stat, so take it in context. But still, that’s some serious growth by Android in 2009. And sorry RIM, but iPhone and Android add up to 81% of the total.

  • Geeky DBA stuff

    I’ve turned into a SQL Server DBA lately. We had been doing database backups manually (since our client data volume is fairly small) but as we grow automating everything becomes important.

    There is a simple reason people like SQL Server. It’s just easy to administer. I know the Oracle fans out there will say you can do more, but the simple fact is that I needed to learn SQL Server maintenance plans, backups and restores, best practices and implement them on a production server.

    It took less than a day.

    Of course, there’s no substitute for experience and I’m sure I will learn more and more, but the simple fact that this can be done so easily means that I can get back to developing features that our clients will like.

    We also wanted an automated way to do a restore for a single client in a multi-client database. This is tricky if you don’t want to bring down the database and you don’t want to do a restore on the entire database.

    The SQL MERGE command is very useful here, allowing you to merge two tables (backup and target for example) with different options for when you find a match (update the target from the backup), find a record only in the source (insert into target) or find a record only in the target (delete). Very handy and quite fast.

    But the problem with the MERGE command is that you have to specify every column. You also need to be careful to do the tables in dependency order, otherwise you may get a failure due to foreign keys.

    So how do you maintain such a huge script when you are developing rapidly and changing the data model fairly frequently? Well, you have to automate the generation of the script, of course.

    So this has been my geeky SQL Server DBA experience.

    How do you get your tables in dependency order? First you need a list of tables in the schema. That one’s easy:

    select name From sys.tables where name not like ‘sys%’ order by name

    Then you need to know what tables each table depends on:

    EXEC sp_MSdependencies <tablename>

    That returns the tables that <tablename> depends on. So a simple recursive function can get a list of tables in dependency order. This amused my geeky side because I can’t remember the last time I used recursion, but this is one of those perfect cases for it.

    A gazillion years ago, when I actually did the hiring of developers I would sometimes ask a recursion question. Not because you are likely to need recursion, just to gauge the developers mindset. Recursion seems to be one of those things that some minds grasp easily and others always struggle with. Good developers always fall into the former category.

    With the tables in the right order, you then just need to be able to get column information from SQL Server. To get columns in a table:

    select c.name ColumnName FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    where t.name = ‘<tablename>’
    order by t.name, c.column_id

    You may need to know the primary key for a table:

    select c.COLUMN_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk,
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
    where pk.TABLE_NAME = ‘<tablename>’
    and CONSTRAINT_TYPE = ‘PRIMARY KEY’ and    c.TABLE_NAME = pk.TABLE_NAME
    and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME

    And you’ll need to know if the table has an Identity column or not, so you know if the INSERT requires you to turn Identity Insert on or not:

    select c.name FROM sys.columns AS c 
    INNER JOIN sys.tables AS t 
    ON t.[object_id] = c.[object_id]
    WHERE c.is_identity = 1
    and t.name = ‘<tablename>’

    With that information, I wrote a program to generate a script that creates MERGE statements for every table in the proper order. This will do a single client, in place, live restore (also works to copy a single client to a new database).

    Totally automated restore scripts, no matter how often we change the database. Sweet.

    OK, I am a geek…

  • Leaning Droid

    The phone upgrade saga continues. This week I made one actual decision. I’m sticking with Verizon.

    I had my revelation during an Origami Risk team conference call. The kids were out so I was actually working at home. I started the call on my land line. But we were getting an echo from my phone. I’m pretty sure the echo was due to my headset and phone not playing well together, but to move the call forward I switched to my cell phone. And I didn’t think twice about doing it. I never think twice about using my cell phone. At a coffee shop I sometime worry about background noise, but I never worry about signal.

    I know many people with iPhones, my wife being one of them. They totally love their phones. But they always talk about dropped calls. And I have plenty of experience with this, talking to them and suddenly hearing silence. It dawned on me, with my current cell phone I’ve never had a call drop. It never happens.

    I have no office. My cell phone is my office phone. I need to be mobile. And I need to be able to count on my phone. At the end of the day, network coverage is my #1 priority. Sorry AT&T, I’m not switching.

    So that leaves me with a few choices:

    1. Motorola Droid
    2. HTC Eris
    3. Wait

    Option 3 is somewhat compelling. There are plenty of rumors that Verizon will have the iPhone sometime in 2010. And Google is supposedly building their own Android phone.

    I’ve been comparing the Droid and the Eris. The Eris is a nice looking phone. It’s sleeker than the Droid. HTC put a nice face on top of Android. But ultimately it’s an inferior processor and I want my phone to rock.

    So I’m leaning Droid. I’ve checked out the apps and while they don’t compare to the iPhone, the important ones for me are there and there are enough interesting ones for my kids.

    But there’s plenty of time to change my mind…

  • Happy Anniversary

    Our wedding anniversary was last Saturday, but that’s not what this post is about. Tomorrow is another anniversary. Not quite as significant as our wedding anniversary, but a very impactful one nonetheless.

    One year ago, I and the entire New York office were let go by CS STARS.

    Time flies, at least when you’re having fun.

    It’s been a very interesting year. We’ve certainly done some belt tightening, but these days who hasn’t? There’s certainly been some uncertainty and stress. But if you told me I could wave a magic wand and have my job back the way it was before, I’d look at you like you were nuts.

    I’ve learned an incredible amount over the past year. In no particular order:

    • Four talented people on a mission with no constraints can accomplish more than 40 in a highly structured bureaucracy.
    • Those four people will have way more fun.
    • Between open source tools, very cheap tools and other startup friendly deals, you can build enterprise software incredibly cheaply.
    • Any web developer not using jQuery is crazy
    • Half a feature really is better than a half-assed feature.
    • Free WiFi is ubiquitous in Brooklyn. I can work pretty much anywhere.
    • I still really enjoy coding
    • Supporting multiple browsers isn’t that hard, if you start out assuming that you will support multiple browsers.
    • A small team of talented people that understand the business don’t need to use Scrum or XP or RUP or any other prescribed methodology.
    • But TDD and a focus on automated testing certainly helps.
    • Working outside is really nice
    • Socks are optional
    • Khakis doubly so
    • When working in coffee shops you should occasionally order decaf

    After one year, I still don’t know how our new business will turn out. Things are going very well but any new business has concerns.

    To the folks still at CS STARS, I do miss the people (well, most of them). And I wish everyone well. It’s a big market.

    But my non solicit agreement does expire at the end of the month…