<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blogs on Alex Gaynor</title>
    <link>https://alexgaynor.net/blog/</link>
    <description>Recent content in Blogs on Alex Gaynor</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 22 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://alexgaynor.net/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Unsafe Defaults in Statutory Severability Analysis</title>
      <link>https://alexgaynor.net/2025/dec/22/unsafe-defaults-statutory-severability/</link>
      <pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/dec/22/unsafe-defaults-statutory-severability/</guid>
      <description>(I&amp;rsquo;m not a lawyer, and I did precious little research in drafting this. It should be understood as a thought experiment and intellectual provocation. It&amp;rsquo;s also possible, if not likely, that this is a well-known observation and adds nothing novel.)
From time to time, federal courts find that part of a statute is incompatible with the constitution. When this happens, the court must decide what remedy follows from this &amp;ndash; which frequently means choosing which portions of a statute to hold invalid.</description>
    </item>
    
    <item>
      <title>Relish: A new serialization format</title>
      <link>https://alexgaynor.net/2025/dec/09/relish/</link>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/dec/09/relish/</guid>
      <description>I&amp;rsquo;ve recently created and open sourced a new serialization format, named Relish1, and a Rust library implementing it. They can be found here. I don&amp;rsquo;t expect many people to adopt it &amp;ndash; there are quite a few choices for serialization libraries available to people already &amp;ndash; however, it has some nice design properties that I want to describe.
Relish is a binary serialization format; it does not have an IDL. I drew ideas primarily from ASN.</description>
    </item>
    
    <item>
      <title>Motion to Dismiss for Failure to State a Vulnerability</title>
      <link>https://alexgaynor.net/2025/oct/20/motion-to-dismiss/</link>
      <pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/oct/20/motion-to-dismiss/</guid>
      <description>When a project receives a vulnerability report, what&amp;rsquo;s the first question they should ask? I believe the correct answer is that we should ask: In what way does the claimed vulnerability violate our threat model? A lot of times the answer is obvious, we don&amp;rsquo;t need to spend a lot of time interrogating how SQL injection or a buffer overflow violates our threat model. But it&amp;rsquo;s not always obvious: does it violate the threat model for a privileged user to be able to write to a given path on disk?</description>
    </item>
    
    <item>
      <title>So you want to serialize some DER?</title>
      <link>https://alexgaynor.net/2025/jun/20/serialize-some-der/</link>
      <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/jun/20/serialize-some-der/</guid>
      <description>(Editor&amp;rsquo;s Note: My day job is at Anthropic.)
This story starts where all good stories start, with ASN.1. ASN.1 is&amp;hellip; I guess you&amp;rsquo;d call it a meta-serialization format? It&amp;rsquo;s a syntax for describing data abstractly (a notation, you might say), and then there&amp;rsquo;s a bunch of different actual encodings that you can use to turn data into bytes. There&amp;rsquo;s only one encoding I choose to acknowledge, which is DER (the Distinguished Encoding Representation, it&amp;rsquo;s got a monocle and tophat).</description>
    </item>
    
    <item>
      <title>What is a Benchmark?</title>
      <link>https://alexgaynor.net/2025/jun/02/what-is-a-benchmark/</link>
      <pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/jun/02/what-is-a-benchmark/</guid>
      <description>Benchmarks are how we measure performance, obviously. They&amp;rsquo;re a program that we run to tell us how fast our code is.
This intuitive definition is what most of us would say if presented with the title question. But I want to suggest a simple question: if benchmarks tell us how fast something is, what does that make production performance metrics? Try to answer this question without admitting that benchmarks are doing something other than &amp;ldquo;telling us how fast a system is&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Standard Libraries and their Discontents</title>
      <link>https://alexgaynor.net/2025/may/19/standard-libraries/</link>
      <pubDate>Mon, 19 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/may/19/standard-libraries/</guid>
      <description>Standard libraries are among the most debated topics in programming language design. They are by turns the most widely used APIs in any programming ecosystem and also the most criticized. This post will explore what makes standard libraries what they are. It is entirely non-normative; my goal is to describe what standard libraries are, not specify what they should be.
A standard library is the set of libraries/APIs that are available to users of a programming language without needing to take any additional action.</description>
    </item>
    
    <item>
      <title>Putting a Price Tag on Open Source</title>
      <link>https://alexgaynor.net/2025/apr/08/putting-a-price-tag-on-open-source/</link>
      <pubDate>Tue, 08 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/apr/08/putting-a-price-tag-on-open-source/</guid>
      <description>I&amp;rsquo;ve previously written about common reasons that developing open source software is not funded. That post focused mostly on the individual circumstances and choices of open source maintainers and projects. In contrast, this post attempts to apply a more systemic lens to the same question. My conclusion is that by using some of the tools of antitrust economics we find a structural explanation for why so many open source maintainers fail to capture value from their projects (in the form of their work being unfunded).</description>
    </item>
    
    <item>
      <title>Postel&#39;s Law and the Three Ring Circus</title>
      <link>https://alexgaynor.net/2025/mar/25/postels-law-and-the-three-ring-circus/</link>
      <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/mar/25/postels-law-and-the-three-ring-circus/</guid>
      <description>Postel&amp;rsquo;s Law famously states that &amp;ldquo;implementations should follow a general principle of robustness: be conservative in what you do, be liberal in what you accept from others.&amp;rdquo; For many years, this was considered a bedrock design principle for internet ecosystems, but in recent years it has fallen out of favor. In this post I will explain the deterioration that ecosystems which endeavor to follow Postel&amp;rsquo;s Law frequently experience, and why it produces particularly pernicious results in the context of open source software.</description>
    </item>
    
    <item>
      <title>Notes on coreutils in Rust</title>
      <link>https://alexgaynor.net/2025/mar/22/coreutils-in-rust/</link>
      <pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/mar/22/coreutils-in-rust/</guid>
      <description>Canonical recently announced that they&amp;rsquo;re on the path to switching the coreutils that Ubuntu ships from being the venerable upstream GNU coreutils to a newer Rust implementation. This has made some people very excited and some people very upset (no one appears to be in the middle, though I suspect that&amp;rsquo;s just a sampling bias). This post will analyze some of the merits for/against this change.
The place to start is with the usual strongest argument in favor of programs written in Rust: memory safety.</description>
    </item>
    
    <item>
      <title>Things have reasons</title>
      <link>https://alexgaynor.net/2025/mar/06/things-have-reasons/</link>
      <pubDate>Thu, 06 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/mar/06/things-have-reasons/</guid>
      <description>Toby: I read it, I think, 16 years ago. It was about El Salvador and he had it stricken from the record and there was a reason.
Will: What?
Toby: I don&amp;rsquo;t know, but things have reasons.
Will: Do they?
Toby: Yes, they do.
&amp;ndash; The West Wing, Inauguration Part I
 We might describe this as a Chesterton&amp;rsquo;s Fence sentiment. Chesterton&amp;rsquo;s Fence is the principle that one should not remove a fence until they understand why it was put there in the first place.</description>
    </item>
    
    <item>
      <title>Generality</title>
      <link>https://alexgaynor.net/2025/mar/05/generality/</link>
      <pubDate>Wed, 05 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/mar/05/generality/</guid>
      <description>Once upon a time, a group of scientists built a machine learning model to predict whether a radiological scan contained a tumor. They trained it against a random subset of labeled data, tested it against data that had been held back, and determined that it performed well. When they went to test it with real patients, it was useless. Another group of researchers built a model to predict whether TCP packets were malicious or not.</description>
    </item>
    
    <item>
      <title>Do tech workers have a reason to love monopolies?</title>
      <link>https://alexgaynor.net/2025/feb/19/tech-workers-monopoly-and-monopsony/</link>
      <pubDate>Wed, 19 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/feb/19/tech-workers-monopoly-and-monopsony/</guid>
      <description>In the United States, federal antitrust law is composed of several complementary statutes, one of the centerpieces of which is Section 2 of the Sherman Act.1 Section 2 prohibits monopolization (and attempted monopolization). Monopolization does not merely mean to posses a monopoly, rather it means (a) &amp;ldquo;possession of monopoly power in the relevant market&amp;rdquo;, and (b) &amp;ldquo;the willful acquisition or maintenance of that power as distinguished from growth or development as a consequence of a superior product, business acumen, or historic accident&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>The SSO Tax is Smart Business, and Bad Security</title>
      <link>https://alexgaynor.net/2025/feb/07/sso-tax-smart-business-bad-security/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/feb/07/sso-tax-smart-business-bad-security/</guid>
      <description>For years, people have criticized the &amp;ldquo;SSO Tax&amp;rdquo;, SaaS companies&#39; practices of limiting single-sign-on to only their more expensive plans, effectively imposing a tax on organizations that care about security. The critique is straight-forward: SSO is good for security, if you charge more for it fewer people will buy it, and you&amp;rsquo;ll get less security. Sometimes this is generalized into: it&amp;rsquo;s bad to charge for any security features, for the same reason (some people replace &amp;ldquo;bad&amp;rdquo; with &amp;ldquo;unethical&amp;rdquo;).</description>
    </item>
    
    <item>
      <title>Stop Demanding Performance</title>
      <link>https://alexgaynor.net/2025/jan/27/stop-demanding-performance/</link>
      <pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/jan/27/stop-demanding-performance/</guid>
      <description>Often in life, we want something from someone else. For example, as a citizen we want a politician to enact some policy, as a regulator we want a company to secure people&amp;rsquo;s data effectively, or as a customer we want a company to behave in a way we find ethical. A through line to these examples is that while we can clearly articulate the overall goal, just knowing the goal doesn&amp;rsquo;t necessarily tell the other party what actions it must take to achieve it.</description>
    </item>
    
    <item>
      <title>Challenges to funding open source</title>
      <link>https://alexgaynor.net/2025/jan/13/challenges-funding-open-source/</link>
      <pubDate>Mon, 13 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2025/jan/13/challenges-funding-open-source/</guid>
      <description>I&amp;rsquo;ve had the good fortune to get paid to write open source as part of my job several times. For more than 15 years, I&amp;rsquo;ve also done a lot of open source development in my free time as a volunteer. Along the way, there&amp;rsquo;s been a fairly constant refrain that it&amp;rsquo;d be better if more open source maintainers were paid to maintain their projects. And I&amp;rsquo;ve seen a lot of ideas for how that could happen.</description>
    </item>
    
    <item>
      <title>Risky Business</title>
      <link>https://alexgaynor.net/2024/oct/21/risky-business/</link>
      <pubDate>Mon, 21 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2024/oct/21/risky-business/</guid>
      <description>There are a variety of professions whose job it is to help businesses manage risks, for example, information security, accounting, and legal. And we generally expect those professions to reduce risk. But we also know that businesses take risks all the time, because while these professions reduce risk, and may even eliminate some risks, they don&amp;rsquo;t eliminate all risks. What is the responsibility of a professional in one of these fields when a business is taking a risk in their domain?</description>
    </item>
    
    <item>
      <title>Philosophies of Cryptographic Libraries</title>
      <link>https://alexgaynor.net/2024/sep/27/cryptographic-philosophies/</link>
      <pubDate>Fri, 27 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2024/sep/27/cryptographic-philosophies/</guid>
      <description>I&amp;rsquo;ve maintained a popular cryptography library for years and in that time I&amp;rsquo;ve realized that many of the differences between cryptographic libraries flow from their creators&#39; philosophies. Users of those libraries also have philosophies, which shape their expectations. These philosophies are often both in tension with one another, but also often implicit, leading to frustrating conversations. The goal of this post is to flesh out common philosophies, and how they come to be in tension with one another.</description>
    </item>
    
    <item>
      <title>Signatures are like backups</title>
      <link>https://alexgaynor.net/2024/sep/09/signatures-are-like-backups/</link>
      <pubDate>Mon, 09 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2024/sep/09/signatures-are-like-backups/</guid>
      <description>I&amp;rsquo;m indebted to a colleague who many years ago succinctly told me:
 Backups don&amp;rsquo;t matter, only restores matter.
 It&amp;rsquo;s a deceptively simple observation: if your goal is durability, what you truly care about is your ability to restore from a backup. The existence of the backup itself is meaningless &amp;ndash; backups are not magic totems of durability. Teams that are serious about durability don&amp;rsquo;t just take backups; they actually verify that they can restore from them.</description>
    </item>
    
    <item>
      <title>The impact of memory safety on sandboxing</title>
      <link>https://alexgaynor.net/2024/aug/30/impact-of-memory-safety-on-sandboxing/</link>
      <pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2024/aug/30/impact-of-memory-safety-on-sandboxing/</guid>
      <description>Sandboxing and memory safety are generally considered two orthogonal, and therefore complementary, approaches to improving security. Memory safety reduces the likelihood of a vulnerability being introduced, and sandboxing reduces the impact if a vulnerability is exploited. However, I think this over-simplifies what sandboxing looks like in sophisticated multi-process architectures like web browsers and leads us to miss the potential implications of ubiquitous memory safety on sandboxing.
Sandboxing generally has two similar, yet distinct, purposes.</description>
    </item>
    
    <item>
      <title>Safer C&#43;&#43;</title>
      <link>https://alexgaynor.net/2024/aug/18/safer-c-plus-plus/</link>
      <pubDate>Sun, 18 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2024/aug/18/safer-c-plus-plus/</guid>
      <description>I am an unrepentant advocate for migrating away from memory-unsafe languages (C and C++) to memory safe languages in security-relevant contexts. Many people reply that migrating large code bases to new languages is expensive, and we&amp;rsquo;d be better off making C++ safer. This is a reasonable response, after all there&amp;rsquo;s an enormous amount of C++ in the wild. Even on an incredibly aggressive timeline for replacing every line of C++ in the world with Rust or Swift or Go, we&amp;rsquo;ll have a lot of C++ attack surface for a long time.</description>
    </item>
    
    <item>
      <title>Defining the memory safe problem</title>
      <link>https://alexgaynor.net/2023/oct/02/defining-the-memory-safety-problem/</link>
      <pubDate>Mon, 02 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2023/oct/02/defining-the-memory-safety-problem/</guid>
      <description>I&amp;rsquo;m a staunch advocate for need to migrate away from memory unsafe programming languages, in order to address the endemic security issues they produce. This sentence contains a number of terms that are worth defining, and a number of asterisks that are worth explicating. My objective with this blog post is to add increased precision to this discussion.
What is a memory unsafe language? It&amp;rsquo;s a programming language which, by default, allows code to introduce memory-related vulnerabilities (use after free, buffer over/under flow, use of uninitialized memory, type confusion) and undefined behavior, and as a result code written in this language suffers an increased rate of security issues.</description>
    </item>
    
    <item>
      <title>Buffers on the edge: Python and Rust</title>
      <link>https://alexgaynor.net/2022/oct/23/buffers-on-the-edge/</link>
      <pubDate>Sun, 23 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2022/oct/23/buffers-on-the-edge/</guid>
      <description>One of my least favorite kinds of bug is when two different systems are interacting and the result has bad behavior but it&amp;rsquo;s difficult to say which (if either!) system is at fault. This is one of those stories, about Python&amp;rsquo;s buffer protocol and Rust&amp;rsquo;s memory model.
Python buffer protocol Python&amp;rsquo;s Buffer Protocol is a set of APIs which allow Python objects to expose their backing memory, so that 0-copy interoperability is possible between different data structures.</description>
    </item>
    
    <item>
      <title>What&#39;s in a version number? (Or: Musings on backwards compatibility)</title>
      <link>https://alexgaynor.net/2021/oct/07/whats-in-a-version-number/</link>
      <pubDate>Thu, 07 Oct 2021 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2021/oct/07/whats-in-a-version-number/</guid>
      <description>Software packages have version numbers. Thinking about them from scratch, the first thing we might want from version numbers is to know if two pieces of software are the same, we could accomplish this by making version numbers into an opaque value, like a UUID. Of course, a UUID isn&amp;rsquo;t a very useful version number because in practice we also want to do things like order versions, to know which is newer.</description>
    </item>
    
    <item>
      <title>Why software ends up complex</title>
      <link>https://alexgaynor.net/2020/nov/30/why-software-ends-up-complex/</link>
      <pubDate>Mon, 30 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2020/nov/30/why-software-ends-up-complex/</guid>
      <description>Complexity in software, whether it&amp;rsquo;s a programming languages, an API, or a user interface, is generally regarded as a vice. And yet complexity is exceptionally common, even though no one ever sets out to build something complex. For people interested in building easy to use software, understanding the causes of complexity is critical. Fortunately, I believe there is a straightforward explanation.
The most natural implementation of any feature request is additive, attempting to leave all other elements of the design in place and simply inserting one new component: a new button in a UI or a new parameter to a function.</description>
    </item>
    
    <item>
      <title>CSVs: The good, the bad, and the ugly</title>
      <link>https://alexgaynor.net/2020/sep/24/csv-good-bad-ugly/</link>
      <pubDate>Thu, 24 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2020/sep/24/csv-good-bad-ugly/</guid>
      <description>CSVs are a relatively popular data format, it seems particularly common as a format for providing exports of medium-sized datasets. My day job involves processing lots of these types of data sets, and so I&amp;rsquo;ve developed a set of strong opinions on CSVs, which are documented here.
One feature of CSVs that is often considered a big advantage is that it&amp;rsquo;s an incredibly simple file format. However, this can be misleading.</description>
    </item>
    
    <item>
      <title>What science can tell us about C and C&#43;&#43;&#39;s security</title>
      <link>https://alexgaynor.net/2020/may/27/science-on-memory-unsafety-and-security/</link>
      <pubDate>Wed, 27 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2020/may/27/science-on-memory-unsafety-and-security/</guid>
      <description>There are not a lot of very strong empirical results in the field of programming languages. This is probably because there&amp;rsquo;s a huge amount of variables to control for, and most of the subjects available to researchers are CS undergraduates. However, I have recently found a result replicated across numerous codebases, which as far as I can tell makes it one of the most robust findings in the field:
 If you have a very large (millions of lines of code) codebase, written in a memory-unsafe programming language (such as C or C++), you can expect at least 65% of your security vulnerabilities to be caused by memory unsafety.</description>
    </item>
    
    <item>
      <title>Dayenu for Open Source</title>
      <link>https://alexgaynor.net/2020/apr/10/dayenu-open-source/</link>
      <pubDate>Fri, 10 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2020/apr/10/dayenu-open-source/</guid>
      <description>Every Passover, Jews around the world sing Dayenu, which translates roughly as &amp;ldquo;it would have been enough&amp;rdquo;. The lyrics are basically a list of things God did for the Jewish people, any of them alone would have been enough. &amp;ldquo;Taking us out of Egypt, that alone would have been enough. Giving us the Sabbath, that alone would have been enough. Giving us the Torah, that alone would have been enough.&amp;rdquo;</description>
    </item>
    
    <item>
      <title>Scaling Software Development</title>
      <link>https://alexgaynor.net/2020/feb/18/scaling-software-development/</link>
      <pubDate>Tue, 18 Feb 2020 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2020/feb/18/scaling-software-development/</guid>
      <description>software engineering is programming integrated over time
 This quote, from Titus Winters, expresses an important notion: that software engineering as a discipline must be considered not just with programming at a point in time, but with programming over an extended period. One of the things that tends to happen to a codebase as time is added, is that it tends to scale. We often think of scale in terms of amount of traffic to be served, or volumes of data to be processed.</description>
    </item>
    
    <item>
      <title>2019 Security Wish List In Review</title>
      <link>https://alexgaynor.net/2019/dec/24/security-wish-list-2019-review/</link>
      <pubDate>Tue, 24 Dec 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/dec/24/security-wish-list-2019-review/</guid>
      <description>In January of this year, I put together a wish list for security in 2019. As the year draws to a close, I wanted to look back and reflect on what was accomplished, and where there&amp;rsquo;s still work to do.
Rust breakthrough Original success criteria:
 Adoption of Rust as an official development language by another major OS and browser. Public talks/writing from teams that adopted Rust in these domains describing the value it added from a security perspective.</description>
    </item>
    
    <item>
      <title>On Safety Critical Software</title>
      <link>https://alexgaynor.net/2019/nov/07/on-safety-critical-software/</link>
      <pubDate>Thu, 07 Nov 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/nov/07/on-safety-critical-software/</guid>
      <description>When you read &amp;ldquo;safety critical software&amp;rdquo; your mind probably went to something like medical device software (perhaps the Therac-25), or maybe avionics software, or perhaps industrial control systems that run nuclear power plants. It&amp;rsquo;s pretty unlikely that you thought of the operating system kernel on a cell phone or a web browser. Congratulations, you have a solid command of the threat model for the overwhelming majority of people.
For nearly everyone, even a complete and total failure of their phone or web browser&amp;rsquo;s security would not be catastrophic.</description>
    </item>
    
    <item>
      <title>A Memory Safety Research Agenda</title>
      <link>https://alexgaynor.net/2019/sep/02/memory-safety-research-agenda/</link>
      <pubDate>Mon, 02 Sep 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/sep/02/memory-safety-research-agenda/</guid>
      <description>I&amp;rsquo;ve been a ferocious critic of C, C++, and other memory unsafe languages, and a booster of memory safe languages such as Swift, Go, and particularly Rust. And though I believe there is a more-than-sufficient body of evidence to support the claim that the time to start migrating is now, there are still open questions related to how we migrate systems to memory safe languages more scalably, and how we maximize the safety of code written in these languages.</description>
    </item>
    
    <item>
      <title>Introduction to Memory Unsafety for VPs of Engineering</title>
      <link>https://alexgaynor.net/2019/aug/12/introduction-to-memory-unsafety-for-vps-of-engineering/</link>
      <pubDate>Mon, 12 Aug 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/aug/12/introduction-to-memory-unsafety-for-vps-of-engineering/</guid>
      <description>What is memory unsafety? Memory unsafety is a property of some programming languages where they allow the programmer to introduce certain types of bugs and allow these bugs to cause serious security issues. These bugs deal with errors in how memory is used spatially and temporally.
To begin understanding these bugs, we&amp;rsquo;ll consider the example of an application that maintains to do lists for many users. We&amp;rsquo;ll first look at the spatial errors.</description>
    </item>
    
    <item>
      <title>Read code more</title>
      <link>https://alexgaynor.net/2019/jul/11/read-code-more/</link>
      <pubDate>Thu, 11 Jul 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/jul/11/read-code-more/</guid>
      <description>As software engineers, we overwhelmingly focus on the skill of writing code. This is clear from how we teach new programmers, how we interview software engineers for jobs, how we encourage engineers to improve their craft, and the kinds of talks you find at conferences. The lack of emphasis on developing code reading as a skill does people a disservice. Reading code is a distinct skill and practicing software engineers should work to improve this skill.</description>
    </item>
    
    <item>
      <title>Modern C&#43;&#43; Won&#39;t Save Us</title>
      <link>https://alexgaynor.net/2019/apr/21/modern-c&#43;&#43;-wont-save-us/</link>
      <pubDate>Sun, 21 Apr 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/apr/21/modern-c&#43;&#43;-wont-save-us/</guid>
      <description>I&amp;rsquo;m a frequent critic of memory unsafe languages, principally C and C++, and how they induce an exceptional number of security vulnerabilities. My conclusion, based on reviewing evidence from numerous large software projects using C and C++, is that we need to be migrating our industry to memory safe by default languages (such as Rust and Swift). One of the responses I frequently receive is that the problem isn&amp;rsquo;t C and C++ themselves, developers are simply holding them wrong.</description>
    </item>
    
    <item>
      <title>Notes on the challenges to the adoption of security keys</title>
      <link>https://alexgaynor.net/2019/apr/10/notes-on-challenges-to-security-key-adoption/</link>
      <pubDate>Wed, 10 Apr 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/apr/10/notes-on-challenges-to-security-key-adoption/</guid>
      <description>It&amp;rsquo;s no secret that I&amp;rsquo;m a big believer in the adoption of security keys. I think they provide a strong technical solution to a problem that was previously unsuccessfully solved in user-hostile ways (don&amp;rsquo;t click on links in your email! look at the URL when entering your password!): security keys are the only second factor which are resilient to credential phishing. They&amp;rsquo;re also more ergonomic than many other second factors. However, the ecosystem is not without challenges, my goal here is to document a few of them.</description>
    </item>
    
    <item>
      <title>Chrome &#43; Windows Exploit: Security Beyond Bugfixes</title>
      <link>https://alexgaynor.net/2019/mar/07/chrome-windows-exploit-security-beyond-bugfixes/</link>
      <pubDate>Thu, 07 Mar 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/mar/07/chrome-windows-exploit-security-beyond-bugfixes/</guid>
      <description>Earlier this week the Google Security Team disclosed a pair of vulnerabilities, known to be exploited in the wild, one in Windows and the other in Chrome. These represent a fairly standard exploit chain: code execution in Chrome&amp;rsquo;s sandboxed renderer process and then a kernel bug to escape the sandbox and gain privileged code execution.
There&amp;rsquo;s a publicly visible patch for the Chrome bug, however there aren&amp;rsquo;t a lot of details on the Windows kernel bug.</description>
    </item>
    
    <item>
      <title>Notes on fuzzing ImageMagick and GraphicsMagick</title>
      <link>https://alexgaynor.net/2019/feb/05/notes-fuzzing-imagemagick-graphicsmagick/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/feb/05/notes-fuzzing-imagemagick-graphicsmagick/</guid>
      <description>ImageMagick and GraphicsMagick are two popular libraries for manipulating images. GraphicsMagick is a fork of ImageMagick that diverged well over a decade ago. OSS-Fuzz provides continuous fuzzing for high impact open source projects. In December, 2017 Paul Kehrer and I worked to add ImageMagick to Google&amp;rsquo;s OSS-Fuzz, and in February, 2018 we added GraphicsMagick.
Both ImageMagick and GraphicsMagick had been widely fuzzed and audited before this. Hanno Böck 1 observed: &amp;ldquo;In the past it was pretty easy to fuzz bugs in imagemagick, but after some review by Google most of them have been fixed and these days there are at least no more trivial to find fuzzing issues.</description>
    </item>
    
    <item>
      <title>Security wish list for 2019</title>
      <link>https://alexgaynor.net/2019/jan/06/security-wish-list-2019/</link>
      <pubDate>Sun, 06 Jan 2019 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2019/jan/06/security-wish-list-2019/</guid>
      <description>About 3 years ago I wrote about five projects I thought were very important for advancing the state of computer security. Looking back at that old post, I was reasonably pleased to find that all are having real positive impacts and none turned out to be busts. So I decided to take a stab at writing down the things I want to see happen in 2019, in the hopes that the universe will provide a few of them.</description>
    </item>
    
    <item>
      <title>Optimize for Auditability</title>
      <link>https://alexgaynor.net/2018/dec/13/optimize-for-auditability/</link>
      <pubDate>Thu, 13 Dec 2018 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2018/dec/13/optimize-for-auditability/</guid>
      <description>When we write code, we optimize for many different things. We optimize for writability: how easy it is to write the code in the first place? We optimize for maintainability: how easy it is to make ongoing changes? We optimize for readability: how easy it is to understand what the code does?
However, we rarely optimize for auditability: how easy it is to tell if the code has a security vulnerability?</description>
    </item>
    
    <item>
      <title>The worst truism in information security</title>
      <link>https://alexgaynor.net/2018/jul/20/worst-truism-in-infosec/</link>
      <pubDate>Fri, 20 Jul 2018 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2018/jul/20/worst-truism-in-infosec/</guid>
      <description>Attackers just need one vulnerability, defenders need to be perfect
 This may be the single most repeated truism in information security. Just this week, a colleague invoked this, with the quip that those of us who&amp;rsquo;ve chosen defense must be pretty dumb, given the challenge of that task, and the possibility of an easier career in offense. There&amp;rsquo;s just one problem: it&amp;rsquo;s not actually true, and it&amp;rsquo;s harmful to reasoning about information security, particularly for non-practitioners.</description>
    </item>
    
    <item>
      <title>Lessons learned at USDS</title>
      <link>https://alexgaynor.net/2018/mar/20/lessons-learned-usds/</link>
      <pubDate>Tue, 20 Mar 2018 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2018/mar/20/lessons-learned-usds/</guid>
      <description>From 2015 to 2017 I worked for the United States Digital Service, a team within the US Government, created after the launch failure of healthcare.gov, dedicated to improving the government&amp;rsquo;s ability to use technology. I learned about a lot of different things there: bureaucracy and PowerBuilder, organizational transformation and Classic ASP, to name a few. However this post will instead be about two meta-lessons I learned from my time at USDS.</description>
    </item>
    
    <item>
      <title>Known unknowns - zero-days in the wild</title>
      <link>https://alexgaynor.net/2018/feb/20/known-unknowns-zero-days-in-the-wild/</link>
      <pubDate>Tue, 20 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2018/feb/20/known-unknowns-zero-days-in-the-wild/</guid>
      <description>This past week Google&amp;rsquo;s Project Zero disclosed an unfixed security issue in Microsoft&amp;rsquo;s Edge browser. This is not the first time Microsoft failed to patch an issue within Project Zero&amp;rsquo;s disclosure timeline. This produces strong feelings in the information security community, generally in one of three categories:
 praising Google&amp;rsquo;s vulnerability research criticizing Microsoft&amp;rsquo;s response criticizing Google for publicly disclosing the vulnerability before it was patched  The debate over what the correct vulnerability disclosure policy is is not a new one.</description>
    </item>
    
    <item>
      <title>The mysterious case of (deny dynamic-code-generation)</title>
      <link>https://alexgaynor.net/2018/jan/29/mysterious-case-of-deny-dynamic-code-generation/</link>
      <pubDate>Mon, 29 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2018/jan/29/mysterious-case-of-deny-dynamic-code-generation/</guid>
      <description>My day job is working on sandboxing for Firefox. In the context of a browser, sandboxing refers to the processes that run web pages, generally called &amp;ldquo;content&amp;rdquo; or &amp;ldquo;renderer&amp;rdquo; processes. These are in contrast to the &amp;ldquo;parent&amp;rdquo; or &amp;ldquo;browser&amp;rdquo; process, which coordinates the content processes and is not sandboxed, so it can do things like write files anywhere on disk to save downloaded files or access the camera.
A related computer security technique is exploit mitigation.</description>
    </item>
    
    <item>
      <title>A vulnerability by any other name</title>
      <link>https://alexgaynor.net/2017/nov/20/a-vulnerability-by-any-other-name/</link>
      <pubDate>Mon, 20 Nov 2017 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2017/nov/20/a-vulnerability-by-any-other-name/</guid>
      <description>Heartbleed, POODLE, Shellshock. Giving vulnerabilities names may be controversial, but there&amp;rsquo;s no doubt it&amp;rsquo;s effective. These, and many other, vulnerabilities attracted widespread awareness and drove tons of work improving ecosystem security. Heartbleed drew attention to OpenSSL&amp;rsquo;s small team of maintainers and drove funding and code quality improvements. POODLE led to SSLv3 being disabled on clients and servers nearly overnight. Shellshock directed researchers&#39; attention to bash and resulted in a series of vulnerabilities being discovered.</description>
    </item>
    
    <item>
      <title>Response to Deputy Attorney General Rosenstein&#39;s remarks on Encryption</title>
      <link>https://alexgaynor.net/2017/oct/13/rosenstein-encryption-response/</link>
      <pubDate>Fri, 13 Oct 2017 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2017/oct/13/rosenstein-encryption-response/</guid>
      <description>This week Deputy Attorney General Rod Rosenstein gave two speeches on encryption; one at the U.S. Naval Academy and one at the Global Cyber Security Summit. I recommend you read them, as the remainder of this post will make considerably more sense.
I would like to focus on the structure of the second speech. Mr. Rosenstein states that he wants to describe &amp;ldquo;the scope of the global cybersecurity threat that confronts us&amp;rdquo; and &amp;ldquo;the challenges we face in countering the threat&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Surviving Apache Struts CVE-2017-5638</title>
      <link>https://alexgaynor.net/2017/sep/18/surviving-struts-cve/</link>
      <pubDate>Mon, 18 Sep 2017 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2017/sep/18/surviving-struts-cve/</guid>
      <description>If you&amp;rsquo;re a software engineer or work in tech, there&amp;rsquo;s a decent chance that your first thought after hearing about the Equifax breach was &amp;ldquo;oh my god, how incompetent do you have to be to get owned like that?&amp;rdquo; Don&amp;rsquo;t worry, I had the same reaction. After a few days of introspection and reviewing the evidence, I&amp;rsquo;ve come to the conclusion that Equifax made one uncommonly disastrous mistake: not upgrading Struts immediately after a remote-code-execution vulnerability was disclosed in it; everything else about the situation was exceptionally common.</description>
    </item>
    
    <item>
      <title>Categorizing Security Engineering Work</title>
      <link>https://alexgaynor.net/2017/sep/11/categorizing-security-engineering-work/</link>
      <pubDate>Mon, 11 Sep 2017 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2017/sep/11/categorizing-security-engineering-work/</guid>
      <description>There&amp;rsquo;s a lot of different types of work that tend to get put into the bucket &amp;ldquo;security engineering&amp;rdquo;. This goal of this post is to describe how I categorize different kinds of work, and why this is useful.
At the highest level, security work goes into one of four buckets:
 Work that prevents us from getting owned. In this bucket are things like fixing bugs as well fixing root causes so bugs don&amp;rsquo;t appear.</description>
    </item>
    
    <item>
      <title>Forward secrecy is the most important thing</title>
      <link>https://alexgaynor.net/2017/apr/26/forward-secrecy-is-the-most-important-thing/</link>
      <pubDate>Wed, 26 Apr 2017 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2017/apr/26/forward-secrecy-is-the-most-important-thing/</guid>
      <description>An alternate title for this post would be &amp;ldquo;Why GPG isn&amp;rsquo;t ok in 2017&amp;rdquo;.
Imagine you were designing a new encrypted messaging system, what kinds of things would you worry about? You&amp;rsquo;d want to make sure you were using good encryption algorithms, authentication for senders, a high quality random number generator, maybe you&amp;rsquo;d spend some time thinking about side channels for things like message length. Unfortunately, if you&amp;rsquo;re thinking about your protocol in the context of something like email, it&amp;rsquo;s very likely that you&amp;rsquo;re not thinking about forward secrecy.</description>
    </item>
    
    <item>
      <title>Introduction to Certificate Transparency for Server Operators</title>
      <link>https://alexgaynor.net/2017/apr/17/certificate-transparency-for-server-operators/</link>
      <pubDate>Mon, 17 Apr 2017 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2017/apr/17/certificate-transparency-for-server-operators/</guid>
      <description>Say you&amp;rsquo;ve got a website, and because you care about protecting the privacy of your visitors and the integrity of the content you serve to them, your website is served over HTTPS. If your website is particularly high impact, you might be concerned about some other CA misissuing a certificate for your domain; or perhaps you have a very distributed engineering organization and it&amp;rsquo;s hard to keep track of who is issuing what certs.</description>
    </item>
    
    <item>
      <title>A year of tracking my HTTP requests</title>
      <link>https://alexgaynor.net/2017/mar/26/year-of-tracking-http/</link>
      <pubDate>Sun, 26 Mar 2017 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2017/mar/26/year-of-tracking-http/</guid>
      <description>For a year or so I&amp;rsquo;ve been running a Chrome extension I wrote, which tracks which origins my Chrome makes the most http:// requests to, in an effort to make my https:// advocacy more data driven. Websites that top this list are disrespectful of my privacy and show no regard for whether bytes make their way to me unmodified.
Over the past year, I&amp;rsquo;ve seen several websites that used to top this list migrate to https://, for example Amazon, Netflix, and the Washington Post.</description>
    </item>
    
    <item>
      <title>SHA1 and Richard Feynman</title>
      <link>https://alexgaynor.net/2017/feb/26/sha1-and-richard-feynman/</link>
      <pubDate>Sun, 26 Feb 2017 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2017/feb/26/sha1-and-richard-feynman/</guid>
      <description>In Richard Feynman&amp;rsquo;s appendix to the Roger&amp;rsquo;s Commission report on the Space Shuttle Challenger disaster, one of the issues he describes is a lack of understanding of the term &amp;ldquo;safety factor&amp;rdquo; by NASA managers:
 This is a strange use of the engineer&amp;rsquo;s term, &amp;ldquo;safety factor.&amp;rdquo; If a bridge is built to withstand a certain load without the beams permanently deforming, cracking, or breaking, it may be designed for the materials used to actually stand up under three times the load.</description>
    </item>
    
    <item>
      <title>Looking for work</title>
      <link>https://alexgaynor.net/2016/dec/23/looking-for-work/</link>
      <pubDate>Fri, 23 Dec 2016 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2016/dec/23/looking-for-work/</guid>
      <description>For the past 2 years I&amp;rsquo;ve been working for the US Government at the United States Digital Service. It&amp;rsquo;s been a privilege, and I&amp;rsquo;m incredibly proud of the things we&amp;rsquo;ve accomplished. Alas, all good things come to an end, and I&amp;rsquo;m now looking for my next job.
I&amp;rsquo;m a software engineer, and I&amp;rsquo;ve worked on many different things. In my career I&amp;rsquo;ve worked on just-in-time compilers for dynamic languages, large scale web applications, and cryptography, to name a few.</description>
    </item>
    
    <item>
      <title>OSS-Fuzz initial impressions</title>
      <link>https://alexgaynor.net/2016/dec/03/oss-fuzz-initial-impressions/</link>
      <pubDate>Sat, 03 Dec 2016 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2016/dec/03/oss-fuzz-initial-impressions/</guid>
      <description>In case you haven&amp;rsquo;t heard, this week Google announced a project called OSS-Fuzz. The basic idea of fuzz testing is take random inputs, throw them at a program, and see if it breaks. The basic idea of OSS-Fuzz is to use buttloads of servers that Google has lying around to do fuzz testing for open source. OSS-Fuzz already has an impressive trophy case of vulnerabilities found, from running over 4 trillion test cases per week.</description>
    </item>
    
    <item>
      <title>Intro to threat modeling</title>
      <link>https://alexgaynor.net/2016/jul/29/intro-to-threat-modeling/</link>
      <pubDate>Fri, 29 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2016/jul/29/intro-to-threat-modeling/</guid>
      <description>What is threat modeling? Threat modeling is a computer security technique to help defenders (that&amp;rsquo;s you, I assume) understand their own systems and drive the process of building better defenses.
Core to the idea of a threat model is the idea that the things you need to do to protect yourself vary depending on what you&amp;rsquo;re defending against. Therefore, threat modeling forces you to be explicit about who you&amp;rsquo;re going to defend against.</description>
    </item>
    
    <item>
      <title>Anatomy of a Crypto Vulnerability</title>
      <link>https://alexgaynor.net/2016/mar/14/anatomy-of-a-crypto-vulnerability/</link>
      <pubDate>Mon, 14 Mar 2016 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2016/mar/14/anatomy-of-a-crypto-vulnerability/</guid>
      <description>Before I describe the vulnerability, I want to give huge thanks to Ben Bangert and Alessandro Molina for quickly responding to my report, and to Paul Kehrer for reviewing and confirming my findings.
Sessions are a core part of many web applications. Put an opaque identifier (e.g. a UUID) in a cookie, then in your web app find the session in a database of some sort. The session might contain data like the currently logged in user, whatever.</description>
    </item>
    
    <item>
      <title>Announcing letsencrypt-aws</title>
      <link>https://alexgaynor.net/2016/jan/20/announcing-letsencrypt-aws/</link>
      <pubDate>Wed, 20 Jan 2016 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2016/jan/20/announcing-letsencrypt-aws/</guid>
      <description>If you haven&amp;rsquo;t heard, Let&amp;rsquo;s Encrypt is a brand new certificate authority offering free, automated, and trusted HTTPS certificates. It&amp;rsquo;s extremely exciting.
Let&amp;rsquo;s Encrypt is built on a protocol called &amp;ldquo;ACME&amp;rdquo;, which defines a standard HTTP API for a certificate authority. letsencrypt-aws is built on that to easily orchestrate your AWS infrastructure to make sure certificates are automatically issued and kept up to date.
You can grab a copy on Github.</description>
    </item>
    
    <item>
      <title>Don&#39;t have environments</title>
      <link>https://alexgaynor.net/2016/jan/19/dont-have-environments/</link>
      <pubDate>Tue, 19 Jan 2016 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2016/jan/19/dont-have-environments/</guid>
      <description>Almost every good idea this blog post comes from [David Reid], the bad ones are mine.  Let&amp;rsquo;s say you&amp;rsquo;re making a website. Your customers (and randos who maybe you&amp;rsquo;d like to be your customers) need to access it, so you create a production environment at https://my-great-or-maybe-not-so-great-whatever-product.com and you tell people to go there.
Then you start working on the next great feature. It&amp;rsquo;s basically done, but you want to run it by some other folks and coordinate a launch plan for it, so you merge it into master and create a production branch without it.</description>
    </item>
    
    <item>
      <title>Shrinking your code review</title>
      <link>https://alexgaynor.net/2015/dec/29/shrinking-code-review/</link>
      <pubDate>Tue, 29 Dec 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/dec/29/shrinking-code-review/</guid>
      <description>It&#39;s an unfortunate reality, but one of the few things we know about software quality is that lines of code is positive correlated with bugs, or as Notorious B.I.G. would say, &amp;quot;Mo Code Mo Problems&amp;quot;. Code review faces a similar challenge: the larger a patch you&#39;re reviewing, the less effective your code review is [1].
There&#39;s a few reasons for this:
The more code you&#39;re changing, the more you need to focus on the big picture.</description>
    </item>
    
    <item>
      <title>5 critically important security projects</title>
      <link>https://alexgaynor.net/2015/nov/28/5-critical-security-projects/</link>
      <pubDate>Sat, 28 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/nov/28/5-critical-security-projects/</guid>
      <description>Information security is hard. Really hard. But all too often the face of our failure is not cutting edge research with intricate implementation, but rather trivial buffer overflows, databases with plaintext passwords, or binaries named tacos_and_malware.exe.
&amp;lsquo;tis a bleak and barren landscape of horrors and awful things untold.
That said, amidst our dystopian present, there are a few critically important projects doing great work to push the needle forward on security, and I&amp;rsquo;d like a moment in this festive Thanksgiving season to recognize their outstanding work:</description>
    </item>
    
    <item>
      <title>Telemetry for Open Source</title>
      <link>https://alexgaynor.net/2015/sep/03/telemetry-for-open-source/</link>
      <pubDate>Thu, 03 Sep 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/sep/03/telemetry-for-open-source/</guid>
      <description>What&amp;rsquo;s the biggest difference between offering some functionality as an open source library, and in offering it as an HTTP API? To me the single biggest difference is that running a web service lets you instrument whats users are using, and collect telemetry, while shipping an open source library doesn&amp;rsquo;t.
For a combination of social and technical reasons, the open source community has basically never added instrumentation to libraries which reports back to its authors on how it&amp;rsquo;s being used.</description>
    </item>
    
    <item>
      <title>Rust: A modern programming environment</title>
      <link>https://alexgaynor.net/2015/jul/20/rust-modern-programming-language/</link>
      <pubDate>Mon, 20 Jul 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/jul/20/rust-modern-programming-language/</guid>
      <description>I&amp;rsquo;ve been following along with Rust for quite a while. It&amp;rsquo;s a pretty neat language which offers the promise of the control (and performance) of C, with unparalleled safety, protecting both against segfaults and against concurrency bugs. I spent the weekend playing with Rust, and the thing that struck me most was not the language itself, but how refreshing the tooling around Rust was.
Rust comes with a build and packaging system named Cargo.</description>
    </item>
    
    <item>
      <title>Tips for Improving Your Company&#39;s Security</title>
      <link>https://alexgaynor.net/2015/jun/08/tips-for-improving-your-companys-security/</link>
      <pubDate>Mon, 08 Jun 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/jun/08/tips-for-improving-your-companys-security/</guid>
      <description>Security is hard. That&amp;rsquo;s not a secret. Defenders need to be perfect, attackers only need to find one mistake.
That said, there&amp;rsquo;s a lot you can do to improve your company&amp;rsquo;s security.
User Credentials Store your users&#39; passwords for your site responsibly. This means using PBKDF2 (with high iteration count), bcrypt, or scrypt. There&amp;rsquo;s no reason for you to use anything else.
Offer two factor authentication for your users. If your product is for teams, make it easy for administrators to check if their team members have two factor enabled, and require it.</description>
    </item>
    
    <item>
      <title>Tips for Scaling Web Apps</title>
      <link>https://alexgaynor.net/2015/may/27/tips-for-scaling-web-apps/</link>
      <pubDate>Wed, 27 May 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/may/27/tips-for-scaling-web-apps/</guid>
      <description>This blog post is a short list of things you can do, on basically any web project, to improve performance, scalability, and cost. In 2015, a medium sized server (8 cores, 24GB of RAM) is capable of serving hundreds-to-thousands of HTTP requests per second. This post is a guide to making sure you aren&amp;rsquo;t wasting your resources on things that are already solved problems.
All of these assume you have monitoring to track your availability, and metrics to track various aspects of your site&amp;rsquo;s performance.</description>
    </item>
    
    <item>
      <title>Introduction to Fuzzing in Python with AFL</title>
      <link>https://alexgaynor.net/2015/apr/13/introduction-to-fuzzing-in-python-with-afl/</link>
      <pubDate>Mon, 13 Apr 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/apr/13/introduction-to-fuzzing-in-python-with-afl/</guid>
      <description>Fuzzing is a technique in computer testing and security where you generate a bunch of random inputs, and see how some program handles it. For example, if you had a JPEG parser, you might create a bunch of valid images and broken images, and make sure it either parses them or errors out cleanly. In C (and other memory unsafe languages) fuzzing can often be used to discover segfaults, invalid reads, and other potential security issues.</description>
    </item>
    
    <item>
      <title>Red Hat and the Open Source Community</title>
      <link>https://alexgaynor.net/2015/mar/30/red-hat-open-source-community/</link>
      <pubDate>Mon, 30 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/mar/30/red-hat-open-source-community/</guid>
      <description>Red Hat has a pretty interesting business model, which is offering support for software that is a decade old, and which its maintainers want nothing to do with. This post isn&amp;rsquo;t about whether maintaining old software is a good or a bad idea. It&amp;rsquo;s about the effect it has on the community.
The Python core developers have ceased providing any support for Python 2.6 as of October 2013, but Red Hat will continue to support it in RHEL 5, until 2020.</description>
    </item>
    
    <item>
      <title>DevOps vs. Platform Engineering</title>
      <link>https://alexgaynor.net/2015/mar/06/devops-vs-platform-engineering/</link>
      <pubDate>Fri, 06 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/mar/06/devops-vs-platform-engineering/</guid>
      <description>If I put 10 people in a room and asked them what &amp;ldquo;DevOps&amp;rdquo; was all about, I think I&amp;rsquo;d get 17 different answers. As my colleague David Reid says though, &amp;ldquo;DevOps is something you do, not something you are.&amp;rdquo; So what practices are associated with DevOps?
 Using software to automate operations tasks Using configuration management tools such as Chef and Puppet Treating servers as &amp;ldquo;cattle not pets&amp;rdquo;   Database as a Service is to Database as Load Balancer as a Service is to Load Balancer as Platform as a Service is to ____________.</description>
    </item>
    
    <item>
      <title>Software Of the People, By the People, For the People</title>
      <link>https://alexgaynor.net/2015/feb/03/software-of-the-people-by-the-people-for-the-people/</link>
      <pubDate>Tue, 03 Feb 2015 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2015/feb/03/software-of-the-people-by-the-people-for-the-people/</guid>
      <description>22 days ago I became a founding member of the new Digital Service team at the United States Department of Veterans Affairs. We&amp;rsquo;re a group of developers, designers, and other folks who are passionate about using our technology skills to make a difference.
Our goal is to dramatically improve the ability of the VA to use technology to execute on its mission of serving veterans. More broadly, my hope is that our work will demonstrate that all of government is capable of delivering fantastic user-centric sites and services.</description>
    </item>
    
    <item>
      <title>The State of the News and TLS: Part II</title>
      <link>https://alexgaynor.net/2014/dec/30/state-of-news-tls-part-ii/</link>
      <pubDate>Tue, 30 Dec 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/dec/30/state-of-news-tls-part-ii/</guid>
      <description>About six weeks ago I blogged about the state of the news and TLS. Spoiler alert, it wasn&amp;rsquo;t great. Happily, there&amp;rsquo;s been some good news on this front.
First, the New York Times wrote a piece calling for more news websites to expose their content over TLS. While the Times is not yet available over TLS, based on this post I&amp;rsquo;m hopeful it will happen in 2015.
The second major piece of news was the Chrome Security Team&amp;rsquo;s announcement of their plans to move towards a negative security-indicator for plain-HTTP websites.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Let Bartlet Be Bartlet</title>
      <link>https://alexgaynor.net/2014/dec/21/west-wing-revisited-let-barlet-be-barlet/</link>
      <pubDate>Sun, 21 Dec 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/dec/21/west-wing-revisited-let-barlet-be-barlet/</guid>
      <description>Two commissioners resign from the Federal Elections Committee. Though nominations for the FEC are made by the President, traditionally the nominees have been selected by the congressional leadership from both sides of the aisle.
Danny Concannon, the White House correspondent for the Washington Post, has obtained a copy of a memo Mandy Hampton, a senior member of President Bartlet&amp;rsquo;s campaign and now White House staffer, had written while she was working a Democratic senator who opposed the President.</description>
    </item>
    
    <item>
      <title>The State of the News and TLS</title>
      <link>https://alexgaynor.net/2014/nov/12/state-of-news-tls/</link>
      <pubDate>Wed, 12 Nov 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/nov/12/state-of-news-tls/</guid>
      <description>I&amp;rsquo;ve previously written about the importance of TLS. There are few domains that I can imagine the protections TLS offers are more important for than the news. The idea that articles I read could be manipulated be an attacker on the network is absolutely frightening to me, and the fact that I have no privacy from anyone else on the network with respect to which articles I&amp;rsquo;m reading is similarly disturbing.</description>
    </item>
    
    <item>
      <title>I Hope Twitter Goes Away</title>
      <link>https://alexgaynor.net/2014/oct/30/i-hope-twitter-goes-away/</link>
      <pubDate>Thu, 30 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/30/i-hope-twitter-goes-away/</guid>
      <description>About seven months ago, I abruptly quit Twitter. Though I&amp;rsquo;d been thinking about it for a while, ultimately leaving was a snap decision for me. Lately I&amp;rsquo;ve been reflecting on why I hate Twitter so much.
The obviously uniquely identifying feature of Twitter is the 140 character limit, but I don&amp;rsquo;t think that&amp;rsquo;s a sufficient explanation for why Twitter is the way it is. I think Twitter is defined by the fact that it&amp;rsquo;s about broadcast.</description>
    </item>
    
    <item>
      <title>My Ideal Development Environment</title>
      <link>https://alexgaynor.net/2014/oct/27/ideal-development-environment/</link>
      <pubDate>Mon, 27 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/27/ideal-development-environment/</guid>
      <description>Here&amp;rsquo;s what a day looks like in my ultimate development environment:
Get into the office on Monday morning at 9; I&amp;rsquo;m a big fan of working from an office on a &amp;ldquo;normal&amp;rdquo; schedule (it&amp;rsquo;s not important to me that everyone else do this though).
I&amp;rsquo;ll take a look at the issue tracker, and find the top priority outstanding bug. I like to get started with a bug fix, rather than feature work, I couldn&amp;rsquo;t tell you why.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Six Meetings Before Lunch</title>
      <link>https://alexgaynor.net/2014/oct/19/west-wing-revisited-six-meetings-before-lunch/</link>
      <pubDate>Sun, 19 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/19/west-wing-revisited-six-meetings-before-lunch/</guid>
      <description>After three months, Robert Mendoza is confirmed by the Senate as Associate Justice, United States Supreme Court.
The President&amp;rsquo;s nominee for Assistant Attorney General, Civil Rights, wrote an endorsement for a book advocating slavery reparations for African-Americans in the US. This has made several members of the Senate Judiciary Committee upset. We don&amp;rsquo;t see any of his confirmation hearings, but we&amp;rsquo;re left with the impression that he&amp;rsquo;ll get the position.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: The White House Pro-Am</title>
      <link>https://alexgaynor.net/2014/oct/18/west-wing-revisited-the-white-house-pro-am/</link>
      <pubDate>Sat, 18 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/18/west-wing-revisited-the-white-house-pro-am/</guid>
      <description>Our episode begins with the First Lady and a 14-year old boy appearing on television to talk about the exploitation of child labor around the world.
Then Bernie Dahl, the Chair of the Federal Reserve passes away suddenly. (In the process of these discussions, it&amp;rsquo;s confirmed that the economy is still humming along nicely.)
The President announces that out of respect for Dahl&amp;rsquo;s memory, he&amp;rsquo;s waiting a day to nominate a successor (who is widely reported to by Ron Erlich).</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: 20 Hours in L.A.</title>
      <link>https://alexgaynor.net/2014/oct/17/west-wing-revisited-20-hours-in-la/</link>
      <pubDate>Fri, 17 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/17/west-wing-revisited-20-hours-in-la/</guid>
      <description>The President is taking a trip to Los Angeles! To get his day started right, a bill is introduced into congress to ban gays from serving in the military (we later learn that the West Wing universe presently has a Don&amp;rsquo;t Ask, Don&amp;rsquo;t Tell policy). No one seems to take the bill very seriously.
There&amp;rsquo;s also a Senate vote on an ethanol tax credit, it looks like it&amp;rsquo;s going to be 50-50, which means the Vice President would have to break the tie.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Celestial Navigation</title>
      <link>https://alexgaynor.net/2014/oct/16/west-wing-revisited-celestial-navigation/</link>
      <pubDate>Thu, 16 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/16/west-wing-revisited-celestial-navigation/</guid>
      <description>Today&amp;rsquo;s episode contains more behind-the-scenes than usual. That&amp;rsquo;s because in this episode Josh Lyman speaks at a university, describing his job, anything he shared there I considered fair game.
Our story begins with the Secretary of Housing and Urban Development calling a Republican congressman a racist.
The President signs a major education bill, and then while taking questions from the press, says that he will ask the Secretary to apologize. Concurrent to this, C.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Take this Sabbath Day</title>
      <link>https://alexgaynor.net/2014/oct/15/west-wing-revisited-take-this-sabbath-day/</link>
      <pubDate>Wed, 15 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/15/west-wing-revisited-take-this-sabbath-day/</guid>
      <description>The President is flying back from Stockholm on a Friday evening when the Supreme Court reject a request for a stay of execution for Simon Cruz, a man convicted of multiple murders. It was expected that the Supreme Court was going to send the case back to the 6th circuit court.
The President seeks council from the Pope as to whether he should commute Cruz&amp;rsquo;s sentence. Ultimately, the President does nothing and Simon Cruz is executed.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Take out the Trash Day</title>
      <link>https://alexgaynor.net/2014/oct/14/west-wing-revisited-take-out-the-trash-day/</link>
      <pubDate>Tue, 14 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/14/west-wing-revisited-take-out-the-trash-day/</guid>
      <description>This episode covers &amp;ldquo;take out the trash day&amp;rdquo;, a Friday where the White House releases all the news stories that they don&amp;rsquo;t want to get too much attention (the idea being each of the stories will compete with the others, ensuring none get too much attention). As a result, there&amp;rsquo;s quite a few items in the public eye, but in the show&amp;rsquo;s cannon, none of them get too much attention.</description>
    </item>
    
    <item>
      <title>Advocating for the Devil</title>
      <link>https://alexgaynor.net/2014/oct/13/advocating-for-the-devil/</link>
      <pubDate>Mon, 13 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/13/advocating-for-the-devil/</guid>
      <description>There&amp;rsquo;s a trend I&amp;rsquo;ve seen recently where folks will make ridiculous or offensive arguments, and then say &amp;ldquo;I&amp;rsquo;m just playing devil&amp;rsquo;s advocate&amp;rdquo; as if that means something.
Devil&amp;rsquo;s advocacy is not a license to make ridiculous, incoherent, or illogical arguments. Advocating for the devil means taking a position opposite your usual one. You are still bound by all the same rules of debate and logic, to make a coherent argument. And if all the arguments you find yourself coming up with are racist or sexist, the lesson is perhaps that the position has no merit and there&amp;rsquo;s nothing we can learn from it.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: He Shall, From Time to Time?</title>
      <link>https://alexgaynor.net/2014/oct/13/west-wing-revisited-he-shall-from-time-to-time/</link>
      <pubDate>Mon, 13 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/13/west-wing-revisited-he-shall-from-time-to-time/</guid>
      <description>It&amp;rsquo;s January, and the State of the Union is just a few days. We learn that the economy is doing pretty well overall, which highlights the fact that the economy has hardly been mentioned thus far.
However, the President collapses in the Oval Office, with flu-like symptoms. It&amp;rsquo;s not totally clear to me whether this would be public or not, but I&amp;rsquo;ve decided to err on the side of completeness.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Lord John Marbury</title>
      <link>https://alexgaynor.net/2014/oct/12/west-wing-revisited-lord-john-marbury/</link>
      <pubDate>Sun, 12 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/12/west-wing-revisited-lord-john-marbury/</guid>
      <description>As a result of Congressman Lillienfield&amp;rsquo;s claim that one in three White House staffers used drugs, Josh Lyman performed an internal investigation. Now, a group named &amp;ldquo;Freedom Watch&amp;rdquo; is subpoenaing senior White House staff to learn about the results of the investigation, pursuant to the Freedom of Information Act. It&amp;rsquo;s unclear how much of this would be known by the public, but all the facts are at least notionally available.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: In Excelsis Deo</title>
      <link>https://alexgaynor.net/2014/oct/11/west-wing-revisited-in-excelsis-deo/</link>
      <pubDate>Sat, 11 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/11/west-wing-revisited-in-excelsis-deo/</guid>
      <description>A gay high school senior is killed in an extremely gruesome hate crime in Minnesota. The case garners national attention.
The President has a Christmas photo-op with some extremely photogenic seven year olds.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: The Short List</title>
      <link>https://alexgaynor.net/2014/oct/10/west-wing-revisited-the-short-list/</link>
      <pubDate>Fri, 10 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/10/west-wing-revisited-the-short-list/</guid>
      <description>Justice Joseph Crouch of the Supreme Court announces that he&amp;rsquo;s retiring. It&amp;rsquo;s widely reported that the President will nominate Judge Payton Cabot Harrison III as his replacement.
Concurrent to that, Congressman Peter Lillienfield holds a press conference at which he states that one in three White House staffers use recreational drugs on a regular basis. The White House says it&amp;rsquo;s looking into it.
The President nominates Judge Roberto Mendoza for Associate Justice, United States Supreme Court.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Enemies</title>
      <link>https://alexgaynor.net/2014/oct/09/west-wing-revisited-enemies/</link>
      <pubDate>Thu, 09 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/09/west-wing-revisited-enemies/</guid>
      <description>This episode is all about a major banking reform bill in the house. It&amp;rsquo;s just about to pass, when at the last minute two congresspeople attach a land use rider. The President declares the land in question, Big Sky, Montana, to be a national park and states that he will sign the bill. It seems a bit too cute to ever happen in real life, but frankly, I&amp;rsquo;m salivating at the idea of a real president slamming the door on an overreaching congress.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: The State Dinner</title>
      <link>https://alexgaynor.net/2014/oct/08/west-wing-revisited-state-dinner/</link>
      <pubDate>Wed, 08 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/08/west-wing-revisited-state-dinner/</guid>
      <description>The White House is holding a state dinner for the President of Indonesia and his wife. During the President&amp;rsquo;s toast (which I assume is the only public part of the event itself), he whacks Indonesia over the head for their human rights abuses.
With that in the foreground, there are a number of events going on in the country that the White House is interacting with, all of them public.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Mr. Willis of Ohio</title>
      <link>https://alexgaynor.net/2014/oct/07/west-wing-revisited-mr-willis-ohio/</link>
      <pubDate>Tue, 07 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/07/west-wing-revisited-mr-willis-ohio/</guid>
      <description>Welcome back to &amp;ldquo;The West Wing Revisited&amp;rdquo;, where I try to track down what the plots of The West Wing would look like to the general public.
First up for this episode, a &amp;ldquo;mentally unbalanced&amp;rdquo; woman hops the fence of The White House. Unlike in our present reality, where the Director of the Secret Service just resigned over a similar incident, no one loses their job.
Next up, we have a census bill.</description>
    </item>
    
    <item>
      <title>How to Code Review Without Being a Jerk</title>
      <link>https://alexgaynor.net/2014/oct/06/how-to-code-review-without-being-a-jerk/</link>
      <pubDate>Mon, 06 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/06/how-to-code-review-without-being-a-jerk/</guid>
      <description>Last year I wrote about how it was possible to do code review without being a jerk, but I didn&amp;rsquo;t show you how. Linus and LKML, once again, find themselves in the spotlight, so I thought I would show how it can be done.
On a whim today, I clicked on a random message from Linus, here&amp;rsquo;s what I found:
 Yeah, this is pure crap. It doesn&amp;rsquo;t even compile.</description>
    </item>
    
    <item>
      <title>HTTP Considered Unethical</title>
      <link>https://alexgaynor.net/2014/oct/06/http-considered-unethical/</link>
      <pubDate>Mon, 06 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/06/http-considered-unethical/</guid>
      <description>Returning visitors: notice anything different? No, not the design (although thanks Kenneth Love!). I&amp;rsquo;m talking about the lock icon! Accessing this website now requires TLS (and a fairly modern client to boot).
But Alex, it&amp;rsquo;s just your blog! There&amp;rsquo;s nothing confidential on here, why does it need TLS?
First, TLS doesn&amp;rsquo;t just guarantee confidentiality, it also provides authentication and guarantees the integrity of this page. That prevents an attacker on the network from serving you bogus content, and pretending like it&amp;rsquo;s from me.</description>
    </item>
    
    <item>
      <title>The West Wing Revisisted: The Crackpots and These Women</title>
      <link>https://alexgaynor.net/2014/oct/06/west-wing-revisited-crackpots-these-women/</link>
      <pubDate>Mon, 06 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/06/west-wing-revisited-crackpots-these-women/</guid>
      <description>This episode covers &amp;ldquo;Big Block of Cheese Day&amp;rdquo;, where individuals who normally couldn&amp;rsquo;t get the time of the day from the White House get to meet with senior staffers to pitch their pet issue.
This episode shows the viewer that the senior staff are dedicated and hard working public servants, committed to serving the issues.
Absolutely none of this episode is public however. How could our real public servants ever compete with the standard set by the fictional ones?</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Five Votes Down</title>
      <link>https://alexgaynor.net/2014/oct/05/west-wing-revisited-five-votes-down/</link>
      <pubDate>Sun, 05 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/05/west-wing-revisited-five-votes-down/</guid>
      <description>This episode follows the White House&amp;rsquo;s attempt to get a gun control bill through congress. The episode begins with the staff finding out that they&amp;rsquo;re five votes down, and tracks their attempts to win the votes back. As a result, almost all the political wrangling is invisible to the general public.
There&amp;rsquo;s a few side-plot elements that are public though. First, the Chief of Staff, Leo McGarry, breaks up with his wife.</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: A Proportional Response</title>
      <link>https://alexgaynor.net/2014/oct/03/west-wing-revisited-a-proportional-response/</link>
      <pubDate>Fri, 03 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/03/west-wing-revisited-a-proportional-response/</guid>
      <description>The last episode ended with the Syrian Army downing a US military air craft carrying more than 50 people. This episode takes place three days later.
It&amp;rsquo;s not clear what&amp;rsquo;s been said publicly thus far, but based on the President&amp;rsquo;s crappy demeanor, not much.
Most of this episode is behind the scenes on how the President is handling the situation, but there are a few public story lines.
First, the President hires a new body man, this might make the news, every once in a while the press in real life wrote a story about Reggie Love (President Obama&amp;rsquo;s body man).</description>
    </item>
    
    <item>
      <title>The West Wing Revisited: Post Hoc Ergo Propter Hoc</title>
      <link>https://alexgaynor.net/2014/oct/02/west-wing-revisited-post-hoc-ergo-propter-hoc/</link>
      <pubDate>Thu, 02 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/oct/02/west-wing-revisited-post-hoc-ergo-propter-hoc/</guid>
      <description>Welcome to the second edition of &amp;ldquo;The West Wing Revisited&amp;rdquo;.
Today&amp;rsquo;s episode touched on a few different plot lines. First, a prominent Democratic senator agreed to leave Bill 443 in committee, since the White House didn&amp;rsquo;t like it. It&amp;rsquo;s never said what the substance of the bill was (my guess is social security or medicare related). In reality it would never become public that it was the White House which put the kibbosh on a bill like this, so this would probably be another &amp;ldquo;Democrats can&amp;rsquo;t get their shit together&amp;rdquo; news item.</description>
    </item>
    
    <item>
      <title>Python for Ada</title>
      <link>https://alexgaynor.net/2014/sep/23/python-for-ada/</link>
      <pubDate>Tue, 23 Sep 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/sep/23/python-for-ada/</guid>
      <description>Last year I wrote about why I think it&#39;s important to support diversity within our communities, and about some of the work the Ada Initiative does to support this. The reasons I talked about are good, and (sadly) as relevant today as they were then.
I&#39;d like to add a few more reasons I care about these issues:
I&#39;m tired of wondering if I should recommend a local meetup to a friend: what if a known harasser shows up?</description>
    </item>
    
    <item>
      <title>The West Wing Revisited</title>
      <link>https://alexgaynor.net/2014/sep/21/west-wing-revisited/</link>
      <pubDate>Sun, 21 Sep 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/sep/21/west-wing-revisited/</guid>
      <description>(This post contains spoilers)
Regular readers of this blog will know, I&amp;rsquo;m a big Aaron Sorkin fan (If you&amp;rsquo;re not a regular reader, now would be a good time to get started, there&amp;rsquo;ll be a quiz at the end). The West Wing, specifically, is one of my favorite television shows. I don&amp;rsquo;t fit particularly well into the political spectrum, but most folks would say I&amp;rsquo;m a liberal.
As a result, I have a lot of conversations with liberal friends, and they say things like: &amp;ldquo;I wish Jed Bartlet was our president&amp;rdquo; or &amp;ldquo;I wish the White House was more like that&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Math Games</title>
      <link>https://alexgaynor.net/2014/aug/04/math-games/</link>
      <pubDate>Mon, 04 Aug 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/aug/04/math-games/</guid>
      <description>When I was in the third grade my friend Alexander and I invented a math game (whereby invented I mean, &amp;ldquo;I&amp;rsquo;m unable to precisely track down the origins of this game, so I&amp;rsquo;m assuming we created it entirely on our own&amp;rdquo;). In this post I&amp;rsquo;m going to describe how to play the game, and why I think it was really a really excellent tool for teaching several skills.
Rules To start with, you need a deck of cards, we used some special math cards where the number of cards with each value were not evenly distributed, and the cards went 1-20 (possibly zero was included).</description>
    </item>
    
    <item>
      <title>There is a flash of light! Your PYTHON has evolved into ...</title>
      <link>https://alexgaynor.net/2014/jul/04/your-python-has-evolved/</link>
      <pubDate>Fri, 04 Jul 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/jul/04/your-python-has-evolved/</guid>
      <description>This year has been marked, for me, by many many discussions of Python versions. Finally, though, I&amp;rsquo;ve acquiesced, I&amp;rsquo;ve seen the light, and I&amp;rsquo;m doing what many have suggested. I&amp;rsquo;m taking the first steps: I&amp;rsquo;m changing my default Python.
Yes indeed, my global python is now something different:
$ python Python 2.7.6 (32f35069a16d, Jun 06 2014, 20:12:47) [PyPy 2.3.1 with GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin Type &amp;#34;help&amp;#34;, &amp;#34;copyright&amp;#34;, &amp;#34;credits&amp;#34; or &amp;#34;license&amp;#34; for more information.</description>
    </item>
    
    <item>
      <title>Quo Vadimus?</title>
      <link>https://alexgaynor.net/2014/may/26/quo-vadimus/</link>
      <pubDate>Mon, 26 May 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/may/26/quo-vadimus/</guid>
      <description>I&amp;rsquo;ve spent just about every single day for the last 6 months doing something with Python 3. Some days it was helping port a library, other days it was helping projects put together their porting strategies, and on others I&amp;rsquo;ve written prose on the subject. At this point, I am very very bored of talking about porting, and about the health of our ecosystem.
Most of all, I&amp;rsquo;m exhausted, particularly from arguing about whether or not the process is going well.</description>
    </item>
    
    <item>
      <title>Service</title>
      <link>https://alexgaynor.net/2014/may/19/service/</link>
      <pubDate>Mon, 19 May 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/may/19/service/</guid>
      <description>If you&amp;rsquo;ve been around an Open Source community for any length of time, you&amp;rsquo;ve probably heard someone say, &amp;ldquo;We&amp;rsquo;re all volunteers here&amp;rdquo;. Often this is given as an explanation for why some feature hasn&amp;rsquo;t been implemented, why a release has been delayed, and in general, why something hasn&amp;rsquo;t happened.
I think when we say these things (and I&amp;rsquo;ve said them as much as anyone), often we&amp;rsquo;re being dishonest. Almost always it&amp;rsquo;s not a question of an absolute availability of resources, but rather how we prioritize among the many tasks we could complete.</description>
    </item>
    
    <item>
      <title>Best of PyCon 2014</title>
      <link>https://alexgaynor.net/2014/apr/17/best-of-pycon-2014/</link>
      <pubDate>Thu, 17 Apr 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/apr/17/best-of-pycon-2014/</guid>
      <description>This year was my 7th PyCon, I&amp;rsquo;ve been to every one since 2008. The most consistent trend in my attendance has been that over the years, I&amp;rsquo;ve gone to fewer and fewer talks, and spent more and more time volunteering. As a result, I can&amp;rsquo;t tell you what the best talks to watch are (though I recommend watching absolutely anything that sounds interesting online). Nonetheless, I wanted to write down the two defining events at PyCon for me.</description>
    </item>
    
    <item>
      <title>House and Twitter</title>
      <link>https://alexgaynor.net/2014/mar/20/house-twitter/</link>
      <pubDate>Thu, 20 Mar 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/mar/20/house-twitter/</guid>
      <description>When I was younger, I started watching the TV show House M.D., and I really liked it. At some point my mom asked me if I was more sarcastic since I started watching the show. I said of course not, I&amp;rsquo;ve always been extremely sarcastic.
I was wrong. Watching House made being sarcastic cool.
Using Twitter makes being snarky and not putting thought into things cool. So I&amp;rsquo;m quitting Twitter. I&amp;rsquo;m already snarky and not-thoughtful enough, I don&amp;rsquo;t need something to incentivize it for me.</description>
    </item>
    
    <item>
      <title>Why Crypto</title>
      <link>https://alexgaynor.net/2014/feb/12/why-crypto/</link>
      <pubDate>Wed, 12 Feb 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/feb/12/why-crypto/</guid>
      <description>People who follow me on twitter or github have probably noticed over the past six months or so: I&#39;ve been talking about, and working on, cryptography a lot. Before this I had basically zero crypto experience. Not a lot of programmers know about cryptography, and many of us (myself included) are frankly a bit scared of it. So how did this happen?
At first it was simple: PyCrypto (probably the most used cryptographic library for Python) didn&#39;t work on PyPy, and I needed to perform some simple cryptographic operations on PyPy.</description>
    </item>
    
    <item>
      <title>Why Travis CI is great for the Python community</title>
      <link>https://alexgaynor.net/2014/jan/06/why-travis-is-great-for-the-python-community/</link>
      <pubDate>Mon, 06 Jan 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/jan/06/why-travis-is-great-for-the-python-community/</guid>
      <description>In the unlikely event you&amp;rsquo;re both reading my blog, and have not heard of Travis CI, it&amp;rsquo;s a CI service which specifically targets open source projects. It integrates nicely with Github, and is generally a pleasure to work with.
I think it&amp;rsquo;s particularly valuable for the Python community, because it makes it easy to test against a variety of Pythons, which maybe you don&amp;rsquo;t have at your fingertips on your own machine, such as Python 3 or PyPy (Editor&amp;rsquo;s note: Why aren&amp;rsquo;t you using PyPy for all the things?</description>
    </item>
    
    <item>
      <title>PyPI Download Statistics</title>
      <link>https://alexgaynor.net/2014/jan/03/pypi-download-statistics/</link>
      <pubDate>Fri, 03 Jan 2014 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2014/jan/03/pypi-download-statistics/</guid>
      <description>For the past few weeks, I&amp;rsquo;ve been spending a bunch of time on a side project, which is to get better insight into who uses packages from PyPI. I don&amp;rsquo;t mean what people, I mean what systems: how many users are on Windows, how many still use Python 2.5, do people install with pip or easy_install, questions like these; which come up all the time for open source projects.
Unfortunately until now there&amp;rsquo;s been basically no way to get this data.</description>
    </item>
    
    <item>
      <title>About Python 3</title>
      <link>https://alexgaynor.net/2013/dec/30/about-python-3/</link>
      <pubDate>Mon, 30 Dec 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/dec/30/about-python-3/</guid>
      <description>Python community, friends, fellow developers, we need to talk. On December 3rd, 2008 Python 3.0 was first released. At the time it was widely said that Python 3 adoption was going to be a long process, it was referred to as a five year process. We&amp;rsquo;ve just passed the five year mark.
At the time of Python 3&amp;rsquo;s release, and for years afterwards I was very excited about it, evangelizing it, porting my projects to it, for the past year or two every new projects I&amp;rsquo;ve started has had Python 3 support from the get go.</description>
    </item>
    
    <item>
      <title>Gender neutral language - An FAQ</title>
      <link>https://alexgaynor.net/2013/nov/30/gender-neutral-language-faq/</link>
      <pubDate>Sat, 30 Nov 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/nov/30/gender-neutral-language-faq/</guid>
      <description>I&amp;rsquo;d like to refer to a hypothetical person in my documentation Try something like this:
 When a user visits the website, they will be assigned a session ID, and it will be transmitted to them in the HTTP response and stored in their browser.
 But not like this!
 When a user visits the website, he will be assigned a session ID, and it will be transmitted to him in the HTTP response and stored in his browser.</description>
    </item>
    
    <item>
      <title>Affirmative action</title>
      <link>https://alexgaynor.net/2013/nov/27/affirmative-action/</link>
      <pubDate>Wed, 27 Nov 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/nov/27/affirmative-action/</guid>
      <description>Whenever the topic of affirmative action comes up, you can be sure someone will ask the question: &amp;ldquo;How would you feel if you found out that you got your job, or got into college, because of your race?&amp;rdquo;
It&amp;rsquo;s funny, no one ever asks: &amp;ldquo;How would you feel if you got your job, or got into college, because you were systemically advantaged from the moment you were born?&amp;rdquo;
Interesting.</description>
    </item>
    
    <item>
      <title>Security process for Open Source Projects</title>
      <link>https://alexgaynor.net/2013/oct/19/security-process-open-source-projects/</link>
      <pubDate>Sat, 19 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/oct/19/security-process-open-source-projects/</guid>
      <description>This post is intended to describe how open source projects should handle security vulnerabilities. This process is largely inspired by my involvement in the Django project, whose process is in turn largely drawn from the PostgreSQL project&amp;rsquo;s process. For every recommendation I make I&amp;rsquo;ll try to explain why I&amp;rsquo;ve made it, and how it serves to protect you and your users. This is largely tailored at large, high impact, projects, but you should be able to apply it to any of your projects.</description>
    </item>
    
    <item>
      <title>Meritocracy</title>
      <link>https://alexgaynor.net/2013/oct/12/meritocracy/</link>
      <pubDate>Sat, 12 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/oct/12/meritocracy/</guid>
      <description>Let&amp;rsquo;s start with a definition, a meritocracy is a group where leadership or authority is derived from merit (merit being skills or ability), and particularly objective merit. I think adding the word objective is important, but not often explicitly stated.
A lot of people like to say open source is a meritocracy, the people who are the top of projects are there because they have the most merit. I&amp;rsquo;d like to examine this idea.</description>
    </item>
    
    <item>
      <title>Thoughts on Lavabit</title>
      <link>https://alexgaynor.net/2013/oct/02/thoughts-lavabit/</link>
      <pubDate>Wed, 02 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/oct/02/thoughts-lavabit/</guid>
      <description>If you haven&amp;rsquo;t already, you should start by reading Wired&amp;rsquo;s article on this.
I am not a lawyer. That said, I want to walk through my take on each stage of this.
The government served Lavabit with an order requiring them to supply metadata about every email, as well as mailbox accesses, for a specific user. Because this was &amp;ldquo;metadata&amp;rdquo; only the government was not required to supply probable cause.</description>
    </item>
    
    <item>
      <title>Effective Code Review</title>
      <link>https://alexgaynor.net/2013/sep/26/effective-code-review/</link>
      <pubDate>Thu, 26 Sep 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/sep/26/effective-code-review/</guid>
      <description>Maybe you practice code review, either as a part of your open source project or as a part of your team at work, maybe you don&amp;rsquo;t yet. But if you&amp;rsquo;re working on a software project with more than one person it is, in my view, a necessary piece of a healthy workflow. The purpose of this piece is to try to convince you its valuable, and show you how to do it effectively.</description>
    </item>
    
    <item>
      <title>Being negative</title>
      <link>https://alexgaynor.net/2013/sep/22/being-negative/</link>
      <pubDate>Sun, 22 Sep 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/sep/22/being-negative/</guid>
      <description>From time to time I joke that Bob Knight stole the title of my autobiography with his, which is titled &amp;ldquo;The Power of Negativity&amp;rdquo;. I&amp;rsquo;ve never read the book, but it&amp;rsquo;s very easy for me to imagine how it could apply to me. Many people who know me would immediately identify me as a negative person. They&amp;rsquo;re not wrong, and it&amp;rsquo;s a constant source of struggle for me.
To be clear: I&amp;rsquo;m sarcastic, I&amp;rsquo;m critical, I&amp;rsquo;m a perfectionist and impossible to impress, and I have a capacious ego.</description>
    </item>
    
    <item>
      <title>Doing a release is too hard</title>
      <link>https://alexgaynor.net/2013/sep/17/doing-release-too-hard/</link>
      <pubDate>Tue, 17 Sep 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/sep/17/doing-release-too-hard/</guid>
      <description>I just shipped a new release of alchimia. Here are the steps I went through:
 Manually edit version numbers in setup.py and docs/conf.py. In theory I could probably centralize this, but then I&amp;rsquo;d still have a place I need to update manually. Issue a git tag (actually I forgot to do that on this project, oops). python setup.py register sdist upload -s to build and upload some tarballs to PyPi python setup.</description>
    </item>
    
    <item>
      <title>You guys know who Philo Farnsworth was?</title>
      <link>https://alexgaynor.net/2013/sep/15/you-guys-know-who-philo-farnsworth-was/</link>
      <pubDate>Sun, 15 Sep 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/sep/15/you-guys-know-who-philo-farnsworth-was/</guid>
      <description>Friends of mine will know I&#39;m a very big fan of the TV show Sports Night (really any of Aaron Sorkin&#39;s writing, but Sports Night in particular). Before you read anything I have to say, take a couple of minutes and watch this clip:
I doubt Sorkin knew it when he scripted this (I doubt he knows it now either), but this piece is about how Open Source happens (to be honest, I doubt he knows what Open Source Software is).</description>
    </item>
    
    <item>
      <title>Your project doesn&#39;t mean your playground</title>
      <link>https://alexgaynor.net/2013/sep/08/your-project-doesnt-mean-your-playground/</link>
      <pubDate>Sun, 08 Sep 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/sep/08/your-project-doesnt-mean-your-playground/</guid>
      <description>Having your own open source project is awesome. You get to build a thing you like, obviously. But you also get to have your own little playground, a chance to use your favorite tools: your favorite VCS, your favorite test framework, your favorite issue tracker, and so on.
And if the point of your project is to share a thing you&amp;rsquo;re having fun with with the world, that&amp;rsquo;s great, and that&amp;rsquo;s probably all there is to the story (you may stop reading here).</description>
    </item>
    
    <item>
      <title>Why I support diversity</title>
      <link>https://alexgaynor.net/2013/aug/28/why-i-support-diversity/</link>
      <pubDate>Wed, 28 Aug 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/aug/28/why-i-support-diversity/</guid>
      <description>I get asked from time to time why I care about diversity in the communities I&amp;rsquo;m a part of, particularly the Django, Python, and the broader software development and open source community.
There&amp;rsquo;s a lot of good answers. The simplest one, and the one I imagine just about everyone can get behind: diverse groups perform better at creative tasks. A group composed of people from different backgrounds will do better work than a homogeneous group.</description>
    </item>
    
    <item>
      <title>An open letter to the security community</title>
      <link>https://alexgaynor.net/2013/aug/03/open-letter-security-community/</link>
      <pubDate>Sat, 03 Aug 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/aug/03/open-letter-security-community/</guid>
      <description>Your community appears to be a disaster. I&amp;rsquo;ve already read about the following happening in your community/conferences:
 Women stripping being used as a prize in hacker jeopardy Jeopardy game features the category &amp;ldquo;hot pussy&amp;rdquo; Invites to parties being handed out to male speakers and not female speakers Objectifying content on slides Hacking devices of new users at conferences is considered completely acceptable  I can only conclude you don&amp;rsquo;t want to be welcoming to new users.</description>
    </item>
    
    <item>
      <title>You don&#39;t have to be a jerk to code review</title>
      <link>https://alexgaynor.net/2013/jul/16/you-dont-have-be-jerk-code-review/</link>
      <pubDate>Tue, 16 Jul 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/jul/16/you-dont-have-be-jerk-code-review/</guid>
      <description>By this point it&amp;rsquo;s likely you&amp;rsquo;ve read about the discussion Sarah Sharp started on the Linux Kernel Mailing List (LKML) about the abusive nature of some of the comments there, she also wrote about it on her blog.
The negative responses to this broadly fall into two categories: 1) The Linux development process works, stop trying to change it, and 2) professionalism means sugar coating things and that leads to backstabbing and people writing terrible patches.</description>
    </item>
    
    <item>
      <title>Your tests are not a benchmark</title>
      <link>https://alexgaynor.net/2013/jul/15/your-tests-are-not-benchmark/</link>
      <pubDate>Mon, 15 Jul 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/jul/15/your-tests-are-not-benchmark/</guid>
      <description>I get a lot of feedback about people&amp;rsquo;s experiences with PyPy. And a lot of it is really great stuff for example, &amp;ldquo;We used to leave the simulation running over night, now we take a coffee break&amp;rdquo;. We also get some less successful feedback, however quite a bit of that goes something like, &amp;ldquo;I ran our test suite under PyPy, not only was it not faster, it was slower!&amp;rdquo;. Unfortunately, for the time being, this is really expected, we&amp;rsquo;re working on improving it, but for now I&amp;rsquo;d like to explain why that is.</description>
    </item>
    
    <item>
      <title>Thoughts on OpenStack</title>
      <link>https://alexgaynor.net/2013/jul/11/thoughts-openstack/</link>
      <pubDate>Thu, 11 Jul 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/jul/11/thoughts-openstack/</guid>
      <description>Since I joined Rackspace a little over a month ago, I&amp;rsquo;ve gotten involved with OpenStack, learning the APIs, getting involved in discussions, and contributing code. I wanted to write a bit about what some of my experiences have been, particularly with respect to the code and contribution process.
Architecture Were I to have started to design a system similar to OpenStack, and particularly components like Swift (Object store), the first thing I would have done would be build a (or select an existing) general purpose distributed database.</description>
    </item>
    
    <item>
      <title>Weekly Updates</title>
      <link>https://alexgaynor.net/2013/jun/20/weekly-updates/</link>
      <pubDate>Thu, 20 Jun 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/jun/20/weekly-updates/</guid>
      <description>One of the great luxuries of my new job at Rackspace is that basically everything I work on is open source, which means I also have the ability to write and talk about almost everything I do! Since a large chunk of my time is dedicated to working on open source projects of my choice, I wanted to start writing regularly about what I&amp;rsquo;m doing with that time. To that end I&amp;rsquo;m going to try to write regularly (hopefully every Monday) about my goals for the week.</description>
    </item>
    
    <item>
      <title>Moving to Rackspace</title>
      <link>https://alexgaynor.net/2013/may/06/moving-rackspace/</link>
      <pubDate>Mon, 06 May 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/may/06/moving-rackspace/</guid>
      <description>As you may have heard by now, I&amp;rsquo;m joining Rackspace. This was a very hard decision, I love my job at Rdio, I love my coworkers, and I love the product we&amp;rsquo;re building. However, Rackspace has given me an opportunity to make my work on open source projects (particularly PyPy) a major part of my job. I&amp;rsquo;ll also be spending time on OpenStack, the SDKs, and internal developer evangelism. I&amp;rsquo;ll be staying in San Francisco.</description>
    </item>
    
    <item>
      <title>Perception</title>
      <link>https://alexgaynor.net/2013/apr/16/perception/</link>
      <pubDate>Tue, 16 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/apr/16/perception/</guid>
      <description>I&amp;rsquo;ve been reading Sheryl Sandberg&amp;rsquo;s &amp;ldquo;Lean In&amp;rdquo;. It&amp;rsquo;s a good book and I recommend it. One passage recently caught my attention. Writing about her first day at a new job: &amp;ldquo;&amp;lsquo;I can&amp;rsquo;t believe you&amp;rsquo;ve gotten this far, or even how you can understand basic economics, without knowing how to use Lotus.&amp;rsquo; I went home convinced that I was going to get fired.&amp;rdquo; (p62)
A number of years ago my college roommate and I both had summer internships and we were discussing them.</description>
    </item>
    
    <item>
      <title>Disambiguating BSON and msgpack</title>
      <link>https://alexgaynor.net/2013/feb/16/disambiguating-bson-and-msgpack/</link>
      <pubDate>Sat, 16 Feb 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/feb/16/disambiguating-bson-and-msgpack/</guid>
      <description>I had a fairly fun project at work recently, so I thought I&amp;rsquo;d write about it. We currently store BSON blobs of data in many places. This is unfortunate, because BSON is bloated and slow (an array is internally stored as a dictionary mapping the strings &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, etc. to values). So we wanted to migrate to msgpack, which I&amp;rsquo;ve measured as requiring 46% of the space of BSON, and being significantly faster to deserialize (we aren&amp;rsquo;t concerned with serialization speed, though I&amp;rsquo;m relatively confident that&amp;rsquo;s faster as well).</description>
    </item>
    
    <item>
      <title>Software Design: 80/20 libraries</title>
      <link>https://alexgaynor.net/2013/jan/06/software-design-8020-libraries/</link>
      <pubDate>Sun, 06 Jan 2013 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2013/jan/06/software-design-8020-libraries/</guid>
      <description>I&#39;m trying a new format for content, instead of writing I&#39;ve recorded some audio, I think this will be a better format for my to share ideas. You can find the audio here.
PS: If you know a better workflow for sharing audio like this, please let me know.</description>
    </item>
    
    <item>
      <title>Linux on the Desktop Dead </title>
      <link>https://alexgaynor.net/2012/sep/03/linux-desktop-dead/</link>
      <pubDate>Mon, 03 Sep 2012 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2012/sep/03/linux-desktop-dead/</guid>
      <description>At 10:40 AM this morning Linux on the desktop was pronounced dead by Dr. Randall Gnu at GPL Memorial Hospital in Portland, Oregon. The cause of death is, as yet, unknown but it is believed to be the result of two decades of constant exposure to FUD.
Friends and colleagues were shocked and saddened at the loss of Linux on the desktop. Said one, &amp;ldquo;It was so shocking to hear it passed away, it had been doing so well lately, more users than ever, more non-technical users&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>The compiler rarely knows best </title>
      <link>https://alexgaynor.net/2012/jul/12/compiler-rarely-knows-best/</link>
      <pubDate>Thu, 12 Jul 2012 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2012/jul/12/compiler-rarely-knows-best/</guid>
      <description>This is a response to http://pwang.wordpress.com/2012/07/11/does-the-compiler-know-best/ if you haven&amp;rsquo;t read it yet, start there.
For lack of any other way to say it, I disagree with nearly every premise presented and conclusion derived in Peter&amp;rsquo;s blog post. The post itself doesn&amp;rsquo;t appear to have any coherent theme, besides that PyPy is not the future of Python, so I&amp;rsquo;ll attempt to reply to Peter&amp;rsquo;s statements more or less in order.
First, and perhaps most erroneously, he claims that &amp;ldquo;PyPy is an even more drastic change to the Python language than Python3&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Why personal funding </title>
      <link>https://alexgaynor.net/2012/jul/04/why-personal-funding/</link>
      <pubDate>Wed, 04 Jul 2012 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2012/jul/04/why-personal-funding/</guid>
      <description>First, I have to apologize, because this post is incredibly self-serving, I believe everything I write here applies to myself, and if you do what I suggest, it will be to my benefit. I believe every single word I&amp;rsquo;m writing, but you have no way of knowing that, except trusting me. I can only hope I&amp;rsquo;ve written persuasively enough.
If you&amp;rsquo;ve ever asked an open source developer why they haven&amp;rsquo;t fixed a bug or added a feature, the answer probably fell into one of three categories:</description>
    </item>
    
    <item>
      <title>5 years, 2 months, and 28 days</title>
      <link>https://alexgaynor.net/2012/may/26/5-years-2-months-and-28-days/</link>
      <pubDate>Sat, 26 May 2012 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2012/may/26/5-years-2-months-and-28-days/</guid>
      <description>5 years, 2 months, and 28 days ago I dropped out of high school, and in a few hours I&amp;rsquo;m going to graduate from college. This journey has been surreal, and that it&amp;rsquo;s coming to an end hasn&amp;rsquo;t even begun to sink in. I lack the words to express my thanks to my family and friends who&amp;rsquo;ve been with me through this.
However, I think I owe an even greater thanks to the open source communities I&amp;rsquo;ve worked with.</description>
    </item>
    
    <item>
      <title>The perils of polyglot programming</title>
      <link>https://alexgaynor.net/2011/dec/23/perils-polyglot-programming/</link>
      <pubDate>Fri, 23 Dec 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/dec/23/perils-polyglot-programming/</guid>
      <description>Polyglot programming (the practice of knowing and using many programming languages) seems to be all the rage these days. Its adherents claim two benefits:
 Using the right tool for every job means everything you do is a little bit easier (or better, or faster, or all of the above). Knowing multiple programming paradigm expands your mind and makes you better at programming in every language.  I&amp;rsquo;m not going to dispute either of these.</description>
    </item>
    
    <item>
      <title>Why del defaultdict()[k] should raise an error </title>
      <link>https://alexgaynor.net/2011/nov/28/why-del-defaultdictk-should-raise-error/</link>
      <pubDate>Mon, 28 Nov 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/nov/28/why-del-defaultdictk-should-raise-error/</guid>
      <description>Raymond Hettinger recently asked on twitter what people thought del defaultdict()[k] did for a k that didn&amp;rsquo;t exist in the dict. There are two ways of thinking about this, one is, &amp;ldquo;it&amp;rsquo;s a defaultdict, there&amp;rsquo;s always a value at a key, so it can never raise a KeyError&amp;rdquo;, the other is, &amp;ldquo;that only applies to reading a value, this should still raise an error&amp;rdquo;. I initially spent several minutes considering which made more sense, but I eventually came around to the second view, I&amp;rsquo;m going to explain why.</description>
    </item>
    
    <item>
      <title>RCOS NumPy Talk</title>
      <link>https://alexgaynor.net/2011/nov/18/rcos-numpy-talk/</link>
      <pubDate>Fri, 18 Nov 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/nov/18/rcos-numpy-talk/</guid>
      <description>I just delivered a talk at RCOS (the open source center on campus) on some of the work I&amp;rsquo;ve been doing this semester on PyPy&amp;rsquo;s implementation of NumPy. You can find the slides here, they&amp;rsquo;re built using html5slides, which is pretty swell (for a tool that makes me write HTML directly that is).</description>
    </item>
    
    <item>
      <title>The run-time distinction </title>
      <link>https://alexgaynor.net/2011/oct/11/run-time-distinction/</link>
      <pubDate>Tue, 11 Oct 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/oct/11/run-time-distinction/</guid>
      <description>At PyCodeConf I had a very interesting discussion with Nick Coghlan which helped me understand something that had long frustrated me with programming languages. Anyone who&amp;rsquo;s ever taught a new programmer Java knows this, but perhaps hasn&amp;rsquo;t understood it for what it is. This thing that I hadn&amp;rsquo;t been appreciating was the distinction some programming languages make between the language that exists at compile time, and the language that exists at run-time.</description>
    </item>
    
    <item>
      <title>So you want to write a fast Python? </title>
      <link>https://alexgaynor.net/2011/jul/10/so-you-want-write-fast-python/</link>
      <pubDate>Sun, 10 Jul 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/jul/10/so-you-want-write-fast-python/</guid>
      <description>Thinking about writing your own Python implementation? Congrats, there are plenty out there 1, but perhaps you have something new to bring to the table. Writing a fast Python is a pretty hard task, and there&amp;rsquo;s a lot of stuff you need to keep in mind, but if you&amp;rsquo;re interested in forging ahead, keep reading!
First, you&amp;rsquo;ll need to write yourself an interpreter. A static compiler for Python doesn&amp;rsquo;t have enough information to do the right things 1 1, and a multi-stage JIT compiler is probably more trouble than it&amp;rsquo;s worth 1.</description>
    </item>
    
    <item>
      <title>DjangoCon Europe 2011 Slides</title>
      <link>https://alexgaynor.net/2011/jun/07/djangocon-europe-2011-slides/</link>
      <pubDate>Tue, 07 Jun 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/jun/07/djangocon-europe-2011-slides/</guid>
      <description>I gave a talk at DjangoCon Europe 2011 on using Django and PyPy (with another talk to be delivered tomorrow!), you can get the slides right on bitbucket, and for those who saw the talk, the PyPy compatibility wiki is here.</description>
    </item>
    
    <item>
      <title>This Summer</title>
      <link>https://alexgaynor.net/2011/may/06/this-summer/</link>
      <pubDate>Fri, 06 May 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/may/06/this-summer/</guid>
      <description>For the past nearly two years I&amp;rsquo;ve been an independent contractor working primarily for Eldarion, and it&amp;rsquo;s been fantastic, I can&amp;rsquo;t say enough good things. However, this summer I&amp;rsquo;m shaking things up a bit and heading west. I&amp;rsquo;ll be an intern at Quora this summer. They&amp;rsquo;re a Python shop, and it&amp;rsquo;s going to be my job to make everything zippy. Specifically I&amp;rsquo;ll be making the site run on PyPy, and then tuning the hell out of both their codebase and PyPy itself.</description>
    </item>
    
    <item>
      <title>My experience with the computer language shootout</title>
      <link>https://alexgaynor.net/2011/apr/03/my-experience-computer-language-shootout/</link>
      <pubDate>Sun, 03 Apr 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/apr/03/my-experience-computer-language-shootout/</guid>
      <description>For a long time we, the PyPy developers, have known the Python implementations on the Computer Language Shootout were not optimal under PyPy, and in fact had been ruthlessly microoptimized for CPython, to the detriment of PyPy. But we didn&amp;rsquo;t really care or do anything about it, because we figured those weren&amp;rsquo;t really representative of what people like to do with Python, and who really cares what it says, CPython is over 30 times slower than C, and people use it just the same.</description>
    </item>
    
    <item>
      <title>PyPy San Francisco Tour Recap</title>
      <link>https://alexgaynor.net/2011/mar/09/pypy-san-francisco-tour-recap/</link>
      <pubDate>Wed, 09 Mar 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/mar/09/pypy-san-francisco-tour-recap/</guid>
      <description>Yesterday was the last day of my (our) tour of the Bay Area, so I figured I&amp;rsquo;d post a recap of all the cool stuff that happened.
Sprints I got in on Friday night (technically Saturday morning, thanks for the ride Noah!) and on Saturday and Sunday we held sprints at Noisebridge. They have a very cool location and we had some pretty productive sprints. The turnout was less than expected, based on the people who said they&amp;rsquo;d show at the Python user group, however we were pretty productive.</description>
    </item>
    
    <item>
      <title>Django and Python 3 (Take 2)</title>
      <link>https://alexgaynor.net/2011/feb/17/django-and-python-3-take-2/</link>
      <pubDate>Thu, 17 Feb 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/feb/17/django-and-python-3-take-2/</guid>
      <description>About 18 months ago I blogged about Django and Python 3, I gave the official roadmap. Not a lot has changed since then unfortunately, we&amp;rsquo;ve dropped 2.3 entirely, 2.4 is on it&amp;rsquo;s way out, but there&amp;rsquo;s no 3.X support in core. One fun thing has changed though: I get to help set the roadmap, which is a) cool, b) means the fact that I care about Python 3 counts for something.</description>
    </item>
    
    <item>
      <title>Announcing VCS Translator</title>
      <link>https://alexgaynor.net/2011/jan/21/announce-vcs-translator/</link>
      <pubDate>Fri, 21 Jan 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/jan/21/announce-vcs-translator/</guid>
      <description>For the past month or so I&amp;rsquo;ve been using a combination of Google, Stackoverflow, and bugging people on IRC to muddle my way through using various VCS that I&amp;rsquo;m not very familiar with. And all too often my queries are of the form of &amp;ldquo;how do I do git foobar -q in mercurial?&amp;rdquo;. A while ago I tweeted that someone should write a VCS translator website. Nobody else did, so when I woke up far too early today I decided I was going to get something online to solve this problem, today!</description>
    </item>
    
    <item>
      <title>PyCon 2011 is going to be Awesome</title>
      <link>https://alexgaynor.net/2011/jan/21/pycon-2011-going-be-awesome/</link>
      <pubDate>Fri, 21 Jan 2011 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2011/jan/21/pycon-2011-going-be-awesome/</guid>
      <description>If you hang out with Pythonistas you&amp;rsquo;ve probably already heard, but if you haven&amp;rsquo;t, come to PyCon! It&amp;rsquo;s going to be awesome. Here are just a few reasons why:
 The talks will be great, I&amp;rsquo;ve got 2 that I&amp;rsquo;m super excited about, but here are five more I wouldn&amp;rsquo;t miss for the world:  &amp;ldquo;Dude, Where&amp;rsquo;s My RAM?&amp;rdquo; - A deep dive into how Python uses memory Writing great documentation Panel: Python in Schools: Teaching It and Teaching With It.</description>
    </item>
    
    <item>
      <title>2010 in Review</title>
      <link>https://alexgaynor.net/2010/dec/31/2010-review/</link>
      <pubDate>Fri, 31 Dec 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/dec/31/2010-review/</guid>
      <description>Now that the decades almost over (or maybe not, if the millennium started in 2001 did the decade start then as well?), it&amp;rsquo;s time for a little year in review:
 Finished another year of school, I can see the light at the end of the tunnel. Went to PyCon, attended the language summit, gave a talk, had a blast. Got an iMac. Went to DjangoCon.eu, gave a talk, had a blast.</description>
    </item>
    
    <item>
      <title>Getting the most out of tox </title>
      <link>https://alexgaynor.net/2010/dec/17/getting-most-out-tox/</link>
      <pubDate>Fri, 17 Dec 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/dec/17/getting-most-out-tox/</guid>
      <description>tox is a recent Python testing tool, by Holger Krekel. It&amp;rsquo;s stated purpose is to make testing Python projects against multiple versions of Python (or different interpreters, like PyPy and Jython) much easier. However, it can be used for so much more. Yesterday I set it up for django-taggit, and it&amp;rsquo;s an absolute dream, it automates testing against four different versions of Python, two different versions of Django, and it automates building the docs and checking for any warnings from Sphinx.</description>
    </item>
    
    <item>
      <title>Programming Languages Terminology</title>
      <link>https://alexgaynor.net/2010/nov/19/programming-languages-terminology/</link>
      <pubDate>Fri, 19 Nov 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/nov/19/programming-languages-terminology/</guid>
      <description>This semester I&amp;rsquo;ve been taking a course titled &amp;ldquo;Programming Languages&amp;rdquo;. Since I&amp;rsquo;m a big languages and compilers nerd this should be wonderful. Unfortunately every time I&amp;rsquo;m in this class I&amp;rsquo;m reminded of just what a cluster-fuck programming language terminology is. What follows are my definitions of a number of terms:
 Dynamic typing (vs static typing): Values do not have a type until runtime. Has nothing to do with the declaration of types (i.</description>
    </item>
    
    <item>
      <title>Symptoms and Diseases</title>
      <link>https://alexgaynor.net/2010/nov/18/symptoms-and-diseases/</link>
      <pubDate>Thu, 18 Nov 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/nov/18/symptoms-and-diseases/</guid>
      <description>When you have a cold you treat the symptoms you deal with the runny nose, the fever, and the cough independently (each with chicken soup) because there&amp;rsquo;s nothing you can do about the cold. When you have lung cancer you treat the disease, because if all you do is treat the cough you have you&amp;rsquo;re going to die of cancer very quickly. When your country has the occasional random terrorist attack you deal with it with the appropriate security measures, when you have a series of system terror attempts by an organized group you should probably start thinking about doing something about the root cause: whatever you&amp;rsquo;re doing to piss them off, because no security is 100%.</description>
    </item>
    
    <item>
      <title>A statically typed language I&#39;d actually want to use</title>
      <link>https://alexgaynor.net/2010/nov/04/staticly-typed-language-id-actually-want-use/</link>
      <pubDate>Thu, 04 Nov 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/nov/04/staticly-typed-language-id-actually-want-use/</guid>
      <description>Nearly a year ago I tweeted, and released on github a project I&amp;rsquo;d been working. It&amp;rsquo;s called shore, and it&amp;rsquo;s the start of a compiler for a statically typed language I&amp;rsquo;d actually like to use. Programming is, for me, most fun when I can work at the level that suits the problem I have: when I&amp;rsquo;m building a website I don&amp;rsquo;t like to think about how my file system library is implemented.</description>
    </item>
    
    <item>
      <title>Not everything sucks</title>
      <link>https://alexgaynor.net/2010/nov/04/not-everything-sucks/</link>
      <pubDate>Thu, 04 Nov 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/nov/04/not-everything-sucks/</guid>
      <description>Since I seem to be failing at this blogging thing, tonights post is a simple thought: just because something is imperfect doesn&amp;rsquo;t mean it sucks.</description>
    </item>
    
    <item>
      <title>The continuous integration I want</title>
      <link>https://alexgaynor.net/2010/nov/02/continuous-integration-i-want/</link>
      <pubDate>Tue, 02 Nov 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/nov/02/continuous-integration-i-want/</guid>
      <description>Testing is important, I&amp;rsquo;ve been a big advocate of writing tests for a while, however when you&amp;rsquo;ve got tests you need to run them. This is a big problem in open source, Django works on something like six versions of Python (2.4, 2.5, 2.6, 2.7, Jython, and PyPy), 4 databases (SQLite, PostgreSQL, MySQL, Oracle, plus the GIS backends, and external backends), and I don&amp;rsquo;t even know how many operating systems (at least the various Linuxes, OS X, and Windows).</description>
    </item>
    
    <item>
      <title>National Blog Post Month</title>
      <link>https://alexgaynor.net/2010/nov/01/national-blog-post-month/</link>
      <pubDate>Mon, 01 Nov 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/nov/01/national-blog-post-month/</guid>
      <description>It&amp;rsquo;s November again, and that means National Blog Post Month (or NAMBLA), and it&amp;rsquo;s also the second anniversary of me having a blog. Once again I&amp;rsquo;m going to be making an effort to blog post every day, as you can tell I&amp;rsquo;m off to a great start with this post, Murphy willing the content will improve as the month goes on.</description>
    </item>
    
    <item>
      <title>Priorities</title>
      <link>https://alexgaynor.net/2010/oct/24/priorities/</link>
      <pubDate>Sun, 24 Oct 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/oct/24/priorities/</guid>
      <description>When you work on something as large and multi-faceted as Django you need a way to prioritize what you work on, without a system how do I decide if I should work on a new feature for the template system, a bugfix in the ORM, a performance improvement to the localization features, or better docs for contrib.auth? There&amp;rsquo;s tons of places to jump in and work on something in Django, and if you aren&amp;rsquo;t a committer you&amp;rsquo;ll eventually need one to commit your work to Django.</description>
    </item>
    
    <item>
      <title>Cui Bono</title>
      <link>https://alexgaynor.net/2010/oct/21/cui-bono/</link>
      <pubDate>Thu, 21 Oct 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/oct/21/cui-bono/</guid>
      <description>Cui bono is Latin, meaning &amp;ldquo;to whose benefit&amp;rdquo;. It is typically used as a mode of thought for judicial inquiry, by Occam&amp;rsquo;s razor a perpetrator who stands to gain something from a crime is more likely to have committed it than one with no standing. However, it can similarly be used as a mode of thought to analyze the motives and practical realities of international relations. Specifically, it calls our attention to the inherent dichotomy of the US mission in Afghanistan to combat terrorism (clearly the proximate cause for the US invasion following 9/11) and the mission to establish a democracy (the oft trodden out political justification).</description>
    </item>
    
    <item>
      <title>Prohibition doesn&#39;t Work</title>
      <link>https://alexgaynor.net/2010/oct/14/prohibition-doesnt-work/</link>
      <pubDate>Thu, 14 Oct 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/oct/14/prohibition-doesnt-work/</guid>
      <description>Since the 2001 US and allied invasion of Afghanistan one of the major international efforts has been to reduce the output of opium from Afghanistan. Nonetheless, since 2001 the output has been increasingly, however the September 2010 report from the UN indicates there has been a nearly 50% reduction in the potential production of opium for all of Afghanistan, however it also notes a 38% increase in the total farm-gate value of opium production; that is the total value of the opium produced nearly doubled despite halving the output.</description>
    </item>
    
    <item>
      <title>The Pakistan Problem</title>
      <link>https://alexgaynor.net/2010/oct/06/pakistan-problem/</link>
      <pubDate>Wed, 06 Oct 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/oct/06/pakistan-problem/</guid>
      <description>Since the US began military operations in Afghanistan in 2001 Pakistan has been a crucial ally. Pakistan has provided both a supply route for supplies arriving at Karachi (the nearest major seaport) as well providing logistic support against insurgents operating on the Afghanistan/Pakistan border. Despite this support there are a number of fundamental issues with the US-Pakistan relationship that make the long term relationship a dicey proposition.
The greatest issue is that until recently Pakistan was ruled by a military dictatorship, and a great many individuals in their military (particular the ISI, their intelligence apparatus) still hold loyalty to their military leadership, not the civilian government.</description>
    </item>
    
    <item>
      <title>US Interventionism and its Fallout</title>
      <link>https://alexgaynor.net/2010/oct/03/us-interventionism-and-its-fallout/</link>
      <pubDate>Sun, 03 Oct 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/oct/03/us-interventionism-and-its-fallout/</guid>
      <description>Though the first foreign policy promulgated by the United States was that of non-interventionism, George Washington&amp;rsquo;s warning to avoid foreign entanglements. However, shortly there after, and ever since, following the Monroe Doctrine US foreign policy has actively tended towards interventionism. The results of this, however, have been almost universally disastrous, particularly in cases where we&amp;rsquo;ve acted against our own principles our of convenience. This same fate can be seen in the US&amp;rsquo;s support of local warlords in the current war in Afghanistan, as those who ignore history are doomed to repeat it.</description>
    </item>
    
    <item>
      <title>Dynamic and Static Programming Languages and Teaching</title>
      <link>https://alexgaynor.net/2010/sep/29/dynamic-and-static-programming-languages-and-teaching/</link>
      <pubDate>Wed, 29 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/sep/29/dynamic-and-static-programming-languages-and-teaching/</guid>
      <description>Lately I&amp;rsquo;ve seen the sentiment, &amp;ldquo;Why do all teachers need to prepare their own lesson plans&amp;rdquo; in a few different places, and it strikes me as representative of a particular mindset about education and teaching. To me, it seems like a fundamental question about pedagogical philosophy that&amp;rsquo;s akin to the great programming debate between which is better dynamic or static languages (although it might be more apt to say compiled versus interpreted).</description>
    </item>
    
    <item>
      <title>US Counterinsurgency and Terrorism Policy</title>
      <link>https://alexgaynor.net/2010/sep/26/us-counterinsurgency-and-terrorism-policy/</link>
      <pubDate>Sun, 26 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/sep/26/us-counterinsurgency-and-terrorism-policy/</guid>
      <description>Over the course of the last nine years the United States has attempted to implement a number of policies to combat terrorism, and to engage in a counter insurgency, the formal on a global scale, and the latter primarily in Iraq and Afghanistan. However, viewed in a broader historical context current policies represent a nearly 180 degree shift.
In the wake of 9/11 there was a potential for a passive jurisdictional fight: the FBI has jurisdiction in domestic terrorism cases, NYPD had jurisdiction under local murder statutes, the National Transportation Safety Board has jurisdiction in the event of an accident, and while the Department of Defense and intelligence apparatus formally have no jurisdiction any international response is within their purview.</description>
    </item>
    
    <item>
      <title>Afghani Elections</title>
      <link>https://alexgaynor.net/2010/sep/21/afghani-elections/</link>
      <pubDate>Tue, 21 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/sep/21/afghani-elections/</guid>
      <description>The following is in response to an Associated Press article today.
One of the long stated purposes of the United State invasion, and subsequent occupation of Afghanistan has been to unseat the Taliban government, and to replace it with a democracy. In 2004 Afghanistan first held public elections, following the United States invasion, to replace the transitional government, led by Hamid Karzai. Since then Karzai has been president of Afghanistan. He was reelected in 2009, amidst reports of low voter turnout, ballot stuffing, intimidation, and other forms of election fraud.</description>
    </item>
    
    <item>
      <title>django-taggit 0.9 Released</title>
      <link>https://alexgaynor.net/2010/sep/21/django-taggit-09-released/</link>
      <pubDate>Tue, 21 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/sep/21/django-taggit-09-released/</guid>
      <description>It&amp;rsquo;s been a long time coming, since taggit 0.8 was released in June, however 0.9 is finally here, and it brings a ton of cool bug fixes, improvements, and cleanups. If you don&amp;rsquo;t already know, django-taggit is an application for django to make tagging simple and awesome. The biggest changes in this release are:
 The addition of a bunch of locales. Support for custom tag models. Moving taggit.contrib.suggest into an external package.</description>
    </item>
    
    <item>
      <title>Political Religion</title>
      <link>https://alexgaynor.net/2010/sep/20/political-religion/</link>
      <pubDate>Mon, 20 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/sep/20/political-religion/</guid>
      <description>For the vast majority of human history religion has been a centerpiece of any government, the notion of a separation between church and state is a relatively recent notion, by and large dating back to Thomas Jefferson (ignoring Jesus of Nazareth&amp;rsquo;s dictum to, &amp;ldquo;render unto Caesar that which is Caeser&amp;rsquo;s and unto God that which is god&amp;rsquo;s&amp;rdquo;, which was mostly ignored for the two millennium that followed). However, recently this notion has been almost completely rejected by both radical American conservatives, and fanatic Muslims, an exceptionally odd parallel.</description>
    </item>
    
    <item>
      <title>Democracy in Colonial Areas</title>
      <link>https://alexgaynor.net/2010/sep/14/democracy-colonial-areas/</link>
      <pubDate>Tue, 14 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/sep/14/democracy-colonial-areas/</guid>
      <description>Throughout the second millennium one of the defining realities of international relations was colonialism. European powers did everything they could do spread their influence around the globe, leading to realities like, &amp;ldquo;the sun never set on the British empire&amp;rdquo;. It was through such colonies that the United States came to being, becoming the world&amp;rsquo;s first modern democracy. As many other colonies divorced themselves from their parent nations some adopted democratic governments, however others merely moved themselves to autocratic rule by natives.</description>
    </item>
    
    <item>
      <title>Upcoming Content</title>
      <link>https://alexgaynor.net/2010/sep/14/upcoming-content/</link>
      <pubDate>Tue, 14 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/sep/14/upcoming-content/</guid>
      <description>This semester I am taking a course titled, &amp;ldquo;War in Afghanistan&amp;rdquo;. One of the assignments for this course is to write bi-weekly blog posts about the course content. Out of convenience these will be living here.</description>
    </item>
    
    <item>
      <title>DjangoCon 2010 Slides</title>
      <link>https://alexgaynor.net/2010/sep/13/djangocon-2010-slides/</link>
      <pubDate>Mon, 13 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/sep/13/djangocon-2010-slides/</guid>
      <description>DjangoCon 2010 was a total blast this year, and deserves a full recap, however for now I only have the time to post the slides from my talk on &amp;ldquo;Rethinking the Reusable Application Paradigm&amp;rdquo;, the video has also been uploaded. Enjoy.</description>
    </item>
    
    <item>
      <title>Education Slides </title>
      <link>https://alexgaynor.net/2010/aug/16/education-slides/</link>
      <pubDate>Mon, 16 Aug 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/aug/16/education-slides/</guid>
      <description>This past weekend I attended a symposium on authentic learning, in Santa Barbara, California. I gave a talk there about Open Source, and how we emulate the practices of a learning community (as often seen in colleges and universities) and whether the pedagogal practices we engange in (to help get new contributors started, and hopefully guide them to becoming committers) are applicable to other fields. Unfortunately the talk wasn&amp;rsquo;t recorded, however my slides are available online, there is also an accompanying paper that will be available in the future.</description>
    </item>
    
    <item>
      <title>PyOhio Slides</title>
      <link>https://alexgaynor.net/2010/aug/02/pyohio-slides/</link>
      <pubDate>Mon, 02 Aug 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/aug/02/pyohio-slides/</guid>
      <description>I&amp;rsquo;ve (finally) uploaded the slides from my PyOhio talk (I gave a similar talk at ChiPy). You can get them right here, I&amp;rsquo;ll be putting all my slides on Scribd from here on out, they were much easier to upload to than SlideShare, plus HTML5 is awesome!</description>
    </item>
    
    <item>
      <title>Testing Utilities in Django</title>
      <link>https://alexgaynor.net/2010/jul/06/testing-utilities-django/</link>
      <pubDate>Tue, 06 Jul 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/jul/06/testing-utilities-django/</guid>
      <description>Lately I&amp;rsquo;ve had the opportunity to do some test-driven development with Django, which a) is awesome, I love testing, and b) means I&amp;rsquo;ve been working up a box full of testing utilities, and I figured I&amp;rsquo;d share them.
Convenient get() and post() methods If you&amp;rsquo;ve done testing of views with Django you probably have some tests that look like:
def test_my_view(self): response = self.client.get(reverse(&amp;#34;my_url&amp;#34;, kwargs={&amp;#34;pk&amp;#34;: 1})) response = self.client.post(reverse(&amp;#34;my_url&amp;#34;, kwargs={&amp;#34;pk&amp;#34;: 1}), { &amp;#34;key&amp;#34;: &amp;#34;value&amp;#34;, }) This was a tad too verbose for my tastes so I wrote:</description>
    </item>
    
    <item>
      <title>MultiMethods for Python </title>
      <link>https://alexgaynor.net/2010/jun/26/multimethods-python/</link>
      <pubDate>Sat, 26 Jun 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/jun/26/multimethods-python/</guid>
      <description>Every once and a while the topic of multimethods (also known as generic dispatch) comes up in the Python world (see here, and here, here too, and finally here, and probably others). For those of you who aren&amp;rsquo;t familiar with the concept, the idea is that you declare a bunch of functions with the same name, but that take different arguments and the language routes your calls to that function to the correct implementation, based on what types you&amp;rsquo;re calling it with.</description>
    </item>
    
    <item>
      <title>Hey, could someone write this app for me </title>
      <link>https://alexgaynor.net/2010/jun/08/hey-could-someone-write-app-me/</link>
      <pubDate>Tue, 08 Jun 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/jun/08/hey-could-someone-write-app-me/</guid>
      <description>While doing some work today I realized that generating fixtures in Django is way too much of a pain in the ass, and I suspect it&amp;rsquo;s a pain in the ass for a lot of other people as well. I also came up with an API I&amp;rsquo;d kind of like to see for it, unfortunately I don&amp;rsquo;t really have the time to write the whole thing, however I&amp;rsquo;m hoping someone else does.</description>
    </item>
    
    <item>
      <title>DjangoCon.eu slides</title>
      <link>https://alexgaynor.net/2010/may/24/djangoconeu-slides/</link>
      <pubDate>Mon, 24 May 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/may/24/djangoconeu-slides/</guid>
      <description>I just finished giving my talk at DjangoCon.eu on Django and NoSQL (also the topic of my Google Summer of Code project). You can get the slides over at slideshare. My slides from my lightning talk on django-templatetag-sugar are also up on slideshare.</description>
    </item>
    
    <item>
      <title>PyPy is the Future of Python </title>
      <link>https://alexgaynor.net/2010/may/15/pypy-future-python/</link>
      <pubDate>Sat, 15 May 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/may/15/pypy-future-python/</guid>
      <description>Currently the most common implementation of Python is known as CPython, and it&amp;rsquo;s the version of Python you get at python.org, probably 99.9% of Python developers are using it. However, I think over the next couple of years we&amp;rsquo;re going to see a move away from this towards PyPy, Python written in Python. This is going to happen because PyPy offers better speed, more flexibility, and is a better platform for Python&amp;rsquo;s growth, and the most important thing is you can make this transition happen.</description>
    </item>
    
    <item>
      <title>A Tour of the django-taggit Internals </title>
      <link>https://alexgaynor.net/2010/may/09/tour-django-taggit-internals/</link>
      <pubDate>Sun, 09 May 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/may/09/tour-django-taggit-internals/</guid>
      <description>In a previous post I talked about a cool new customization API that django-taggit has. Now I&amp;rsquo;m going to dive into the internals.
The public API is almost exclusively exposed via a class named TaggableManager, you attach one of these to your model and it has some cool tagging APIs. This class basically masquerades as ManyToManyField, this is how it gets cool things like filtering and forms automatically. If you look at its definition you&amp;rsquo;ll see it has a bunch of attributes that it never actually uses, basically all of these act to emulate the Field interface.</description>
    </item>
    
    <item>
      <title>Why Utilitarianism Fails </title>
      <link>https://alexgaynor.net/2010/may/06/why-utilitarianism-fails/</link>
      <pubDate>Thu, 06 May 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/may/06/why-utilitarianism-fails/</guid>
      <description>This semester I&amp;rsquo;ve been taking a course in ethics, and while it hasn&amp;rsquo;t changed my perspective on any issues, it has allowed me to form some opinions about ethical systems. In particular, I&amp;rsquo;ve found that utilitarianism is an awful ethical system, with almost no merit. The major problems with it being that it is conditional, and that it&amp;rsquo;s impossible to attempt to apply.
The first problem with utilitarianism is that it is conditional.</description>
    </item>
    
    <item>
      <title>Cool New django-taggit API</title>
      <link>https://alexgaynor.net/2010/may/04/cool-new-django-taggit-api/</link>
      <pubDate>Tue, 04 May 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/may/04/cool-new-django-taggit-api/</guid>
      <description>A little while ago I wrote about some of the issues with the reusable application paradigm in Django. Yesterday Carl Meyer pinged me about an issue in django-taggit, it uses an IntegerField for the GenericForeignKey, which is great. Except for when you have a model with a CharField, TextField, or anything else for a primary key. The easy solution is to change the GenericForeignKey to be something else. But that&amp;rsquo;s lame, a pain in the ass, and a hack (more of a hack than a GenericForeignKey in the first place).</description>
    </item>
    
    <item>
      <title>Making Django and PyPy Play Nice (Part 1) </title>
      <link>https://alexgaynor.net/2010/apr/16/making-django-and-pypy-play-nice-part-1/</link>
      <pubDate>Fri, 16 Apr 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/apr/16/making-django-and-pypy-play-nice-part-1/</guid>
      <description>If you track Django&amp;rsquo;s commits aggressivly (ok so just me&amp;hellip;), you may have noticed that there have been a number of commits to improve the compatibility of Django and PyPy in the last couple of days. In the run up to Django 1.0 there were a ton of commits to make sure Django didn&amp;rsquo;t have too many assumptions that it was running on CPython, and that it could work with systems like Jython and PyPy.</description>
    </item>
    
    <item>
      <title>Designer Developer Relations </title>
      <link>https://alexgaynor.net/2010/mar/29/designer-developer-relations/</link>
      <pubDate>Mon, 29 Mar 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/mar/29/designer-developer-relations/</guid>
      <description>Lately I&amp;rsquo;ve been working with quite a few designers so I&amp;rsquo;ve been thinking about what exactly constitutes the ideal working relationship. Here are some of the models I&amp;rsquo;ve seen, in order of best to worst.
Best The ideal relationship would be I write a view function, let the designer know what template they need to write, and what context is available, then they can ask me if they need any extra logic stuff available.</description>
    </item>
    
    <item>
      <title>Towards Application Objects in Django </title>
      <link>https://alexgaynor.net/2010/mar/28/towards-application-objects-django/</link>
      <pubDate>Sun, 28 Mar 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/mar/28/towards-application-objects-django/</guid>
      <description>Django&amp;rsquo;s application paradigm (and the accompanying reusable application environment) have served it exceptionally well, however there are a few well known problems with it. Chief among these is pain in extendability (as exemplified by the User model), and abuse of GenericForeignKeys where a true ForeignKey would suffice (in the name of being generic), there are also smaller issues, such as wanting to install the same application multiple times, or having applications with the same &amp;ldquo;label&amp;rdquo; (in Django parlance this means the path.</description>
    </item>
    
    <item>
      <title>Languages Don&#39;t Have Speeds, Or Do They? </title>
      <link>https://alexgaynor.net/2010/mar/15/languages-dont-have-speeds-or-do-they/</link>
      <pubDate>Mon, 15 Mar 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/mar/15/languages-dont-have-speeds-or-do-they/</guid>
      <description>Everyone knows languages don&amp;rsquo;t have speeds, implementations do. Python isn&amp;rsquo;t slow; CPython is. Javascript isn&amp;rsquo;t fast; V8, Squirrelfish, and Tracemonkey are. But what if a language was designed in such a way that it appeared that it was impossible to be implemented efficiently? Would it be fair to say that language is slow, or would we still have to speak in terms of implementations? For a long time I followed the conventional wisdom, that languages didn&amp;rsquo;t have speeds, but lately I&amp;rsquo;ve come to believe that we can learn something by thinking about what the limits on how fast a language could possibly be, given a perfect implementation.</description>
    </item>
    
    <item>
      <title>PyCon Roundup - Days 2-4 </title>
      <link>https://alexgaynor.net/2010/mar/08/pycon-roundup-days-2-4/</link>
      <pubDate>Mon, 08 Mar 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/mar/08/pycon-roundup-days-2-4/</guid>
      <description>As I said in my last post PyCon was completely and utterly awesome, but it was also a bit of a blur. Here&amp;rsquo;s my attempt at summarizing everything that happened during the conference itself.
Day 2 Day 2 (the first day of the conference itself) started out with Guido&amp;rsquo;s keynote. He did something rather unorthodox, instead of delivering a formal talk he just took audience questions via Twitter, starting out using Twitterfall, but it was a tad slow so Jacob Kaplan-Moss switched it out for the PyCon Live Stream that Eric Florenzano, Brian Rosner, and I built, switch was very awesome (seeing your creation on four projectors in front of an audience is a pretty good ego boost).</description>
    </item>
    
    <item>
      <title>PyCon Roundup - Days 0 and 1 </title>
      <link>https://alexgaynor.net/2010/feb/26/pycon-roundup-days-0-and-1/</link>
      <pubDate>Fri, 26 Feb 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/feb/26/pycon-roundup-days-0-and-1/</guid>
      <description>This year&amp;rsquo;s PyCon was completely and utterly awesome, to the point where anything I point in writing won&amp;rsquo;t do it justice. But I&amp;rsquo;m going to try to anyways.
Day 0 Day 0 was Wednesday, I got in pretty late and didn&amp;rsquo;t do much of anything besides meet up with people in the hotel lobby for an hour or two. Still, it was good to be able to catch up with people, and put some faces to people I knew exclusively via the internet.</description>
    </item>
    
    <item>
      <title>Committer Models of Unladen Swallow, PyPy, and Django </title>
      <link>https://alexgaynor.net/2010/feb/25/committer-models-unladen-swallow-pypy-and-django/</link>
      <pubDate>Thu, 25 Feb 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/feb/25/committer-models-unladen-swallow-pypy-and-django/</guid>
      <description>During this year&amp;rsquo;s PyCon I became a committer on both PyPy and Unladen Swallow, in addition I&amp;rsquo;ve been a contributer to Django for quite a long time (as well as having commit privileges to my branch during the Google Summer of Code). One of the things I&amp;rsquo;ve observed is the very different models these projects have for granting commit privileges, and what the expectations and responsibilities are for committers.
Unladen Swallow Unladen Swallow is a Google funded branch of CPython focused on speed.</description>
    </item>
    
    <item>
      <title>Thoughts on HipHop PHP </title>
      <link>https://alexgaynor.net/2010/feb/02/thoughts-hiphop-php/</link>
      <pubDate>Tue, 02 Feb 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/feb/02/thoughts-hiphop-php/</guid>
      <description>This morning Facebook announced, as had been rumored for several weeks, a new, faster, implementation of PHP. To someone, like me, who loves dynamic languages and virtual machines this type of announcement is pretty exciting, after all, if they have some new techniques for optimizing dynamic languages they can almost certainly be ported to a language I care about. However, because of everything I&amp;rsquo;ve read (and learned about PHP, the language) since the announcement I&amp;rsquo;m not particularly excited about HipHop.</description>
    </item>
    
    <item>
      <title>Why Open Source Works </title>
      <link>https://alexgaynor.net/2010/jan/27/why-open-source-works/</link>
      <pubDate>Wed, 27 Jan 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/jan/27/why-open-source-works/</guid>
      <description>Open source works for a lot of reasons, but there is one that stands out. Open source is basically an application of democracy to a programming community, in fact it&amp;rsquo;s the most perfect implementation of democracy yet.
The central idea of a democracy is that the governing party draws it&amp;rsquo;s authority from the willing consent of the governed. In most modern democracies this is more or less true, but not exactly.</description>
    </item>
    
    <item>
      <title>I Have Talent</title>
      <link>https://alexgaynor.net/2010/jan/15/i-have-talent/</link>
      <pubDate>Fri, 15 Jan 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/jan/15/i-have-talent/</guid>
      <description>I read a blog post the other day titled &amp;ldquo;I Have No Talent&amp;rdquo;, and I found it to be pretty interesting, and what the author says probably resonates with a lot of people. But not with me. I disagree with the article on a basic premises, that perseverance is less of an innate ability than talent.
If you read the post in question, the author argues that he doesn&amp;rsquo;t have any innate ability to program, or use Ruby, but he does have a good work ethic, and this makes it possible for him to still get stuff done, as long as he&amp;rsquo;s still willing to put in the time.</description>
    </item>
    
    <item>
      <title>Dive into Python 3 Review </title>
      <link>https://alexgaynor.net/2010/jan/12/dive-python-3-review/</link>
      <pubDate>Tue, 12 Jan 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/jan/12/dive-python-3-review/</guid>
      <description>Disclosure: I received a free review copy of Dive into Python 3 from Apress.
Unlike a ton of people I know in the Python world, my experience in learning Python didn&amp;rsquo;t include the original Dive into Python at all, in fact I didn&amp;rsquo;t encounter it until quite a while later when I was teaching a friend Python and I was looking for example exercises. Since Dive into Python is really a book for people who don&amp;rsquo;t know Python a lot of my views on it are based on how helpful I think it would have been while teaching my friend, since it&amp;rsquo;s pretty difficult to imagine myself not knowing Python as I do.</description>
    </item>
    
    <item>
      <title>Hot Django on WSGI Action (announcing django-wsgi)</title>
      <link>https://alexgaynor.net/2010/jan/11/hot-django-wsgi-action-announcing-django-wsgi/</link>
      <pubDate>Mon, 11 Jan 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/jan/11/hot-django-wsgi-action-announcing-django-wsgi/</guid>
      <description>For a long time it&amp;rsquo;s been possible to deploy a Django project under a WSGI server, and in the run up to Django&amp;rsquo;s 1.0 release a number of bugs were fixed to make Django&amp;rsquo;s WSGI handler as compliant to the standard as possible. However, Django&amp;rsquo;s support for interacting with the world of WSGI application, middleware, and frameworks has been less than stellar. However, I recently got inspired to improve this situation.</description>
    </item>
    
    <item>
      <title>A New Home</title>
      <link>https://alexgaynor.net/2010/jan/08/new-home/</link>
      <pubDate>Fri, 08 Jan 2010 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2010/jan/08/new-home/</guid>
      <description>Welcome to the new home of my blog! I&amp;rsquo;ve finally gotten around to setting up everything for myself, no more Blogspot (not that they weren&amp;rsquo;t gracious hosts). This blog runs a custom blogging engine built on Django, with django-taggit for tagging, and Disqus for comments. Hosting is graciously provided by the Steward of Gondor (Brian Rosner). Mike Malone has given me the domain (you can find the remnants of this domain&amp;rsquo;s former glory here).</description>
    </item>
    
    <item>
      <title>A few thoughts on education</title>
      <link>https://alexgaynor.net/2009/dec/02/a-few-thoughts-on-education/</link>
      <pubDate>Wed, 02 Dec 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/dec/02/a-few-thoughts-on-education/</guid>
      <description>Lately I&amp;rsquo;ve been thinking quite a lot about education, both my own and in general. I ended up writing quite a bit about it. You can find all my thoughts here (PDF warning). I stuck it in a PDF because I think it&amp;rsquo;s a more canonical form. I&amp;rsquo;m interested in hearing any thoughts people have, both about what I wrote and about education.</description>
    </item>
    
    <item>
      <title>A month in review </title>
      <link>https://alexgaynor.net/2009/dec/01/month-review-2/</link>
      <pubDate>Tue, 01 Dec 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/dec/01/month-review-2/</guid>
      <description>I&amp;rsquo;ve now been blogging for 30 days in a row, so tonight is just going to be a simple post to finish the month of. First of all, WOW, another month of blogging every day completed. This month was great fun, and I managaged to keep the bullshit filler posts to a minimum (3 or 4 by my count). I also finished the month with 42700 total hits (easily a record), including hitting reddit and Hacker News several times.</description>
    </item>
    
    <item>
      <title>You Built a Metaclass for *what*?</title>
      <link>https://alexgaynor.net/2009/nov/30/you-built-a-metaclass-for-what/</link>
      <pubDate>Mon, 30 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/30/you-built-a-metaclass-for-what/</guid>
      <description>Recently I had a bit of an interesting problem, I needed to define a way to represent a C++ API in Python. So, I figured the best way to represent that was one class in Python for each class in C++, with a functions dictionary to track each of the methods on each class. Seems simple enough right, do something like this:
class String(object): functions = { &amp;#34;size&amp;#34;: Function(Integer, []), } We&amp;rsquo;ve got a String class with a functions dictionary that maps method names to Function objects.</description>
    </item>
    
    <item>
      <title>Getting Started with Testing in Django</title>
      <link>https://alexgaynor.net/2009/nov/29/getting-started-with-testing-in-django/</link>
      <pubDate>Sun, 29 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/29/getting-started-with-testing-in-django/</guid>
      <description>Following yesterday&amp;rsquo;s post another hotly requested topic was testing in Django. Today I wanted to give a simple overview on how to get started writing tests for your Django applications. Since Django 1.1, Django has automatically provided a tests.py file when you create a new application, that&amp;rsquo;s where we&amp;rsquo;ll start.
For me the first thing I want to test with my applications is, &amp;ldquo;Do the views work?&amp;rdquo;. This makes sense, the views are what the user sees, they need to at least be in a working state (200 OK response) before anything else can happen (business logic).</description>
    </item>
    
    <item>
      <title>Django and Python 3</title>
      <link>https://alexgaynor.net/2009/nov/28/django-and-python-3/</link>
      <pubDate>Sat, 28 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/28/django-and-python-3/</guid>
      <description>Today I&amp;rsquo;m starting off doing some of the posts people want to see, and the number one item on that list is Django and Python 3. Python 3 has been out for about a year at this point, and so far Django hasn&amp;rsquo;t really started to move towards it (at least at a first glance). However, Django has already begun the long process towards moving to Python 3, this post is going to recap exactly what Django&amp;rsquo;s migration strategy is (most of this post is a recap of a message James Bennett sent to the django-developers mailing list after the 1.</description>
    </item>
    
    <item>
      <title>Why Meta.using was removed</title>
      <link>https://alexgaynor.net/2009/nov/27/why-metausing-was-removed/</link>
      <pubDate>Fri, 27 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/27/why-metausing-was-removed/</guid>
      <description>Recently Russell Keith-Magee and I decided that the Meta.using option needed to be removed from the multiple-db work on Django, and so we did. Yesterday someone tweeted that this change caught them off guard, so I wanted to provide a bit of explanation as to why we made that change.
The first thing to note is that Meta.using was very good for one specific use case, horizontal partitioning by model. Meta.</description>
    </item>
    
    <item>
      <title>Just a Small Update</title>
      <link>https://alexgaynor.net/2009/nov/26/just-a-small-update/</link>
      <pubDate>Thu, 26 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/26/just-a-small-update/</guid>
      <description>Unfortunately, I don&amp;rsquo;t have an interesting, contentful post today. Just a small update about this blog instead. I now have a small widget on the right hand side where you can enter topics you&amp;rsquo;d like to hear about. I don&amp;rsquo;t always have a good idea of what readers are interested in, and far too often I reject blog post ideas because I think either, &amp;ldquo;no one cares about that&amp;rdquo; or &amp;ldquo;everyone always knows that&amp;rdquo; so hopefully this will be both a good way for me to write interesting content that people want to read about, as well as a good way for me to overcome any writers block.</description>
    </item>
    
    <item>
      <title>Final Review of Python Essential Reference</title>
      <link>https://alexgaynor.net/2009/nov/25/final-review-of-python-essential-reference/</link>
      <pubDate>Wed, 25 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/25/final-review-of-python-essential-reference/</guid>
      <description>Disclosure: I received a free review copy of the book.
Today I finished reading the Python Essential Reference and I wanted to share my final thoughts on the book. I&amp;rsquo;ll start by saying I still agree with everything I wrote in my initial review, specifically that it&amp;rsquo;s both a great resource as well as a good way to find out what you don&amp;rsquo;t already know. Reading the second half of the book there were a few things that really exemplified this for me.</description>
    </item>
    
    <item>
      <title>Filing a Good Ticket</title>
      <link>https://alexgaynor.net/2009/nov/24/filing-a-good-ticket/</link>
      <pubDate>Tue, 24 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/24/filing-a-good-ticket/</guid>
      <description>I read just about every single ticket that&amp;rsquo;s filed in Django&amp;rsquo;s trac, and at this point I&amp;rsquo;e gotten a pretty good sense of what (subjectively) makes a useful ticket. Specifically there are a few things that can make your ticket no better than spam, and a few that can instantly bump your ticket to the top of my &amp;ldquo;TODO&amp;rdquo; list. Hopefully, these will be helpful in both filing ticket&amp;rsquo;s for Django as well as other open source projects.</description>
    </item>
    
    <item>
      <title>Using PLY for Parsing Without Using it for Lexing</title>
      <link>https://alexgaynor.net/2009/nov/23/using-ply-for-parsing-without-using-it-for-lexing/</link>
      <pubDate>Mon, 23 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/23/using-ply-for-parsing-without-using-it-for-lexing/</guid>
      <description>Over the past week or so I&amp;rsquo;ve been struggling with attempting to write my own parser (or parser generator) by hand. A few days ago I finally decided to give up on this notion (after all the parser isn&amp;rsquo;t my end goal) as it was draining my time from the interesting work to be done. However, I wanted to keep my existing lexer. I wrote the lexer by hand in the method I described in a previous post, it&amp;rsquo;s fast, easy to read, and I rather like my handiwork, so I wanted to keep it if possible.</description>
    </item>
    
    <item>
      <title>A Bit of Benchmarking</title>
      <link>https://alexgaynor.net/2009/nov/22/a-bit-of-benchmarking/</link>
      <pubDate>Sun, 22 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/22/a-bit-of-benchmarking/</guid>
      <description>PyPy recently posted some interesting benchmarks from the computer language shootout, and in my last post about Unladen Swallow I described a patch that would hopefully be landing soon. I decided it would be interesting to benchmarks something with this patch. For this I used James Tauber&amp;rsquo;s Mandelbulb application, at both 100x100 and 200x200. I tested CPython, Unladen Swallow Trunk, Unladen Swallow Trunk with the patch, and a recent PyPy trunk (compiled with the JIT).</description>
    </item>
    
    <item>
      <title>Things College Taught me that the &#34;Real World&#34; Didn&#39;t</title>
      <link>https://alexgaynor.net/2009/nov/21/things-college-taught-me-that-the-real-world-didnt/</link>
      <pubDate>Sat, 21 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/21/things-college-taught-me-that-the-real-world-didnt/</guid>
      <description>A while ago Eric Holscher blogged about things he didn&amp;rsquo;t learn in college. I&amp;rsquo;m going to take a different spin on it, looking at both things that I did learn in school that I wouldn&amp;rsquo;t have learned else where (henceforth defined as my job, or open source programming), as well as thinks I learned else where instead of at college.
Things I learned in college:  Big O notation, and algorithm analysis.</description>
    </item>
    
    <item>
      <title>Announcing django-admin-histograms</title>
      <link>https://alexgaynor.net/2009/nov/19/announcing-django-admin-histograms/</link>
      <pubDate>Thu, 19 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/19/announcing-django-admin-histograms/</guid>
      <description>This is just a quick post because it&amp;rsquo;s already past midnight here. Last week I realized some potentially useful code that I extracted from the DjangoDose and typewar codebases. Basically this code let&amp;rsquo;s you get simple histogram reports for models in the admin, grouped by a date field. After I released it David Cramer did some work to make the code slightly more flexible, and to provide a generic templatetag for creating these histograms anywhere.</description>
    </item>
    
    <item>
      <title>Another Pair of Unladen Swallow Optimizations</title>
      <link>https://alexgaynor.net/2009/nov/19/another-pair-of-unladen-swallow-optimizations/</link>
      <pubDate>Thu, 19 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/19/another-pair-of-unladen-swallow-optimizations/</guid>
      <description>Today a patch of mine was committed to Unladen Swallow. In the past weeks I&amp;rsquo;ve described some of the optimizations that have gone into Unladen Swallow, in specific I looked at removing the allocation of an argument tuple for C functions. One of the &amp;ldquo;on the horizon&amp;rdquo; things I mentioned was extending this to functions with a variable arity (that is the number of arguments they take can change). This has been implemented for functions that take a finite range of argument numbers (that is, they don&amp;rsquo;t take *args, they just have a few arguments with defaults).</description>
    </item>
    
    <item>
      <title>Writing a Lexer</title>
      <link>https://alexgaynor.net/2009/nov/17/writing-a-lexer/</link>
      <pubDate>Tue, 17 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/17/writing-a-lexer/</guid>
      <description>People who have been reading this blog since last year (good lord) may recall that once upon a time I did a short series of posts on lexing and parsing using PLY. Back then I was working on a language named Al. This past week or so I&amp;rsquo;ve started working on another personal project (not public yet) and I&amp;rsquo;ve once again had the need to lex things, but this time I wrote my lexer by hand, instead of using any sort of generator.</description>
    </item>
    
    <item>
      <title>My Next Blog</title>
      <link>https://alexgaynor.net/2009/nov/16/my-next-blog/</link>
      <pubDate>Mon, 16 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/16/my-next-blog/</guid>
      <description>I&amp;rsquo;ve been using this Blogspot powered blog for over a year now, and it is starting to get a little long in the tooth. Therefore I&amp;rsquo;ve been planning on moving to a new, shinny, blog of my own in the coming months. Specifically it&amp;rsquo;s going to be my goal to get myself 100% migrated over my winter break. Therefore I&amp;rsquo;ve started building myself a list of features I want:
 Able to migrate all my old posts.</description>
    </item>
    
    <item>
      <title>Initial Review: Python Essential Reference</title>
      <link>https://alexgaynor.net/2009/nov/15/initial-review-python-essential-reference/</link>
      <pubDate>Sun, 15 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/15/initial-review-python-essential-reference/</guid>
      <description>Disclosure: I received a free review copy of Python Essential Reference, Fourth Edition.
I&amp;rsquo;ve never really used reference material, I&amp;rsquo;ve always loved tutorials, howtos, and guides for learning things, but I&amp;rsquo;ve usually shunned reference material in favor of reading the source. Therefore, I didn&amp;rsquo;t think I&amp;rsquo;d have a huge use for this book. However, so far (I&amp;rsquo;ve read about half the book so far) I&amp;rsquo;ve found it to be an exceptional resource, and I definitely plan on keeping it on my bookshelf.</description>
    </item>
    
    <item>
      <title>Why jQuery shouldn&#39;t be in the admin</title>
      <link>https://alexgaynor.net/2009/nov/14/why-jquery-shouldnt-be-in-the-admin/</link>
      <pubDate>Sat, 14 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/14/why-jquery-shouldnt-be-in-the-admin/</guid>
      <description>This summer as a part of the Google Summer of Code program Zain Memon worked on improving the UI for Django&amp;rsquo;s admin, specifically he integrated jQuery for various interface improvements. I am opposed to including jQuery in Django&amp;rsquo;s admin, as far as I know I&amp;rsquo;m the only one. I should note that on a personal level I love jQuery, however I don&amp;rsquo;t think that means it should be included in Django proper.</description>
    </item>
    
    <item>
      <title>Syntax Matters</title>
      <link>https://alexgaynor.net/2009/nov/13/syntax-matters/</link>
      <pubDate>Fri, 13 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/13/syntax-matters/</guid>
      <description>Yesterday I wrote about why I wasn&amp;rsquo;t very interested in Go. Two of my three major complaints were about the syntax of Go, and based on the comments I got here and on Hacker News a lot of people didn&amp;rsquo;t seem to mind the syntax, or at least didn&amp;rsquo;t think it was worth talking about. However, the opposite is true, for me the syntax is among the single most important things about a programming language.</description>
    </item>
    
    <item>
      <title>Why I&#39;m not very excited about Go</title>
      <link>https://alexgaynor.net/2009/nov/12/why-im-not-very-excited-about-go/</link>
      <pubDate>Thu, 12 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/12/why-im-not-very-excited-about-go/</guid>
      <description>When I first heard Rob Pike and Ken Thompson had created a new programming language my first instinct is, &amp;ldquo;I&amp;rsquo;m sure it&amp;rsquo;ll be cool, these are brilliant guys!&amp;rdquo; Unfortunately that is not the case, mostly because I think they made some bad design choices, and because the &amp;ldquo;cool new things&amp;rdquo; aren&amp;rsquo;t actually that new, or cool.
The first major mistake was using a C derived syntax: braces and semicolons. I know some people don&amp;rsquo;t like significant whitespace, but if you aren&amp;rsquo;t properly indenting your code it&amp;rsquo;s already beyond the point of hopelessness.</description>
    </item>
    
    <item>
      <title>When Django Fails? (A response)</title>
      <link>https://alexgaynor.net/2009/nov/11/when-django-fails-a-response/</link>
      <pubDate>Wed, 11 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/11/when-django-fails-a-response/</guid>
      <description>I saw an article on reddit (or was in hacker news?) that asked the question: what happens when newbies make typos following the Rails tutorial, and how good of a job does Rails do at giving useful error messages? I decided it would be interesting to apply this same question to Django, and see what the results are. I didn&amp;rsquo;t have the time to review the entire Django tutorial, so instead I&amp;rsquo;m going to make the same mistakes the author of that article did and see what the results are, I&amp;rsquo;ve only done the first few where the analogs in Django were clear.</description>
    </item>
    
    <item>
      <title>The State of MultiDB (in Django)</title>
      <link>https://alexgaynor.net/2009/nov/10/the-state-of-multidb-in-django/</link>
      <pubDate>Tue, 10 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/10/the-state-of-multidb-in-django/</guid>
      <description>As you, the reader, may know this summer I worked for the Django Software Foundation via the Google Summer of Code program. My task was to implement multiple database support for Django. Assisting me in this task were my mentors Russell Keith-Magee and Nicolas Lara (you may recognize them as the people responsible for aggregates in Django). By the standards of the Google Summer of Code project my work was considered a success, however, it&amp;rsquo;s not yet merged into Django&amp;rsquo;s trunk, so I&amp;rsquo;m going to outline what happened, and what needs to happen before this work is considered complete.</description>
    </item>
    
    <item>
      <title>Software that deserves a thank you</title>
      <link>https://alexgaynor.net/2009/nov/09/software-that-deserves-a-thank-you/</link>
      <pubDate>Mon, 09 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/09/software-that-deserves-a-thank-you/</guid>
      <description>Today&amp;rsquo;s post was originally supposed to be about my work on multiple database support for Django, but I&amp;rsquo;m exceptionally tired so that&amp;rsquo;s been bumped to tomorrow, sorry. Instead I&amp;rsquo;m going to use today&amp;rsquo;s post to give a thank you to some software I use that doesn&amp;rsquo;t get enough press, and that surely deserves a thanks. I&amp;rsquo;m not going to be listing any libraries or programming languages just the desktop software I run day to day:</description>
    </item>
    
    <item>
      <title>Another Unladen Swallow Optimization</title>
      <link>https://alexgaynor.net/2009/nov/08/another-unladen-swallow-optimization/</link>
      <pubDate>Sun, 08 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/08/another-unladen-swallow-optimization/</guid>
      <description>This past week I described a few optimizations that the Unladen Swallow team have done in order to speed up CPython. In particular one of the optimizations I described was to emit direct calls to C functions that took either zero or one argument. This improves the speed of Python when calling functions like len() or repr(), who only take one argument. However, there are plenty of builtin functions that take a fixed number of arguments that is greater than one.</description>
    </item>
    
    <item>
      <title>My Workflow</title>
      <link>https://alexgaynor.net/2009/nov/07/my-workflow/</link>
      <pubDate>Sat, 07 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/07/my-workflow/</guid>
      <description>About a year ago I blogged about how I didn&amp;rsquo;t like easy_install, and I alluded to the fact that I didn&amp;rsquo;t really like any programming language specific package managers. I&amp;rsquo;m happy to say I&amp;rsquo;ve changed my tune quite drastically in the past 2 months. Since I started working with Eldarion I&amp;rsquo;ve dived head first into the pip and virtualenv system and I&amp;rsquo;m happy to say it works brilliantly. The nature of the work is that we have lots of different projects all at once, often using wildly different versions of packages in all sorts of incompatible ways.</description>
    </item>
    
    <item>
      <title>Towards a Better Template Tag Definition Syntax</title>
      <link>https://alexgaynor.net/2009/nov/06/towards-a-better-template-tag-definition-syntax/</link>
      <pubDate>Fri, 06 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/06/towards-a-better-template-tag-definition-syntax/</guid>
      <description>Eric Holscher has blogged a few times this month about various template tag definition syntax ideas. In particular he&amp;rsquo;s looked at a system based on Surlex (which is essentially an alternate syntax for certain parts of regular expressions), and a system based on keywords. I highly recommend giving his posts a read as they explain the ideas he&amp;rsquo;s looked at in far better detail than I could. However, I wasn&amp;rsquo;t particularly satisfied with either of these solution, I love Django&amp;rsquo;s use of regular expressions for URL resolving, however, for whatever reason I don&amp;rsquo;t really like the look of using regular expressions (or an alternate syntax like Surlex) for template tag parsing.</description>
    </item>
    
    <item>
      <title>The Pycon Program Committee and my PyCon Talk</title>
      <link>https://alexgaynor.net/2009/nov/05/the-pycon-program-committee-and-my-pycon-talk/</link>
      <pubDate>Thu, 05 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/05/the-pycon-program-committee-and-my-pycon-talk/</guid>
      <description>Last year I presented at a conference for the first time in my life at PyCon, I moderated a panel on ORMs and I enjoyed it a ton (and based on the feedback I&amp;rsquo;ve gotten at least a few people enjoyed attending it). Above and beyond that the two PyCons I&amp;rsquo;ve attended have both been amazing conferences, tons of awesome talks, great people to hang out with, and an awesome environment for maximizing both.</description>
    </item>
    
    <item>
      <title>Django&#39;s ManyToMany Refactoring</title>
      <link>https://alexgaynor.net/2009/nov/04/djangos-manytomany-refactoring/</link>
      <pubDate>Wed, 04 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/04/djangos-manytomany-refactoring/</guid>
      <description>If you follow Django&amp;rsquo;s development, or caught next week&amp;rsquo;s DjangoDose Tracking Trunk episode (what? that&amp;rsquo;s not how time flows you say? too bad) you&amp;rsquo;ve seen the recent ManyToManyField refactoring that Russell Keith-Magee committed. This refactoring was one of the results of my work as a Google Summer of Code student this summer. The aim of that work was to bring multiple database support to Django&amp;rsquo;s ORM, however, along the way I ran into refactor the way ManyToManyField&amp;rsquo;s were handled, the exact changes I made are the subject of tonight&amp;rsquo;s post.</description>
    </item>
    
    <item>
      <title>Diving into Unladen Swallow&#39;s Optimizations</title>
      <link>https://alexgaynor.net/2009/nov/03/diving-into-unladen-swallows-optimizations/</link>
      <pubDate>Tue, 03 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/03/diving-into-unladen-swallows-optimizations/</guid>
      <description>Yesterday I described the general architecture of Unladen Swallow, and I said that just by switching to a JIT compiler and removing the interpretation overhead Unladen Swallow was able to get a performance gain. However, that gain is nowhere near what the engineers at Google are hoping to accomplish, and as such they&amp;rsquo;ve been working on building various optimizations into their JIT. Here I&amp;rsquo;m going to describe two particularly interesting ones they implemented during the 3rd quarter (they&amp;rsquo;re doing quarterly releases).</description>
    </item>
    
    <item>
      <title>Introduction to Unladen Swallow</title>
      <link>https://alexgaynor.net/2009/nov/02/introduction-to-unladen-swallow/</link>
      <pubDate>Mon, 02 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/02/introduction-to-unladen-swallow/</guid>
      <description>Unless you&amp;rsquo;ve been living under a rock for the past year (or have zero interest in either Python or dynamic languages, it which case why are you here?) you&amp;rsquo;ve probably heard of Unladen Swallow. Unladen Swallow is a Google funded branch of the CPython interpreter, with a goal of making CPython significantly faster while retaining both API and ABI compatibility. In this post I&amp;rsquo;m going to try to explain what it is Unladen Swallow is doing to bring a new burst of speed to the Python world.</description>
    </item>
    
    <item>
      <title>Another month of blogging?</title>
      <link>https://alexgaynor.net/2009/nov/01/another-month-of-blogging/</link>
      <pubDate>Sun, 01 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/nov/01/another-month-of-blogging/</guid>
      <description>Last year I started this blog during the November, blog every day for a month month. This year I&amp;rsquo;m hoping to repeat the feat, blogging every single day this month. Today&amp;rsquo;s post is a bit light on content, but I&amp;rsquo;m hoping to give a preview of what I&amp;rsquo;m going to be blogging about. This month I&amp;rsquo;m hopping to blog about advanced Django techniques, Comet (and other HTTP push technology), and I&amp;rsquo;m probably going to be adding some more political content to the usual technical content of this blog.</description>
    </item>
    
    <item>
      <title>Optimising compilers are there so that you can be a better programmer</title>
      <link>https://alexgaynor.net/2009/oct/10/optimising-compilers-are-there-so-that-you-can-be-a-better-programmer/</link>
      <pubDate>Sat, 10 Oct 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/oct/10/optimising-compilers-are-there-so-that-you-can-be-a-better-programmer/</guid>
      <description>In a discussion on the Django developers mailing list I recently commented that the performance impact of having logging infrastructure, in the case where the user doesn&amp;rsquo;t want the logging, could essentially be disregarded because Unladen Swallow (and PyPy) are bringing us a proper optimising (Just in Time) compiler that would essentially remove that consideration. Shortly thereafter someone asked me if I really thought it was the job of the interpreter/compiler to make us not think about performance.</description>
    </item>
    
    <item>
      <title>Django-filter 0.5 released!</title>
      <link>https://alexgaynor.net/2009/aug/14/django-filter-05-released/</link>
      <pubDate>Fri, 14 Aug 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/aug/14/django-filter-05-released/</guid>
      <description>I&amp;rsquo;ve just tagged and uploaded Django-filter 0.5 to PyPi. The biggest change this release brings is that the package name has been changed from filter to django_filters in order to avoid conflicts with the Python builtin filter. Other changes included the addition of an initial argument on Filters, as well as the addition of an AllValuesFilter which is a ChoiceFilter who&amp;rsquo;s choices are any values currently in the DB for that field.</description>
    </item>
    
    <item>
      <title>pyvcs .2 released</title>
      <link>https://alexgaynor.net/2009/jul/12/pyvcs-2-released/</link>
      <pubDate>Sun, 12 Jul 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/jul/12/pyvcs-2-released/</guid>
      <description>Hot on the heels of our .1 release (it&amp;rsquo;s only been a week!) I&amp;rsquo;m pleased to announce the .2 release of pyvcs. This release brings with it lots of new goodies. Most prominent among these are the newly-added Subversion and Bazaar backends. There are also several bug fixes to the code browsing features of the Mercurial backend. This release can be found at:
 PyPi: http://pypi.python.org/pypi/pyvcs Github: http://github.com/alex/pyvcs/  If you find any bugs with this release please report them at:</description>
    </item>
    
    <item>
      <title>Announcing pyvcs, django-vcs, and piano-man</title>
      <link>https://alexgaynor.net/2009/jul/05/announcing-pyvcs-django-vcs-and-piano-man/</link>
      <pubDate>Sun, 05 Jul 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/jul/05/announcing-pyvcs-django-vcs-and-piano-man/</guid>
      <description>Justin Lilly and I have just released pyvcs, a lightweight abstraction layer on top of multiple version control systems, and django-vcs, a Django application leveraging pyvcs in order to provide a web interface to version control systems. At this point pyvcs exists exclusively to serve the needs of django-vcs, although it is separate and completely usable on its own. Django-vcs has a robust feature set, including listing recent commits, pretty diff rendering of commits, and code browsing.</description>
    </item>
    
    <item>
      <title>A response to &#34;Python sucks&#34;</title>
      <link>https://alexgaynor.net/2009/jun/04/a-response-to-python-sucks/</link>
      <pubDate>Thu, 04 Jun 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/jun/04/a-response-to-python-sucks/</guid>
      <description>I recently saw an article on Programming Reddit, titled, &amp;ldquo;Python sucks: Why Python is not my favourite programming language&amp;rdquo;. I personally like Python quite a lot (see my blog title), but I figured I might read an interesting critique, probably from a very different point of view from mine. Unfortunately that is the opposite of what I found. The post was, at best, a horribly misinformed inaccurate critique, and at worst an intentionally dishonest, misleading, farce.</description>
    </item>
    
    <item>
      <title>EuroDjangoCon 2009</title>
      <link>https://alexgaynor.net/2009/may/05/eurodjangocon-2009/</link>
      <pubDate>Tue, 05 May 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/may/05/eurodjangocon-2009/</guid>
      <description>EuroDjangoCon 2009 is still going strong, but I wanted to share the materials from my talk as quickly as possible. My slides are on Slide Share:
Forms, Getting Your Money&amp;#39;s WorthView more documents from Alex Gaynor.And the first examples code follows:
fromdjango.forms.utilimport ErrorListfromdjango.utils.datastructuresimport SortedDictdefmultiple_form_factory(form_classes, form_order=None): if form_order: form_classes = SortedDict([(prefix, form_classes[prefix]) for prefix in form_order]) else: form_classes = SortedDict(form_classes) return type(&#39;MultipleForm&#39;, (MultipleFormBase,), {&#39;form_classes&#39;: form_classes})classMultipleFormBase(object): def__init__(self, data=None, files=None, auto_id=&#39;id_%s&#39;, prefix=None, initial=None, error_class=ErrorList, label_suffix=&#39;:&#39;, empty_permitted=False): if prefix is None: prefix = &#39;&#39; self.</description>
    </item>
    
    <item>
      <title>Ajax Validation Aministrivia</title>
      <link>https://alexgaynor.net/2009/apr/16/ajax-validation-aministrivia/</link>
      <pubDate>Thu, 16 Apr 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/apr/16/ajax-validation-aministrivia/</guid>
      <description>Small administrative note, now that Github has it&amp;rsquo;s own issue tracker users wishing to report issues with django-ajax-validation can now do so on Github, instead of the old Google Code page. Django-filter users can also report issues on its Github page, in place of the former system of &amp;ldquo;message or email me&amp;rdquo;, which, though functional, wasn&amp;rsquo;t very convenient.</description>
    </item>
    
    <item>
      <title>ORM Panel Recap</title>
      <link>https://alexgaynor.net/2009/mar/30/orm-panel-recap/</link>
      <pubDate>Mon, 30 Mar 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/mar/30/orm-panel-recap/</guid>
      <description>Having now completed what I thought was a quite successful panel I thought it would be nice to do a review of some of the decisions I made, that some people had been asking about. For those who missed it you can find a live blog of the event by James Bennett at his blog, and a video should hopefully be going up sometime soon.
Why Google App Engine As Guido pointed out App Engine does not have an ORM, as App Engine doesn&amp;rsquo;t have a relational datastore.</description>
    </item>
    
    <item>
      <title>PyCon Wrapup</title>
      <link>https://alexgaynor.net/2009/mar/30/pycon-wrapup/</link>
      <pubDate>Mon, 30 Mar 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/mar/30/pycon-wrapup/</guid>
      <description>With PyCon now over for me(and the sprints just begining for those still there) I figured I&amp;rsquo;d recap it for those who couldn&amp;rsquo;t be there, and compare notes for those who were. I&amp;rsquo;ll be doing a separate post to cover my panel, since I have quite a brain dump there.
Day One We start off the morning with lightning talks, much better than last year due to the removal of so many sponsor talks(thanks Jacob), by now I&amp;rsquo;ve already met up with quite a few Django people.</description>
    </item>
    
    <item>
      <title>Google Moderator for PyCon ORM Panel</title>
      <link>https://alexgaynor.net/2009/mar/15/google-moderator-for-pycon-orm-panel/</link>
      <pubDate>Sun, 15 Mar 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/mar/15/google-moderator-for-pycon-orm-panel/</guid>
      <description>I&amp;rsquo;m going to be moderating a panel this year at PyCon between 5 of the Python ORMs(Django, SQLAlchemy, SQLObject, Google App Engine, and web2py). To make my job easier, and to make sure the most interesting questions are asked I&amp;rsquo;ve setup a Google Moderator page for the panel here. Go ahead and submit your questions, and moderate others to try to ensure we get the best questions possible, even if you can&amp;rsquo;t make it to PyCon(there will be a recording made I believe).</description>
    </item>
    
    <item>
      <title>Announcing django-filter</title>
      <link>https://alexgaynor.net/2009/feb/14/announcing-django-filter/</link>
      <pubDate>Sat, 14 Feb 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/feb/14/announcing-django-filter/</guid>
      <description>Django-filter is a reusable Django application I have been working on for a few weeks, individuals who follow me on Github may have noticed me working on it. Django-filter is basically an application that creates a generic interface for creating pages like the Django admin changelist page. It has support for defining vairous filters(including custom ones), filtering a queryset based on the user selections, and displaying an HTML form for the filter options.</description>
    </item>
    
    <item>
      <title>A Second Look at Inheritance and Polymorphism with Django</title>
      <link>https://alexgaynor.net/2009/feb/10/a-second-look-at-inheritance-and-polymorphism-with-django/</link>
      <pubDate>Tue, 10 Feb 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/feb/10/a-second-look-at-inheritance-and-polymorphism-with-django/</guid>
      <description>Previously I wrote about ways to handle polymorphism with inheritance in Django&amp;rsquo;s ORM in a way that didn&amp;rsquo;t require any changes to your model at all(besides adding in a mixin), today we&amp;rsquo;re going to look at a way to do this that is a little more invasive and involved, but also can provide much better performance. As we saw previously with no other information we could get the correct subclass for a given object in O(k) queries, where k is the number of subclasses.</description>
    </item>
    
    <item>
      <title>Building a Magic Manager</title>
      <link>https://alexgaynor.net/2009/jan/31/building-a-magic-manager/</link>
      <pubDate>Sat, 31 Jan 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/jan/31/building-a-magic-manager/</guid>
      <description>A very common pattern in Django is to create methods on a manager to abstract some usage of ones data. Some people take a second step and actually create a custom QuerySet subclass with these methods and have their manager proxy these methods to the QuerySet, this pattern is seen in Eric Florenzano&amp;rsquo;s Django From the Ground Up screencast. However, this requires a lot of repetition, it would be far less verbose if we could just define our methods once and have them available to us on both our managers and QuerySets.</description>
    </item>
    
    <item>
      <title>Django Ajax Validation 0.1.0 Released</title>
      <link>https://alexgaynor.net/2009/jan/24/django-ajax-validation-010-released/</link>
      <pubDate>Sat, 24 Jan 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/jan/24/django-ajax-validation-010-released/</guid>
      <description>I&amp;rsquo;ve just uploaded the first official release of Django Ajax Validation up to PyPi. You can get it there. For those that don&amp;rsquo;t know it is a reusable Django application that allows you to do JS based validation using you&amp;rsquo;re existing form definitions. Currently it only works using jQuery. If there are any problems please let me know.</description>
    </item>
    
    <item>
      <title>Optimizing a View</title>
      <link>https://alexgaynor.net/2009/jan/19/optimizing-a-view/</link>
      <pubDate>Mon, 19 Jan 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/jan/19/optimizing-a-view/</guid>
      <description>Lately I&amp;rsquo;ve been playing with a bit of a fun side project. I have about a year and half worth of my own chatlogs with friends(and 65,000 messages total) and I&amp;rsquo;ve been playing around with them to find interesting statistics. One facet of my communication with my friends is that we link each other lots of things, and we can always tell when someone is linking something that we&amp;rsquo;ve already seen.</description>
    </item>
    
    <item>
      <title>New Admin URLs</title>
      <link>https://alexgaynor.net/2009/jan/14/new-admin-urls/</link>
      <pubDate>Wed, 14 Jan 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/jan/14/new-admin-urls/</guid>
      <description>I&amp;rsquo;m very happy to announce that with revision 9739 of Django the admin now uses normal URL resolvers and its URLs can be reversed. This is a tremendous improvement over the previous ad hoc system and it gives users the distinct advantage of being able to reverse the admin&amp;rsquo;s URLs. However, in order to make this work a new feature went into the URL resolving system that any user can use in their own code.</description>
    </item>
    
    <item>
      <title>2008 and 2009</title>
      <link>https://alexgaynor.net/2009/jan/03/2008-and-2009/</link>
      <pubDate>Sat, 03 Jan 2009 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2009/jan/03/2008-and-2009/</guid>
      <description>Eric Florenzano recently wrote an excellent post titled, &amp;ldquo;2008 in Review &amp;amp; 2009 Goals&amp;rdquo;. I am now going to blantly steal his idea.
2008:
 Joined Twitter Voted for the first time Had a blast at PyCon Wrote a reusable Django application and open sourced it Learned git Got accepted at, and began studying Computer Science at RPI Wrote a blog post every day for 30 days in a row Started work on my programming language, Al Contributed heavily to Django Started a blog Proposed a panel for PyCon 2009 and was accepted  And probably quite a bit more.</description>
    </item>
    
    <item>
      <title>Building a Read Only Field in Django</title>
      <link>https://alexgaynor.net/2008/dec/28/building-a-read-only-field-in-django/</link>
      <pubDate>Sun, 28 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/dec/28/building-a-read-only-field-in-django/</guid>
      <description>One commonly requested feature in Django is to have a field on a form(or in the admin), that is read only. Such a thing is going may be a Django 1.1 feature for the admin, exclusively, since this is the level that it makes sense at, a form is by definition for inputing data, not displaying data. However, it is still possible to do this with Django now, and it doesn&amp;rsquo;t even take very much code.</description>
    </item>
    
    <item>
      <title>Building a Function Templatetag</title>
      <link>https://alexgaynor.net/2008/dec/25/building-a-function-templatetag/</link>
      <pubDate>Thu, 25 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/dec/25/building-a-function-templatetag/</guid>
      <description>One of the complaints often lobbied against Django&amp;rsquo;s templating system is that there is no way to create functions. This is intentional, Django&amp;rsquo;s template language is not meant to be a full programming language. However, if one wants to it is entirely possible to build a templatetag to allow a user to create, and call functions in the template language.
To get started we need to build a tag to create functions, first we need our parsing function:</description>
    </item>
    
    <item>
      <title>Many Thanks to Webfaction</title>
      <link>https://alexgaynor.net/2008/dec/25/many-thanks-to-webfaction/</link>
      <pubDate>Thu, 25 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/dec/25/many-thanks-to-webfaction/</guid>
      <description>One of my recent projects has been to build a website for someone so that they could put their portfolio online. Building the site with Django, was of course, a snap. However, I would like to take a moment to thank Webfaction for the painless deployment. It&amp;rsquo;s a small website, so shared hosting is perfect for it, and Webfaction made it a breeze. Setting up a PostgreSQL database was a snap.</description>
    </item>
    
    <item>
      <title>PyCon &#39;09, Here I come!</title>
      <link>https://alexgaynor.net/2008/dec/15/pycon-09-here-i-come/</link>
      <pubDate>Mon, 15 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/dec/15/pycon-09-here-i-come/</guid>
      <description>This past year I attended PyCon 2008 in Chicago, which was a tremendous conference. I had a chance to meet people I knew from the community, listen to some amazing talks, meet new people, and get to sprint. As a result of this tremendous experience I decided for this year to submit a talk proposal. I found out just a few minutes ago that my proposal has been accepted.
I proposed a panel on &amp;ldquo;Object Relational Mapper Philosophies and Design Decisions&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Playing with Polymorphism in Django</title>
      <link>https://alexgaynor.net/2008/dec/05/playing-with-polymorphism-in-django/</link>
      <pubDate>Fri, 05 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/dec/05/playing-with-polymorphism-in-django/</guid>
      <description>One of the most common requests of people using inheritance in Django, is to have the a queryset from the baseclass return instances of the derives model, instead of those of the baseclass, as you might see with polymorphism in other languages. This is a leaky abstraction of the fact that our Python classes are actually representing rows in separate tables in a database. Django itself doesn&amp;rsquo;t do this, because it would require expensive joins across all derived tables, which the user probably doesn&amp;rsquo;t want in all situations.</description>
    </item>
    
    <item>
      <title>A month in review</title>
      <link>https://alexgaynor.net/2008/dec/02/a-month-in-review/</link>
      <pubDate>Tue, 02 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/dec/02/a-month-in-review/</guid>
      <description>Today is the last day of blogging every day for a month. It was harder than I expected, but I ultimately made it, which also surprised me. For my last post(of the month) I figured I&amp;rsquo;d share some stats about the blog from the month.
 About 10k visitors and 13k page views My 3 post popular posts were &amp;ldquo;What Python learned from Economics&amp;rdquo;, &amp;ldquo;How the heck do Django Models Work&amp;rdquo;, and &amp;ldquo;A Timeline View in Django&amp;rdquo; My top 3 referers were reddit, ycombinator, and the Django project site.</description>
    </item>
    
    <item>
      <title>A Few More Thoughts on the Identity Mapper</title>
      <link>https://alexgaynor.net/2008/dec/01/a-few-more-thoughts-on-the-identity-mapper/</link>
      <pubDate>Mon, 01 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/dec/01/a-few-more-thoughts-on-the-identity-mapper/</guid>
      <description>It&amp;rsquo;s late, and I&amp;rsquo;ve my flight was delayed for several hours so today is going to be another quick post. With that note here are a few thoughts on the identity mapper:
 We can optimize it to actually execute fewer queries by having it run the query as usual, and then use the primary key to check the cache, else cache the instance we already have. As Doug points out in the comments, there are built in caching utilities in Django we should probably be taking advantage of.</description>
    </item>
    
    <item>
      <title>Fixing up our identity mapper</title>
      <link>https://alexgaynor.net/2008/dec/01/fixing-up-our-identity-mapper/</link>
      <pubDate>Mon, 01 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/dec/01/fixing-up-our-identity-mapper/</guid>
      <description>The past two days we&amp;rsquo;ve been looking at building an identity mapper in Django. Today we&amp;rsquo;re going to implement some of the improvements I mentioned yesterday.
The first improvement we&amp;rsquo;re going to do is it have it execute the query as usual and just cache the results, to prevent needing to execute additional queries. This means changing the iter method on our queryset class:
def __iter__(self): for obj in self.iterator(): try: yield get_from_cache(self.</description>
    </item>
    
    <item>
      <title>Building a simple identity map in Django</title>
      <link>https://alexgaynor.net/2008/nov/29/building-a-simple-identity-map-in-django/</link>
      <pubDate>Sat, 29 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/29/building-a-simple-identity-map-in-django/</guid>
      <description>In Django&amp;rsquo;s ticket tracker lies ticket 17, the second oldest open ticket, this proposes an optimisation to have instances of the same database object be represented by the same object in Python, essentially that means for this code:
a = Model.objects.get(pk=3) b = Model.objects.get(pk=3) a and b would be the same object at the memory level. This can represent a large optimisation in memory usage if you&amp;rsquo;re application has the potential to have duplicate objects(for example, related objects).</description>
    </item>
    
    <item>
      <title>Other ORM Goodies</title>
      <link>https://alexgaynor.net/2008/nov/29/other-orm-goodies/</link>
      <pubDate>Sat, 29 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/29/other-orm-goodies/</guid>
      <description>In addition to the aggregate work, the GSOC student had time to finish ticket 7210, which adds support for expressions to filter() and update(). This means you&amp;rsquo;ll be able to execute queries in the form of:
SELECT * FROM table WHERE height &amp;gt; width; or similar UPDATE queries. This has a syntax similar to that of Q objects, using a new F object. So the above query would look like:</description>
    </item>
    
    <item>
      <title>Some thoughts on Blogging</title>
      <link>https://alexgaynor.net/2008/nov/27/some-thoughts-on-blogging/</link>
      <pubDate>Thu, 27 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/27/some-thoughts-on-blogging/</guid>
      <description>As we come to the close of November, I thought I&amp;rsquo;d take a comment to reflect on blogging. For one, this is by far more writing than I&amp;rsquo;ve ever done. Also, who thought blog-everyday-month should be November, Thanksgiving at the end really makes it hard to finish strong. Right now I&amp;rsquo;m pretty brain dry, hopefully I&amp;rsquo;ll think of something good to finish off the month. For now I&amp;rsquo;m just trying to enjoy the long weekend.</description>
    </item>
    
    <item>
      <title>What aggregates are going to look like</title>
      <link>https://alexgaynor.net/2008/nov/27/what-aggregates-are-going-to-look-like/</link>
      <pubDate>Thu, 27 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/27/what-aggregates-are-going-to-look-like/</guid>
      <description>Prior to Django 1.0 there was a lot of discussion of what the syntax for doing aggregate queries would like. Eventually a syntax was more or less agreed upon, and over the summer Nicolas Lara implemented this for the Google Summer of Code project, mentored by Russell Keith-Magee. This feature is considered a blocker for Django 1.1, so I&amp;rsquo;m going to outline what the syntax for these aggregates will be.</description>
    </item>
    
    <item>
      <title>Home Sweet Home</title>
      <link>https://alexgaynor.net/2008/nov/26/home-sweet-home/</link>
      <pubDate>Wed, 26 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/26/home-sweet-home/</guid>
      <description>In the interest of keeping up with post-a-day, I figured at a minimum I&amp;rsquo;d have a post explaining why I didn&amp;rsquo;t have a real post for today. I just got home from college today for Thanksgiving, so I&amp;rsquo;ve been busy today, sorry :( .</description>
    </item>
    
    <item>
      <title>A timeline view in Django</title>
      <link>https://alexgaynor.net/2008/nov/24/a-timeline-view-in-django/</link>
      <pubDate>Mon, 24 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/24/a-timeline-view-in-django/</guid>
      <description>One thing a lot of people want to do in Django is to have a timeline view, that shows all the objects of a given set of models ordered by a common key. Unfortunately the Django ORM doesn&amp;rsquo;t have a way of representing this type of query. There are a few techniques people use to solve this. One is to have all of the models inherit from a common baseclass that stores all the common information, and has a method to get the actual object.</description>
    </item>
    
    <item>
      <title>A quick update</title>
      <link>https://alexgaynor.net/2008/nov/23/a-quick-update/</link>
      <pubDate>Sun, 23 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/23/a-quick-update/</guid>
      <description>I&amp;rsquo;ve now set up Al to be using GMP for all integers, and I&amp;rsquo;ll be doing the same for floats once they get implemented. I haven&amp;rsquo;t started benchmarking yet, but it can compile and calculate the factorial of 50000 pretty quickly, and in Python vanilla that would result in a RuntimeError due to a stack overflow, so it&amp;rsquo;s a good starting point. Sorry for such a short post, I&amp;rsquo;m pretty tired today.</description>
    </item>
    
    <item>
      <title>Thinking about netbooks</title>
      <link>https://alexgaynor.net/2008/nov/23/thinking-about-netbooks/</link>
      <pubDate>Sun, 23 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/23/thinking-about-netbooks/</guid>
      <description>At present I use a fairly powerful laptop as my all in one machine, it&amp;rsquo;s my development environment, it&amp;rsquo;s my gaming machine, and I use it for class. Before I came to college I used my desktop machine for everything. However, I&amp;rsquo;m beginning to think neither of these is the best solution. My laptop can do everything my desktop used to do, however it isn&amp;rsquo;t as a good at being super portable as a laptop could be, nor does it have the potential to be a powerhouse like a desktop machine can be.</description>
    </item>
    
    <item>
      <title>My Programming Language - Status Update</title>
      <link>https://alexgaynor.net/2008/nov/21/my-programming-language-status-update/</link>
      <pubDate>Fri, 21 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/21/my-programming-language-status-update/</guid>
      <description>Over the past few weeks I&amp;rsquo;ve been working on compiling my programming language. At present it works by translating the source into C++, and then you compile that with your compiler of choice. It&amp;rsquo;s garbage collected, using the excellent Boehm GC library. At present it can only compile a limited subset of what it can actually parse, or what the interpreter supports. As of today thought it can compile and run a factorial function, however it can&amp;rsquo;t calculate any factorial greater than 12, due to integer overflow issues.</description>
    </item>
    
    <item>
      <title>Why I don&#39;t use easy_install</title>
      <link>https://alexgaynor.net/2008/nov/20/why-i-dont-use-easy_install/</link>
      <pubDate>Thu, 20 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/20/why-i-dont-use-easy_install/</guid>
      <description>First things first, this post is not meant as a flame, nor should it indicate to you that you shouldn&amp;rsquo;t use it, unless of course you&amp;rsquo;re priorities are perfectly aligned with my own. That being said, here are the reasons why I don&amp;rsquo;t use easy_install, and how I&amp;rsquo;d fix them.
 No easy_uninstall. Zed mentioned this in his PyCon &amp;lsquo;08 lightning talk, and it&amp;rsquo;s still true. Yes I can simply remove these files, and yeah I could write a script to do it for me.</description>
    </item>
    
    <item>
      <title>Uncoupled code is good, but doesn&#39;t exist</title>
      <link>https://alexgaynor.net/2008/nov/19/uncoupled-code-is-good-but-doesnt-exist/</link>
      <pubDate>Wed, 19 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/19/uncoupled-code-is-good-but-doesnt-exist/</guid>
      <description>Code should try to be as decoupled from the code it depends as possible, I want me C++ to work with any compiler, I want my web framework to work with any ORM, I want my ORM to work with any database. While all of these are achievable goals, some of the decoupling people are searching for is simply not possible. At DjangoCon 2008 Mark Ramm made the argument that the Django community was too segregated from the Python community, both in terms of the community itself, and the code, Django for example doesn&amp;rsquo;t take enough advantage of WSGI level middlewear, and has and ORM unto itself.</description>
    </item>
    
    <item>
      <title>What Python learned from economics</title>
      <link>https://alexgaynor.net/2008/nov/18/what-python-learned-from-economics/</link>
      <pubDate>Tue, 18 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/18/what-python-learned-from-economics/</guid>
      <description>I find economics to be a fairly interesting subject, mind you I&amp;rsquo;m bored out of my mind about hearing about the stock markets, derivatives, and whatever else is on CNBC, but I find what guys like Steven Levitt and Steve E. Landsburg do to be fascinating. A lot of what they write about is why people do what they do, and how to incentivise people to do the right thing. Yesterday I was reading through David Goodger&amp;rsquo;s Code Like a Pythonista when I got to this portion:</description>
    </item>
    
    <item>
      <title>Running the Django Test Suite</title>
      <link>https://alexgaynor.net/2008/nov/17/running-the-django-test-suite/</link>
      <pubDate>Mon, 17 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/17/running-the-django-test-suite/</guid>
      <description>This question came up in IRC yesterday, so I figured I&amp;rsquo;d run through it today. Django has a very extensive test suite that tests all of the components of Django itself. If you&amp;rsquo;ve ever written a patch for Django you probably know that tests are a requirement, for both new features and bug fixes. I&amp;rsquo;m going to try to run down how to setup your own testing envrioment.
First you need to have Django installed somewhere, for now I&amp;rsquo;ll assume you have it in ~/django_src/.</description>
    </item>
    
    <item>
      <title>What I&#39;m excited about in Django 1.1</title>
      <link>https://alexgaynor.net/2008/nov/16/what-im-excited-about-in-django-11/</link>
      <pubDate>Sun, 16 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/16/what-im-excited-about-in-django-11/</guid>
      <description>This past week, Jacob Kaplan-Moss put together the list of all of the features proposed for Django 1.1, and began to solicit comments on them. This is going to be a list of features I&amp;rsquo;m excited about.
 Making admin URLs reversable. Currently the Django Admin uses a bit of a convulted scheme to route URLs. The proposal is to have them work using the current URL scheme. This is something I&amp;rsquo;ve been working on for a while, and hoping to see it to completion.</description>
    </item>
    
    <item>
      <title>Python Things</title>
      <link>https://alexgaynor.net/2008/nov/15/python-things/</link>
      <pubDate>Sat, 15 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/15/python-things/</guid>
      <description>I wasn&amp;rsquo;t really sure what to name today&amp;rsquo;s post, but it&amp;rsquo;s basically going to be nifty things you can do in Python, and general tips.
  SystemExit, sys.exit() raises SystemExit, if you actually want to keep going, you can just catch this exception, nothing special about it.
  iter(callable, terminal), basically if you use iter in this way, it will keep calling the callable until the callable returns terminal, than it beaks.</description>
    </item>
    
    <item>
      <title>And now for the disclaimer</title>
      <link>https://alexgaynor.net/2008/nov/14/and-now-for-the-disclaimer/</link>
      <pubDate>Fri, 14 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/14/and-now-for-the-disclaimer/</guid>
      <description>I&amp;rsquo;ve been discussing portions of how the Django internals work, and this is powerful knowledge for a Django user. However, it&amp;rsquo;s also internals, and unless they are documented internals are not guaranteed to continue to work. That doesn&amp;rsquo;t mean they break very frequently, they don&amp;rsquo;t, but you should be aware that it has no guarantee of compatibility going forward.
Having said that, I&amp;rsquo;ve already discussed ways you can use this to do powerful things by using these, and you&amp;rsquo;ve probably seen other ways to use these in your own code.</description>
    </item>
    
    <item>
      <title>Django Models - Digging a Little Deeper</title>
      <link>https://alexgaynor.net/2008/nov/13/django-models-digging-a-little-deeper/</link>
      <pubDate>Thu, 13 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/13/django-models-digging-a-little-deeper/</guid>
      <description>For those of you who read my last post on Django models you probably noticed that I skirted over a few details, specifically for quite a few items I said we, &amp;ldquo;added them to the new class&amp;rdquo;. But what exactly does that entail? Here I&amp;rsquo;m going to look at the add_to_class method that&amp;rsquo;s present on the ModelBase metaclass we look at earlier, and the contribute_to_class method that&amp;rsquo;s present on a number of classes throughout Django.</description>
    </item>
    
    <item>
      <title>What software do I use? </title>
      <link>https://alexgaynor.net/2008/nov/12/what-software-do-i-use/</link>
      <pubDate>Wed, 12 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/12/what-software-do-i-use/</guid>
      <description>Taking a page from Brain Rosner&amp;rsquo;s book, today I&amp;rsquo;m going to overview the software I use day to day. I&amp;rsquo;m only going to cover stuff I use under Ubuntu, I keep Windows XP on my system for gaming, but I&amp;rsquo;m not going to cover it here.
 Ubuntu, I&amp;rsquo;ve been using the current version, Intrepid Ibex, since Alpha 4, and I love it. You quite simply couldn&amp;rsquo;t get me to go back to Windows.</description>
    </item>
    
    <item>
      <title>Getting Started With PLY - Part 3</title>
      <link>https://alexgaynor.net/2008/nov/10/getting-started-ply-part-3/</link>
      <pubDate>Mon, 10 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/10/getting-started-ply-part-3/</guid>
      <description>As promised, today we&amp;rsquo;ll be looking at implementing additional arithmetic operations, dealing with order of operations, and adding variables to our languages, so without further ado, let&amp;rsquo;s jump into the code.
We can replace our old addition rule with this:
import operator def p_expression_arithmetic(p): &amp;#39;&amp;#39;&amp;#39; expression : expression PLUS expression | expression MINUS expression | expression TIMES expression | expression DIVIDE expression &amp;#39;&amp;#39;&amp;#39; OPS = { &amp;#39;+&amp;#39;: operator.add, &amp;#39;-&amp;#39;: operator.sub, &amp;#39;*&amp;#39;: operator.</description>
    </item>
    
    <item>
      <title>How the Heck do Django Models Work</title>
      <link>https://alexgaynor.net/2008/nov/10/how-heck-do-django-models-work/</link>
      <pubDate>Mon, 10 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/10/how-heck-do-django-models-work/</guid>
      <description>Anyone who has used Django for just about any length of time has probably used a Django model, and possibly wondered how it works. The key to the whole thing is what&amp;rsquo;s known as a metaclass, a metaclass is essentially a class that defines how a class is created. All the code for this occurs is here. And without further ado, let&amp;rsquo;s see what this does.
So the first thing to look at is the method, __new__, __new__ is sort of like __init__, except instead of returning an instance of the class, it returns a new class.</description>
    </item>
    
    <item>
      <title>Getting Started With PLY - Part 2</title>
      <link>https://alexgaynor.net/2008/nov/09/getting-started-ply-part-2/</link>
      <pubDate>Sun, 09 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/09/getting-started-ply-part-2/</guid>
      <description>Yesterday we created our tokens, and using these we can parse our language (which right now is a calculator) into some tokens. Unfortunately this isn&amp;rsquo;t very useful. So today we are going to start writing a grammar, and building an interpreter around it.
In PLY, grammar rules are defined similarly to tokens, that is, using docstrings. Here&amp;rsquo;s what a few grammar rules for out language might look like:
def p_expression_plus(p): &amp;#39;&amp;#39;&amp;#39; expression : expression PLUS expression &amp;#39;&amp;#39;&amp;#39; p[0] = p[1] + t[3] def p_expression_number(p): &amp;#39;&amp;#39;&amp;#39; expression : NUMBER &amp;#39;&amp;#39;&amp;#39; p[0] = [1] So the first docstring works is, an expression is defined as expression PLUS expression.</description>
    </item>
    
    <item>
      <title>Getting Started With PLY</title>
      <link>https://alexgaynor.net/2008/nov/08/getting-started-ply/</link>
      <pubDate>Sat, 08 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/08/getting-started-ply/</guid>
      <description>The other day I mentioned I was using PLY in my post about building a language, so today I&amp;rsquo;m going to describe getting started with PLY, specifically the tokenization phase. For those who don&amp;rsquo;t know much about parsing a language, the tokenization phase is where we take the source file, and turn it into a series of tokens. For example, turning a = 3 + 4 into, NAME EQUALS 3 PLUS 4.</description>
    </item>
    
    <item>
      <title>That&#39;s not change we can believe in</title>
      <link>https://alexgaynor.net/2008/nov/07/s-not-change-we-can-believe/</link>
      <pubDate>Fri, 07 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/07/s-not-change-we-can-believe/</guid>
      <description>Yesterday president-elect Obama&amp;rsquo;s campaign unveiled their transitional website, change.gov. So, as someone who&amp;rsquo;s interested in these things I immediately began to look at what language, framework, or software package they were using. The first thing I saw was that they were using Apache, however beyond that there were no distinctive headers. None of the pages had tell-tale extensions like .php or .aspx. However, one thing that struck me was that most pages were at a url in the form of /page/*/, which is the same format of the Obama campaign website, which I knew was powered by Blue State Digital&amp;rsquo;s CMS.</description>
    </item>
    
    <item>
      <title>Building a Programming Language with Python</title>
      <link>https://alexgaynor.net/2008/nov/06/building-programming-language-python/</link>
      <pubDate>Thu, 06 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/06/building-programming-language-python/</guid>
      <description>One of my side projects of late has been building a programming language in Python, using the PLY library. PLY is essentially a Python implementation of the classic Lex and Yacc tools. The language, at present, has a syntax almost exactly the same as Python&amp;rsquo;s (the notable difference, in so far as features that have been implemented, is that you are not allowed to have multiple statements on the same line, or to put anything following a colon on the same line).</description>
    </item>
    
    <item>
      <title>PyGTK and Multiprocessing</title>
      <link>https://alexgaynor.net/2008/nov/05/pygtk-and-multiprocessing/</link>
      <pubDate>Wed, 05 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/05/pygtk-and-multiprocessing/</guid>
      <description>Yesterday was election day, and for many people that meant long nights following the results, waiting to see who would be declared the next president of the United States of America. Politics is a game of numbers, and it&amp;rsquo;s nice to offload the crunching to our computers. I had written up a simple application for projecting win likelihood for the candidates based on the likelihood of a win in an individual state.</description>
    </item>
    
    <item>
      <title>More Laziness with Foreign Keys</title>
      <link>https://alexgaynor.net/2008/nov/04/more-laziness-foreign-keys/</link>
      <pubDate>Tue, 04 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/04/more-laziness-foreign-keys/</guid>
      <description>Yesterday we looked at building a form field to make the process of getting a ForeignKey to the User model more simple, and to provide us with some useful tools, like the manager. But this process can be generalized, and made more robust. First we want to have a lazy ForeignKey field for all models(be careful not to confuse the term lazy, here I use it to refer to the fact that I am a lazy person, not the fact that foreign keys are lazy loaded).</description>
    </item>
    
    <item>
      <title>Lazy User Foreign Keys</title>
      <link>https://alexgaynor.net/2008/nov/03/lazy-user-foreign-keys/</link>
      <pubDate>Mon, 03 Nov 2008 00:00:00 +0000</pubDate>
      
      <guid>https://alexgaynor.net/2008/nov/03/lazy-user-foreign-keys/</guid>
      <description>A very common pattern in Django is for models to have a foreign key to django.contrib.auth.User for the owner(or submitter, or whatever other relation with User) and then to have views that filter this down to the related objects for a specific user(often the currently logged in user). If we think ahead, we can make a manager with a method to filter down to a specific user. But since we are really lazy we are going to make a field that automatically generates the foreign key to User, and gives us a manager, automatically, to filter for a specific User, and we can reuse this for all types of models.</description>
    </item>
    
  </channel>
</rss>
