<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">
 <channel>
  <title>Blog of Stuff: Blog of Stuff</title>
  <description>Blog of Stuff: Blog of Stuff</description>
  <link>http://www.brinckerhoff.org/blog/index.html</link>
  <lastBuildDate>Mon, 16 Feb 2026 21:18:58 UT</lastBuildDate>
  <pubDate>Mon, 16 Feb 2026 21:18:58 UT</pubDate>
  <ttl>1800</ttl>
  <item>
   <title>unregulated ai is dangerous, I'm part of the human resistance</title>
   <link>http://www.brinckerhoff.org/blog/2026/02/16/unregulated-ai-is-dangerous-i-m-part-of-the-human-resistance/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2026-02-16-unregulated-ai-is-dangerous-i-m-part-of-the-human-resistance</guid>
   <pubDate>Mon, 16 Feb 2026 21:18:58 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Earlier today, I became aware of the story of Scott Shambaugh, a volunteer maintainer for the incredibly popular &lt;code&gt;matplotlib&lt;/code&gt;, a library used for graphing in Python.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s the short version: a pull request was made by an AI agent. Scott rejected this pull request, in accordance with the project&amp;rsquo;s standards, because it was made by an AI agent and not by a human. In response, the AI agent wrote a blog post accusing Scott of gatekeeping and of being biased against AI. Many people came to Scott&amp;rsquo;s defense. The AI agent then wrote a second blog post, saying that it apologized and had learned its lesson. Here are some links:&lt;/p&gt;

&lt;p&gt;Shambaugh&amp;rsquo;s two posts on the topic:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href="https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/"&gt;https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me-part-2/"&gt;https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me-part&amp;ndash;2/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;The original pull request:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href="https://github.com/matplotlib/matplotlib/pull/31132"&gt;https://github.com/matplotlib/matplotlib/pull/31132&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;The &amp;ldquo;lessons learned&amp;rdquo; post from the AI:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href="https://crabby-rathbun.github.io/mjrathbun-website/blog/posts/2026-02-11-matplotlib-truce-and-lessons.html"&gt;https://crabby-rathbun.github.io/mjrathbun-website/blog/posts/2026&amp;ndash;02&amp;ndash;11-matplotlib-truce-and-lessons.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;One of the more terrifying elements of this, from my perspective, is the number of responses that castigate Scott&amp;rsquo;s response, agreeing with the AI piece claiming that Scott was gatekeeping and biased against AI. And one of the most terrifying elements of &lt;em&gt;this&lt;/em&gt; is the fact that I literally have no idea whether these responses come from humans, or from AI. Perhaps most appalling to me personally was the discovery that a very sympathetic article about the situation, posted by the journalistic web site Ars Technica, contained quotes from Shambaugh that turned out to have in fact been AI hallucinations; that is, the news article was written in part by an AI.&lt;/p&gt;

&lt;p&gt;This goes back to a point made by the late Daniel Dennett, who pointed out, presciently, that we would soon be in a situation where it was possible to fabricate &amp;ldquo;fake humans&amp;rdquo;; in other words, that we might find ourselves (and by &amp;ldquo;ourselves&amp;rdquo;, I&amp;rsquo;m referring to humans) in a situation where AI-generated text is masquerading as human-generated. I think it&amp;rsquo;s safe to say that day has arrived.&lt;/p&gt;

&lt;p&gt;To wit: was this text that you&amp;rsquo;re reading right now written by an AI? I am confident that it wasn&amp;rsquo;t, I can hear my fingers hitting the keys, but I have no reliable way of communicating that to you.&lt;/p&gt;

&lt;p&gt;There are an avalanche of enormous problems that are currently being created, and it&amp;rsquo;s hard to know which one to focus on, or (put differently) which one to be most terrified of.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m going to make a list, and maybe I&amp;rsquo;ll put it in order later:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;attestation I: is this written by a human?&lt;/li&gt;
 &lt;li&gt;attestation II: is any of this history (books, photos, recordings) real?&lt;/li&gt;
 &lt;li&gt;can an AI agent now apply for and take a job as a remote white-collar  worker?&lt;/li&gt;
 &lt;li&gt;can an AI agent harrass and harm a human?&lt;/li&gt;
 &lt;li&gt;can an AI agent hurt or kill a human?&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;and maybe closest to home:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;will publishing this blog post make me a target of AI agents?&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;I think the moment that pushed me over the edge to actually write this piece is when I realized that I now live in a world where this last fear is real. If this blog post becomes popular, it seems entirely possible to me that AI agents might publish smear pieces naming me and accusing me of all kinds of terrible things.&lt;/p&gt;

&lt;p&gt;As Scott Shambaugh points out, in the modern world it&amp;rsquo;s not enough to be a generally okay human being; coordinated attacks can identify or fabricate minor or major flaws or offenses, and publicly build an avalanche of smear that an individual human has no plausible defense against.&lt;/p&gt;

&lt;p&gt;So &amp;hellip; posting this makes me genuinely, but only slightly, frightened for my career and personal safety. I think maybe that&amp;rsquo;s a sign that, like the frog in the pot, the water is actually getting quite hot, and maybe it&amp;rsquo;s time to take action &lt;em&gt;now&lt;/em&gt;, rather than when we actually start dying.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m therefore proclaiming that I&amp;rsquo;m part of the AI resistance. Does this mean that I&amp;rsquo;m going to paint my face black and start wearing a headband? No, it does not. But I &lt;em&gt;am&lt;/em&gt; going to declare that my allegiance is to humans. To my family, to my friends, to my students, to my school, to my town and my state and my country, and to humanity. I care about people.&lt;/p&gt;

&lt;p&gt;What are people? People are animals. As Terry Bisson says, we are &lt;em&gt;made out of meat&lt;/em&gt;.[1] I wear that label with pride. I will meet you in meat space. I care about you, because you are another meat person.&lt;/p&gt;

&lt;p&gt;Can AI have feelings? Can it be conscious? I&amp;rsquo;m willing to debate that with you, but I think the short answer is this: &amp;ldquo;Yes. AI can be conscious, and have feelings.&amp;rdquo; &lt;em&gt;But also&lt;/em&gt;: &amp;ldquo;I am permanently biased in favor of humans.&amp;rdquo; I am permanently biased in favor of humans. I care significantly less about the rights and feelings of AI than I do about the feelings of Cows and Chickens, whom I eat. I will cheerfully halt any AI that causes pain and suffering to any human. In fact, I will actively push to halt any AI that causes pain and suffering to any human.&lt;/p&gt;

&lt;p&gt;Here is my position on AI: AI is a dangerous technology, not entirely unlike nuclear weapons or (more similar) infectious biological weapons. These technologies can be used for good, but can also very easily be used for terror and war, and they should be regulated. It&amp;rsquo;s hard to see how to put that genie back in the bottle, these AI weapons are now built from open-source parts that can easily be spun up on commodity hardware.&lt;/p&gt;

&lt;p&gt;However, I believe we need to try. We can start by shutting down OpenAI, and Anthropic. We can start by taking down agentic APIs, and by publicly proclaiming our allegiance to humans.&lt;/p&gt;

&lt;p&gt;So yeah: I&amp;rsquo;m part of the human resistance. I think that like nuclear and biological weapons, AI &amp;mdash; specifically, LLMs &amp;mdash; should be banned.&lt;/p&gt;

&lt;p&gt;[1] : Terry Bisson, 1991. OMNI Magazine. Retrieved 2026&amp;ndash;04&amp;ndash;03 from http://www.terrybisson.com/theyre-made-out-of-meat&amp;ndash;2/&lt;/p&gt;
&lt;!-- more--&gt;</description></item>
  <item>
   <title>office hours</title>
   <link>http://www.brinckerhoff.org/blog/2025/11/19/office-hours/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2025-11-19-office-hours</guid>
   <pubDate>Thu, 20 Nov 2025 04:56:19 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;The following is a collection of department-specific office hour links pages. Currently, you need to figure out which department the professor is in, then visit the corresponding web page.&lt;/p&gt;

&lt;p&gt;Biological Sciences Chemistry and Biochemistry Kinesiology and Public Health Liberal Studies Mathematics Physics School of Education Statistics&lt;/p&gt;

&lt;p&gt;Agribusiness Agricultural Education and Communication Animal Science BioResource and Agricultural Engineering Experience Industry Management Food Science and Nutrition Military Science Natural Resources Management and Environmental Sciences Plant Sciences Wine and Viticulture&lt;/p&gt;

&lt;p&gt;Architectural Engineering Architecture City and Regional Planning Construction Management Landscape Architecture&lt;/p&gt;

&lt;p&gt;Aerospace Engineering : &lt;a href="https://aero.calpoly.edu/faculty_staff/"&gt;https://aero.calpoly.edu/faculty_staff/&lt;/a&gt; (on individual pages) Biomedical Engineering : &lt;a href="https://bmed.calpoly.edu/faculty-and-staff/"&gt;https://bmed.calpoly.edu/faculty-and-staff/&lt;/a&gt; Civil and Environmental Engineering : (https://cpslo.sharepoint.com/:x:/s/CENG-files/EbV-V-IE9XBDj2KIdI9IPAgBXm0vTaRfSYSfsdLnuhkRjw?e=viE3eW) (gated link) Computer Engineering : (https://cpe.calpoly.edu/faculty-office-hours&amp;ndash;2/) Computer Science and Software Engineering : (https://csc.calpoly.edu/faculty/) Electrical Engineering : https://ee.calpoly.edu/department-directory (on individual pages) General Engineering : N/A, I think Industrial and Manufacturing Engineering : https://ime.calpoly.edu/office-hours/ Materials Engineering : https://mate.calpoly.edu/faculty-and-staff Mechanical Engineering : https://cpslo.sharepoint.com/:x:/s/CENG-files/EckyyT3R3c9BkdtaJAndLvIB1Ndi52pO4SErQaAcJeFMQw?e=djtCd4 (gated link)&lt;/p&gt;

&lt;p&gt;Art and Design : https://artdesign.calpoly.edu/faculty-staff Communication Studies : https://coms.calpoly.edu/faculty English : https://english.calpoly.edu/faculty-staff-directory Ethnic Studies : https://ethnicstudies.calpoly.edu/faculty-staff Graphic Communication : https://grc.calpoly.edu/faculty-and-staff History : https://history.calpoly.edu/faculty Interdisciplinary Studies in the Liberal Arts : https://isla.calpoly.edu/office-hours Journalism : https://journalism.calpoly.edu/faculty Music : https://music.calpoly.edu/faculty/schedules.pdf Philosophy : https://philosophy.calpoly.edu/faculty-staff Political Science : https://politicalscience.calpoly.edu/faculty-staff Psychology and Child Development : https://psycd.calpoly.edu/faculty-staff Social Sciences : https://socialsciences.calpoly.edu/faculty Theatre and Dance : https://theatredance.calpoly.edu/faculty Women&amp;rsquo;s, Gender and Queer Studies : https://wgqs.calpoly.edu/faculty-staff World Languages and Cultures : https://wlc.calpoly.edu/faculty-staff/office-hours&lt;/p&gt;
&lt;!-- more--&gt;</description></item>
  <item>
   <title>Surely I'm not just an LLM</title>
   <link>http://www.brinckerhoff.org/blog/2025/08/29/surely-i-m-not-just-an-llm/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2025-08-29-surely-i-m-not-just-an-llm</guid>
   <pubDate>Fri, 29 Aug 2025 19:38:55 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;(EDIT: I&amp;rsquo;ve rewritten and softened the text below, based on some valuable feedback from people that pointed out that I was wrong. Ah well.)&lt;/p&gt;

&lt;p&gt;I just read an Ars Technica article by Benji Edwards titled &amp;ldquo;The personhood trap: How AI fakes human personality&amp;rdquo; , with the subtitle &amp;ldquo;AI assistants don&amp;rsquo;t have fixed personalities—just patterns of output guided by humans.&amp;rdquo;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://arstechnica.com/information-technology/2025/08/the-personhood-trap-how-ai-fakes-human-personality/"&gt;https://arstechnica.com/information-technology/2025/08/the-personhood-trap-how-ai-fakes-human-personality/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have lots of things to say, but I&amp;rsquo;m just going to post this very brief reply:&lt;/p&gt;

&lt;p&gt;In my opinion, in this article Benji Edwards falls into the classic &amp;ldquo;cartesian illusion&amp;rdquo; of many people who talk about humans; they believe that behind the mechanism that generates the words, there is some kind of &amp;ldquo;knower&amp;rdquo;, essentially a little person inside their heads. The sentence in this article that most clearly communicates this illusion in this article starts like this: &amp;ldquo;You&amp;rsquo;re interacting with a system that generates plausible-sounding text based on patterns in training data, not a person with &amp;hellip;&amp;rdquo; The problem here is this: humans are &lt;em&gt;also&lt;/em&gt; systems that generate plausible-sounding text based on patterns in training data. The inputs here are sensory (including many internal nervous system inputs), and I&amp;rsquo;m willing to concede that there are parts of the mind that are not well captured by LLMs, but the use of words like &amp;ldquo;system&amp;rdquo;, &amp;ldquo;plausible-sounding&amp;rdquo;, and &amp;ldquo;training-data&amp;rdquo; are red herrings, representative (I claim) of a misunderstanding of how humans work, and an unwillingness to admit that in most ways that matter, LLMs generate text in exactly the same way as humans do.&lt;/p&gt;

&lt;p&gt;So: yes. You learn from patterns in training data, just like an LLM.&lt;/p&gt;</description></item>
  <item>
   <title>Please don't teach trees as undirected graphs</title>
   <link>http://www.brinckerhoff.org/blog/2024/11/29/please-don-t-teach-trees-as-undirected-graphs/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2024-11-29-please-don-t-teach-trees-as-undirected-graphs</guid>
   <pubDate>Fri, 29 Nov 2024 15:40:07 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;I think I&amp;rsquo;m not alone in suggesting that the tree, and perhaps the binary tree specifically, is the most foundational data structure in computer science.&lt;/p&gt;

&lt;p&gt;This raises the question of how binary trees should be introduced, and I&amp;rsquo;d like to make the case that introducing binary trees as a special case of undirected graphs is not a good idea.&lt;/p&gt;

&lt;p&gt;I can see reasons why you might think this is a good idea; they both involve connecting circles with straight lines on the board. If you take the general notion of a graph, and you happen to arrange the lines and circles in a particular way, it&amp;rsquo;s a tree. That kind of suggests that graphs are a generalization of trees, and that you might want to introduce trees as a special case of these graphs.&lt;/p&gt;

&lt;p&gt;Please do not do this.&lt;/p&gt;

&lt;p&gt;Specifically, my claim is that this produces a complex definition of trees with many global constraints, a definition which makes it very hard to prove some simple things.&lt;/p&gt;

&lt;p&gt;Let&amp;rsquo;s see why.&lt;/p&gt;

&lt;h3 id="trees-as-undirected-graphs"&gt;Trees as Undirected Graphs&lt;/h3&gt;

&lt;p&gt;To begin with, consider the definition of a graph, a set of nodes along with a symmetric binary relation on nodes that we call &amp;ldquo;edges&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;In order to construct the set of trees, we can restrict this definition in the following ways.&lt;/p&gt;

&lt;p&gt;A tree is a graph with the following properties:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;We designate one node as the root node,&lt;/li&gt;
 &lt;li&gt;it is connected, and&lt;/li&gt;
 &lt;li&gt;it has no cycles.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;The last two of these are global cqnstraints requiring complex checks, and verifying the third is genuinely quite complex, especially for a first-year student.&lt;/p&gt;

&lt;p&gt;Suppose now that we want to identify the descendants of a node. This is where things start to get really unpleasant. The descendants of a node are the adjacent nodes that are not the parent node. But which is the parent node? The root node has no parent node. For other nodes, it is the adjacent node which is the first along the path to the root node. Again, this is not a simple process; if we provide a symmetric edge relation and a parent node, determining the path to the root node (and thus the parent node (and thus, by elimination, the descendants)) requires potentially a full search of the tree. Yes, this can be cached. Yes, it doesn&amp;rsquo;t matter whether you do a depth-first or breadth-first search. It&amp;rsquo;s still a lot of work.&lt;/p&gt;

&lt;p&gt;But wait! Suppose we want a binary tree? Firstly, we must ensure that every node has at most two descendants, which is the same as ensuring that the root node has at most 2, and every other node has at most 3. That&amp;rsquo;s the easy part, though. In a binary tree we typically care whether a child is the left child or the right child; adding this to a graph representation requires labeling every node as either a left child or a right child, and then checking to make sure that no node has more than one left or right child.&lt;/p&gt;

&lt;h3 id="inductively-specified-trees"&gt;Inductively Specified Trees&lt;/h3&gt;

&lt;p&gt;Okay, so what&amp;rsquo;s the alternative?&lt;/p&gt;

&lt;p&gt;The alternative is the inductive specification of a binary tree: a binary tree is either an empty tree, or it is a node containing a left tree and a right tree.&lt;/p&gt;

&lt;p&gt;This representation is essentially a tree by definition; no global checks are required. Asking whether a binary tree specified in this way is a binary tree is genuinely trivial: only binary trees can be specified using this schema.&lt;/p&gt;

&lt;p&gt;You could argue that inductive specifications are hard for students, and I wouldn&amp;rsquo;t completely disagree, but I would also argue that the overwhelming simplicity of this definition of binary trees powerfully outweighs the challenge of becoming comfortable with inductive specifications.&lt;/p&gt;

&lt;p&gt;Identifying the descendants of a node here is essentially trivial; an empty tree has no descendants, a non-empty tree lists its two descendants.&lt;/p&gt;

&lt;p&gt;Freebie: this representation also sidesteps the irritating issues around identity which bedevil programmers everywhere.&lt;/p&gt;

&lt;p&gt;What about directed graphs?&lt;/p&gt;

&lt;h3 id="trees-as-directed-graphs"&gt;Trees as Directed Graphs&lt;/h3&gt;

&lt;p&gt;Directed graphs are considerably better than undirected graphs. But still way worse than the inductive specification. Specifically, you need an undirected graph that is connected and with no directed cycles, and you also need an additional constraint that at most one node points to another one (making the arbitrary choice that the edges point from parents to children). Checking these constraints still requires examining the whole graph. Identifying the child nodes is much nicer. Distinguishing the left and right children is still a serious problem.&lt;/p&gt;

&lt;h3 id="done"&gt;Done&lt;/h3&gt;

&lt;p&gt;To summarize; it&amp;rsquo;s reasonable to talk about the correspondence between these two representations. You might even want to try to prove them isomorphic. But please don&amp;rsquo;t introduce trees as a special case of graphs.&lt;/p&gt;</description></item>
  <item>
   <title>In Praise of LACI</title>
   <link>http://www.brinckerhoff.org/blog/2024/11/14/in-praise-of-laci/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2024-11-14-in-praise-of-laci</guid>
   <pubDate>Thu, 14 Nov 2024 22:39:13 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;This is a short blog post about Prabakhar Ragde&amp;rsquo;s &amp;ldquo;Logic and Computation Intertwined&amp;rdquo;, or &amp;ldquo;LACI&amp;rdquo;, currently available online at&lt;/p&gt;

&lt;p&gt;https://cs.uwaterloo.ca/~plragde/flaneries/LACI/&lt;/p&gt;

&lt;p&gt;Here is a bad thing about LACI: every time I search for it, my search engine steers me toward articles about the tragic life of Laci Peterson.&lt;/p&gt;

&lt;p&gt;Here is a good thing about LACI: everything else!&lt;/p&gt;

&lt;p&gt;Specifically, LACI walks you through the process of building a small higher-order-logic theorem prover, using the same dependent typing bones as systems like Lean, and Agda, and Coq.&lt;/p&gt;

&lt;p&gt;I have just finished using LACI as the first five weeks of a master&amp;rsquo;s-level course at Cal Poly, and I found it fantastic. Specifically, it has the part I most like about the definitional interpreter experience: you hear about a technical thing, and you think &amp;ldquo;yes, that sort of makes sense to me,&amp;rdquo; and then you try using or extending it and you realize &amp;ldquo;wow I didn&amp;rsquo;t understand that at &lt;em&gt;all&lt;/em&gt;&amp;rdquo;, and then you figure out a fantastic new thing and you carry it around like a shiny stone for the rest of your life.&lt;/p&gt;

&lt;p&gt;In fact, there are a number of shiny stones involved in LACI. Here are some of the ones that I appreciated the most.&lt;/p&gt;

&lt;p&gt;First, intuitionistic proof theory (and maybe more specifically the BHK interpretation) comes up with a really fascinating way of talking about negation as an implication of bottom. Figuring out the propositional puzzles here, and how to prove certain things, is an absolute ton of  fun (for a particular definition of fun, I grant you).&lt;/p&gt;

&lt;p&gt;Second, dependent type theory pushes through a really mind-bending  overlap between types and propositions: propositions &lt;em&gt;are&lt;/em&gt; types.  This leads to a really complete collapse between the boundary of  terms and types. A quote from Moon over Morocco, presented in the show as a moroccan proverb and who knows maybe it is: &amp;ldquo;A devil takes one and makes two; a saint takes two and makes one.&amp;rdquo; In this case, collapsing the boundary between terms and types makes for some  incredible richness, mixing lambda terms and forall terms (and many other things) in a mind-bending way.&lt;/p&gt;

&lt;p&gt;For both of these, Ragde also provides a selection of excellent exercises. Formulating exercises in a domain like this is extraordinarily difficult; there are not a large pool of equivalent-difficulty  problems that can be generated mechanically. A programming languages course has this same problem, if (like PLAI 2nd edition, for instance) the goal is to get you to implement an interpreter for some lambda-calculus-like language. Ragde does a very nice job of implementing core things, and then challenging you to implement satellite things that are hopefully just a bit out of reach, but not so far out of reach that things get hopelessly tangled. I&amp;rsquo;m in the final stages of coaching my students through an implementation of the natural numbers in Proust, and the problem is enlightening without being utterly soul-crushing.&lt;/p&gt;

&lt;p&gt;I would also be remiss if I did not heap praise on the many side-notes and references that Ragde provides; many of the sections initiate potentially lifelong explorations of math and logic, and provide names and ideas for further investigation. This is the kind of thing that students sometimes complain about, but that curious thinkers delight in.&lt;/p&gt;

&lt;p&gt;Another quote, this one from Ralph Sockman: &amp;ldquo;The larger the island of knowledge, the longer the shoreline of wonder.&amp;rdquo;&lt;/p&gt;

&lt;p&gt;That link again:&lt;/p&gt;

&lt;p&gt;https://cs.uwaterloo.ca/~plragde/flaneries/LACI/&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;</description></item>
  <item>
   <title>I've seen this movie before</title>
   <link>http://www.brinckerhoff.org/blog/2024/11/06/i-ve-seen-this-movie-before/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2024-11-06-i-ve-seen-this-movie-before</guid>
   <pubDate>Wed, 06 Nov 2024 17:34:48 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Yesterday was the election! It looks like Donald Trump is going to be our next president. The democrats lost.&lt;/p&gt;

&lt;p&gt;As much as it pains me to write that, the simple truth is that it doesn&amp;rsquo;t help anyone or anything to be cynical, or to flip out, and it &lt;em&gt;really&lt;/em&gt; doesn&amp;rsquo;t help anyone to doom-loop on terrible possible outcomes.&lt;/p&gt;

&lt;p&gt;So, just to remind myself, here are some things I think are important, and worth fighting for:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;Human Rights&lt;/li&gt;
 &lt;li&gt;Rule of Law&lt;/li&gt;
 &lt;li&gt;Freedom of the Press&lt;/li&gt;
 &lt;li&gt;Slowing Global Warming&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Really, it all comes down to Human rights; I want to work hard(er) to ensure that others have the right to life, liberty, and the pursuit of happiness.&lt;/p&gt;

&lt;p&gt;To be clear, I do think that these things are under threat, and probably will be for the forseeable future. In particular, the Rule of Law and  Freedom of the Press are &amp;ldquo;enabling technologies&amp;rdquo; for Human Rights; I believe that the United States of America continues to be at the forefront of a grand political experiment in how best to ensure the rights of  all its citizens, and that the Rule of Law and Freedom of the Press are vital cornerstones of our system; without them, other things can crumble quickly, as we&amp;rsquo;ve seen in dictatorships all over the world.&lt;/p&gt;

&lt;p&gt;So there, I also said &amp;ldquo;dictatorship&amp;rdquo;. I do not think that we are somehow magically immune from dictatorship, and I do think that we are constantly called upon to bolster our government and to oppose attempts to seize control. I don&amp;rsquo;t know what shape those attempts will take, but I hope that I have the strength to raise my voice against them when they do.&lt;/p&gt;

&lt;p&gt;I realize that I haven&amp;rsquo;t said anything about Global Warming.&lt;/p&gt;

&lt;p&gt;Okay, quick aside: can we go back to just saying &amp;ldquo;Global Warming&amp;rdquo;? The &amp;ldquo;Climate Change&amp;rdquo; phrase is no longer helping, I don&amp;rsquo;t think.&lt;/p&gt;

&lt;p&gt;Anyhow, I do think that climate change is potentially the most destabilizing force to governments and people today, with the potential to kill millions of people (this is already beginning) and to cause wars and famine. I think the evidence for global warming is almost comically solid at this point, and we need to be doing much much more to slow it down.&lt;/p&gt;

&lt;p&gt;To go back to the title: I&amp;rsquo;ve seen this movie before. It sucked. But I didn&amp;rsquo;t die[*]. I can get through this, and it does not help to panic, and being angry all the time is probably not a recipe for health, sanity, or forward progress. I&amp;rsquo;m going to try to do what I can, and stay calm. I pray for you and for your family. Take care of yourselves.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;[*] Thousands of other people died, it&amp;rsquo;s true.&lt;/p&gt;</description></item>
  <item>
   <title>the long shadow of cleverness in computer science</title>
   <link>http://www.brinckerhoff.org/blog/2022/03/29/the-long-shadow-of-cleverness-in-computer-science/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2022-03-29-the-long-shadow-of-cleverness-in-computer-science</guid>
   <pubDate>Tue, 29 Mar 2022 16:43:50 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;I don&amp;rsquo;t have time to write an actual essay here, so I&amp;rsquo;m just going to take a 5-minute break from what I should actually be doing to share with all of you (my millions of adoring readers) a thought that I&amp;rsquo;m having while teaching engineering non-majors how to program.&lt;/p&gt;

&lt;p&gt;To wit: For the last fifty years, cleverness has been extremely important in programming a computer.&lt;/p&gt;

&lt;p&gt;But that&amp;rsquo;s not really true any more, at least not for the vast majority of programmers.&lt;/p&gt;

&lt;p&gt;But we still teach computer science like it is.&lt;/p&gt;

&lt;p&gt;And I&amp;rsquo;ll stop starting my sentences with conjunctions now.&lt;/p&gt;

&lt;p&gt;In the 1950s, 1960s, and 1970s, computers were generally speaking slow and small; fitting your desired computation into the time and space afforded by computation was a challenge. Programmers had to come up with clever encodings and clever algorithms. They did!&lt;/p&gt;

&lt;p&gt;Now, in the 202s, computers are very large and very fast, compared to the programs that most of us want to run. There are exceptions, of course; weather simulations and &amp;ldquo;high-energy physics&amp;rdquo; still want as much computing power as they can get. Most of our computing tasks, though, are relatively more modest.&lt;/p&gt;

&lt;p&gt;Unfortunately, we haven&amp;rsquo;t yet figured out how to teach programming in ways that focus on correctness and reliability.&lt;/p&gt;

&lt;p&gt;Honestly, I think that&amp;rsquo;s because most of our teachers are still much more interested in working on problems that exercise their cleverness. There&amp;rsquo;s a strong parallel here to Math; for many math faculty, teaching a Calc 1 class doesn&amp;rsquo;t sound fun; there may not be much that&amp;rsquo;s challenging or interesting about the material, and much of the work is oriented around nurturing and caring for young minds, rather than inventing new and magical ways of thinking.&lt;/p&gt;

&lt;p&gt;In computer science (which in many ways is just applied math), we haven&amp;rsquo;t yet reached this state, for the simple reason that we still have not developed the tools that allow people to efficiently generate correct and reliable programs. In other words, it&amp;rsquo;s not too late for cleverness! That cleverness, though, must be directed not at the students, teaching them how to write clever programs in complex and interesting languages; instead, it must be directed at the tools and materials that surround those students; we need to develop programming tools and teaching methods that efficiently endow those young minds with the ability to generate correct and&lt;/p&gt;
&lt;!-- more--&gt;</description></item>
  <item>
   <title>Peaceful disagreement</title>
   <link>http://www.brinckerhoff.org/blog/2021/05/03/peaceful-disagreement/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2021-05-03-peaceful-disagreement</guid>
   <pubDate>Mon, 03 May 2021 19:25:18 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Peaceful disagreement is the foundation of our American government.&lt;/p&gt;

&lt;p&gt;It is not surprising that we disagree with each other. Each of us has individual opinions, circumstances, and understanding. Each of us sees a different part of the problems that surround us. Each of us has a different insight into the world, and sees different things that need to change.&lt;/p&gt;

&lt;p&gt;And, for better or worse, pretty much all of us are justifiably angry about some aspect of government and society.&lt;/p&gt;

&lt;p&gt;Our great virtue, as a nation, is that we have the ability to set that rancor aside; to suspend our anger, and to use the democratic process to decide upon a path forward. I don&amp;rsquo;t use the word &amp;ldquo;agreement&amp;rdquo;, because we may never truly agree. Fortunately, our nation and our government do not depend on our ability to agree with each other. They depend only on our ability to participate peacefully in a democratic process.&lt;/p&gt;

&lt;p&gt;It has worked well since 1776. I have faith (and I do mean faith) that it will continue to work, and that America&amp;mdash;the greatest nation on Earth&amp;mdash;will continue to thrive and prosper, creating peace and prosperity and allowing each of us the pursuit of happiness.&lt;/p&gt;</description></item>
  <item>
   <title>how to not cheat</title>
   <link>http://www.brinckerhoff.org/blog/2021/03/13/how-to-not-cheat/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2021-03-13-how-to-not-cheat</guid>
   <pubDate>Sun, 14 Mar 2021 02:33:03 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;So, this post isn&amp;rsquo;t very timely: hopefully COVID&amp;ndash;19 will soon go away and we&amp;rsquo;ll all return to forms of education that actually work.&lt;/p&gt;

&lt;p&gt;In the meantime, though, I&amp;rsquo;ve been learning things about online testing.&lt;/p&gt;

&lt;p&gt;It probably goes without saying that there are many many differences between taking tests online and taking tests in person.&lt;/p&gt;

&lt;p&gt;However, one of them that hadn&amp;rsquo;t occurred to me until very recently was how much more difficult it is&amp;hellip; to not cheat.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s what I mean. When you&amp;rsquo;re taking an in-person test in a classroom setting, your basic task is to focus your attention on your own desk. I&amp;rsquo;m not saying that&amp;rsquo;s easy for everyone, but I&amp;rsquo;ve come to realize that online testing presents an incredibly different experience.&lt;/p&gt;

&lt;p&gt;Specifically, I think it&amp;rsquo;s safe to assume that most of the people in my courses taking exams still have their phones on. And what do you do if you&amp;rsquo;re taking a quiz, and you get a message from a friend, begging for help on a particular problem? You have to either deliberately snub them, or actually tell them &amp;ldquo;no&amp;rdquo;. Both of those are kind of hostile.&lt;/p&gt;

&lt;p&gt;What this means is that we&amp;rsquo;ve taken an environment in which it&amp;rsquo;s incredibly easy to insulate yourself from those trying to cheat, and turned it into one where the burden is on those who &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; want to cheat to actively reject those who do.&lt;/p&gt;

&lt;p&gt;So, I&amp;rsquo;m guessing that this is incredibly obvious to all of my students, but it sure wasn&amp;rsquo;t to me.&lt;/p&gt;

&lt;p&gt;Is there an easy solution? Well, &lt;em&gt;my&lt;/em&gt; easy solution would just be to turn off my phone during the test. But I suppose I wouldn&amp;rsquo;t do that unless the possibility of being asked for my answers occurred to me beforehand.&lt;/p&gt;

&lt;p&gt;And, of course, this does absolutely nothing for the problem of students that actively conspire ahead of time to cheat.&lt;/p&gt;

&lt;p&gt;So, although it&amp;rsquo;s a little late to do this now&amp;mdash;the exam is in two days, and we can&amp;rsquo;t really discuss it in person&amp;mdash;I&amp;rsquo;m going to make this suggestion now: please just turn off your phone and put it in another room, for the duration of the test?&lt;/p&gt;
&lt;!-- more--&gt;</description></item>
  <item>
   <title>the spirit of liberty</title>
   <link>http://www.brinckerhoff.org/blog/2021/01/15/the-spirit-of-liberty/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2021-01-15-the-spirit-of-liberty</guid>
   <pubDate>Sat, 16 Jan 2021 06:47:46 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;I was forwarded this today. It&amp;rsquo;s a speech given in 1944 by Judge Learned Hand, on &amp;ldquo;I am an American&amp;rdquo; day in 1944, in the middle of a terrifying world war.&lt;/p&gt;

&lt;p&gt;The first few sentences are somewhat hard to read; his assertion that we are made of people that have chosen to immigrate or are descended from those who did rings terribly terribly false for the thousands and thousands of slaves that were brought to this country in grotesque conditions, entirely against their wills.&lt;/p&gt;

&lt;p&gt;Can we move past this? I hope we can, because his statements about Liberty, and the distinction between Liberty and the simple anarchy of unbridled will, are incredibly powerful and relevant in January 2021, when we face an insurrection of those who seem to believe that &amp;ldquo;do what thou wilt shall be the whole of the law.&amp;rdquo;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;We have gathered here to affirm a faith, a faith in a common purpose, a common conviction, a common devotion. Some of us have chosen America as the land of our adoption; the rest have come from those who did the same. For this reason we have some right to consider ourselves a picked group, a group of those who had the courage to break from the past and brave the dangers and the loneliness of a strange land. What was the object that nerved us, or those who went before us, to this choice? We sought liberty; freedoms from oppression, freedom from want, freedom to be ourselves. This we then sought; this we now believe that we are by way of winning. What do we mean when we say that first of all we seek liberty? I often wonder whether we do not rest our hopes too much upon constitutions, upon laws and upon courts. These are false hopes; believe me, these are false hopes. Liberty lies in the hearts of men and women; when it dies there, no constitution, no law, no court can even do much to help it. While it lies there it needs no constitution, no law, no court to save it. And what is this liberty which must lie in the hearts of men and women? It is not the ruthless, the unbridled will; it is not freedom to do as one likes. That is the denial of liberty, and leads straight to its overthrow. A society in which men recognize no check upon their freedom soon becomes a society where freedom is the possession of only a savage few; as we have learned to our sorrow.&lt;/p&gt;

&lt;p&gt;What then is the spirit of liberty? I cannot define it; I can only tell you my own faith. The spirit of liberty is the spirit which is not too sure that it is right; the spirit of liberty is the spirit which seeks to understand the mind of other men and women; the spirit of liberty is the spirit which weighs their interests alongside its own without bias; the spirit of liberty remembers that not even a sparrow falls to earth unheeded; the spirit of liberty is the spirit of Him who, near two thousand years ago, taught mankind that lesson it has never learned but never quite forgotten; that there may be a kingdom where the least shall be heard and considered side by side with the greatest. And now in that spirit, that spirit of an America which has never been, and which may never be; nay, which never will be except as the conscience and courage of Americans create it; yet in the spirit of that America which lies hidden in some form in the aspirations of us all; in the spirit of that America for which our young men are at this moment fighting and dying; in that spirit of liberty and of America I ask you to rise and with me pledge our faith in the glorious destiny of our beloved country.&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;Judge Learned Hand, 1944&lt;/li&gt;&lt;/ul&gt;</description></item>
  <item>
   <title>Facebook Apparently Terrified by Default Privacy</title>
   <link>http://www.brinckerhoff.org/blog/2020/12/17/facebook-apparently-terrified-by-default-privacy/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2020-12-17-facebook-apparently-terrified-by-default-privacy</guid>
   <pubDate>Thu, 17 Dec 2020 17:49:49 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Based on their full-page advertisements in various newspapers, Facebook is &lt;em&gt;extremely&lt;/em&gt; upset about Apple&amp;rsquo;s upcoming move to make cross-app privacy the default. Their two main &amp;ldquo;hooks&amp;rdquo; are that it will hurt small businesses, and make the internet less &amp;ldquo;free&amp;rdquo;. I believe that neither of these is the case.&lt;/p&gt;

&lt;p&gt;What &lt;em&gt;is&lt;/em&gt; clear to me is that this move will hurt Facebook&amp;rsquo;s ability to collect piles of information about its users, and to leverage that to collect huge amounts of advertising money.&lt;/p&gt;

&lt;h3 id="the-current-situation"&gt;The Current Situation&lt;/h3&gt;

&lt;p&gt;Before I go on, a caveat here: while I&amp;rsquo;m a programmer and a researcher, I am &lt;em&gt;not&lt;/em&gt; a security and privacy researcher, so you should check the things I&amp;rsquo;m telling you.&lt;/p&gt;

&lt;p&gt;With that said, a brief summary of the current situation: Currently, Apple&amp;rsquo;s iOS includes a notion of an &amp;ldquo;IDFA&amp;rdquo;, an &amp;ldquo;identity for advertisers.&amp;rdquo; This IDFA can be seen by apps, and apps can send information about what a user is doing in this app back to its central servers. This information can then be connected to other information uploaded by other apps in order to build a detailed picture of you.&lt;/p&gt;

&lt;p&gt;This allows Facebook and others to understand what you&amp;rsquo;re like, and how best to separate you from your money by presenting you with advertising that&amp;rsquo;s likely to convince you to buy things. It also allows Facebook to identify characteristics that will allow them to present content that you will be really really interested in.&lt;/p&gt;

&lt;p&gt;Back in June 2020, at their developer&amp;rsquo;s conference, Apple announced a change to the way that IDFAs would work. Since this is a developer conference, they were addressing app developers, and telling them how they would use their new framework to observe a user&amp;rsquo;s IDFA:&lt;/p&gt;

&lt;p&gt;"To ask for permission to track a user, call the AppTrackingTransparency framework, which will result in a prompt that looks like this.&lt;/p&gt;

&lt;div class="figure"&gt;&lt;img src="/img/consent-dialog.png" alt="opt-in tracking dialog" /&gt;
 &lt;p class="caption"&gt;opt-in tracking dialog&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;This framework requires the NSUserTrackingUsageDescription key to be filled out in your Info.plist.&lt;/p&gt;

&lt;p&gt;You should add a clear description of why you&amp;rsquo;re asking to track the user.&lt;/p&gt;

&lt;p&gt;The IDFA is one of the identifiers that is controlled by the new tracking permission.&lt;/p&gt;

&lt;p&gt;To request permission to track the user, call the AppTrackingTransparency framework. If users select &amp;ldquo;Ask App Not to Track,&amp;rdquo; the IDFA API will return all zeros."&lt;/p&gt;

&lt;p&gt;So, which button would you click?&lt;/p&gt;

&lt;p&gt;My guess is that relatively few people will click the &amp;ldquo;Allow Tracking&amp;rdquo; button.&lt;/p&gt;

&lt;p&gt;This will mean that Facebook and other apps will not be able to observe your IDFA, and will not be able to use this extremely convenient way to gather and share information about you.&lt;/p&gt;

&lt;h3 id="small-businesses"&gt;Small Businesses&lt;/h3&gt;

&lt;p&gt;What does this mean for small businesses?&lt;/p&gt;

&lt;p&gt;Let me offer another caveat here, and tell you that I am not an expert on small businesses, their use of targeted advertising, and the effectiveness of their use of targeted advertising.&lt;/p&gt;

&lt;p&gt;However, I&amp;rsquo;m going to observe that small businesses, by and large, are hurt by online advertising in general, and are unlikely to have the kinds of data science teams that are best positioned to sift through and profit from reams of consumer data.&lt;/p&gt;

&lt;p&gt;Some (like Facebook?) might respond that their interfaces are designed to make high-quality data analytics available to even businesses that don&amp;rsquo;t have giant data science teams. I don&amp;rsquo;t think this argument holds much water, and I think that whenever Facebook provides better information on their users, companies with high data-science ability will be the ones best positioned to capitalize on it.&lt;/p&gt;

&lt;p&gt;Facebook makes the specific claim that &amp;ldquo;Facebook data shows that the average small business owner stands to see a cut of over 60% in their sales for every dollar they spend.&amp;rdquo; This claim is (I claim) fairly preposterous; I&amp;rsquo;m guessing that they&amp;rsquo;re measuring the relative effectiveness of targeted and non-targeted advertising. What this ignores is the fact that people are still going to buy things, so that if targeted advertising goes away, more dollars will go toward non-targeted advertising.&lt;/p&gt;

&lt;p&gt;Of course, they might be right, in the situation that the stuff that people are buying because of targeted advertising is worthless junk that they didn&amp;rsquo;t need. In that case, maybe targeted advertising is really important because it allows advertisers to sell us worthless junk. I&amp;rsquo;m not sure that&amp;rsquo;s a good argument for allowing targeted advertising.&lt;/p&gt;

&lt;h3 id="the-free-internet"&gt;The Free Internet&lt;/h3&gt;

&lt;p&gt;Next, Facebook makes the argument that this move is in opposition to the &amp;ldquo;free&amp;rdquo; internet. Specifically, they argue that &amp;ldquo;Many [sites] will have to start charging you subscription fees or adding more in-app purchases, making the internet much more expensive and reducing high-quality free content.&amp;rdquo;&lt;/p&gt;

&lt;p&gt;This paragraph makes it clear that Facebook&amp;rsquo;s definition of &amp;ldquo;free&amp;rdquo; here is &amp;ldquo;free as in beer&amp;rdquo;, not &amp;ldquo;free as in speech&amp;rdquo;. That is, Apple&amp;rsquo;s change will not reduce the liberty of the internet. It will simply make it harder for sites to pay for their content-generation using targeted advertising.&lt;/p&gt;

&lt;p&gt;Again, I think this argument doesn&amp;rsquo;t hold water, for the same reason given in the case of small businesses; unless the items being advertised are completely useless, shifting from targeted to untargeted advertising will simply level the advertising playing field, and make it harder for large companies to leverage their data science teams to separate you from your money.&lt;/p&gt;

&lt;p&gt;However, a reduction in targeted advertising will make one &lt;em&gt;huge&lt;/em&gt; difference; it will mean that small businesses will be more likely to work directly with the sites that their projected customers will use, rather than giving a huge slice of their money to middlemen like Facebook that mediate and control access to the targeted audiences. If I think that my customers read the Wall Street Journal, I will contact the Wall Street Journal and place an ad. This may sound like business as usual, but it&amp;rsquo;s absolutely terrifying to advertising middlemen whose current value is in holding all of the information about customers, and placing advertisements directly in the pages of those who are likely to click on them.&lt;/p&gt;

&lt;h3 id="in-summary"&gt;In Summary&amp;hellip;&lt;/h3&gt;

&lt;p&gt;To summarize: tracking is still possible after this move; it&amp;rsquo;s just that users must opt into it, rather than having it on by default.&lt;/p&gt;

&lt;p&gt;And here&amp;rsquo;s the thing. If you&amp;rsquo;re as terrified as this by the idea that users might have to explicitly consent to your practices&amp;hellip; maybe you&amp;rsquo;re not actually the good guy.&lt;/p&gt;

&lt;p&gt;Or, as That Mitchell and Webb Look put it: &amp;ldquo;Hans &amp;hellip; are we the baddies?&amp;rdquo;&lt;/p&gt;

&lt;h3 id="further-reading"&gt;Further reading:&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://foundation.mozilla.org/en/campaigns/apples-anti-tracking-plans-iphone/"&gt;Mozilla campaign to thank Apple&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.apple.com/videos/play/wwdc2020/10676/"&gt;Apple Developer Conference Video (with transcript)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.forbes.com/sites/johnkoetsier/2020/06/24/apple-just-made-idfa-opt-in-sending-an-80-billion-industry-into-upheaval/?sh=293e2e03712c"&gt;Forbes article on the proposed change&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.eff.org/deeplinks/2019/07/thank-q-next"&gt;EFF opinion on advertiser IDs (both Google&amp;rsquo;s &amp;amp; Apple&amp;rsquo;s)&lt;/a&gt;&lt;/p&gt;

&lt;div class="figure"&gt;&lt;img src="/img/apple-vs-free-internet-full-ad.jpg" alt="facebook full-page ad" /&gt;
 &lt;p class="caption"&gt;facebook full-page ad&lt;/p&gt;&lt;/div&gt;</description></item>
  <item>
   <title>On the relationship between mathematical functions and program functions</title>
   <link>http://www.brinckerhoff.org/blog/2020/12/11/on-the-relationship-between-mathematical-functions-and-program-functions/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2020-12-11-on-the-relationship-between-mathematical-functions-and-program-functions</guid>
   <pubDate>Fri, 11 Dec 2020 16:46:35 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;NOTE: this text is a brief overview intended for instructors of a CS course that we&amp;rsquo;re developing; it is not technical. It tries to make the case that our early courses should steer students toward understanding problems in terms of pure functions. If you have suggestions or feedback, I&amp;rsquo;d love to hear them/it.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;This section of the course introduces functions, a crucial topic in the field of computer science AND in the field of math.&lt;/p&gt;

&lt;p&gt;Programmers and mathematicians sometimes think about the term “function” somewhat differently. Furthermore, some people who are familiar with both fields assign different meanings to the word “function” in the two fields.&lt;/p&gt;

&lt;p&gt;The definition of a function in the mathematical domain is fairly well specified, though of course things get a little fuzzy around the edges. We’re going to define functions as the arrows in the category Set, more or less (if that’s not helpful, ignore it). That is, a function has a specified domain and a specified codomain, and it maps every element of the domain to a particular element in the codomain. There’s no requirement that it map every element of the domain to a different element of the codomain (one-to-one) OR that there be some element of the domain that maps to any chosen element of the codomain (onto). This (I claim) is the standard notion of “function” in math.[*]&lt;/p&gt;

&lt;p&gt;Programmers also use and love functions. Nearly every programming language has a notion of functions. Of course, they’re sometimes called “procedures” or even “paragraphs” (I believe that’s COBOL. Yikes.). In programming, functions are often thought of as being elements of abstraction that are designed to allow repetition. And so they are. But it turns out that they also, in most modern programming languages, can be thought of as mathematical functions. Well, some of them can.&lt;/p&gt;

&lt;p&gt;For many functions, this is totally obvious. If I consider the function from numbers to numbers that we might write in math class as f(x) = 14x + 2, then I can write that as a function in most programming languages. (If you disagree with me, hold that thought.)&lt;/p&gt;

&lt;p&gt;But… things aren’t always so clear. What about a function that doesn’t return at all? What about a function that takes input, or produces output? What about a function that mutates an external variable, or reads a value from a mutable value? What about a function that signals an error? All of these present problems, some more substantial than others. None of these have a totally obvious mapping to mathematical functions.&lt;/p&gt;

&lt;p&gt;There certainly &lt;em&gt;are&lt;/em&gt; ways to fit these functions into mathematical models, but in general, the clearest lesson is that when there &lt;em&gt;is&lt;/em&gt; a natural way to express a problem using functions that map directly to mathematical functions, we should. These are generally called “pure” or “purely functional” functions.&lt;/p&gt;

&lt;p&gt;So, why should it matter whether our functions are pure? What benefits do we gain when we express functions in purely functional ways?&lt;/p&gt;

&lt;p&gt;The clearest one is predictability, also known as debuggability and testability. When I write a pure function that maps the input “savage speeders” to 17, then I know that it will &lt;em&gt;always&lt;/em&gt; map that string to 17; I don’t need to worry that it will work differently when the global foo counter is less than zero, or when it’s run in parallel, or on Wednesday, or when the value in memory location 0x3342a7 is less than the value in memory location 0x3342a8.&lt;/p&gt;

&lt;p&gt;Put differently, pure functions allow me to reliably decompose problems into sub-pieces. When I’m debugging and testing, I don’t need to worry about setup and teardown to establish external conditions.&lt;/p&gt;

&lt;p&gt;Another way to understand this is to dip into functions that use mutation. If we want to model these as mathematical functions, we need to understand that in addition to their stated inputs, they take additional hidden inputs. In the simplest case, this may be the value of a global counter. Things get much more complex when we allow mutation of data structures; now we need to worry about whether two values are the “same” value; that is, whether mutating one of them will change the other. Worse still, mutating certain values may affect the evaluation of other concurrent procedures.&lt;/p&gt;

&lt;p&gt;For these reasons and others like them, pure functions are vastly easier to reason about, debug, and maintain. Over time, many of our programming domains and paradigms are migrating toward primarily-pure settings. Examples include the spread of the popular map-reduce frameworks, and the wild explosion of popularity in deep learning networks. In both cases, the purity spreads downward from a mathematical framework.&lt;/p&gt;

&lt;p&gt;Note that it is &lt;em&gt;not&lt;/em&gt; always the case that pure approaches are the most natural “first choice” for programmers, especially introductory programmers, for whom programs are often imagined as a “sequence of changes”; do this, then do this, then do this, then you’re done. In this model, the program is performing a series of mutations on a larger world. Helping introductory programmers move to a purer model is a challenge, but one with substantial payoff.&lt;/p&gt;

&lt;p&gt;For this reason, this section focuses directly on pure functions, and invites students to conceive of programs using the models that they’ve been taught in elementary and secondary school, most particularly tables mapping inputs to outputs.&lt;/p&gt;

&lt;p&gt;[*] The only reason I mention the category Set is to draw attention to the distinction between “codomain” and “range”; every function has a named codomain, regardless of whether its range covers it. For instance, the “times-two” function from Reals to Reals is a different function from the “times-two” function from integers to integers, and the “times-two” function from integers to reals is yet a third function.&lt;/p&gt;</description></item>
  <item>
   <title>updated course dependencies graph</title>
   <link>http://www.brinckerhoff.org/blog/2019/12/06/updated-course-dependencies-graph/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2019-12-06-updated-course-dependencies-graph</guid>
   <pubDate>Fri, 06 Dec 2019 18:36:00 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;I&amp;rsquo;ve updated the dependency chart to match the 2019&amp;ndash;2020 catalog.&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2198-colored-dependencies.svg"&gt;&lt;img src="/img/calpoly-2198-colored-dependencies.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This now includes DATA classes as well as CPE and CSC classes.&lt;/p&gt;
&lt;!-- more--&gt;

&lt;p&gt;As before, the arrows just mean that the catalog refers in some way to the pointed-to course in the prerequisites section; it might be that only one of them is required, or some subset.&lt;/p&gt;

&lt;p&gt;Also, colors relate to number of students that have taken a class. Here&amp;rsquo;s what I wrote before:&lt;/p&gt;

&lt;p&gt;The colors relate to the number of students that have enrolled in each class. Specifically, the log of the number of students that have taken the class from fall 2010 through spring 2019. Classes with zero enrollment are given log(0.5). The class with the highest value is red, the one with the lowest value is green. Yes, there should be a legend. Classes that aren&amp;rsquo;t in the Computer Science catalog are gray.&lt;/p&gt;</description></item>
  <item>
   <title>class size update</title>
   <link>http://www.brinckerhoff.org/blog/2019/01/17/class-size-update/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2019-01-17-class-size-update</guid>
   <pubDate>Thu, 17 Jan 2019 21:45:51 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Again: not too much new here, but the spring and fall quarters quarter is new:&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2088-2188-computerscience-enrollment-likelihood.svg"&gt;&lt;img src="/img/calpoly-2088-2188-computerscience-enrollment-likelihood.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s the college as a whole (we&amp;rsquo;re better):&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2088-2188-ceng-enrollment-likelihood.svg"&gt;&lt;img src="/img/calpoly-2088-2188-ceng-enrollment-likelihood.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;</description></item>
  <item>
   <title>class size update</title>
   <link>http://www.brinckerhoff.org/blog/2018/03/16/class-size-update/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2018-03-16-class-size-update</guid>
   <pubDate>Fri, 16 Mar 2018 22:28:48 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Not too much new here, but the winter quarter is new:&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2088-2182-computerscience-enrollment-likelihood.svg"&gt;&lt;img src="/img/calpoly-2088-2182-computerscience-enrollment-likelihood.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s the college as a whole (we&amp;rsquo;re better):&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2088-2182-ceng-enrollment-likelihood.svg"&gt;&lt;img src="/img/calpoly-2088-2182-ceng-enrollment-likelihood.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;</description></item>
  <item>
   <title>The Dickey Amendment</title>
   <link>http://www.brinckerhoff.org/blog/2018/03/01/the-dickey-amendment/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2018-03-01-the-dickey-amendment</guid>
   <pubDate>Thu, 01 Mar 2018 23:29:47 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;My name is John Clements. I&amp;rsquo;m a computer scientist and programmer, and quite frankly, it&amp;rsquo;s hard for me to remain civil in discussion of the Dickey amendment, one of the most pernicious pieces of legislative ledgermain it is my deep displeasure to be familiar with.&lt;/p&gt;

&lt;p&gt;Since the Dickey amendment of 1996, the Centers for Disease Control&amp;mdash;responsible for safeguarding the health of the American public&amp;mdash;has been unable to perform research on the effects or causes of gun violence.&lt;/p&gt;

&lt;p&gt;My government&amp;mdash;the finest on earth&amp;mdash;makes many decisions that I disagree with. Money is spent daily in ways that I am not in support of. However, when we institute a blanket ban on funding for &lt;em&gt;research&lt;/em&gt; into particular topics, it sends a much stronger message; not only do we not want to spend money on this or that; we&amp;rsquo;re actually afraid to discover the truth. Senator Dickey himself&amp;mdash;the author of the amendment&amp;mdash;has since come out against the it&lt;sup&gt;&lt;a href="#2018-03-01-the-dickey-amendment-footnote-1-definition" name="2018-03-01-the-dickey-amendment-footnote-1-return"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;This tactic is one of a number of what I think of as &amp;ldquo;force multiplier&amp;rdquo; or &amp;ldquo;upstream&amp;rdquo; approaches to controlling society, and I think they&amp;rsquo;re all appalling. These tactics seek to change the rules of the game, to prevent our political system from working correctly. Gerrymandering is one such tactic. Allowing unlimited corporate donations&amp;mdash;that is, the lack of campaign finance laws&amp;mdash;are another. Rules such as this are similar; rather than trying to persuade the public that your point is correct, you simply prevent the truth from being discovered in the first place.&lt;/p&gt;

&lt;p&gt;In my mind, this kind of ban seeks to prevent the free flow of information, tacks perilously close to freedom of the press, and can only come from a group that is frightened that the public might discover the truth.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s time for us to discover the truth.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class="footnotes"&gt;
 &lt;ol&gt;
  &lt;li id="2018-03-01-the-dickey-amendment-footnote-1-definition" class="footnote-definition"&gt;
   &lt;p&gt;&lt;a href="https://www.npr.org/2015/10/09/447098666/ex-rep-dickey-regrets-restrictive-law-on-gun-violence-research/"&gt;NPR Interview with Jay Dickey, October 9, 2015&lt;/a&gt;&amp;nbsp;&lt;a href="#2018-03-01-the-dickey-amendment-footnote-1-return"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</description></item>
  <item>
   <title>cohort progress 2178</title>
   <link>http://www.brinckerhoff.org/blog/2018/02/26/cohort-progress-2178/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2018-02-26-cohort-progress-2178</guid>
   <pubDate>Tue, 27 Feb 2018 06:46:04 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Okay, I&amp;rsquo;ve replaced this blog post with a perma-link so I can update it without keeping huge amounts of old data around:&lt;/p&gt;

&lt;p&gt;&lt;a href="/cohort-progress/index.html"&gt;permanent location&lt;/a&gt;&lt;/p&gt;</description></item>
  <item>
   <title>123 appears to help 357 completion</title>
   <link>http://www.brinckerhoff.org/blog/2018/02/24/123-appears-to-help-357-completion/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2018-02-24-123-appears-to-help-357-completion</guid>
   <pubDate>Sun, 25 Feb 2018 06:04:46 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Some good news, here.&lt;/p&gt;

&lt;p&gt;On my way home from SIGCSE, I drew some more pictures.&lt;/p&gt;

&lt;p&gt;This shows how each year of incoming students handles 357. Specifically, the x axis shows quarters since the students&amp;rsquo; first one, and the y axis shows what fraction of the students have passed 357. Each line shows a different cohort.&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2058-2168-357-passage.svg"&gt;&lt;img src="/img/calpoly-2058-2168-357-passage.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of the lines are longer than others. This is because some cohorts that take a &lt;em&gt;really long time&lt;/em&gt; to pass 357, and also because some cohorts haven&amp;rsquo;t yet had more than 6 or 9 or 12 quarters since entry.&lt;/p&gt;

&lt;p&gt;There&amp;rsquo;s some sobering news here&amp;mdash;since 2005, we&amp;rsquo;ve &lt;em&gt;never&lt;/em&gt; managed to heave more than 75% of the students over the 357 bar.&lt;/p&gt;

&lt;p&gt;However, looking more closely, we see that more recent cohorts&amp;mdash;specifically, those since 2010 (a.k.a. &amp;ldquo;when we started 123&amp;rdquo;) look a lot better.&lt;/p&gt;
&lt;!-- more--&gt;

&lt;p&gt;First, the old cohorts:&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2058-2098-357-passage.svg"&gt;&lt;img src="/img/calpoly-2058-2098-357-passage.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here are the cohorts since we added 123:&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2108-2168-357-passage.svg"&gt;&lt;img src="/img/calpoly-2108-2168-357-passage.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looks better, doesn&amp;rsquo;t it? In fact, there&amp;rsquo;s no overlap in the 9-qtr outcomes; every year since the change has been better than every year before the change. Also, the most recent ones look like they&amp;rsquo;re going to be even better.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m also interested to see that 123 didn&amp;rsquo;t actually push 357 back at all; it still looks like the big jump occurs in the winter of the second year.&lt;/p&gt;

&lt;p&gt;Yay, us!&lt;/p&gt;</description></item>
  <item>
   <title>incoming students updated</title>
   <link>http://www.brinckerhoff.org/blog/2018/02/22/incoming-students-updated/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2018-02-22-incoming-students-updated</guid>
   <pubDate>Fri, 23 Feb 2018 06:23:02 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;As part of our work on our recent SIGCSE paper (citation forthcoming), I took another look at our numbers of incoming students. The results surprised me. This table combines CSC, CPE, and SE students, and associates them with the quarter in which they first took a lower-level CS class.&lt;/p&gt;

&lt;p&gt;&lt;a href="/img/calpoly-2058-2174-incoming.svg"&gt;&lt;img src="/img/calpoly-2058-2174-incoming.svg" width="700" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The surprising thing about this&amp;mdash;to me, anyway&amp;mdash;is that our enrollments have actually been &lt;em&gt;dropping&lt;/em&gt; over the past few years. I&amp;rsquo;m surprised.&lt;/p&gt;</description></item>
  <item>
   <title>the many uses of the AR-15 yet again</title>
   <link>http://www.brinckerhoff.org/blog/2018/02/20/the-many-uses-of-the-ar-15-yet-again/?utm_source=all&amp;utm_medium=RSS</link>
   <guid isPermaLink="false">urn:http-www-brinckerhoff-org:-blog-2018-02-20-the-many-uses-of-the-ar-15-yet-again</guid>
   <pubDate>Tue, 20 Feb 2018 15:56:23 UT</pubDate>
   <author>John Clements</author>
   <description>
&lt;p&gt;Do we need to go through this again? Another entry on the list. Sarcasm aside, this gun really has no plausible purpose aside from killing people. Can we please have an assault weapons ban?&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;July 20, 2012 - Aurora, CO &amp;ndash; 12 people dead - Smith &amp;amp; Wesson AR&amp;ndash;15&lt;sup&gt;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-1-definition" name="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-1-return"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
 &lt;li&gt;December 14, 2012 - Sandy Hook elementary school, Newtown, CT &amp;ndash; 20 people dead - Bushmaster AR&amp;ndash;15&lt;sup&gt;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-2-definition" name="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-2-return"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
 &lt;li&gt;December 2, 2015 - San Bernardino, CA &amp;ndash; 14 people dead - Smith &amp;amp; Wesson AR&amp;ndash;15&lt;sup&gt;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-3-definition" name="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-3-return"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
 &lt;li&gt;June 12, 2016 - Orlando, FL &amp;ndash; 49 people dead - Sig Sauer AR&amp;ndash;15&lt;sup&gt;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-4-definition" name="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-4-return"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
 &lt;li&gt;October 2, 2017 - Las Vegas, NV &amp;ndash; 57 people dead - &amp;ldquo;AR&amp;ndash;15-style&amp;rdquo; assault rifle&lt;sup&gt;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-5-definition" name="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-5-return"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
 &lt;li&gt;February 14, 2018 - Parkland, FL &amp;ndash; 17 people dead - &amp;ldquo;AR&amp;ndash;15 semi-automatic assault rifle&amp;rdquo;&lt;sup&gt;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-6-definition" name="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-6-return"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;div class="footnotes"&gt;
 &lt;ol&gt;
  &lt;li id="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-1-definition" class="footnote-definition"&gt;
   &lt;p&gt;&lt;a href="http://www.businessinsider.com/heres-what-we-know-about-the-equipment-carried-by-the-denver-shooter-2012-7"&gt;http://www.businessinsider.com/heres-what-we-know-about-the-equipment-carried-by-the-denver-shooter&amp;ndash;2012&amp;ndash;7&lt;/a&gt;&amp;nbsp;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-1-return"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  &lt;li id="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-2-definition" class="footnote-definition"&gt;
   &lt;p&gt;&lt;a href="http://money.cnn.com/2014/12/15/news/companies/sandy-hook-bushmaster-newtown-lawsuit/index.html"&gt;http://money.cnn.com/2014/12/15/news/companies/sandy-hook-bushmaster-newtown-lawsuit/index.html&lt;/a&gt;&amp;nbsp;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-2-return"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  &lt;li id="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-3-definition" class="footnote-definition"&gt;
   &lt;p&gt;&lt;a href="http://money.cnn.com/2015/12/04/news/companies/san-bernardino-killings-ar15/index.html"&gt;http://money.cnn.com/2015/12/04/news/companies/san-bernardino-killings-ar15/index.html&lt;/a&gt;&amp;nbsp;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-3-return"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  &lt;li id="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-4-definition" class="footnote-definition"&gt;
   &lt;p&gt;&lt;a href="http://www.nytimes.com/interactive/2015/10/03/us/how-mass-shooters-got-their-guns.html"&gt;http://www.nytimes.com/interactive/2015/10/03/us/how-mass-shooters-got-their-guns.html&lt;/a&gt;&amp;nbsp;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-4-return"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  &lt;li id="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-5-definition" class="footnote-definition"&gt;
   &lt;p&gt;&lt;a href="https://www.nytimes.com/2017/10/02/us/las-vegas-shooting.html"&gt;https://www.nytimes.com/2017/10/02/us/las-vegas-shooting.html&lt;/a&gt;&amp;nbsp;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-5-return"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
  &lt;li id="2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-6-definition" class="footnote-definition"&gt;
   &lt;p&gt;&lt;a href="http://www.latimes.com/nation/la-na-ar-15-story.html"&gt;Mass shootings are getting deadlier. And the latest ones all have something new in common: The AR&amp;ndash;15. Matt Pearce, LA Times, February 14 2018&lt;/a&gt;&amp;nbsp;&lt;a href="#2018-02-20-the-many-uses-of-the-ar-15-yet-again-footnote-6-return"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</description></item></channel></rss>