I’m a sucker for offbeat, quirky documentaries. My favorites have a little dose of crazy – either in the characters or the story or both. For me, the craziness is what makes it human and compelling.

Continue reading

The Informant

Oftentimes, when I start a new book my initial enthusiasm gets me through the first chapter or two. Then comes the moment of truth.

Continue reading

The Road to Alaska

Yesterday my co-workers kindly threw me a little going away party (or a “leaving do” as the Brits call them). Below is the text of a poem I wrote to mark the occasion.

Continue reading

My daughter, Maya, is growing up too quickly. At some point the little girl who used to love to jump into my arms turned into a sophisticated pre-teen with an aversion to displays of affection, especially toward her father. That’s why the hand on my arm took me by surprise.

Continue reading

As a long time chess player, I’ve often thought of chess as a metaphor for life. Decisions made at the chess board, like those made in life, can never be undone so you need to choose your moves carefully. As Thomas Wolfe said, “You can’t go home again”.

Continue reading

I'm an American software engineer based in London. My mission is building tools, tutorials, and online courses to help make computing, mathematics, and data science more accessible and more inclusive.

Continue reading

Datasette

mco.dev/datasette datasette home page video tutorial SQLite is not a toy database - “SQLite is the most common DBMS in the world” Datasets: today’s demo examples fivethirtyeight install: pip install csvs-to-sqlite datasette datasette-vega convert: csvs-to-sqlite games.csv games.db start: datasette games.db simple query: select winner, count(*) from games group by winner complex query: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 select rating, victory_status, a, b, cast(a as float)/cast(b as float)*100 from (select case when white_rating between 0 and 1200 then '0-1200' when white_rating between 1200 and 1500 then '1200-1500' when white_rating between 1500 and 1800 then '1500-1800' when white_rating between 1800 and 2100 then '1800-2100' when white_rating between 2100 and 2400 then '2100-2400' else '2400+' end as rating, victory_status, count(*) as a, sum(count(victory_status)) over (partition by case when white_rating between 0 and 1200 then '0-1200' when white_rating between 1200 and 1500 then '1200-1500' when white_rating between 1500 and 1800 then '1500-1800' when white_rating between 1800 and 2100 then '1800-2100' when white_rating between 2100 and 2400 then '2100-2400' else '2400+' end) as b from games group by rating, victory_status) publish: datasette publish cloudrun games.

Continue reading

Anyone can understand technology and learn to code. All it takes is regular practice, some determination, and a good teacher. That’s where I come in. I want to help you learn some useful skills. If you are Palestinian, a woman, a person of color, or a member of any other group that is under-represented in tech, I’ll teach you for free. Others will be requested to pay a nominal fee, 100% of which goes to one of the wonderful charities curated by Growing Watermelons.

Continue reading

Author's picture