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

Join the mco-learn mailing list to stay informed about these courses. Computing technology is not just for computer scientists. As the inventor of the World Wide Web, Tim Berners-Lee, famously said: “This is for everyone”. To understanding what’s going on in tech, all it takes is determination and a good teacher. My courses are: practical - a strong focus on learning by doing inclusive - no prerequisites, perfect for beginners accessible - nothing to install or configure on your computer affordable - low cost with a generous concession plan unobtrusive - no ads on my site or my course material Course Catalog Next offerings are being planned, join the mco-learn mailing list to stay informed about new offerings.

Continue reading

Author's picture