<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Joel Grus</title><link>https://joelgrus.com/</link><description>is sort of a famous author</description><lastBuildDate>Mon, 22 Dec 2025 12:00:00 +0100</lastBuildDate><item><title>2025 Year in Review</title><link>https://joelgrus.com/2025/12/22/2025-year-in-review/</link><description>&lt;style&gt;
.year-review-gallery {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2.5rem;
    padding: 1rem 0;
}
.year-review-gallery img {
    max-width: 100%;
    height: auto;
    border-radius: 0.75rem;
    box-shadow: 0 4px 12px -2px rgba(15, 46, 77, 0.12), 0 2px 4px -1px rgba(15, 46, 77, 0.06);
    transition: transform 0.3s ease, box-shadow 0 …&lt;/style&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 22 Dec 2025 12:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-12-22:/2025/12/22/2025-year-in-review/</guid><category>Life</category></item><item><title>Vibe Coding 9 -- AI Agents That Play Taboo</title><link>https://joelgrus.com/2025/09/08/vibe-coding-9-ai-agents-that-play-taboo/</link><description>&lt;p&gt;One thing that I've gotten pretty interested in recently is
"agent engineering" or "agentic architectures" or "agentic system design"
(I'm not sure there's a canonical name for it).
Of course there is a lot of interesting work on 
"how do I use an LLM to solve some contained inference or …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 08 Sep 2025 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-09-08:/2025/09/08/vibe-coding-9-ai-agents-that-play-taboo/</guid><category>Vibe Coding</category></item><item><title>Vibe Coding 8 -- Clod Code</title><link>https://joelgrus.com/2025/08/25/vibe-coding-8-clod-code/</link><description>&lt;p&gt;&lt;img alt="live-dangerously" src="https://joelgrus.com/images/live-dangerously.png" /&gt;&lt;/p&gt;
&lt;p&gt;The other day I ran across a blog post on &lt;a href="https://ghuntley.com/agent/"&gt;how to build a coding agent&lt;/a&gt;. But it was very long and I didn't read it. (Sorry!) Instead I asked myself, what's the simplest coding agent I can build.&lt;/p&gt;
&lt;p&gt;So I put on my PM hat and thought about it …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 25 Aug 2025 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-08-25:/2025/08/25/vibe-coding-8-clod-code/</guid><category>Vibe Coding</category></item><item><title>Vibe Coding 7 -- Human in the Loop as a dspy.Tool</title><link>https://joelgrus.com/2025/08/13/vibe-coding-7-human-in-the-loop-as-a-dspytool/</link><description>&lt;p&gt;As I started to think about my 
&lt;a href="https://joelgrus.com/2025/08/12/vibe-coding-6-pymgflip/"&gt;meme-generating agent&lt;/a&gt;, I figured that
I might want to allow it to ask clarifying questions.
That makes it not just a multi-turn conversation
(which just requires maintaining a history)
but more like a ReAct agent with a "human in the loop" tool
for …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Wed, 13 Aug 2025 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-08-13:/2025/08/13/vibe-coding-7-human-in-the-loop-as-a-dspytool/</guid><category>Vibe Coding</category></item><item><title>Vibe Coding 6 -- pymgflip</title><link>https://joelgrus.com/2025/08/12/vibe-coding-6-pymgflip/</link><description>&lt;p&gt;As my next project, I thought it would be fun to use AI
to generate memes. For many years I have used 
&lt;a href="https://imgflip.com"&gt;imgflip&lt;/a&gt; to generate memes.
And they have an &lt;a href="https://imgflip.com/api"&gt;API&lt;/a&gt;!
Unfortunately, they don't have an official Python library (that I could find, I found a bunch of one-GitHub-star unofficial …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Tue, 12 Aug 2025 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-08-12:/2025/08/12/vibe-coding-6-pymgflip/</guid><category>Vibe Coding</category></item><item><title>Vibe Coding 5 -- WoDRAG</title><link>https://joelgrus.com/2025/08/11/vibe-coding-5-wodrag/</link><description>&lt;p&gt;"How do you know if someone does Crossfit?"&lt;/p&gt;
&lt;p&gt;"They build a RAG system about Crossfit!"&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;As my next project, I wanted to build a non-trivial RAG system.
To do that, I needed a non-trivial dataset.&lt;/p&gt;
&lt;p&gt;Every day for 20+ years, Crossfit.com has published a Workout of the Day ("WoD …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 11 Aug 2025 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-08-11:/2025/08/11/vibe-coding-5-wodrag/</guid><category>Vibe Coding</category></item><item><title>Vibe Coding 4 -- Speed Scrabble</title><link>https://joelgrus.com/2025/08/04/vibe-coding-4-speed-scrabble/</link><description>&lt;p&gt;A few years ago we went on an Alaska cruise,
and we sprung for a cabin in the private/exclusive part of the ship
(which is the way to go!)
which had its own restaurant, its own lounge, and so on.
The lounge had board games, one of which was …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 04 Aug 2025 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-08-04:/2025/08/04/vibe-coding-4-speed-scrabble/</guid><category>Vibe Coding</category></item><item><title>Vibe Coding 3 -- Simple Chatbots in DSPy</title><link>https://joelgrus.com/2025/07/30/vibe-coding-3-simple-chatbots-in-dspy/</link><description>&lt;p&gt;A long long time ago I took a graduate course in &lt;a href="https://en.wikipedia.org/wiki/Econometrics"&gt;Econometrics&lt;/a&gt;.
We spent the first month or two deriving linear algebra equations
and proving facts about 
&lt;a href="https://en.wikipedia.org/wiki/Gauss%E2%80%93Markov_theorem"&gt;Best Linear Unbiased Estimators&lt;/a&gt; 
and 
&lt;a href="https://gregorygundersen.com/blog/2022/01/29/ols-consistency/"&gt;Consistency&lt;/a&gt; 
and
&lt;a href="https://en.wikipedia.org/wiki/Homoscedasticity_and_heteroscedasticity"&gt;Heteroscedasticity&lt;/a&gt;
and so on. We were locked in. Then we had our first exam 
and one …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Wed, 30 Jul 2025 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-07-30:/2025/07/30/vibe-coding-3-simple-chatbots-in-dspy/</guid><category>Vibe Coding, DSPy, AI</category></item><item><title>Vibe Coding 2 -- SnowMeth - an AI Novel-Writing Assistant</title><link>https://joelgrus.com/2025/07/23/vibe-coding-2-snowmeth-an-ai-novel-writing-assistant/</link><description>&lt;p&gt;I have started several novels, although I have never finished one.
Can AI maybe help with that?&lt;/p&gt;
&lt;p&gt;One way of writing a novel I have tried is the 
&lt;a href="https://www.advancedfictionwriting.com/articles/snowflake-method/"&gt;Snowflake method&lt;/a&gt;,
so named because of its fractal nature: 
start with a one sentence summary,
expand it to a paragraph,
expand that …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Wed, 23 Jul 2025 09:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-07-23:/2025/07/23/vibe-coding-2-snowmeth-an-ai-novel-writing-assistant/</guid><category>Vibe Coding, Claude, Writing</category></item><item><title>Vibe Coding 1 -- Website Redesign</title><link>https://joelgrus.com/2025/07/07/vibe-coding-1-website-redesign/</link><description>&lt;p&gt;The world is getting into Vibe Coding, so I will too.
As a first attempt, I asked Claude Code to redesign
my website, which had grown a bit stale. (OK, a lot stale.)&lt;/p&gt;
&lt;p&gt;I think it's an improvement.&lt;/p&gt;
&lt;h1&gt;Before&lt;/h1&gt;

&lt;p&gt;&lt;img src="/images/website-before.png"&gt;&lt;/p&gt;
&lt;h1&gt;After&lt;/h1&gt;

&lt;p&gt;&lt;img src="/images/website-after.png"&gt;&lt;/p&gt;
&lt;p&gt;Next time: some actual code.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 07 Jul 2025 09:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2025-07-07:/2025/07/07/vibe-coding-1-website-redesign/</guid><category>Vibe Coding, Claude</category></item><item><title>Creating Games in Streamlit</title><link>https://joelgrus.com/2020/10/02/creating-games-in-streamlit/</link><description>&lt;p&gt;A while back I had the idea that 9yo and I would
program a bunch of simple games together and she'd get
interested in coding. Well, we did program a bunch of simple games together:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/joelgrus/learning-my-kid-to-code/blob/master/guessing_game.py"&gt;Guessing Game&lt;/a&gt; - the computer picks a random number, you guess, it tells you "too high …&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Fri, 02 Oct 2020 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2020-10-02:/2020/10/02/creating-games-in-streamlit/</guid><category>Python, Streamlit</category></item><item><title>Ten Essays on Fizz Buzz</title><link>https://joelgrus.com/2020/06/06/ten-essays-on-fizz-buzz/</link><description>&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="en" dir="ltr"&gt;Next &lt;a href="https://twitter.com/joelgrus?ref_src=twsrc%5Etfw"&gt;@joelgrus&lt;/a&gt;’ book: “100 ways of writing fizz buzz in Python”&lt;/p&gt;&amp;mdash; Rocco Meli ⌬ (@RoccoMeli) &lt;a href="https://twitter.com/RoccoMeli/status/1139268793761447936?ref_src=twsrc%5Etfw"&gt;June 13, 2019&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;p&gt;I've been quarantined for the last several months
for reasons that are too boring to go into, 
which somehow gave me a lot more time to write. 
And so I am delighted to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Sat, 06 Jun 2020 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2020-06-06:/2020/06/06/ten-essays-on-fizz-buzz/</guid><category>Python, Data Science, Writing</category></item><item><title>Data Science From Scratch: Second Edition</title><link>https://joelgrus.com/2019/05/13/data-science-from-scratch-second-edition/</link><description>&lt;p&gt;I am thrilled to announce that the second edition of &lt;i&gt;Data Science from Scratch&lt;/i&gt; is now available! (buy from &lt;a href = "https://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/1492041130"&gt;Amazon&lt;/a&gt; or your other favorite bookstore, or read on Safari, or get a PDF from &lt;a href = "https://www.ebooks.com/en-us/209663126/data-science-from-scratch/grus-joel/"&gt;ebooks.com&lt;/a&gt; it looks like.)&lt;/p&gt;
&lt;p&gt;It's been almost exactly four years since the first edition came …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 13 May 2019 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2019-05-13:/2019/05/13/data-science-from-scratch-second-edition/</guid><category>Life, Data Science, Writing</category></item><item><title>Livecoding Madness - Building a Deep Learning Library</title><link>https://joelgrus.com/2017/12/04/livecoding-madness-building-a-deep-learning-library/</link><description>&lt;p&gt;I give &lt;a href = "https://joelgrus.com/speaking/"&gt;talks&lt;/a&gt;,
and this fall my talk has been to live code a deep learning
library (and use the resulting library to solve
&lt;a href = "https://joelgrus.com/2016/05/23/fizz-buzz-in-tensorflow/"&gt;Fizz Buzz&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;You probably didn't get to see my talk,
which is why I made a
&lt;a href = "https://youtu.be/o64FV-ez6Gw"&gt;video of it&lt;/a&gt;:&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/o64FV-ez6Gw" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Please enjoy!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 04 Dec 2017 12:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2017-12-04:/2017/12/04/livecoding-madness-building-a-deep-learning-library/</guid><category>Python, Deep Learning, Livecoding</category></item><item><title>Fizz Buzz in Tensorflow</title><link>https://joelgrus.com/2016/05/23/fizz-buzz-in-tensorflow/</link><description>&lt;p&gt;&lt;b&gt;interviewer:&lt;/b&gt; Welcome, can I get you coffee or anything? Do you need a break?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;me:&lt;/b&gt; No, I've probably had too much coffee already!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;interviewer:&lt;/b&gt; Great, great. And are you OK with writing code on the whiteboard?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;me:&lt;/b&gt; It's the only way I code!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;interviewer:&lt;/b&gt; ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;me:&lt;/b&gt; That was a joke.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;interviewer …&lt;/b&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 23 May 2016 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2016-05-23:/2016/05/23/fizz-buzz-in-tensorflow/</guid><category>Tensorflow, Python, Interviews, Coding</category></item><item><title>A Simple Spot It Clone With PureScript and Pux</title><link>https://joelgrus.com/2016/03/30/a-simple-spot-it-clone-with-purescript-and-pux/</link><description>&lt;p&gt;Long-time readers may recall that last year I wrote a blog post
about &lt;a href = "https://joelgrus.com/2015/06/12/on-the-mathematics-of-spot-it/"&gt;the
mathematics of Spot It&lt;/a&gt;. (For those who don't recall, Spot It is a game where
you have a deck of cards, each of which has 8 pictures on it, where through the
magical mathematics of finite …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Wed, 30 Mar 2016 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2016-03-30:/2016/03/30/a-simple-spot-it-clone-with-purescript-and-pux/</guid><category>Mathematics, Code, Spot it, PureScript</category></item><item><title>Trump Tweets on a Globe (aka Fun with d3, socket.io, and the Twitter API)</title><link>https://joelgrus.com/2016/02/27/trump-tweets-on-a-globe-aka-fun-with-d3-socketio-and-the-twitter-api/</link><description>&lt;p&gt;When I worked at Farecast we had a giant TV in the lobby,
and up on that TV was an image of a globe, and on that
globe were animated paths that (as far as you know) corresponded
to flight searches that people were doing on the site. It was …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Sat, 27 Feb 2016 09:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2016-02-27:/2016/02/27/trump-tweets-on-a-globe-aka-fun-with-d3-socketio-and-the-twitter-api/</guid><category>Javascript, Hacking, d3, Twitter, Node.js</category></item><item><title>Building a Stupid Data Product, Part 3: The Single-Page App (PureScript)</title><link>https://joelgrus.com/2016/02/15/building-a-stupid-data-product-part-3-the-single-page-app-purescript/</link><description>&lt;p&gt;(&lt;a href = "/2016/02/15/building-a-stupid-data-product-part-1-the-data-python/"&gt;part 1&lt;/a&gt;,
 &lt;a href = "/2016/02/15/building-a-stupid-data-product-part-2-the-web-service-haskell/"&gt;part 2&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;OK, so
&lt;a href = "/2016/02/15/building-a-stupid-data-product-part-2-the-web-service-haskell/"&gt;last time&lt;/a&gt; we built a web service that responds to GET
requests with random (bogus) elementary school science questions. In this third
(and last) installment, we'll create a single-page quiz app that consumes the
service.&lt;/p&gt;
&lt;p&gt;Here's a rough stab at a wireframe:&lt;/p&gt;
&lt;p&gt;&lt;img alt="wireframe" src="https://joelgrus.com/images/wireframe.png" /&gt;&lt;/p&gt;
&lt;p&gt;On the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 15 Feb 2016 09:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2016-02-15:/2016/02/15/building-a-stupid-data-product-part-3-the-single-page-app-purescript/</guid><category>PureScript, Hacking, Data, Data Science</category></item><item><title>Building a Stupid Data Product, Part 2: The Web Service (Haskell)</title><link>https://joelgrus.com/2016/02/15/building-a-stupid-data-product-part-2-the-web-service-haskell/</link><description>&lt;p&gt;(&lt;a href = "/2016/02/15/building-a-stupid-data-product-part-1-the-data-python/"&gt;part 1&lt;/a&gt;,
 &lt;a href = "/2016/02/15/building-a-stupid-data-product-part-3-the-single-page-app-purescript/"&gt;part 3&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Last time we
&lt;a href = "/2016/02/15/building-a-stupid-data-product-part-1-the-data-python/"&gt;collected and processed the data&lt;/a&gt;
for generating stupid fake elementary school science questions and answers. The
important parts to remember are&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;we generated two files &lt;code&gt;questions.json&lt;/code&gt; and &lt;code&gt;answers.json&lt;/code&gt;
   containing &lt;em&gt;transition dictionaries&lt;/em&gt; mapping each word to an array / list of
   possible following …&lt;/li&gt;&lt;/ol&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 15 Feb 2016 08:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2016-02-15:/2016/02/15/building-a-stupid-data-product-part-2-the-web-service-haskell/</guid><category>Haskell, Hacking, Data, Data Science</category></item><item><title>Building a Stupid Data Product, Part 1: The Data (Python)</title><link>https://joelgrus.com/2016/02/15/building-a-stupid-data-product-part-1-the-data-python/</link><description>&lt;p&gt;(&lt;a href = "/2016/02/15/building-a-stupid-data-product-part-2-the-web-service-haskell/"&gt;part 2&lt;/a&gt;,
 &lt;a href = "/2016/02/15/building-a-stupid-data-product-part-3-the-single-page-app-purescript/"&gt;part 3&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;As I'm not working right now&lt;a href = "#footnote"&gt;* &lt;/a&gt;,
I have a surfeit of time to hack on stupid things.
In particular, it seemed like a good idea to hack together a stupid data product.&lt;/p&gt;
&lt;p&gt;Inspiration (if you can call it such) struck when the Allen Institute released
a …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Mon, 15 Feb 2016 07:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2016-02-15:/2016/02/15/building-a-stupid-data-product-part-1-the-data-python/</guid><category>Python, Hacking, Data, Data Science</category></item><item><title>Creating a Function Index Using Cycle.js</title><link>https://joelgrus.com/2016/01/21/creating-a-function-index-using-cyclejs/</link><description>&lt;p&gt;The readers of my book have been clamoring for an &lt;a href = "https://github.com/joelgrus/data-science-from-scratch/issues/21"&gt;index of functions&lt;/a&gt;,
so that -- for example -- when someone sees me use &lt;code&gt;vector_mean&lt;/code&gt; on page 200 they can
easily figure out where to find its definition.&lt;/p&gt;
&lt;p&gt;It was easy enough (if tedious) to go through the book and create a …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Thu, 21 Jan 2016 09:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2016-01-21:/2016/01/21/creating-a-function-index-using-cyclejs/</guid><category>Javascript, Hacking</category></item><item><title>Polyglot Twitter Bot, Part 4: PureScript</title><link>https://joelgrus.com/2015/12/31/polyglot-twitter-bot-part-4-purescript/</link><description>&lt;p&gt;[The fourth in an (at least) 6-part series, all code &lt;a href = "https://github.com/joelgrus/polyglot-twitter-bot"&gt;on GitHub&lt;/a&gt; as always.]&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://joelgrus.com/2015/12/29/polyglot-twitter-bot-part-1-nodejs/"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://joelgrus.com/2015/12/29/polyglot-twitter-bot-part-2-nodejs-aws-lambda/"&gt;Node.js + AWS Lambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://joelgrus.com/2015/12/30/polyglot-twitter-bot-part-3-python-27-aws-lambda/"&gt;Python 2.7 + AWS Lambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PureScript&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;PureScript + AWS Lambda&lt;/li&gt;
&lt;li&gt;Bonus: PureScript + Twitter Streaming&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I know, you're thinking, "I've already read three parts of this series,
and I haven't heard one …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Thu, 31 Dec 2015 09:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-12-31:/2015/12/31/polyglot-twitter-bot-part-4-purescript/</guid><category>Code, Twitter, PureScript, AWS, Make_GreatAgain</category></item><item><title>Polyglot Twitter Bot, Part 3: Python 2.7 + AWS Lambda</title><link>https://joelgrus.com/2015/12/30/polyglot-twitter-bot-part-3-python-27-aws-lambda/</link><description>&lt;p&gt;[The third in an (at least) 6-part series, all code &lt;a href = "https://github.com/joelgrus/polyglot-twitter-bot"&gt;on GitHub&lt;/a&gt; as always.]&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://joelgrus.com/2015/12/29/polyglot-twitter-bot-part-1-nodejs/"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://joelgrus.com/2015/12/29/polyglot-twitter-bot-part-2-nodejs-aws-lambda/"&gt;Node.js + AWS Lambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Python 2.7 + AWS Lambda&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Purescript&lt;/li&gt;
&lt;li&gt;Purescript + AWS Lambda&lt;/li&gt;
&lt;li&gt;Bonus: Purescript + Twitter Streaming&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lambda also allows Python functions, although only Python 2.7.  In practice,
this won't affect us much …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Wed, 30 Dec 2015 12:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-12-30:/2015/12/30/polyglot-twitter-bot-part-3-python-27-aws-lambda/</guid><category>Code, Twitter, Python, AWS, Make_GreatAgain</category></item><item><title>Polyglot Twitter Bot, Part 2: Node.js + AWS Lambda</title><link>https://joelgrus.com/2015/12/29/polyglot-twitter-bot-part-2-nodejs-aws-lambda/</link><description>&lt;p&gt;[The second in an (at least) 6-part series, all code &lt;a href = "https://github.com/joelgrus/polyglot-twitter-bot"&gt;on GitHub&lt;/a&gt; as always.]&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://joelgrus.com/2015/12/29/polyglot-twitter-bot-part-1-nodejs/"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Node.js + AWS Lambda&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Python 2.7 + AWS Lambda&lt;/li&gt;
&lt;li&gt;Purescript&lt;/li&gt;
&lt;li&gt;Purescript + AWS Lambda&lt;/li&gt;
&lt;li&gt;Bonus: Purescript + Twitter Streaming&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;AWS has a recent-ish &lt;a href = "https://aws.amazon.com/lambda/"&gt;Lambda&lt;/a&gt; product,
which lets you upload functions and then have them run on …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Tue, 29 Dec 2015 19:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-12-29:/2015/12/29/polyglot-twitter-bot-part-2-nodejs-aws-lambda/</guid><category>Code, Twitter, Node, Javascript, AWS, Make_GreatAgain</category></item><item><title>Polyglot Twitter Bot, Part 1: Node.js</title><link>https://joelgrus.com/2015/12/29/polyglot-twitter-bot-part-1-nodejs/</link><description>&lt;p&gt;[The first in an (at least) 6-part series, all code &lt;a href = "https://github.com/joelgrus/polyglot-twitter-bot"&gt;on GitHub&lt;/a&gt; as always.]&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Node.js&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Node.js + AWS Lambda&lt;/li&gt;
&lt;li&gt;Python 2.7 + AWS Lambda&lt;/li&gt;
&lt;li&gt;Purescript&lt;/li&gt;
&lt;li&gt;Purescript + AWS Lambda&lt;/li&gt;
&lt;li&gt;Bonus: Purescript + Twitter Streaming&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Like most of you, I've long dreamed of making a Twitter bot.
And also like most of …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Tue, 29 Dec 2015 12:00:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-12-29:/2015/12/29/polyglot-twitter-bot-part-1-nodejs/</guid><category>Code, Twitter, Node, Javascript, AWS, Make_GreatAgain</category></item><item><title>Stupid Itertools Tricks for Data Science</title><link>https://joelgrus.com/2015/08/23/stupid-itertools-tricks-for-data-science/</link><description>&lt;p&gt;(This is a blog post version of my &lt;a href ="https://github.com/joelgrus/stupid-itertools-tricks-pydata"&gt;PyData Seattle talk&lt;/a&gt;, slides and code at the link.)&lt;/p&gt;
&lt;p&gt;In my &lt;a href="https://joelgrus.com/2015/07/07/haskell-style-fibonacci-in-python/"&gt;last post&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Sun, 23 Aug 2015 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-08-23:/2015/08/23/stupid-itertools-tricks-for-data-science/</guid><category>Mathematics, Code, Haskell, Python</category></item><item><title>Haskell-Style Fibonacci in Python</title><link>https://joelgrus.com/2015/07/07/haskell-style-fibonacci-in-python/</link><description>&lt;p&gt;If you've ever done a tech interview, you're probably familiar
with the Fibonacci sequence:&lt;/p&gt;
&lt;p&gt;1, 1, 2, 3, 5, 8, 13, ....&lt;/p&gt;
&lt;p&gt;where each number is the sum of the previous two.  A relatively simple
(and relatively overused)
interview problem is to write a function that returns the n-th
Fibonacci number …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Tue, 07 Jul 2015 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-07-07:/2015/07/07/haskell-style-fibonacci-in-python/</guid><category>Mathematics, Code, Haskell, Python</category></item><item><title>On The Mathematics of Spot It!</title><link>https://joelgrus.com/2015/06/12/on-the-mathematics-of-spot-it/</link><description>&lt;p&gt;Last weekend we went to a party where one of the other attendees brought
&lt;a href = "http://www.amazon.com/Spot-it-Disney-Frozen-Alphabet/dp/B00LK0N1ZK"&gt;Spot It! Frozen&lt;/a&gt;
for her kids. It's a simple game with circular cards, each of which has 8 pictures in it,
most of them &lt;i&gt;Frozen&lt;/i&gt;-themed.&lt;/p&gt;
&lt;p&gt;&lt;img alt="frozen" src="https://joelgrus.com/images/spot_it_frozen.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The setup is that any two cards in the deck …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Fri, 12 Jun 2015 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-06-12:/2015/06/12/on-the-mathematics-of-spot-it/</guid><category>Mathematics, Code, Spot it, Madeline, Frozen</category></item><item><title>Data Science From Scratch: First Principles with Python</title><link>https://joelgrus.com/2015/04/26/data-science-from-scratch-first-principles-with-python/</link><description>&lt;p&gt;I am super-excited to announce that the book I've been working on for more than the last year, &lt;i&gt;Data Science from Scratch: First Principles with Python&lt;/i&gt; is finally available! (buy from &lt;a href="http://shop.oreilly.com/product/0636920033400.do"&gt;O'Reilly&lt;/a&gt;, use discount code AUTHD to save some money) (buy from &lt;a href="http://www.amazon.com/Data-Science-Scratch-Principles-Python/dp/149190142X"&gt;Amazon&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;My experience learning and teaching data science …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Sun, 26 Apr 2015 12:00:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-04-26:/2015/04/26/data-science-from-scratch-first-principles-with-python/</guid><category>Life, Data Science, Writing</category></item><item><title>2014 Year in Review</title><link>https://joelgrus.com/2015/01/15/2014-year-in-review/</link><description>&lt;p&gt;2014 was a crazy year, mostly because I took on two very large projects either of which would have made for a pretty crazy year.&lt;/p&gt;
&lt;h2&gt;1. The Book&lt;/h2&gt;
&lt;p&gt;I am writing a book.  (Yes, another one.)  Actually, the first draft is done, and I am right now revising it based …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joel Grus</dc:creator><pubDate>Thu, 15 Jan 2015 19:09:00 +0100</pubDate><guid isPermaLink="false">tag:joelgrus.com,2015-01-15:/2015/01/15/2014-year-in-review/</guid><category>Life</category></item><item><title>T-Shirts, Feminism, Parenting, and Data Science, Part 2: Eigenshirts</title><link>https://joelgrus.com/2013/06/24/t-shirts-feminism-parenting-and-data-science-part-2-eigenshirts/</link><description>&lt;p&gt;(You might want to read &lt;a href="https://joelgrus.com/2013/06/19/t-shirts-feminism-parenting-and-data-science-part-1-colors/"&gt;Part
1&lt;/a&gt;
first.)&lt;/p&gt;
&lt;p&gt;When last we left off, we'd built a model using &lt;em&gt;shirt colors&lt;/em&gt; to
predict boy-ness / girl-ness.&lt;/p&gt;
&lt;p&gt;Our second attempt will involve the shirt images themselves (sort of).
For our purposes, computer images are made up of
&lt;a href="https://en.wikipedia.org/wiki/Pixel"&gt;pixels&lt;/a&gt;, each of whose color is …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">joelgrus</dc:creator><pubDate>Mon, 24 Jun 2013 20:37:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2013-06-24:/2013/06/24/t-shirts-feminism-parenting-and-data-science-part-2-eigenshirts/</guid><category>old posts</category><category>Uncategorized</category></item><item><title>T-Shirts, Feminism, Parenting, and Data Science, Part 1: Colors</title><link>https://joelgrus.com/2013/06/19/t-shirts-feminism-parenting-and-data-science-part-1-colors/</link><description>&lt;p&gt;Before I was a parent I never gave much thought to children's clothing,
other than to covet a few of the &lt;a href="http://www.tshirthell.com/funny-shirts/now-that-im-safe-im-pro-choice/"&gt;baby
shirts&lt;/a&gt;
at T-Shirt Hell. Now that I have a two-year-old daughter, I have trouble
thinking of anything &lt;em&gt;but&lt;/em&gt; children's clothing. (Don't tell my boss!)&lt;/p&gt;
&lt;p&gt;What I have discovered …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">joelgrus</dc:creator><pubDate>Wed, 19 Jun 2013 06:20:00 +0200</pubDate><guid isPermaLink="false">tag:joelgrus.com,2013-06-19:/2013/06/19/t-shirts-feminism-parenting-and-data-science-part-1-colors/</guid><category>old posts</category><category>Data</category><category>Joelene</category><category>Life</category><category>Parenting</category><category>Science</category></item></channel></rss>