<?xml version="1.0" encoding="utf-8" standalone="no"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>Bhaskar Mookerji</title><description>Personal webpage</description><managingEditor>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</managingEditor><pubDate>Sat, 9 Aug 2025 19:26:30 GMT</pubDate><generator>Jekyll https://jekyllrb.com/</generator><link>https://mookerji.github.io/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>Personal webpage</itunes:subtitle><itunes:owner><itunes:email>noemail@noemail.org</itunes:email></itunes:owner><item><title>Need a car? Just lease an EV</title><link>https://mookerji.github.io/2025/08/03/evs.html</link><category>commentary</category><category>life</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Sun, 3 Aug 2025 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2025/08/03/evs</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h1 id="need-a-car-just-lease-an-ev">Need a car? Just lease an EV</h1>

<p>After many years of urban cycling, transit, and now-defunct ride share programs,
we finally needed a car for medical trips, baby stuff, and seeing friends but
opted to say 🙅 to the internal combustion engine. This is a quick summary in
case others want to do the same but know as little about cars as I did.</p>

<blockquote>
  <p>Caveats: <strong>this advice is probably very 2025 Bay Area-centric</strong>, but probably
works for a lot of geographies. If you need a car or are updating your existing
one, just don’t get an gas-power car.</p>

  <p>As of July 2025, the $7500 discount on EVs is set to expire on October 2025
because of the <a href="https://leasehackr.com/blog/2025/7/18/ev-discounts-deepen-after-big-beautiful-bill-passes">‘Big Beautiful Bill’</a>.</p>
</blockquote>

<h2 id="cars">Cars</h2>

<p>Criteria: DC-fast charging speed (&lt; 30 minutes to 80%), cargo capacity (&gt; 20 cu
ft), and range (&gt; 300 miles).</p>

<p>We ended up with a 2024 Hyundai Ioniq 5 SEL RWD, two year / 12k mile lease
negotiated with a dealer <em>entirely over text</em> and then delivered to our
house. The amortized cost to us has been about $600-$700/month for the life of
the lease with about $2k fees and registration at signing. This was my first car
ever and if we’d had an existing insurance this entire process (from form to
delivery) could have taken an afternoon (which I thought was crazy).</p>

<p>I also looked at the Ioniq 6 (a Tesla-style sedan), which has better high range
due to its drag profile, however it only has 11 cu ft of storage, about as much
as a typical fridge.</p>

<p>Alternative if you’ve got the stomach for it: great deals on used Teslas.</p>

<h2 id="other-details-as-of-2025">Other Details (as of 2025)</h2>

<h3 id="leasing-and-insurance">Leasing and Insurance</h3>

<p>EVs, EV power electronics platforms, and EV-related standards improve every year
so you may want to consider getting a two year lease and upgrading. In the Bay
Area, it’s been been easy through <a href="https://leasehackr.com">Leasehackr</a>. You can
provide a provisional proof of insurance through the website, after which you’ll
need the exact vehicle identification number (VIN) from the dealer. Notably,
<strong>you don’t even need to visit the dealership to see cars</strong>: I received photo
confirmation via the dealer, did paperwork live over the phone and email, and
arranged for delivery.</p>

<p>If you have other insurance you may be able to get a discount by bundling your
other insurance through the same provider.. You’ll need to provide the <em>exact</em>
VIN to the insurer to get a real policy. All that said, I think our two-driver
policy through State Farm is expensive.</p>

<p>Some states have special clean car incentives for car pool lane and tolls. In
California, the leased car will arrive preregistered by the dealer, after which
you can apply for <a href="https://www.dmv.ca.gov/portal/vehicle-registration/license-plates-decals-and-placards/clean-air-vehicle-decals-for-using-carpool-lanes/">clean air decals</a> and <a href="https://www.bayareafastrak.org/en/help/clean-air-vehicles-guide.shtml">FasTrak</a>.</p>

<h3 id="charging-and-range">Charging and Range</h3>

<p>Hyundai currently provides free 30-minutes of DC fast charging through Electrify
America and new, non-Tesla EVs are newly compatible with Tesla’s Supercharger
network via the NACS standard. If you’re at home, you can easily charge your car
overnight by attaching an off-the-shelf 40A ‘Level 2’ charger, like from
<a href="https://grizzl-e.com/products/grizzl-e-mini/">Grizzl-E</a> or Leviton to a 240V NEMA outlet. If you don’t have this
outlet and but space in your circuit breaker panel, it costs about $400 to have
a NEMA outlet installed. We don’t drive much, so keep our car top-offed with a
regular 120V, 12A Leviton charger running from an exterior outlet to our car.</p>

<p><em>Things that suck</em>: I actually don’t know what someone who’s renting in a
multi-family situation or apartment building should do. I’d love to hear more
about what this is like.</p>

<h3 id="apps-route-planning-etc">Apps: Route Planning, etc.</h3>

<p>There’s a ton of fragmentation around car charging networks. Here are some of
the good ones that also integrate with Apple CarPlay:</p>

<ul>
  <li><a href="https://abetterrouteplanner.com">A Better Route Planner</a>
    <ul>
      <li>Uses a model of your EV to determine range and do route planning.</li>
    </ul>
  </li>
  <li><a href="https://www.plugshare.com">PlugShare</a>
    <ul>
      <li>Unified view of all available public chargers across all networks.</li>
    </ul>
  </li>
</ul>]]></content:encoded><description>Need a car? Just lease an EV</description></item><item><title>Berkeley Streets in 2024</title><link>https://mookerji.github.io/2024/04/14/berkeley-streets.html</link><category>commentary</category><category>life</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Sun, 14 Apr 2024 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2024/04/14/berkeley-streets</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Berkeley periodically reassesses street conditions under its <a href="https://berkeleyca.gov/sites/default/files/documents/City%20of%20Berkeley_2022%20PMP%20Update_PTAP%2023%20Final%20Report.pdf">Pavement
Management Program</a> and apparently distributes the results of
that survey for <em>entire</em> street network as a PDF table. This data is pretty
detailed: it includes an index of street segments, measured centerline
distances, and their most recent maintenance history (namely, the renovation and
when the project was completed). I used <a href="https://tabula.technology/">Tabula</a> to extract this data
and posted it here:
<a href="https://github.com/mookerji/berkeley-data">https://github.com/mookerji/berkeley-data</a>.</p>

<p>There’s some interesting stuff! For example, the City started doing more
preventative maintenance in 2015 (assuming this attribution is correct):</p>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/66bed489-3ac7-41b6-bedd-6979878f55fd" style="max-width: 100%; height: auto;" />
</div>

<blockquote>
  <p>Caveat: these numbers do differ <em>slightly</em> from the recent numbers reported by
the City <a href="https://berkeleyca.gov/sites/default/files/documents/2023-11-28%20Item%2017%20Paving%20Plan.pdf">here</a>.</p>
</blockquote>

<p>Renovations ebb and flow, but recent, major repaving work seems to average
~3miles/year. I have no sense of whether that typical performance for a city
Berkeley’s size.</p>]]></content:encoded><description>Berkeley periodically reassesses street conditions under its Pavement Management Program and apparently distributes the results of that survey for entire street network as a PDF table. This data is pretty detailed: it includes an index of street segments, measured centerline distances, and their most recent maintenance history (namely, the renovation and when the project was completed). I used Tabula to extract this data and posted it here: https://github.com/mookerji/berkeley-data.</description></item><item><title>Anticipating 2024 - NC Voter Registrations since 2020</title><link>https://mookerji.github.io/2023/09/03/nc-voter-registrations.html</link><category>commentary</category><category>life</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Sun, 3 Sep 2023 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2023/09/03/nc-voter-registrations</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I just looked at new North Carolina voter registrations to see if voter
registration trends from before the 2020 General Election are holding
for 2024. It seems they’ve changed!</p>

<h1 id="background">Background</h1>

<p>To win an election, you must first register a lot of voters. Elections also
matter: they have <a href="https://www.nytimes.com/2023/07/30/us/inside-the-party-switch-that-blew-up-north-carolina-politics.html">real practical outcomes</a> for voters and so
voters should care about voter registration and the momentum around it. Southern
states have structural advantages in the Electoral College, so their electoral
outcomes are frequently national ones. Some states (like NC) may be diversifying
demographically and politically faster than others, but are affected by the
<a href="https://projects.fivethirtyeight.com/redistricting-2022-maps/north-carolina/">crazy gerrymandering</a> of the state legislative districts.</p>

<p>To <a href="https://en.wikipedia.org/wiki/2020_United_States_presidential_election_in_North_Carolina">recap 2020</a>, Biden lost NC to Trump by about 74k votes, or about
1.3% of votes cast. State Democrats also lost the state Supreme Court, lost
State House seats, and lost the opportunity to push fairer electoral maps
following the 2020 Census. I donated to the Long Leaf Pine Slate, which lost 15
of 17 races they backed! Nationally, the Democratic Party’s ground organizing
campaign focused on mail-in voting (which was successful) but prohibited
in-person organizing until September 2020 due to obvious COVID-19 concerns. The
NC GOP, as far as I could tell, simply adopted social distancing and masking
policies for in-person registrations well before the Democratic Party.</p>

<p>You can kind of see this in the accumulated voter registration totals leading up
to the election with the Democrats lagging new registrations into Election Day:</p>

<div style="text-align: center;">
    <img src="https://mookerji.github.io/nc-2020-dat/assets/images/statewide-registrations-changes-by-party.png" style="max-width: 100%; height: auto;" />
</div>

<h1 id="2024--as-of-december-2023">2024 … As of December 2023</h1>

<blockquote>
  <p>For additional commentary on this, see the writeup from September 2023!</p>
</blockquote>

<p>New registration totals since November 2020:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>| Party      | All    | w/o Meck/Wake |
|:-----------|-------:| -------------:|
| DEM        | 329942 |        240560 |
| REP        | 338680 |        292778 |
| THIRD      |  17816 |        14002  |
| UNA        | 612784 |        472383 |
</code></pre></div></div>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/6598e85a-05b4-4125-8c6c-a03fe9097dda" style="max-width: 100%; height: auto;" />
</div>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/3f0350c5-1ed3-4f13-95d7-9d0cdea1c161" style="max-width: 100%; height: auto;" />
</div>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/bdfcd51c-4b95-4445-a1d2-c9c8eb4a73d8" style="max-width: 100%; height: auto;" />
</div>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/1a2fa7f7-9d66-44cc-a8bc-9faa374d1705" style="max-width: 100%; height: auto;" />
</div>

<h1 id="initial-look-2024--as-of-september-2023">Initial Look: 2024 … As of September 2023</h1>

<p>New registration totals since November 2020:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>| Party      | All    | w/o Meck/Wake |
|:-----------|-------:| -------------:|
| DEM        | 307628 |        223729 |
| REP        | 309917 |        267982 |
| THIRD      |  13252 |        10428  |
| UNA        | 561085 |        432133 |
</code></pre></div></div>

<p>Unaffiliated voters still dominate the voter registrations (as they have for
some time), but new Democratic and GOP voter registrations since December 2020
are approximately even! The gap between newly registered Republicans and
Democrats is less than 3k.</p>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/cc4075d2-d9b5-44e3-8e49-7096a0a2c354" style="max-width: 100%; height: auto;" />
</div>

<p>Wake and Mecklenburg County still make up a huge fraction of the new electorate
and they are the biggest urban Democratic counties in the state. As of August
2024, the ‘No Labels’ Party is <a href="http://www.oldnorthstatepolitics.com/2023/08/a-too-early-look-at-no-labels.html">official in NC</a>, with about 400
people registered, of which 52 are in Wake County.</p>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/df5d6444-7ea5-44d3-94b5-9949f17d4ede" style="max-width: 100%; height: auto;" />
</div>

<p>If you exclude Wake and Mecklenburg the registration gap grows but isn’t <em>that
huge</em> (around 43k). I would have expected something much larger, given the past
organizing resources thrown at these larger counties.</p>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/c12a1791-96bb-4bd4-87df-abcfdc62e6a8" style="max-width: 100%; height: auto;" />
</div>

<p>No notable registration bumps following June 2022, which is when the Dobbs
Supreme Court ruling overturned Roe. Registration bumps coincide with state
primaries and during the midterms, which is not
<a href="https://fivethirtyeight.com/features/why-a-surge-in-republican-voter-registration-might-not-mean-a-surge-in-trump-support/">surprising</a>.</p>

<div style="text-align: center;">
    <img src="https://github.com/mookerji/mookerji.github.io/assets/353255/5af0c855-af8c-463e-a7b9-4a8e6b9c0015" style="max-width: 100%; height: auto;" />
</div>

<h1 id="methods">Methods</h1>

<p>I love that it’s possible for anyone to do this kind of analysis at home using
open source tools. To generate these graphs above I used <a href="https://pandas.pydata.org/">Pandas</a> and a
<a href="https://jupyter.org/">Jupyter notebook</a> and you can follow a similar process for your
state. In the following, I’ll talk through the process using the NC voter file,
using similar analysis to the one I posted <a href="https://mookerji.github.io/nc-2020-dat/">here</a> in 2020.</p>

<h2 id="getting-the-data">Getting the Data</h2>

<p>The NC Board of Elections maintains a <a href="https://www.ncsbe.gov/results-data/voter-registration-data">page</a> where you can
download the public voter file. Some quick links:</p>

<ul>
  <li><a href="https://dl.ncsbe.gov.s3.amazonaws.com/data/ncvoter_Statewide.zip">Voter file</a></li>
  <li><a href="https://dl.ncsbe.gov.s3.amazonaws.com/data/layout_ncvoter.txt">Voter file schema</a></li>
</ul>

<p>If you’re setup with AWS and use the terminal, you can download these files
directly from where they’re hosted:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>aws s3 <span class="nb">cp </span>s3://dl.ncsbe.gov/data/ncvoter_Statewide.zip <span class="nb">.</span>
<span class="nv">$ </span>aws s3 <span class="nb">cp </span>s3://dl.ncsbe.gov/data/layout_ncvoter.txt <span class="nb">.</span>
</code></pre></div></div>
<p><br /></p>
<h2 id="normalize-the-data">Normalize the Data</h2>

<p>The statewide voter file is <strong>big</strong>: about 3.6G and almost 8.4M rows (as of
09-03-2023). Like voter files everywhere, it contains a huge amount of
identifying information that would be considered private in any other context. I
didn’t want to exhaust my RAM while plotting data, so I parsed and simplified
this dataset to something smaller and less creepy: new, active registrations
since the last general election, voter demographics, and city/county data.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="n">pd</span>

<span class="c1"># Parse the data (drops a few records)
</span><span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="n">read_csv</span><span class="p">(</span><span class="s">'ncvoter_Statewide.txt'</span><span class="p">,</span>
                   <span class="n">delim_whitespace</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
                   <span class="n">on_bad_lines</span><span class="o">=</span><span class="s">'skip'</span><span class="p">,</span>
                   <span class="n">encoding_errors</span><span class="o">=</span><span class="s">'ignore'</span><span class="p">,</span>
                   <span class="n">parse_dates</span><span class="o">=</span><span class="p">[</span><span class="s">'registr_dt'</span><span class="p">],</span>
                   <span class="n">infer_datetime_format</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>

<span class="c1"># Normalize and save subset of interest
</span><span class="n">to_keep</span> <span class="o">=</span> <span class="p">[</span><span class="s">'registr_dt'</span><span class="p">,</span> <span class="s">'voter_status_desc'</span><span class="p">,</span>
           <span class="s">'birth_year'</span><span class="p">,</span><span class="s">'race_code'</span><span class="p">,</span> <span class="s">'ethnic_code'</span><span class="p">,</span> <span class="s">'gender_code'</span><span class="p">,</span>
           <span class="s">'party_cd'</span><span class="p">,</span> <span class="s">'county_desc'</span><span class="p">,</span> <span class="s">'res_city_desc'</span><span class="p">]</span>
<span class="n">start_date</span> <span class="o">=</span> <span class="s">'2020-12-01'</span>
<span class="n">newly_registered</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">to_keep</span><span class="p">][</span><span class="n">df</span><span class="p">[</span><span class="s">'registr_dt'</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">start_date</span><span class="p">]</span>
<span class="n">newly_registered</span> <span class="o">=</span> <span class="n">newly_registered</span><span class="p">[</span><span class="n">newly_registered</span><span class="p">[</span><span class="s">'voter_status_desc'</span><span class="p">]</span> <span class="o">==</span> <span class="s">'ACTIVE'</span><span class="p">]</span>

<span class="c1"># Group all third parties, including 'No Labels' (!)
</span><span class="n">newly_registered</span><span class="p">[</span><span class="s">'party_cd'</span><span class="p">]</span> \
    <span class="o">=</span> <span class="n">newly_registered</span><span class="p">[</span><span class="s">'party_cd'</span><span class="p">].</span><span class="n">replace</span><span class="p">([</span><span class="s">'LIB'</span><span class="p">,</span> <span class="s">'NLB'</span><span class="p">,</span> <span class="s">'LIB'</span><span class="p">,</span> <span class="s">'GRE'</span><span class="p">],</span> <span class="s">'THIRD'</span><span class="p">)</span>

<span class="c1"># Save the subset
</span><span class="n">newly_registered</span><span class="p">.</span><span class="n">to_csv</span><span class="p">(</span><span class="s">'ncvoter_Statewide_post-2020-12-01.csv'</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
</code></pre></div></div>

<p>The <code class="language-plaintext highlighter-rouge">layout_ncvoter.txt</code> includes a schema for the voter file. This is the
subset for the columns I selected above:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>------------------------------------------------------------------------------------
name                    data type          description
------------------------------------------------------------------------------------
county_desc             varchar(15)        County name
voter_status_desc       varchar(25)        Registration status description
registr_dt              char(10)           Registration date
res_city_desc           varchar(60)        Residential city name
race_code               char(3)            Race code
ethnic_code             char(3)            Ethnicity code
party_cd                char(3)            Registered party code
gender_code             char(1)            Gender/sex code
birth_year              char(4)            Year of birth
</code></pre></div></div>

<p>The resulting table <code class="language-plaintext highlighter-rouge">newly_registered</code> is much smaller: about 1.2M records for a
62MB CSV file.  The contents (from <code class="language-plaintext highlighter-rouge">newly_registered.head()</code>) looks like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>|    | registr_dt          | voter_status_desc   |   birth_year | race_code   | ethnic_code   | gender_code   | party_cd   | county_desc   | res_city_desc   |
|---:|:--------------------|:--------------------|-------------:|:------------|:--------------|:--------------|:-----------|:--------------|:----------------|
|  0 | 2023-05-09 00:00:00 | ACTIVE              |         1945 | W           | NL            | M             | REP        | ALAMANCE      | GRAHAM          |
|  1 | 2023-05-17 00:00:00 | ACTIVE              |         1967 | W           | NL            | F             | REP        | ALAMANCE      | HAW RIVER       |
|  2 | 2021-04-15 00:00:00 | ACTIVE              |         2003 | W           | NL            | M             | REP        | ALAMANCE      | GIBSONVILLE     |
|  3 | 2021-05-21 00:00:00 | ACTIVE              |         1981 | B           | NL            | M             | UNA        | ALAMANCE      | BURLINGTON      |
|  4 | 2022-10-07 00:00:00 | ACTIVE              |         1992 | W           | NL            | F             | REP        | ALAMANCE      | MEBANE          |
</code></pre></div></div>
<p><br /></p>
<h2 id="analysis-county-aggregates">Analysis: County Aggregates</h2>

<p>To get the county aggregates you:</p>

<ul>
  <li>group by county name and party registration</li>
  <li>count those groups</li>
  <li>pivot counts by party registration and total for each county
<br /></li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Color coding
</span><span class="n">COLORS</span> <span class="o">=</span> <span class="p">{</span><span class="s">'DEM'</span><span class="p">:</span> <span class="s">'blue'</span><span class="p">,</span> <span class="s">'REP'</span><span class="p">:</span> <span class="s">'red'</span><span class="p">,</span> <span class="s">'THIRD'</span><span class="p">:</span> <span class="s">'green'</span><span class="p">,</span> <span class="s">'UNA'</span><span class="p">:</span><span class="s">'purple'</span><span class="p">}</span>
<span class="n">parties</span> <span class="o">=</span> <span class="p">[</span><span class="s">'DEM'</span><span class="p">,</span> <span class="s">'REP'</span><span class="p">,</span> <span class="s">'THIRD'</span><span class="p">,</span> <span class="s">'UNA'</span><span class="p">]</span>

<span class="c1"># Group, count, and pivot
# Note: following .count(), all columns have the same value, so choose any one and rename to count
</span><span class="n">groupby</span> <span class="o">=</span> <span class="p">[</span><span class="s">'county_desc'</span><span class="p">,</span> <span class="s">'party_cd'</span><span class="p">]</span>
<span class="n">total_by_county</span> <span class="o">=</span> <span class="n">newly_registered</span><span class="p">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">groupby</span><span class="p">).</span><span class="n">count</span><span class="p">()[</span><span class="s">'birth_year'</span><span class="p">]</span> \
   <span class="p">.</span><span class="n">reset_index</span><span class="p">()</span> \
   <span class="p">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s">'birth_year'</span><span class="p">:</span> <span class="s">'count'</span><span class="p">})</span>\
   <span class="p">.</span><span class="n">pivot_table</span><span class="p">(</span><span class="n">values</span><span class="o">=</span><span class="s">'count'</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="s">'county_desc'</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="s">'party_cd'</span><span class="p">)</span>
<span class="n">total_by_county</span><span class="p">[</span><span class="s">'ALL'</span><span class="p">]</span> <span class="o">=</span> <span class="n">total_by_county</span><span class="p">.</span><span class="nb">sum</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">total_by_county</span> <span class="o">=</span> <span class="n">total_by_county</span><span class="p">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s">'ALL'</span><span class="p">)</span>
<span class="n">total_by_county</span>

<span class="n">ax</span> <span class="o">=</span> <span class="n">total_by_county</span><span class="p">[</span><span class="n">parties</span><span class="p">.</span><span class="n">plot</span><span class="p">.</span><span class="n">bar</span><span class="p">(</span><span class="n">stacked</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">COLORS</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_title</span><span class="p">(</span><span class="s">'Statewide New Voter Registrations Since 12-01-2020'</span><span class="p">,)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s">'County'</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s">'Registrations (count)'</span><span class="p">)</span>
</code></pre></div></div>

<p>Some sample data:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>| county_desc   |   DEM |   REP |   THIRD |   UNA |   ALL |
|:--------------|------:|------:|--------:|------:|------:|
| TYRRELL       |    65 |    65 |     nan |   104 |   234 |
| HYDE          |    93 |   131 |       2 |   160 |   386 |
| GRAHAM        |    73 |   402 |       9 |   287 |   771 |
| GATES         |   204 |   330 |      18 |   428 |   980 |
| WASHINGTON    |   283 |   255 |       9 |   438 |   985 |
</code></pre></div></div>
<p><br /></p>
<h2 id="analysis-monthly-registrations">Analysis: Monthly Registrations</h2>

<p>This will produce demographic statistics similar to what you’d find on the NC
Registration Statistics <a href="https://vt.ncsbe.gov/RegStat/">page</a>. To get these demographics you group by
registration week and demographic feature (race/ethnicity, gender/sex, and party
registration) and then count.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">groupby</span> <span class="o">=</span> <span class="p">[</span><span class="n">pd</span><span class="p">.</span><span class="n">Grouper</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s">'registr_dt'</span><span class="p">,</span> <span class="n">freq</span><span class="o">=</span><span class="s">"M"</span><span class="p">),</span> 
          <span class="s">'race_code'</span><span class="p">,</span> <span class="s">'ethnic_code'</span><span class="p">,</span> <span class="s">'gender_code'</span><span class="p">,</span> <span class="s">'party_cd'</span><span class="p">]</span>
<span class="n">monthly_voter_stats</span> <span class="o">=</span> <span class="n">newly_registered</span><span class="p">.</span><span class="n">sort_values</span><span class="p">(</span><span class="s">'registr_dt'</span><span class="p">)</span> \
                      <span class="p">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">groupby</span><span class="p">)</span> \
                      <span class="p">.</span><span class="n">count</span><span class="p">()[</span><span class="s">'birth_year'</span><span class="p">]</span> \
                      <span class="p">.</span><span class="n">reset_index</span><span class="p">()</span> \
                      <span class="p">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s">'birth_year'</span><span class="p">:</span> <span class="s">'count'</span><span class="p">})</span>
<span class="n">monthly_voter_stats</span>
</code></pre></div></div>

<p>Some sample data:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>|    | registr_dt          | race_code   | ethnic_code   | gender_code   | party_cd   |   count |
|---:|:--------------------|:------------|:--------------|:--------------|:-----------|--------:|
|  0 | 2020-12-31 00:00:00 | A           | HL            | M             | UNA        |       2 |
|  1 | 2020-12-31 00:00:00 | A           | NL            | F             | DEM        |      53 |
|  2 | 2020-12-31 00:00:00 | A           | NL            | F             | REP        |      25 |
|  3 | 2020-12-31 00:00:00 | A           | NL            | F             | THIRD      |       2 |
|  4 | 2020-12-31 00:00:00 | A           | NL            | F             | UNA        |      72 |
</code></pre></div></div>

<p>You can then pivot with:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">monthly_voter_stats</span><span class="p">.</span><span class="n">groupby</span><span class="p">([</span><span class="s">'registr_dt'</span><span class="p">,</span> <span class="s">'party_cd'</span><span class="p">])[</span><span class="s">'count'</span><span class="p">].</span><span class="nb">sum</span><span class="p">()</span> \
  <span class="p">.</span><span class="n">reset_index</span><span class="p">()</span>\
  <span class="p">.</span><span class="n">pivot_table</span><span class="p">(</span><span class="n">values</span><span class="o">=</span><span class="s">'count'</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="s">'registr_dt'</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="s">'party_cd'</span><span class="p">)</span>
</code></pre></div></div>

<p>to get:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>| registr_dt          |   DEM |   REP |   THIRD |   UNA |
|:--------------------|------:|------:|--------:|------:|
| 2020-12-31 00:00:00 |  5950 |  6756 |     288 | 10279 |
| 2021-01-31 00:00:00 |  6601 |  6621 |     287 | 11026 |
| 2021-02-28 00:00:00 |  6834 |  6700 |     314 | 11104 |
| 2021-03-31 00:00:00 |  8395 |  8672 |     336 | 13642 |
| 2021-04-30 00:00:00 |  7892 |  7985 |     325 | 12829 |
</code></pre></div></div>
<p><br /></p>
<h1 id="changelog">Changelog</h1>

<ul>
  <li><strong>12-28-2023</strong>. Updated to include registration numbers through 2023.</li>
  <li><strong>09-04-2023</strong>. Initial post.</li>
</ul>]]></content:encoded><description>I just looked at new North Carolina voter registrations to see if voter registration trends from before the 2020 General Election are holding for 2024. It seems they’ve changed!</description></item><item><title>2022 - A Year in Review</title><link>https://mookerji.github.io/2023/01/28/year-2022.html</link><category>commentary</category><category>life</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Sat, 28 Jan 2023 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2023/01/28/year-2022</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311331-61d9c23d-7112-483a-8496-7ddb7221b9c7.jpg" style="max-width: 75%; height: auto;" />
    <div><i>👩‍❤️‍👨</i></div>
</div>

<h1 id="2022---a-year-in-review">2022 - A Year in Review</h1>

<p>2022 was a <strong>dense</strong>, eventful year, interleaved with Omicron and COVID-related
logistics that became less intense here as the year went on. If 2020 lasted an
eternity, 2021 and 2022 both rolled by in such a breathless flash I haven’t
really chance to fully appreciate everything that happened.</p>

<h2 id="projects">Projects</h2>
<p><br /></p>
<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311337-a3432b40-b477-47d8-80bd-bd088341d606.png" style="max-width: 75%; height: auto;" alt="paella-party" />
    <div><i>Backyard wedding paella (!) from Venga Paella Oakland.</i></div>
</div>

<p>After moving into our new place, we replaced a foundation wall and replaced a
big stretch of a concrete driveway with gardening space:
<a href="https://zmagg.com/">Zmagg</a> designed the walkway and landscaping layout and is
writing up a post about how we went about landscaping our space.<br /></p>

<p>How it started:</p>

<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311648-d20daba9-5770-451d-b0eb-952ea7282b0f.png" style="max-width: 75%; height: auto;" alt="foundation-proto" />
    <img src="https://user-images.githubusercontent.com/353255/215311638-28ecb409-2845-442b-b5ce-d03cda6eb7ae.png" style="max-width: 100%; height: auto;" alt="foundation-before" />
    <div><i>Foundation: Before and during removal</i></div>
</div>
<p><br /></p>

<p>How it’s going:</p>

<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311633-dee743f3-c505-4b21-bf5f-132ea5426d34.jpeg" style="max-width: 75%; height: auto;" alt="figma-garden" />
    <img src="https://user-images.githubusercontent.com/353255/215311658-c36a7574-7cca-482f-9c07-04b3e8dd6d20.png" style="max-width: 80%; height: auto;" alt="wheeler-garden" />
    <div><i>Garden plan and late 2022</i></div>
</div>
<p><br /></p>

<h2 id="travel">Travel</h2>
<p><br /></p>
<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311301-916abcf2-035c-46be-b3c0-8183aaead9f9.png" style="max-width: 75%; height: auto;" alt="sea-ranch" />
    <div><i>Sea Ranch, CA</i></div>
</div>
<p><br /></p>

<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311310-aba269db-d746-4eef-aaff-9492417bec02.png" style="max-width: 75%; height: auto;" alt="london-va" />
    <img src="https://user-images.githubusercontent.com/353255/215311315-a8580513-1265-44f9-b831-b35ec9d9637a.png" style="max-width: 75%; height: auto;" alt="london-tardis" />
    <img src="https://user-images.githubusercontent.com/353255/215311321-92655237-5f0b-4b61-93f8-915654ed3a19.png" style="max-width: 90%; height: auto;" alt="bota" />
    <div><i>Post-wedding travel: V+A Museum and Chelsea Flower Show in London; climate, geography, and sherry as told by Bodegas Tradición, Jerez de la Frontera, Spain</i></div>
</div>
<p><br /></p>

<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311324-390ff72c-c828-4634-a6f9-8b14d5136045.png" style="max-width: 90%; height: auto;" alt="north-van" />
    <div><i>North Vancouver, BC: Capilano River Regional Park</i></div>
</div>
<p><br /></p>

<p>I wrote up the Vancouver trip and you can read about it <a href="https://mookerji.github.io/2022/10/30/vancouver.html">here</a>!</p>

<h2 id="work-span-drive">Work: <a href="https://www.span.io/drive">Span Drive</a></h2>
<p><br /></p>
<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311591-ccbd2d9f-6f0e-4341-9b33-6fff62fa09ff.png" style="max-width: 85%; height: auto;" alt="span-drive" />
</div>
<p><br /></p>

<p>My big work project this year was a
<a href="https://en.wikipedia.org/wiki/Soup_to_nuts">soup-to-nuts</a> design,
implementation, and certification of the “functionally safe” embedded system
system powering <a href="https://www.span.io/drive">Span Drive</a>, an EV charger that dynamically adjusts
charging rate based on your home’s electrical load.</p>

<blockquote>
  <p>Warning: flagrant generalizations and lack of references ahead.</p>
</blockquote>

<p>My lesson from the last year: there are <strong>remarkably few</strong> consumer hardware
companies and startups working to directly replace fossil-fuel-based consumer
technologies with electric ones (“electrification”).</p>

<p>These include creating both electric equivalents (EVs and e-bikes vs internal
combustion engines, cheaper induction stoves and heat-pump water heaters, etc.),
introducing new <a href="https://www.span.io/panel">new product categories</a> for
microgrid management, making more reliable <a href="https://arstechnica.com/cars/2023/01/the-us-needs-8x-more-ev-chargers-by-2030-according-to-new-report/">public EV charging
infrastructure</a>, or supporting the booming US residental solar industry. If
you’re a Bay Area software engineer looking to join the clean energy industry,
your options are largely behemoths like
<a href="https://www.teamblind.com/company/Tesla/">Tesla</a>, SolarEdge, Enphase, Rivian,
etc.</p>

<p>Given this — as well as the passage of the <a href="https://www.congress.gov/bill/117th-congress/house-bill/5376/text">Inflation Reduction Act</a> —
it’s actually really surprising how many climate-focused startups are working on
really <em>indirect</em> solutions_ such as creative carbon accounting, carbon finance,
monitoring, and monitoring of electric assets (like EVs). Some of these efforts
seem really tenuous ground truthing to real climate-related outcomes.</p>

<p>On a contrasting note, check out this amazing EVSE <a href="https://thedriven.io/2020/03/24/siemens-converts-all-lamp-posts-on-residential-street-to-electric-car-chargers/">built-into a London street
lamp</a>:</p>

<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311597-eecd95a6-55b1-40fe-a7e0-75b4dba1cf65.png" style="max-width: 75%; height: auto;" alt="evse-london" />
</div>
<p><br /></p>

<h2 id="media-books-reading-etc">Media, Books, Reading, etc.</h2>

<p>I read a lot fewer books than <a href="https://zmagg.com/">Zmagg</a>. I don’t keep a
GoodReads or other list of books I read, but these are the ones I remember
finishing:</p>

<ul>
  <li><a href="https://en.wikipedia.org/wiki/Silas_Marner">Silas Marner (George Eliot)</a></li>
  <li><a href="https://www.robertcaro.com/the-books/means-of-ascent/">Means of Ascent (Robert Caro)</a></li>
  <li><a href="https://en.wikipedia.org/wiki/A_Place_of_Greater_Safety">A Place of Greater Safety (Hilary Mantel)</a></li>
  <li><a href="https://www.vatican.va/content/francesco/en/encyclicals/documents/papa-francesco_20150524_enciclica-laudato-si.html">Laudato Si, Encyclical on Climate Change and Inequality: On Care for Our
Common Home (Pope Francis)</a></li>
</ul>

<p>My technical reading this past year was <em>almost</em> entirely related to work:</p>

<ul>
  <li><a href="https://www.amazon.com/Definitive-Guide-Cortex-Cortex-M0-Processors/dp/0128032774">The Definitive Guide to ARM Cortex-M0 and Cortex-M0+ Processors (Joseph Yiu)</a></li>
  <li><a href="https://www.amazon.com/Understanding-Digital-Signal-Processing-3rd/dp/0137027419">Understanding Digital Signal Processing (Richard Lyons)</a></li>
  <li><a href="https://pages.cs.wisc.edu/~remzi/OSTEP/">Operating Systems: Three Easy Pieces (Arpaci-Dusseau)</a></li>
  <li><a href="https://www.oreilly.com/library/view/programming-rust-2nd/9781492052586/">Rust Programming Language (Blandy, Orendorff, Tindall)</a></li>
  <li><a href="https://www.tauntonstore.com/renovation-5th-edition-7283">Renovation, 5th Edition (Litchfield and Harley)</a></li>
</ul>

<p>Most played music and radio:</p>

<ul>
  <li><a href="https://open.spotify.com/album/6GQskZhcw8OppDepxNSUSX?si=vBuV2Y0dQWaK61Nzz3Jsfg">Northwest Passage (Stan Rogers)</a></li>
  <li><a href="https://www.kcrw.com/culture/shows/good-food">Good Food (Evan Kleinman @ KCRW)</a></li>
</ul>

<p>Movies, etc.:</p>

<ul>
  <li><a href="https://en.wikipedia.org/wiki/Nope_(film)">NOPE</a></li>
  <li><a href="https://en.wikipedia.org/wiki/Glass_Onion:_A_Knives_Out_Mystery">Glass Onion</a></li>
  <li><a href="https://en.wikipedia.org/wiki/Stranger_Things_(season_1)">Stranger Things (Season 1)</a></li>
  <li><a href="https://en.wikipedia.org/wiki/Andor_(TV_series)">Andor (Season 1)</a></li>
</ul>

<p><br /></p>
<h2 id="food">Food</h2>

<p>I’m excited to do a lot more new cooking in 2023 than I did in 2022.  After
three years, we finally got off the wait list for the <a href="https://www.ranchogordo.com/products/the-rancho-gordo-bean-club">Rancho Gordo Bean
Club</a>. I signed up in 2022 and apparently totally forgot 😅! If you
want to come over and eat beans in 2023, send me a message!</p>

<p>Notable household experiments and staple from 2022 included:</p>

<ul>
  <li><a href="https://mookerzhou.github.io/cooking_journal/necessities/2022/12/28/tempeh.html">Homemade Tempeh</a></li>
  <li><a href="https://mookerzhou.github.io/cooking_journal/veg-main/2022/12/25/eggplant-lasagna-ish.html">Eggplant Lasagna</a></li>
  <li><a href="https://mookerzhou.github.io/cooking_journal/meat/2022/12/26/cardoon-and-marrow-gratin.html">Cardoon Gratin</a></li>
</ul>

<p>My favorite restaurant meal of 2023 was <a href="https://www.instagram.com/chicoooatl/?hl=en">Mari
Vega’s</a> <a href="https://sf.eater.com/2022/10/6/23391140/lord-stanley-mari-vega">Mesoamerican tasting
menu</a> at the
<a href="https://www.lordstanleysf.com/">Lord Stanley Turntable</a>. My favorite things
from this were a plum chamoy and this amazing cod baked into a soft clay mold of
a fish.</p>

<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/215311580-08be882a-55bd-454f-a2b5-302d54317032.png" style="max-width: 75%; height: auto;" alt="clay-fish" />
</div>

<p>They baked the molds at a pottery studio nearby and you had to pull it apart to
get at the fish!</p>]]></content:encoded><description>&#128105;‍❤️‍&#128104;</description></item><item><title>October 2022 Vancouver Trip</title><link>https://mookerji.github.io/2022/10/30/vancouver.html</link><category>commentary</category><category>life</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Sun, 30 Oct 2022 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2022/10/30/vancouver</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/199410260-a1cd4918-ba1b-44b2-9c2d-d150fc1117d1.png" style="max-width: 75%; height: auto;" />
</div>
<p><br /></p>

<h1 id="october-2022-vancouver-trip">October 2022 Vancouver Trip</h1>

<p>After a somewhat intense year for work, we took a one-week vacation to Vancouver
and Vancouver Island to eat and look at some big trees. We got pretty lucky –
certainly weather-wise – on this trip! By the time we arrived on October 21, it
had only just started raining after what I heard was a six-month dry spell and
an accumulation of wildfire smoke. It was damp, but otherwise dry, for the first
half; the remaining days were simply the wettest weather I’ve ever
experienced.</p>

<p>All that aside: <strong>Definitely go!</strong> The food is excellent, it’s easy to get
around, and everyone we met was super-friendly.</p>

<p>Vancouver-area trip highlights and area recommendations:</p>

<ul>
  <li>Aberdeen Centre food court, Richmond, BC generally
    <ul>
      <li>Mandatory stop – just off the Canada Line – after leaving YVR. Within 1km
off of Aberdeen Center there are at least three to four food courts and
strip malls, covering the Cartesian product of <code class="language-plaintext highlighter-rouge">[Persian, Japanese, Korean,
Sichuan, Cantonese, Hunanese, Taiwanese, Malay]</code> and <code class="language-plaintext highlighter-rouge">[Vegetarian, Vegan,
Gluten-Free]</code>.</li>
    </ul>
  </li>
  <li>Riley Park / Mount Pleasant. We stayed at an AirBnb in this neighborhood
between Ontario and Main Street and it was Pretty Nice. Accessible on transit
via TransLink 8 bus and the Canada Line. Some standouts:
    <ul>
      <li><a href="https://www.liberty-bakery.com/">Liberty Cafe and Bakery</a></li>
      <li><a href="https://www.instagram.com/33acresbrewing/?hl=en">33 Acres Brewing</a></li>
      <li><a href="https://www.instagram.com/sushihil_restaurant/?hl=en">Sushi Hil</a></li>
      <li><a href="https://www.instagram.com/hawkersdelightdeli/?hl=en">Hawkers Delight</a></li>
    </ul>
  </li>
  <li>Bill Reid Museum and Biking Stanley Park
    <ul>
      <li>We stopped at the Bill Reid museum to see some Haida First Nation art before
heading over to Stanley Park for a rental bike ride.</li>
    </ul>
  </li>
  <li>North Vancouver: Hiking in Capilano River Regional Park (skip the suspension
bridge and hike to the salmon hatchery instead) and Central Lonsdale
(fantastic Persian food and markets).</li>
</ul>

<p>After about six days in Vancouver, we rented a car at the airport and took the
BC Ferry from Tsawwassen to Victoria and then drove up to Port Renfrew for a two
day stay. Some highlights:</p>

<ul>
  <li>Ferry ride from Tsawwassen to Victoria (Swartz Bay), winding through the San
Juan Islands ($100 for the car, $18/per person).</li>
  <li>Visiting Eden Grove and Big Lonely Doug with <a href="http://daytripdrea.com/hiking-day-trips-and-overnight-adventures-vancouver-island/">Day Trip
Drea</a>.</li>
</ul>

<p>We wanted to, but didn’t get:</p>

<ul>
  <li><a href="https://www.yelp.ca/biz/chinese-sauerkraut-fish-richmond-3">太二 酸菜鱼 (“Tai Er Chinese Sauerkraut
Fish”)</a>, or
actually more regionalized Chinese food.
    <ul>
      <li>This place ferments their own mustard greens and apparently has an outpost
at Changi Airport too. We showed up on a Tuesday night, and learned they had
sold out a full hour before closing.</li>
    </ul>
  </li>
  <li><a href="https://vancouverisland.com/things-to-do-and-see/parks-and-trails/vancouver-island-bc-islands/carmanah-walbran-provincial-park/">Carmanah Walbran Provincial
Park</a>
    <ul>
      <li>This is an old-growth temperate rain forest on Vancouver Island, about a
five-hour drive on rough roads from Port Renfrew. Shockingly, many of these
‘Crown Lands’ aren’t protected from logging in the same way similar landmark
forests are protected in the US. We weren’t able to visit since lumber
companies blocked the more convenient roads after the <a href="https://thenarwhal.ca/topics/fairy-creek-blockade/">Ferry Creek
Protests</a>. Read more
about the preservation work around this forest at the <a href="https://ancientforestalliance.org/">Ancient Forest
Alliance</a>.</li>
    </ul>
  </li>
  <li>Indian food
    <ul>
      <li>When I made my way to Punjabi Market, it was apparently Diwali (and Rishi
Sunak’s installation as UK’s PM). Two sweet shops east of Punjabi Market had
pretty long lines for freshly fried (!) jalebi.</li>
    </ul>
  </li>
  <li>Salmon season
    <ul>
      <li>Salmon are apparently spawn shortly after the rain starts, since the streams
fill back up. Unfortunately, this is worst time to eat them (unless you’re a
hungry bear).</li>
    </ul>
  </li>
  <li><a href="https://vancouverchinesegarden.com/">Sun Yat-Sen Classical Chinese Garden</a>,
and really, any public gardens in Vancouver and Vancouver Island.</li>
</ul>

<p>We saved locations both visited and not on a Google Maps list
<a href="https://goo.gl/maps/4UWHFxwmomW5HH9x8">here</a>. Places change!  Restaurants and
shops in all cities turn over eventually, so best of luck finding these places
in the future.</p>

<p>Some tips:</p>

<ul>
  <li>
    <p><strong>Getting around</strong>. You don’t need a car unless you’re leaving the metro
area. Walking, public transportation via Skytrain/bus/Seabus are pretty good
and Vancouver’s not that big. If you’re planning to hike in North Vancouver,
you can take TransLink buses (240 and 246) from Downtown Vancouver to great
public parks, and then return via the SeaBus.</p>

    <p>You will need a 4WD SUV if planning any backcountry visits on Vancouver
Island.</p>
  </li>
  <li><strong>Food</strong>. Like Los Angeles, Vancouver has a wide variety of really great food
in food courts. Some of these food courts are in unexpected places. Unlike Los
Angeles, you don’t have to drive for hours to get to them. Compared to the SF
Bay Area, it felt like there was a lot more experimentation, more broadly, as
well as more foreign imports (like <a href="https://foodology.ca/yuans-chuan-chuan-xiang/">Yuan’s Chuan Chuan
Xiang</a> from Chengdu). Typical
meals were cheaper than the Bay Area and LA, but not by much.</li>
  <li>
    <p><strong>Ferry logistics</strong>. You can rent a car in Vancouver to drive on Vancouver
Island, but you’ll need to transport that car via the ferry (fare is
$18/person, $100/car). You should definitely reserve a spot on the ferry as
soon as you’re sure about your plans, and you can check the BC Ferries
<a href="https://www.bcferries.com/current-conditions/TSA-SWB">website</a> for
surprisingly detailed information and boat space allocations and reservation
utilization. We were one of the last dozen or so cars let onto the ferry
without a reservation.</p>

    <p>If returning from a distant part of Vancouver Island for a Sunday afternoon or
evening flight, time budget for cross-island driving, potential rain and ferry
complications, as well as weekend traffic going into Richmond. We avoided
Sunday traffic through Victoria by returning through Nanaimo.</p>
  </li>
  <li><strong>Rain</strong>. If you’re planning to explore on foot during the rainy season, bring
a drybags and/or waterproof backpack (…. or borrow a <em>giant</em> umbrella).</li>
</ul>

<p>(🙏 Thanks to coworkers, friends, and family who gave trip planning advice!)</p>

<p><br /></p>
<div style="text-align: center;">
    <img src="https://user-images.githubusercontent.com/353255/199408001-f9fdca7f-9e6d-4ba6-90cb-e6b814377f51.gif" style="max-width: 200%; height: auto;" />
</div>
<p><br /></p>]]></content:encoded><description></description></item><item><title>Notes from the GEOMETRY OF REDISTRICTING WORKSHOP</title><link>https://mookerji.github.io/2018/03/16/redistricting-workshop.html</link><category>commentary</category><category>life</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Fri, 16 Mar 2018 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2018/03/16/redistricting-workshop</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h1 id="notes-from-the-geometry-of-redistricting-workshop">Notes from the GEOMETRY OF REDISTRICTING WORKSHOP</h1>

<p class="meta"> 16 March 2018 - San Francisco </p>

<p>The
<a href="https://sites.tufts.edu/gerrymandr/"> Metric Geometry and Gerrymandering Group (MGGG) </a>
hosted a <a href="https://gerrymandrsanfrancisco.weebly.com/">workshop in SF</a> around
redistricting, gerrymandering, and voting rights. My notes from the event are
below.</p>

<p>Errors, omissions, and inaccuracies here are entirely my own! If you have any
errata, <strong>please</strong>
<a href="mailto:mookerji@gmail.com?subject=redistricting-blog-error">let me know</a>.</p>

<h2 id="thursday-march-15">Thursday, March 15</h2>
<p><br /></p>
<h3 id="0930---1020am---moon-duchin-tufts---slides">09:30 - 10:20AM - <em>Moon Duchin (Tufts) - <a href="https://sites.tufts.edu/gerrymandr/files/2018/03/Duchin.pdf">slides</a></em></h3>
<p><strong>Math, Politics, and Law in the Study of Gerrymandering</strong></p>

<ul>
  <li>Techniques to identify, adjudicate, and remediate</li>
  <li>MGGG has been putting on these workshop</li>
  <li>Redistricting is a mathematical partitioning problem (smash or scalpel)</li>
  <li>Cycling of redistricting: enumeration, apportionment, partition (litigation)
    <ul>
      <li>Two federal bodies:
        <ul>
          <li>Senate: 2 per state</li>
          <li>House: % share of US population, adding up to 435.</li>
        </ul>
      </li>
      <li>States are required to redistrict after each Census</li>
      <li>Officials set their own process</li>
    </ul>
  </li>
  <li>Six redistricting principles
    <ul>
      <li>Mathematical
        <ul>
          <li>Equal population (number) - All districts must be equal to each other +/-
 one.</li>
          <li>Compactness (shape) - “Reasonable” shape. Geometry here is all 1900</li>
          <li>Contiguous (shape) - All districts must be connected
            <ul>
              <li>From these <a href="https://arxiv.org/abs/1710.03358">Cohen-Addad-Klein-Young</a>
(picture from Texas).</li>
            </ul>
          </li>
        </ul>
      </li>
      <li>Political
        <ul>
          <li>Respect for county/city boundaries (political geography) - Don’t split up
a city.</li>
          <li>Respect for “communities of interest” (sociology) - More on this in the
future. Hard to make algorithmic.</li>
          <li>Compliance with Voting Rights Act (race) - Need to give minority
communities the ability to elect a candidate of their choice.</li>
        </ul>
      </li>
      <li>Other stuff
        <ul>
          <li>Other things not on test, but seem intuitive: Proportionality?
Competitiveness? Responsiveness?  Stability? Voice for the marginalized?
Different states can adopt different combinations of rules.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Concepts
    <ul>
      <li>Draw diagrams. Plurality election in each vote.</li>
      <li>Efficient majorities for you = Packing and Cracking for your
opponents. Cracking is dispersed among losing districts. Opponent is packed
into smaller number of districts. Theoretically it’s possible to double your
representation from your votes.</li>
      <li>Examples from WI, PA, and NC with outstanding congressional lawsuits. Half
the votes, 63/99, 10/13, and 10/13 seats.</li>
      <li>No legal framework around political gerrymandering</li>
      <li>Parties gerrymander when they have control to do so.</li>
    </ul>
  </li>
  <li>A redistricting plan meets a distribution of voters
    <ul>
      <li>You have a distrusting plan and compare them to a distribution of voters <code class="language-plaintext highlighter-rouge">(D, delta)</code>.
        <ul>
          <li>Delta determines <code class="language-plaintext highlighter-rouge">V</code>, the vote share for the party</li>
          <li><code class="language-plaintext highlighter-rouge">D</code> determines compactness</li>
        </ul>
      </li>
      <li><code class="language-plaintext highlighter-rouge">(D, delta)</code> pair gives <code class="language-plaintext highlighter-rouge">(V1, ... , Vn)</code> the vote share by district</li>
      <li><code class="language-plaintext highlighter-rouge">(V1, .... , Vn)</code>   gives <code class="language-plaintext highlighter-rouge">S</code>, the seat share for a party (how many <code class="language-plaintext highlighter-rouge">Vi &gt; 1/2</code>).</li>
      <li>Fix <code class="language-plaintext highlighter-rouge">Delta</code>, very <code class="language-plaintext highlighter-rouge">D</code>: How do they perform under various scenarios?</li>
    </ul>
  </li>
  <li>Menagerie of districts. tl;dr: Important to look at shape and the underlying
demographics.
    <ul>
      <li>Florida-5
        <ul>
          <li>Created after 1990 from 2013 - 2017</li>
          <li>Packing</li>
          <li>Change opposed by packed incumbent</li>
        </ul>
      </li>
      <li>Maryland-3
        <ul>
          <li>Drawn by Democrats (opposed by civil rights groups)</li>
        </ul>
      </li>
      <li>Pennsylvania-7
        <ul>
          <li>Barely contiguous. Strung together by only two buildings.</li>
        </ul>
      </li>
      <li>North Carolina-12
        <ul>
          <li>After 1990 census: billed as a voting rights district. Race is used as a
proxy for map design.</li>
        </ul>
      </li>
      <li>Illinois-4
        <ul>
          <li>Two Hispanic communities linked by a highway</li>
          <li>Accidental packing</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Race and the Voting Rights Act of 1965
    <ul>
      <li>Aimed at eliminating barriers to the black vote</li>
      <li>Only supposed to last for four or five years.</li>
      <li>Any states with problematic regions needed preclearance with all new plans.</li>
      <li>Still best tool for addressing redistricting fairness.</li>
    </ul>
  </li>
  <li>Race and party = ‘conjoined polarization’</li>
  <li>Eyeball compactness test is dead</li>
  <li>Dual graph representations describe both population density and connectedness.</li>
  <li>See likelihood <a href="https://arxiv.org/abs/1708.09852">analysis</a></li>
  <li>Q/A: ‘Democrats pack themselves and therefore underperform’: counterexample is
actually Massachusetts (Republicans uniformly spread out, but no seats).</li>
</ul>

<p><br /></p>
<h3 id="1030---1120am---kris-tapp-st-josephs---slides">10:30 - 11:20AM - <em>Kris Tapp (St Joseph’s) - <a href="https://sites.tufts.edu/gerrymandr/files/2018/03/Tapp.pptx">slides</a></em></h3>
<p><strong>Measurements of Political Gerrymandering</strong></p>

<ul>
  <li>Mathematics of elections outcomes and gerrymandering</li>
  <li>Gerrymandering is detected by:
    <ol>
      <li>Geometry (‘odd shapes’)</li>
      <li>Statistics (‘more votes than average map’)</li>
      <li>Symmetry (‘if voter opinions shift to 50-50, A would have one more seats’)</li>
      <li>Wasted votes (‘party B wasted more votes than party A’)</li>
    </ol>
  </li>
  <li>Presentation focuses on: 3 and 4 are computed using only district outcome data.</li>
  <li>Idea of Symmetry Methods (Gelman, King, and Grofman)
    <ul>
      <li>Simulate a uniform shift in voter opinion</li>
      <li>Can produce a simulated seats-votes graph</li>
      <li>A fair outcome should be symmetric about the origin. Unfair outcome has a
non-zero bias.</li>
      <li>If tables turned so blue got 60% of the vote, they wouldn’t have received
the same award.</li>
    </ul>
  </li>
  <li>Weakness of symmetry methods
    <ul>
      <li>Rooted in speculative, counterfactual simulations</li>
      <li>Methods never impressed Supreme Court, but Kennedy suggested alternatives</li>
      <li>Led to work in other areas.</li>
    </ul>
  </li>
  <li>Wasted vote methods (Eric McGhee, 2014)
    <ul>
      <li>Efficiency gap (Excess vote, losing vote)</li>
      <li>Always between -0.5 and 0.5 (up to half of the votes are wasted)</li>
      <li>Assumes equal turnout (depends only on seat margin and vote margin)</li>
      <li>Not covering unequal turnout (see
<a href="https://arxiv.org/abs/1801.05301">Veomett, 2018</a>).</li>
      <li>Efficiency gap has slope 2 on the symmetry method parallelogram</li>
      <li>With 60% of vote, you deserve 70% of seats.</li>
      <li>With 75% of vote, you deserve 100% of seats. With more lopsided elections,
EG is useless.</li>
      <li>Is “winner’s double bonus” normative? Fit line for 1972 state house election
data closely matches EG.</li>
    </ul>
  </li>
  <li>Shortcomings in efficiency gap
    <ul>
      <li>Depends on election outcome and volatile in competitive races.</li>
      <li>Flags demographic packing that isn’t related to gerrymandering</li>
      <li>See Gill v. Whitford</li>
      <li>Penalizes packing and cracking? Yes, but depends on cutoff of the percentage
of the vote.</li>
    </ul>
  </li>
  <li>Variations on the EG formula - Weight (Nagle)
    <ul>
      <li>Excess votes counted by weight lambda</li>
      <li><code class="language-plaintext highlighter-rouge">lambda=1</code> counts votes in excess of what’s needed for majority</li>
      <li><code class="language-plaintext highlighter-rouge">lambda=2</code> counts votes in excess of what losing party received (generalizes
to multi-party elections).</li>
      <li>A district won with 66-75% of the vote is considered packed.</li>
    </ul>
  </li>
  <li>Variations on the EG formula - Relative (Nagle)
    <ul>
      <li>Measures the difference between proportions of votes that parties wasted.</li>
      <li>Parties wasted same proportions, but not the same number.</li>
      <li>Grounded in <em>voter</em> fairness as opposed to <em>party</em> fairness. A randomly
selected voter from party A is equally likely to have wasted their vote as
someone for party B.</li>
      <li>Court has already ruled that lack of proportionality is not a political
right.</li>
    </ul>
  </li>
  <li>Variations on the EG formula - Weighted-Relative
(<a href="https://law.yale.edu/system/files/area/center/liman/document/ssrn-id3019540.pdf">Cover</a>)
    <ul>
      <li>Fails any efficiency principle</li>
    </ul>
  </li>
</ul>

<p><br /></p>
<h3 id="1130---1220pm---santiago-olivella-unc---slides">11:30 - 12:20PM - <em>Santiago Olivella (UNC) - <a href="https://sites.tufts.edu/gerrymandr/files/2018/03/Olivella.pdf">slides</a></em></h3>
<p><strong>Other Frontiers: Voting Precincts and Associated Voting Costs</strong></p>

<ul>
  <li>Not about redistricting</li>
  <li>Lines matter: How we discretize the geographic distribution of preferences
matters for electoral outcomes (social science “path dependence”). More
perspectives are coming into play, with many academic disciplines bearing on
the problem.</li>
  <li>Districts matter: smallest units of votes. Constraints are common across
districts.</li>
  <li>Redistricting has gotten increasingly political.</li>
  <li>Costs of participating can be asymmetric on different groups, as a consequence
of seemingly technical decisions around electoral administration: where to
place polling places, how many voting machines, how much staff, etc. (bread
and butter of applied mathematics).</li>
  <li>Questions to ask to measure electoral quality of service
    <ul>
      <li>How long did it take to vote? (varies by race)</li>
      <li>Registration times/locations</li>
      <li>ID/requirements</li>
      <li>Learning about candidates</li>
      <li>Understanding ballot use</li>
    </ul>
  </li>
  <li>If costs are different across population groups, then we say there is
discrimination. These may affect registration and turnout rates. Number of
eligible voters is not known.
p* Issues also affect other countries, not just the US (e.g., population centers
and polling places in Hungary).</li>
  <li>Distribution of outcomes are not a function of asymmetry or simply
disinterest. Interests are difficult to observe.</li>
  <li>Bayesian latent variable model of participating and turnout (joint work with
<a href="http://shoub.web.unc.edu/">Kelsey Shoub</a>)
    <ul>
      <li>Use it to determine hypothetical interaction between registration, turnout,
and turnout given registration.</li>
      <li>Excellent use of <a href="http://mc-stan.org/">STAN</a></li>
      <li>Simulated</li>
      <li>Apparent discrimination for Hispanic voters in NC is quite high, especially
during midterm elections.</li>
    </ul>
  </li>
</ul>

<p><br /></p>
<h3 id="0200---0250pm---eric-mcghee-public-policy-institute-of-california---slides">02:00 - 02:50PM - <em>Eric McGhee (Public Policy Institute of California) - <a href="https://sites.tufts.edu/gerrymandr/files/2018/03/McGhee.pptx">slides</a></em></h3>
<p>​<strong>Partisan Gerrymandering and the Supreme Court</strong></p>

<ul>
  <li>Step back and talk about the legal issues</li>
  <li>Legal status quo
    <ul>
      <li><a href="https://en.wikipedia.org/wiki/Davis_v._Bandemer">Davis v Bandemer (1986)</a>.
Court decided that partisan gerrymandering is justiceable.</li>
      <li>Justice White: we believe partisan gerrymandering exists, but we have no
means of actually measuring it. The court also doesn’t want to interfere,
because there’s no clear definition or criteria on gerrymandering.</li>
      <li><a href="https://en.wikipedia.org/wiki/Vieth_v._Jubelirer">Vieth v Jubelirer (2004)</a>.
Polarized court. Court is split, but Kennedy says that one has not yet been
provided: if a standard emerges, it should be used.</li>
      <li><a href="https://en.wikipedia.org/wiki/League_of_United_Latin_American_Citizens_v._Perry">LULAC v Perry (2006)</a>.
Still split, but ‘Gelman-King bias’ (i.e., symmetry) is provided to
the court. Kennedy suggests that technologists may come up with a clear
means of shedding light on this measurement question.</li>
    </ul>
  </li>
  <li>The measurement problem is difficult
    <ul>
      <li>System was designed for geographic/district representation, but <em>parties</em>
dominate American politics (i.e., an aggregate across geography). Parties do
the work, but are defined by geography. The votes-seats relationship is not
codified in law, and parties are not fundamentally covered through law.</li>
      <li>Geographic system but with parties laid on top: impedance mismatch is the
source of the Court’s difficulties.</li>
    </ul>
  </li>
  <li>Consequence: we now have an opening for mathematics and social science
    <ul>
      <li>It’s a real challenge for the court, but requires a transparent solution</li>
    </ul>
  </li>
  <li>Metrics before the court
    <ul>
      <li>Gelman-king bias (<a href="https://gking.harvard.edu/files/abs/writeit-abs.shtml">Gelman &amp; King, 1994</a>)
        <ul>
          <li>Principle: equal parties should be treated equally (‘symmetrically’). Same
votes, same seats.</li>
          <li>Advantages: grounded in core idea of majority rule.</li>
          <li>Disadvantages: inconsistent and weird for competitive states. May
suggest gerrymandering where it may not exist. Advocates have not offered
thresholds for when a map is gerrymandered</li>
        </ul>
      </li>
      <li>Mean-median difference (<a href="https://www.utdallas.edu/sppc/pdf/Best_etal.pdf">McDonald and Best, 2015</a>)
        <ul>
          <li>MMD = average district outcome (mean) - outcome dividing in half (median)</li>
        </ul>
      </li>
      <li>Efficiency gap (<a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2457468">McGhee and Stephanopoulos, 2015</a>)
        <ul>
          <li>Wasted votes don’t apply to a win.</li>
          <li>Advantages: works for competitive and uncompetitive states (up to a
point), targets efficiency. 2-1 seats-to-votes fits historical pattern,
and this basis is used on historical data. Can also support turnout
variations and multiple parties. Good for simulation: allows to measure
intent.</li>
          <li>Disadvantages: untested! Is it the only or best way? Requires commitment
to equal wasted votes and can vary from one election to the next. Bad for
simulations: does it really cover all of them?</li>
        </ul>
      </li>
      <li>Simulation generally: does it matter if a plan is improbable?</li>
    </ul>
  </li>
  <li><a href="https://en.wikipedia.org/wiki/Gill_v._Whitford">Gill v. Whitford</a>
    <ul>
      <li>2011 Wisconsin Assembly Plan: aggressive seat maximization plan (48.6% of
vote yields 60/99).</li>
      <li>Metrics agree for a competitive state.</li>
    </ul>
  </li>
  <li>Culture clash
    <ul>
      <li>Complex concepts, such as the EG, will fail Justice Robert’s ‘man on the
street’ test.</li>
      <li>Can the court solve this problem, a complex measure, without compromising
its legitimacy?</li>
      <li>Each measure has a weakness against the court.</li>
    </ul>
  </li>
  <li>New measures
    <ul>
      <li>Determines intent</li>
      <li>Declination (<a href="https://arxiv.org/abs/1705.09393">Warrington, 2017</a>)</li>
      <li>Sampling as sensitivity testing
(<a href="http://www.pnas.org/content/114/11/2860">Chikini, Frieze, and Pegden, 2017</a>).</li>
      <li>Aggregate into simple proportionality
(<a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3046797">Chambers, Millers, and Sobel, 2017</a>).</li>
    </ul>
  </li>
</ul>

<p><br /></p>
<h3 id="0300---0350pm---michal-migurski-planscore">03:00 - 03:50PM - <em>Michal Migurski (PlanScore)</em></h3>

<p><strong>Making Gerrymandering Boring</strong></p>

<ul>
  <li>Works on <a href="https://planscore.org/">Planscore</a> making gerrymandering modeling
more useful and hopefully back into a niche problem we don’t have to worry
about (i.e., something predictable, uncontroversial, and low-reward).</li>
  <li>Example: <a href="https://www.walkscore.com/">WalkScore</a> made walkability mainstream</li>
  <li>Current visualizers use past election results (Trump v Clinton) as a proxy for
assessing redistricting plans.</li>
  <li>1000-district model</li>
  <li>New data sources:
    <ul>
      <li><a href="http://openelections.net/">Open Elections</a></li>
      <li><a href="https://github.com/nvkelso/election-geodata">District shapefiles</a></li>
    </ul>
  </li>
  <li>Kennedy on metrics: limit weak, but non-frivolous, metrics. Metric should
ensure that elected representation reflect real voter intent.</li>
</ul>

<p><br /></p>
<h3 id="0500---0550pm---bruce-cain-stanford">05:00 - 05:50PM - <em>Bruce Cain (Stanford)</em></h3>

<p><strong>By Form or By Outcome? The Fifty Year Quest for Redistricting Fairness</strong></p>

<ul>
  <li>Currently revisiting some ideas from early discussions</li>
  <li>Discussion around putting partisan and racial gerrymandering on comparative
terms. How aggressive can you be in remedying racial injustice through
redistricting?</li>
  <li>Nothing in the Constitution asserts proportionality, but does protect against
racial protections (because of prior history of discrimination).</li>
  <li>“A measurement is not the same thing as a standard”. It is necessary, but it
is not sufficient. The thresholds here need to be defined, and should it be
done at the state level or the national level?</li>
  <li>A solution for one state may not work for another</li>
  <li>Homopoly</li>
  <li>Lots of interesting stories about being on redistricting boards.</li>
</ul>

<p><br /></p>
<h3 id="0600---0730pm---justin-levitt-loyola-law-moon-duchin-tufts-michal-migurski-planscore">06:00 - 07:30PM - <em>Justin Levitt (Loyola Law), Moon Duchin (Tufts), Michal Migurski (PlanScore)</em></h3>
<p><strong>Panel Discussion - “Technology and Law in Redistricting”</strong></p>

<ul>
  <li>Justin Levitt: Coming up with the best redistricting plan through technology
is like coming up with the ideal tax system through programming. There are,
however, many ways we can use technology to alleviate the problems.</li>
  <li>Moon Duchin:
    <ul>
      <li>Discretized
<a href="https://en.wikipedia.org/wiki/Polsby-Popper_Test">Polsby-Popper</a> (used
because it’s referenced and available to use in
<a href="https://www.caliper.com/maptovu.htm">Maptitude</a>).</li>
      <li>Technological intervention: How extreme is your intervention?</li>
      <li>A good plan doesn’t have to sit at the highest bar</li>
      <li>These methods are for analysis, not generating plans</li>
      <li>Both sides of the bell curve are not created equally.</li>
    </ul>
  </li>
  <li>Justin Levitt: must start simulations with the governing law of the state
(e.g., laws don’t require compactness, for example). Not having these
constraints mean that your simulations don’t match the political will of the
state.</li>
  <li>Michal: It’s only a matter of time for the block chain people to show up.</li>
  <li>Moon Duchin: Lots of clever ways of doing things like encoding the Voting
Rights Act, communities of interest, etc. into redistricting sampling.</li>
  <li>Justin Levitt: Lots of opportunities to computationally verify the Voting
Rights Act.</li>
  <li>Moon Duchin: See Justin Levitt’s website about state-level redistricting
rules. Frequently, laws don’t actually make that much sense which makes
operationalizing them very difficult. Also, random assignment doesn’t work
(via the Central Limit Theorem).</li>
</ul>

<p><br /></p>
<h2 id="friday-march-16">Friday, March 16</h2>
<p><br /></p>
<h3 id="0930---1020am---lisa-garcía-bedolla-uc-berkeley---slides">09:30 - 10:20AM - <em>Lisa García Bedolla (UC Berkeley) - <a href="https://sites.tufts.edu/gerrymandr/files/2018/03/Garcia-Bedolla.pptx">slides</a></em></h3>
<p><strong>Why the Lines Matter: Race and Representation</strong></p>

<ul>
  <li>NOTE(mookerji): Missed the beginning of the presentation</li>
  <li>Commentary on disparities across race on political representation.</li>
  <li>The problem: the lack of outreach across races. Candidates don’t reach out to
constituents they don’t need to (e.g., safe majority-minority districts, ones
that may not contribute to a win).</li>
  <li>In studies (on white voters), children get political preferences from
parents. Immigrants pick up preferences from children, who learn civic
engagement from (public) school.</li>
  <li>Why does this matter? Low engagement in US is structural and ultimately
affects the quality of public policy.</li>
  <li>Please don’t say ‘identity politics’: race matters because it affects their
material experience of reality. People with similar racial experiences likely
experience the same structures.</li>
  <li>Examples from American Values Survey</li>
  <li>Turnout affects who candidates speak to, and some candidates may only target
specific groups and ignore others (or self-identify on certain positions that
may not be universally felt across groups; e.g., AVS: is one group
systematically targeted by the police?)</li>
  <li>tl;dr: structure inequality has political consequences. You can have different
interpretations of current events because of your race-consequent social
position.</li>
  <li>Q/A: Compulsory voting improves voting rights.</li>
  <li>Q: What line drawing principles could increase participation? A: Hard
question. Anything that isn’t drawn to protect incumbents.</li>
  <li>Q/A: A lot of political money is spent through ineffective reach out (mailers,
TV ads) in national campaigns because of compensation structure around
political consultants.</li>
</ul>

<p><br /></p>
<h3 id="1030---1120am---greg-herschlag-duke---slides">10:30 - 11:20AM - <em>Greg Herschlag (Duke) - <a href="https://sites.tufts.edu/gerrymandr/files/2018/03/Herschlag.pdf">slides</a></em></h3>
<p><strong>Quantifying Gerrymandering: Revealing Political Structure with Sampling</strong></p>

<ul>
  <li>Duke team’s work:
    <ul>
      <li>Gill v. Whitford (WI State Assembly)</li>
      <li><a href="http://www.scotusblog.com/case-files/cases/rucho-v-common-cause/">Common Cause v. Rucho</a> (NC Congressional)</li>
      <li><a href="https://supreme.justia.com/cases/federal/us/581/16-1023/">NC vs Covington</a>
(NC State Assembly)</li>
      <li>See <a href="https://sites.duke.edu/quantifyinggerrymandering/">group page</a></li>
    </ul>
  </li>
  <li>Q: When is a map fair? When is it typical?
    <ul>
      <li>What if we drew the districts randomly? (No regard to party or demographics)</li>
      <li>Can use algorithmicly-generated maps to benchmark plans?</li>
      <li>All use MCMC</li>
      <li>Recipe: generate <em>compliant</em> random redistricting plans, generate a winner</li>
      <li>NC redistricting simulation (distribution of outcomes is between 4 to 9 for
13 seats). Judge panel is a typical result, per the MCMC ensemble. Note that
via this method the WI State Assembly plan would seem typical.</li>
      <li>Gerrymandering can occur in nicely-shaped districts, and skewed results
don’t necessarily indicate that it has occurred.</li>
      <li>Gerrymandering index. See Eric Lander amicus brief in
<a href="http://www.campaignlegalcenter.org/sites/default/files/16-1161bsacLander.pdf">Gill v. Whitford</a>.</li>
      <li>Plot series of ensembles: Parametric on Fraction of Opposing Party Vote //
Likelihood vs Number of Seats for Opposing Party</li>
      <li>Sampling can be used to recover these structural geopolitical biases</li>
    </ul>
  </li>
  <li>Q: Can you surface gerrymandered districts?
    <ul>
      <li>Fix precinct. Determine outlier precincts compared to the generated outcomes
of the its containing district. You can then shade (red or blue) the
district by their tendency relative to district (i.e., deviation from the
median).</li>
    </ul>
  </li>
</ul>

<p><br /></p>
<h3 id="1130---1200pm---taren-stinebrickner-kauffman-and-kelsey-kauffman">11:30 - 12:00PM - <em>Taren Stinebrickner-Kauffman and Kelsey Kauffman</em></h3>
<p><strong>Modern Malapportionment: Prison Gerrymandering and Local Redistricting</strong></p>

<ul>
  <li>Nobody is tracking whether local governments are redistricting when they are
required to do so.</li>
  <li>All government bodies with single-member electoral districts in the US are
required to redistrict every 10 years, including local governments with single
member districts.
    <ul>
      <li>90k local governments in the US</li>
      <li>No central database of how/when/where how this is happening.</li>
      <li>Failure to redistrict systematically advantages entrenched parties, affects
the pipeline to higher office.</li>
      <li>Lots of egregious cases of maldistricting and refusal to redistrict.</li>
      <li>See <a href="http://indianalocalredistricting.com/">the webpage</a></li>
      <li>Teachers: identify local governments that are not redistricting. Present
data, sue governments that aren’t in compliance with the law.</li>
    </ul>
  </li>
  <li>Shifts to prison incarceration
    <ul>
      <li>Prison population increases dramatically in 1970, not long after the
population of the voting rights act.</li>
      <li>How is representational equality affected by incarceration?</li>
      <li>Q for survey with state representative: which inmate would you feel was more
truly a part of your constituency? Seems that the current state of counting
prisoners in population base, may be unconstitutional.</li>
      <li>Census directors ultimately decide on population base, even though it’s not
in their job description.</li>
      <li>Possible solutions (maybe Constitutional):
        <ul>
          <li>Courts: Maybe remove prison inmates from population base?</li>
          <li>Reallocate prison inmates to their hometowns (or next of kin, most recent
address) for the purposes of redistricting.</li>
        </ul>
      </li>
      <li>See the <a href="https://www.prisonersofthecensus.org/">webpage</a>.</li>
      <li>Stuff here at state-level: inmates can vote in some places, get reallocated.</li>
      <li>See article: Counting Matters: Prison Inmates
        <ul>
          <li><a href="http://heinonline.org/HOL/LandingPage?handle=hein.journals/vajsplw11&amp;div=14">Link</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li>See the page from <a href="http://www.localredistricting.org/">Common Cause</a></li>
</ul>

<p><br /></p>
<h3 id="0200---0240pm---tanya-cecena-pellegrin-maldef-and-jonathan-stein-asian-americans-advancing-justice---slides">02:00 - 02:40PM - <em>Tanya Cecena Pellegrin (MALDEF) and Jonathan Stein (Asian Americans Advancing Justice) - <a href="https://sites.tufts.edu/gerrymandr/files/2018/03/Pellegrini.pptx">slides</a></em></h3>
<p><strong>The California Voting Rights Act</strong></p>

<ul>
  <li>Voter suppression techniques</li>
  <li>At-Large Elections: found to be discriminatory by the courts. Always dilutes
the (numerical) minority vote.</li>
  <li>100 US Senators elected at-large. Has effect of suppressing minority
representation.</li>
  <li><a href="https://en.wikipedia.org/wiki/Voting_Rights_Act_of_1965">Voting Rights Act of 1965</a>
(VRA)
    <ul>
      <li>How do you prove a district is legally mandated under Section 2.</li>
      <li>Bottom line: does the minority group have less opportunity have less
opportunities to elect representatives of its choice? A demographer looks at
this.</li>
      <li>Senate factors: history of voting-related discrimination. Other factors that
dilute the minority vote.</li>
    </ul>
  </li>
  <li><a href="https://en.wikipedia.org/wiki/California_Voting_Rights_Act">California Voting Rights Act</a> (CVRA)
    <ul>
      <li>Less costly, need not demonstrate the ability to draw</li>
      <li>Only applicable in challenging at-large voting systems.</li>
      <li>Requires pre-litigation demand letter. A jurisdiction then has a period of
time to respond.</li>
      <li>Caps pre-litigation fees at $30k.</li>
    </ul>
  </li>
  <li>Voting History
    <ul>
      <li><em>1790</em> - Immigrant (White) men</li>
      <li><em>1848</em> - Mexicans in acquired territories</li>
      <li><em>1870</em> - Black men - 15th amendment</li>
      <li><em>1920</em> - Women - 20th amendment</li>
      <li><em>1943</em> - Asian-Chinese immigrants - repeal of exclusion act</li>
      <li><em>1945</em> - Asian-Indian immigrants</li>
      <li><em>1952</em> - All Asian immigrants - capped immigration</li>
      <li><em>1965</em> - Protected right to vote - Voting Rights Act</li>
    </ul>
  </li>
</ul>

<p><br /></p>
<h3 id="0250---3040pm---ellen-veomett-st-marys---slides">02:50 - 30:40PM - <em>Ellen Veomett (St. Mary’s) - <a href="https://sites.tufts.edu/gerrymandr/files/2018/03/Veomett.pdf">slides</a></em></h3>
<p>​<strong>The Efficiency Gap, Voter Turnout, and the Efficiency Principle</strong></p>

<ul>
  <li>In search of a metric to define gerrymandering?
    <ul>
      <li>Geometric tools and their issues
        <ul>
          <li>Boundary length to contained area (isoperimetric inequality). Issues with
coastlines or other boundaries. Map zooming (Duchin and Tenner)</li>
          <li>Compare district to some desired shape. Bad shapes are very similar to
nice ones.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Efficiency gap. A measure of partisan gerrymandering must satisfy two
principles. <code class="language-plaintext highlighter-rouge">S(D, delta)</code> = seat share for party A, <code class="language-plaintext highlighter-rouge">V(delta)</code> = vote share for
party A. <code class="language-plaintext highlighter-rouge">G(D, delta)</code> number such that the higher value means that the
redistricting plan is more favorable to party A (this is the tool that does
measurement).
    <ul>
      <li>EP1. No wasted votes</li>
      <li>EP2. No not-wasted votes</li>
    </ul>
  </li>
  <li>Facts/concerns about EG
    <ul>
      <li>If we consider only a single-district, it’s volatile</li>
      <li>Seems like it wouldn’t work well for states with few districts</li>
    </ul>
  </li>
  <li>EG doesn’t support EP2, or EP1 for competitive elections (i.e., doesn’t work
for unequal turnout).</li>
  <li>For any rational numbers, <code class="language-plaintext highlighter-rouge">1/4 &lt; V &lt; 3/4</code> and <code class="language-plaintext highlighter-rouge">0 &lt; S &lt; 1</code>, there exists an
election outcome data with vote share <code class="language-plaintext highlighter-rouge">V</code>, seat share <code class="language-plaintext highlighter-rouge">S</code> and <code class="language-plaintext highlighter-rouge">EG=0</code>.</li>
  <li>Don’t compare EG across states or across different elections (historical time
periods) for the same state.</li>
</ul>

<p><br /></p>
<h3 id="0350---0440pm---karin-mac-donald-swdb-and-uc-berkeley-and-denise-hulett-maldef">03:50 - 04:40PM - <em>Karin Mac Donald (SWDB and UC Berkeley) and Denise Hulett (MALDEF)</em></h3>
<p><strong>Implementation Challenges and Race Discrimination in the Era of Algorithms</strong></p>

<ul>
  <li>How is redistricting actually implemented?</li>
</ul>

<p><br /></p>
<h3 id="0600pm---0730pm---colleen-mathis-az-commission-chair-wendy-underhill-national-conference-of-state-legislatures-redistricting-coordinator-california-commissioners-angelo-ancheta-d-vince-barabba-r-cynthia-dai-d-and-michelle-diguilio-i">06:00PM - 07:30PM - <em>Colleen Mathis (AZ Commission Chair), Wendy Underhill (National Conference of State Legislatures Redistricting Coordinator), California Commissioners: Angelo Ancheta (D), Vince Barabba (R), Cynthia Dai (D), and Michelle DiGuilio (I)</em></h3>
<p><strong>Panel Discussion - Independent Commissions and Redistricting Reform</strong></p>

<ul>
  <li>Wendy
    <ul>
      <li><a href="http://www.ncsl.org/">NCSL</a></li>
      <li>Overview of states that use independent commissions or legislatures to
handle redistricting.</li>
      <li>Overview of redistricting commission adoption after each Census</li>
      <li>Overview of states with citizens’ initiatives</li>
      <li>Overview of states with legislature introduction of commissions.</li>
      <li>Reform - Beyond Commissions
        <ul>
          <li>Mixed record on independent commissions</li>
          <li>Each state: Criteria, principles, guard-rails (all available on website)</li>
          <li>Transparency, accountability, citizen input</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Colleen
    <ul>
      <li>Overview of
<a href="https://www.azredistricting.org/">Arizona Independent Commission</a> (created
in 2000)</li>
      <li>Citizen initiative to take away power from legislature and have an
independent redistricting commission (Proposition 106).</li>
      <li>25% area of the land is Native American. Gerrymandered here to preserve the
Hopi as a community of interest.</li>
      <li>AZ is the only state with competitiveness as a criteria.</li>
      <li>Five commissioners, ~6 million people, 2 Democrats, 2 Republicans, 1
Independent. Independent is chosen and is the chair.</li>
      <li>Public hearing process to hear about criteria and the draft map. Very public
website.</li>
      <li>What does Independent mean? It means that it’s independent of the
legislature. Provision in the Constitution for the legislature to remove a
commissioner. Party line vote removed her from the position, but she was
then reinstated by the State Supreme Court.</li>
      <li>Map needs to pass preclearance by the Department of Justice.</li>
      <li>AZ is now looking to expand the number of seats on the commission (possibly
to include more independents).</li>
      <li>“If you want a friend in redistricting, get a dog”</li>
    </ul>
  </li>
  <li><a href="http://wedrawthelines.ca.gov/bios.html">Angelo</a>
    <ul>
      <li><a href="http://wedrawthelines.ca.gov/">California Citizens Redistricting Commission</a></li>
      <li>California: 5 Democrats, 5 Republicans, 4 Neither</li>
      <li>Filled a lottery seat</li>
      <li>Ranked constitutional criteria. Not included: competitiveness. Prohibitions:
incumbency, candidacy, and party criteria.</li>
    </ul>
  </li>
  <li>Michelle
    <ul>
      <li>Qualifications: impartial, appreciation for California’s diversity,
analytical skills, no conflicts of interest.</li>
      <li>Long extensive interview process with veto option over names by the state
legislature. Lottery process and then selection.</li>
      <li>Description of listening tour in CA. Decisions are final and cannot be
appealed by the legislature.</li>
    </ul>
  </li>
  <li>Vince
    <ul>
      <li>Census director under Nixon and Carter</li>
      <li>Fairness in redistricting; as well as an overview of the process the
committee undertook.</li>
      <li>Listening tour in Marysville: definitely included a large community of
interest (Sikh’s and Hmong), that otherwise would not have been uncovered
and included without the tour (for at least one reason: religion is not
included in the Census).</li>
    </ul>
  </li>
  <li>Cynthia
    <ul>
      <li>Review: Assessing California’s Redistricting Commission (from McGhee)</li>
      <li>2-1 voter approval of commission’s work (via direct ballot)</li>
      <li>CA independent redistricting has dramatically improved approval of the state
legislature.</li>
    </ul>
  </li>
</ul>]]></content:encoded><description>Notes from the GEOMETRY OF REDISTRICTING WORKSHOP</description><enclosure length="365710" type="application/pdf" url="http://www.campaignlegalcenter.org/sites/default/files/16-1161bsacLander.pdf"/><itunes:explicit/><itunes:subtitle>Notes from the GEOMETRY OF REDISTRICTING WORKSHOP</itunes:subtitle><itunes:author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</itunes:author><itunes:summary>Notes from the GEOMETRY OF REDISTRICTING WORKSHOP</itunes:summary><itunes:keywords>commentary, life</itunes:keywords></item><item><title>libdataframe - Portable DataFrames in C and C++</title><link>https://mookerji.github.io/2018/01/08/libdataframe.html</link><category>projects</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Mon, 8 Jan 2018 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2018/01/08/libdataframe</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h1 id="libdataframe---portable-dataframes-in-c-and-c">libdataframe - Portable DataFrames in C and C++</h1>

<p><code class="language-plaintext highlighter-rouge">libdataframe</code> is an in-progress library for performing in-memory, structured
data analysis: essentially a column-store equivalent to sqlite for use in ad-hoc
data analysis and visualization. We started project after finding no easy
portable equivalent to Pandas or R dataframes.</p>

<p>Basic Goals:</p>
<ul>
  <li>Easy-to-read structured datasets and analysis from some on-disk format, such
as CSV.</li>
  <li>Robust and natural timeseries analysis</li>
  <li>Easy to decoding/encoding to other formats (CSV, HDF5, Parquet, Apache Arrow),
but as separate libraries.</li>
  <li>Fast, performant, well-tested, and well-understood</li>
  <li>Written to C++, but portable to other languages: easy FFI for compiled and
interpreted languages via C bindings (as a starting point: Python and
Javascript)</li>
  <li>FFI-based interpreted language bindings should be usable from interactive
programming environments such as Jupyter notebooks.</li>
</ul>

<p>Distant, or Explicit Non-Goals:</p>
<ul>
  <li>Avoiding crazy C++ template metaprogramming and smart expression template
techniques</li>
  <li>No hipster technologies or languages</li>
  <li>Streaming writes or analysis on streams</li>
  <li>SQL standard, SQL interpreter interface</li>
  <li>Protocol Buffer, Thrift, JSON, etc. ingest interfaces</li>
  <li>Interop with other systems (i.e., Apache Arrow’s approach to zero-copy between
differing Apache big data projects., etc.)</li>
</ul>

<p>See the rest on <a href="https://github.com/mookerji/libdataframe">Github</a>.</p>]]></content:encoded><description>libdataframe - Portable DataFrames in C and C++</description></item><item><title>sca_tools - Scalability Analysis Tools</title><link>https://mookerji.github.io/2017/12/15/sca_tools.html</link><category>projects</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Fri, 15 Dec 2017 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2017/12/15/sca_tools</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h1 id="sca_tools---scalability-analysis-tools">sca_tools - Scalability Analysis Tools</h1>

<p><code class="language-plaintext highlighter-rouge">sca_tools</code> analyzes software scalability benchmarking experiments,
specifically measurements of throughput as a function of applied load
or concurrency. It is a Python library and set of command line
utilities and that will help you:</p>

<ul>
  <li>Model and quantify throughput bottlenecks in your application</li>
  <li>Capacity plan</li>
  <li>Compare performance benchmarks for regressions</li>
</ul>

<p><code class="language-plaintext highlighter-rouge">sca_tools</code> relies on on Neil Gunther’s
<a href="http://www.perfdynamics.com/Manifesto/USLscalability.html">Universal Scalability Law</a>
as a model and <a href="https://github.com/lmfit/lmfit-py">lmfit</a> to perform
model fitting. <code class="language-plaintext highlighter-rouge">sca_tools</code> differs from existing implementations (see
<a href="#related-work">Related Work</a>) in a few ways:</p>

<ul>
  <li>Emphasis on robust parameter estimation</li>
  <li>Support for propagation of parameter uncertanties when computing
derived quantities, such as latency, queue size, etc.</li>
  <li>Support for experimental measurement uncertainty</li>
  <li>Written using Scientific Python libraries</li>
</ul>

<p>See the rest on <a href="https://github.com/mookerji/sca_tools">Github</a>.</p>]]></content:encoded><description>sca_tools - Scalability Analysis Tools</description></item><item><title>The Icewatch</title><link>https://mookerji.github.io/2017/01/03/the-icewatch.html</link><category>commentary</category><category>life</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Tue, 3 Jan 2017 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2017/01/03/the-icewatch</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div style="text-align: center;">
    <img src="https://storage.googleapis.com/mookerji-public-gh-erpqqbqxpseyysfhbtt6phabkvutcme/mookerji.github.io/photos/2017-01-03-the-icewatch/love_at_first_sight-small.jpg" width="85%%" />
</div>
<p><br /></p>

<h1 id="the-icewatch">The Icewatch</h1>

<p class="meta"> 03 January 2017 - Errera Channel, Antarctic Peninsula </p>

<p>Anchored at 64 degrees (and change) South, it never gets quite dark at
midnight. The simmering sea in the bay, the sedimentary rock on land
both near and far, and the sea ice all between are monotone black,
grey, and white, penetrated by smoky fog. The only color off the deck,
the occasional blue of the drifting glacial ice and the odd orange ice
tip scraped along from the hull. The only sound, the cracking of
distant glaciers and the lapping of sea water on the skirts of those
drifting nearby.</p>

<p>Henry, a dog owner from the States, has seen enough Weddell seals at
this point and is happy to be pacing about the mizzen in pajamas
during a dangerous anchor watch. At 3 o’clock (starboard!), a cracking
iceberg calves loudly into the sea, and three squeaking Gentoos,
rudely interrupted from important penguin work, surface and purpoise
off and out of sight. A thin layer of fresh snow covers the wooden
poop deck rails, just bare from a balmy Austral Summer day.</p>

<p>At 9 o’clock (port!) from the poop deck, a low-lying, tentacled
iceberg the size of a Toyota Prius is sliding its way towards the back
of the hull. Gijs and I are hunched over the rail, eyes fixed three
meters below us as its foot slips out of view of the hull, followed by
its top, and then (and then!), a mild echoing thud of ice against
steel.</p>

<p>“That’s not very nice there, Mr. Iceberg, eh?”.</p>

<p>Ten minutes later, our anchor watch shift is over, and Mike and Wayne
are taking in the scene, the snow picking up and the ice hemming
in. The Prius’ new momentum carries it into collision with another
floater, settling within jumping distance from the lower sloop deck.</p>

<p>“Ok, guys, we are on iceberg watch tonight. If any of the icebergs
come much faster at the ship, let us know. If that iceberg aft comes
much closer to the height of the dolphinstriker or near the
propellers, let me know. If that rock comes any closer to the ship,”
gesturing from the wheelhouse at the small mountain ahead of us, “wake
up <a href="https://www.flickr.com/photos/classic-sailing/3133451998">Klaas</a>.”</p>

<p>The scent of fresh baked bread (best eaten vigilantly in cold weather)
from the galley’s exhaust pipe wafts by.</p>

<p><em>Originally published on the <a href="https://www.barkeuropa.com/logbook/detail/the-icewatch">Bark Europa logbook</a>.</em></p>]]></content:encoded><description></description></item><item><title>The Perils of Codesharing Agreements</title><link>https://mookerji.github.io/2016/12/22/mexico-df-airport.html</link><category>commentary</category><category>life</category><author>noemail@noemail.org (\0/ Bhaskar Mookerji \0/)</author><pubDate>Thu, 22 Dec 2016 00:00:00 GMT</pubDate><guid isPermaLink="false">https://mookerji.github.io/2016/12/22/mexico-df-airport</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div style="text-align: center;">
    <img src="https://storage.googleapis.com/mookerji-public-gh-erpqqbqxpseyysfhbtt6phabkvutcme/mookerji.github.io/photos/2016-12-22-mexico-df-airport/DSCF7536-small.jpg" width="85%" />
</div>
<p><br /></p>

<h1 id="the-perils-of-codesharing-agreements">The Perils of Codesharing Agreements</h1>

<p class="meta"> 22 December 2016 - CDMX </p>

<p><strong>Terminal 2</strong>. Dropped off M at the Aeromexico Terminal 2 and promptly went to
the International Terminal 1, arriving two hours before departure.</p>

<p><strong>Terminal 1, 12PM</strong>. Went to the checking desk of the wrong Latin American
holding company, LATAM (my flight was with Transamerica Airlines). They were
like, “we don’t have a 2PM flight to Lima, also, this is an Aeromexico flight,
you need to go check in in the other terminal” (it’s true, flight had an AM call
sign). The departure gate was still in Terminal 1.</p>

<p><strong>Terminal 1, 12:05PM</strong>. In a panic, I run to an elevator and take it to street
level, run to the taxi booth to get a taxi ticket and pay $135 pesos (US$6) to
be driven back to the other terminal. On the way, the driver gets into an
argument with an adjacent driver in Spanish (maybe they were talking smack), at
which point, the other guy spits into the car, spraying me and my bag. I roll up
the window. The driver and I have a surprisingly long conversation in broken
middle school Spanish about why I’m going to the Aeromexico terminal (“hay todo
en terminal dos, domesticos y internacionales”).</p>

<p><strong>Terminal 2, 12:10PM</strong>. I’m still panicking and without coffee. I run to the
Aeromexico terminals to try and check in, skip an offer of complementary coffee
and what can only be described as a care package of free potato chips (welcome
to Mexico). Everyone takes their sweet time with baggage and ten minutes
pass. An agent at the counter looks at my Gmail itinerary print out and actually
can’t figure out what carrier I’m taking or why it has a AM call sign. “We don’t
even have any Airbus planes.” After some looking around she lists two different
Peruvian airlines I should look into, and that they’re federated under
Avianca. “You have plenty of time, an hour and 20 minutes! Just take the air
train.”</p>

<p><strong>Terminal 2, 12:40PM</strong>. Running is hard at Mexico DFs altitude, and seeing my
heavy exhales, the guard at the airtrain lets me on. Two guys with the heaviest
American accents I’ve ever heard are leaning over their camo bags (they did not
vote for Hillary) and gawking at the tin roofs passing underneath the
train. This is just like every airport train you’ve ever been on; the
quesadillas are much closer though, but still out of reach.</p>

<p><strong>Terminal 1, 12:55PM</strong>. Run to the Avianca check-in, and it seems like I’ve
actually finally made it. A lady in a red jacket takes my passport and does a
lot of computer things. I have no idea what she’s doing or what her UI looks
like and it’s absolutely killing me, a silent drama playing out in the back of
my mind. She looks and looks and looks and after much typing she goes over to
some other people with my passport and words are exchanged. She comes back,
speaking quickly (unlike everyone in CDMX) and then realizing that I can’t speak
Spanish, indicates in English that she can book me on a flight to Bogota and
that I’ll still be able to make my connection in BA. The original flight
check-in is closing and the flight is full; no seats are available.</p>

<p><strong>Terminal 1, 1PM</strong>. Her supervisor has decided that she can’t do this, because
I came to the airport late (no sob stories about the fact that no one knows what
Transamerica Airlines is. It turns out it’s known as TACA.) and issues me a
standby ticket, saying I can go through immigration and hope that someone has
bailed on their seat, a seat on a full international flight just before
Christmas (“maybe they are stuck in the bathroom for something”).</p>

<p><strong>Terminal 1, 1PM - 2PM</strong>. Whereupon someone at United says that they cant help
me and hands me a real physical goddamn phone with the actual United customer
service with that eternal Gershwin piano remix. I bounce around, nervously
flicking Chrome seeing one-way tickets to USH from MEX. Lots of anxious
phoning. Avianca can’t rebook because the ticket is owned by United, and United
can’t rebook because they can’t endorse other airlines tickets (which turned out
to be bullshit).</p>

<p><strong>Terminal 1, 2:15PM</strong>. Holding a pending business class one-way flight on Copa,
I make my way back to United, with the some more air travel jargon under my
belt. Standing in line, an <em>ANGEL DESCENDS FROM THE HEAVENS</em>, crop cut and
brusque, sounding like she grew up in Brooklyn but lived in DF, the weirdest
accent ever. She has the air of someone who’s used to talking to the frustrated
and helpless but still has a palpable passion for air travel, and ten minutes
later, decides that I can fly back to the US and THEN to Argentina (“oh there
are two airports in BA. I didn’t know that. That’s so cool!” “Wow, this is the
reverse of you return flight. Neat!”). Lots of technical airline drama ensues,
and at some point, I’m holding one real phone waiting so she can make another
call on another phone so that two people can agree IRL about changing my
ticket. Very analog. The guy who refused to help me earlier is sloshing about
with his tail between his legs. They exchange harsh words, and a half hour
later, exhausted from travel bureaucracy bloodsport and shuffling about on
different phones, she returns with boarding passes: “Are you checking any
baggage with us today?”</p>

<p>I haven’t hugged a stranger that hard in quite a while.</p>]]></content:encoded><description></description></item></channel></rss>