Author: fish1964

  • Almost funny…

    …if it weren’t deadly serious. A British company came up with an amazing bomb detector. It works very mysteriously, kind of like a dowsing rod. The company makes lots of money selling it to the Iragi military, who is convinced that it works. Unfortunately it does not.

    It starts to get press (not good) and ultimately gets investigated. The BBC points out that the device is worthless and the founder of the company gets arrested for fraud.

    As a reminder to people who believe in this sort of foolishness. There has been a $1 million prize promised to anyone who can scientifically prove that any sort of supernatural thing (dowsers, psychics, etc.) works in a controlled environment. This challenge has been in place since 1964 (though the money started much smaller) yet no one has been able to claim the money.

    Much easier to get money from suckers…

  • 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.

  • Second Child

    Watching Victoria grow up has been fascinating on many levels, but probably the most interesting thing is how different she is from Danielle.

    For the most part, Danielle and Victoria follow the classic first and second child model. As the first child, Danielle got focused attention in the early years. We were over-protective. We tried every stupid thing that claimed to help your child learn faster (remember when Baby Einstein first came out?).

    As the second child, Victoria never got the same focused attention, because it wasn’t possible. We had seen the stupid things we obsessed about with Danielle and we relaxed with Victoria. But there was one area where Tori got special focus. Because she was behind developmentally when we got her, she had therapy four times a week for six months. The physical therapy was hard. At first she cried trying to do things, but by the end she would see Essy (her PT person) and come running to her. I think that made her a fighter.

    And of course, there are the first seven months of Tori’s life where we have no idea how much attention she got. We suspect she spent a lot of time in the crib with the TV on, but we just don’t know.

    Which brings up the other fascinating thing about watching Tori develop. With Danielle, you know the gene pool. I watch her do math problems with ease and see myself. I look at her face and see my wife. With Tori we have so little information. We know nothing about her biological father. We know that her birth mother was 5’ 0”, from Guatemala City and we’ve seen a photocopy of her identification card. That’s about it.

    So I watch her develop and look for clues. Will she be smart? I think in terms of learning numbers and letters she’s a bit behind Danielle. Is that just due to our hyper focus on Danielle? Hard to say. She learned her colors very slowly (for a while we thought she might be color blind). But she figures other things out very quickly.

    The personalities are classic first and second children. Danielle tends to be well behaved. We got to parent/teacher conferences and get to hear how wonderful she is in school. Which always makes us ask, “why isn’t she like that at home?”, but for the most part she is a very good girl. She is also very much daddy’s girl. She is shy and not that independent. She likes to have me around even when she doesn’t need me.

    Tori is the complete opposite. She is anything but shy. She will go off with anyone. She is not a particularly well behaved girl. We have this ritual in the morning. I make her breakfast. She refuses to eat breakfast. I give her a timeout. She eats her breakfast.

    Every. Single. Day.

    Honestly, you’d think she would have this figured out. But I think it is just her way of trying to assert control. She is a stubborn girl. And very independent. Where Danielle likes to have me around, Tori wants to do things herself. She’ll go to the bathroom and I’ll go to help her (sometimes she needs the help) and she’ll say “papi, you get outta here”.

    She can be a pain in the butt, but she also has a huge personality and a big laugh. That’s her endearing trait. She laughs so much. But man, does she get into trouble. With Danielle we mainly just threatened time outs. The threat was enough. Tori is very well acquainted with the time out chair.

    And since she’s adopted, all of this is a big nature vs. nurture experiment. Is she like this because she’s the second child? Was her birth father stubborn and independent? Will she be short like her birth mother? Her mother was most likely poor so her height, or lack thereof, might be more based on nutrition than genetics. Tori has actually shot up, when we got her she was around the 10th percentile for height, now she’s exactly average.

    There are a million things you wonder about. When Danielle sneezes in the spring, I’m pretty sure it’s tree allergies because I have tree allergies. We’re paying attention to her eyesight because both me and my wife had glasses (and later Lasik – best thing ever). With Tori, who knows?

    One thing that is clear is that an adopted child feels just like a biological one. While there have been clear differences in how we raised Victoria, it’s because she was second. In some ways she gets more love than Danielle did, because Danielle loves her too.

    The two of them are good together. Mostly. Tori copies her big sister in all ways (good and bad). I find myself pointing out to Danielle a minor bad habit and saying, “if you do it, Tori’s going to do it”. Danielle loves being the big sister and is turning into a very good one. That’s another thing that is fun to watch.

    It’s a big roller coaster ride with an unknown destination. I think Victoria is going to be a lot of fun. And a lot of work…

  • News Flash: Customer Support is Important

    Google releases a new phone. You can’t buy it in a store, only online. And support is only available from Google via email?

    Was the plan to look bad on purpose?

    Seriously, anyone could have seen this coming. Users are users. Even with a perfect product, users will figure out how to screw something up, and no v1 product is perfect.

    So you were pretty much assured that there would be users who can’t get something working but they can’t take the phone back to the store or talk to someone on the phone.

    They clearly didn’t think this one through.

    We’ll see if they can work out the kinks before it’s available on Verizon. Otherwise I’m going Droid…

  • 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…

  • Happy New Year

    A bit late, sure, but I’ve been busy.

    On New Year’s Eve I was thinking about 2009 and 2010. Of course I was amused by the all the articles written in my youth expecting flying cars, etc. by 2010. But mostly I was thinking about 2009.

    Was it a good year or a lousy year?

    This, of course, depends on who you are. If you won the lottery in 2009, it was probably a great year. For me I tend to lump the year into four categories, world, sports, work, family.

    The world is mainly stuck in a lousy economy so overall I’d have to say not a great year. Sure, the economy is improving, but pretty slowly. And nothing particularly great happened in 2009 in the world. I suppose nothing horribly bad happened either, but that’s not a glowing recommendation. We have a historic new president but it’s too early to say how that will turn out. Overall my rating here is moderately blah.

    For sports it’s easy. The Yankees won the World Series. It was a great year. A+.

    The work evaluation is trickier. I had a lot of fun working this year. Money was a bit tight though. I’m very happy with where our product ended up after a year. But I expected more clients by this point. But the overall reaction to our product has been very positive. I think I have to grade 2009 as an Incomplete. We’ll know if 2009 was worth it depending on how 2010 goes.

    So that leaves family. A mixed bag here. I lost my mother this summer, though she had been battling Alzheimer’s so it was partly a blessing. My wife had a lousy stressful year working at Marsh and the relative uncertainty of Origami Risk didn’t help our family stress levels.

    But our girls are great. Tori is a total piece of work at 3. She gets into everything. She will quietly disappear somewhere in our apartment. To the question, “Tori, what are you doing?”, she will answer, “Nothing”. It is never nothing. She can drive you crazy, totally not listening, grabbing everything that doesn’t belong to her and getting upset when you don’t let her use the screwdriver by herself. But she captures your heart with her laugh and smile. She laughs all the time. And she already has the tilt her head, bat her eyes and smile look down pat. She will clearly be dangerous.

    Danielle is just  turning into a tall beautiful girl. She’s the more responsible older sister, but hugely creative, constantly drawing and building things. And totally daddy’s girl.

    So was 2009 a good year? I have a great family, so every year is a good year.

    and Danielle is turning into a big girl at 7.

  • Because he likes golf?

    Seriously? There are plenty of legitimate reasons to disagree with or even dislike (politically) our current president. But the number of ridiculous reasons keeps growing.

    • Because his middle name is Hussein
    • Because he knows what a fist-bump is
    • Because whack jobs think he was born somewhere other than Hawaii

    The latest reason? Because he likes golf. Are you kidding me? And this is coming from the left. With friends like this…

  • Stupid Media

    One of the things I hate about most media (print, online, whatever) is that the people who write the articles don’t write the headlines. I can’t even count the number of times that an article has completely contradicted the article.

    It’s especially bad with any article discussing science, because the headline writers typically don’t understand the article. But here’s a perfect example in the sports world.

    On msnbc.com, there’s a headline, Gasol is more valuable to Lakers than Kobe. And in the article itself there is this paragraph:

    One could make the argument that Gasol is just as important to this team as Bryant is. One would lose the argument, sure, but the fact it even could be made is revealing.

    Can we be logically consistent for more than a paragraph please?

  • A Photo Essay

    Danielle got a real camera for Christmas.

    PC250036

    And she got a skateboard

    PC250046

    And a stuffed Jaguar

    PC250052

    And a sign for her door

     PC250054

    But her favorites are clearly the skateboard

    PC250045

    And the camera

    PC250042

    Hope everyone had a Merry Christmas and I hope everyone has a happy and safe New Year…

  • Bloomberg Opens Up City Data

    I missed this when it first happened back in October. Mayor Bloomberg opened up 170 city data sets to public application developers and sponsored a competition to see who could come up with the best app.

    How cool is that?

    There are a ton of apps that hit the NYC Restaurant Inspection results. I recommend not using these apps before you visit your favorite restaurant. Sometimes it’s better not to know…

    There’s an amusing broken parking meter iPhone app. You are legally allowed to park at a broken meter for an hour, so this helpful app helps you find one.

    And here’s a fascinating page showing home price statistics over time.

    Open up the data, let developers at it and interesting things will result…